Decompiled source of CastNChillModNMenu v1.2.0

CastNChillModNMenu.dll

Decompiled 2 weeks 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.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using CastNChillCheats;
using HarmonyLib;
using Il2CppGame;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppSystem.Collections.Generic;
using Il2CppTMPro;
using MelonLoader;
using MelonLoader.Preferences;
using MelonLoader.Utils;
using Microsoft.CodeAnalysis;
using Newtonsoft.Json;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Controls;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: MelonInfo(typeof(CheatsMod), "Cast n Chill Mod n Menu", "1.0.0", "scotty", null)]
[assembly: MelonGame(null, null)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("CastNChillModNMenu")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("CastNChillModNMenu")]
[assembly: AssemblyTitle("CastNChillModNMenu")]
[assembly: AssemblyVersion("1.0.0.0")]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace CastNChillCheats
{
	public class ContentManifest
	{
		public List<RodDefinition> rods = new List<RodDefinition>();
	}
	public class RodDefinition
	{
		public string id;

		public string cloneFrom = "";

		public string spriteAsset = "";

		public int cost;
	}
	public static class CustomContentManager
	{
		private static readonly Instance Log = new Instance("CastNChillContent");

		private static readonly List<AssetBundle> _loadedBundles = new List<AssetBundle>();

		private static readonly List<RodData> _registeredRods = new List<RodData>();

		private static readonly List<BoatData> _registeredBoats = new List<BoatData>();

		private static readonly List<BoatVariantData> _registeredBoatVariants = new List<BoatVariantData>();

		private static readonly List<FishData> _registeredFish = new List<FishData>();

		private static readonly Regex BoatFileRegex = new Regex("^Boat(\\d+)(?:[_\\-\\s]+(.+))?$", RegexOptions.IgnoreCase);

		private static readonly Regex RodFileRegex = new Regex("^Rod(\\d+)(?:[_\\-\\s]+(.+))?$", RegexOptions.IgnoreCase);

		private static readonly Regex SnowmobileFileRegex = new Regex("^Snowmobile(\\d+)(?:[_\\-\\s]+(.+))?$", RegexOptions.IgnoreCase);

		private static readonly Regex FishFileRegex = new Regex("^Fish(\\d+)(?:[_\\-\\s]+(.+))?$", RegexOptions.IgnoreCase);

		private static readonly Dictionary<string, string> _customNames = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);

		private static readonly Dictionary<string, Sprite> _customBoatWorldSprites = new Dictionary<string, Sprite>(StringComparer.OrdinalIgnoreCase);

		private static readonly Dictionary<string, Sprite> _customBoatThumbSprites = new Dictionary<string, Sprite>(StringComparer.OrdinalIgnoreCase);

		private static LureData _universalLure;

		public const string UniversalLureId = "UniversalLure";

		public static string LastResult { get; private set; } = "Not loaded yet.";

		public static string ContentDirectory
		{
			get
			{
				if (CheatsMod.ContentDirectory == null || string.IsNullOrWhiteSpace(CheatsMod.ContentDirectory.Value))
				{
					return Path.Combine(MelonEnvironment.ModsDirectory, "CastNChillContent");
				}
				return CheatsMod.ContentDirectory.Value;
			}
		}

		public static void Reload()
		{
			UnloadAll();
			string contentDirectory = ContentDirectory;
			try
			{
				Directory.CreateDirectory(contentDirectory);
			}
			catch (Exception ex)
			{
				LastResult = "Can't access '" + contentDirectory + "': " + ex.Message;
				Log.Warning(LastResult);
				return;
			}
			int value = RegisterBoatTextures(contentDirectory);
			int value2 = RegisterRodTextures(contentDirectory);
			int value3 = RegisterSnowmobileTextures(contentDirectory);
			int value4 = RegisterFishTextures(contentDirectory);
			string[] files = Directory.GetFiles(contentDirectory, "*.bundle", SearchOption.TopDirectoryOnly);
			int num = 0;
			string[] array = files;
			foreach (string text in array)
			{
				AssetBundle val;
				try
				{
					val = AssetBundle.LoadFromFile(text);
				}
				catch (Exception ex2)
				{
					Log.Warning("Failed to load bundle '" + text + "': " + ex2.Message);
					continue;
				}
				if ((Object)(object)val == (Object)null)
				{
					Log.Warning("Failed to load bundle: " + text);
					continue;
				}
				_loadedBundles.Add(val);
				string text2 = Path.Combine(Path.GetDirectoryName(text) ?? contentDirectory, Path.GetFileNameWithoutExtension(text) + ".manifest.json");
				if (!File.Exists(text2))
				{
					Log.Msg("Loaded bundle '" + Path.GetFileName(text) + "' (no matching .manifest.json, nothing registered).");
					continue;
				}
				ContentManifest contentManifest;
				try
				{
					contentManifest = JsonConvert.DeserializeObject<ContentManifest>(File.ReadAllText(text2));
				}
				catch (Exception ex3)
				{
					Log.Warning("Failed to parse '" + text2 + "': " + ex3.Message);
					continue;
				}
				if (contentManifest?.rods == null)
				{
					continue;
				}
				foreach (RodDefinition rod in contentManifest.rods)
				{
					if (RegisterRod(rod, val))
					{
						num++;
					}
				}
			}
			LastResult = $"Boats {value}, Rods {value2}, Snowmobiles {value3}, Fish {value4}, bundle rods {num} ({_loadedBundles.Count} bundle file(s)).";
			Log.Msg(LastResult);
			RefreshShop();
		}

		private static void RefreshShop()
		{
			try
			{
				Database instance = ScriptableObjectSingleton<Database>.Instance;
				if (instance != null)
				{
					ObjectDataTable boat = instance.Boat;
					if (boat != null)
					{
						boat.Sort();
					}
				}
				Database instance2 = ScriptableObjectSingleton<Database>.Instance;
				if (instance2 != null)
				{
					ObjectDataTable boatVariant = instance2.BoatVariant;
					if (boatVariant != null)
					{
						boatVariant.Sort();
					}
				}
				Database instance3 = ScriptableObjectSingleton<Database>.Instance;
				if (instance3 != null)
				{
					ObjectDataTable rod = instance3.Rod;
					if (rod != null)
					{
						rod.Sort();
					}
				}
				Database instance4 = ScriptableObjectSingleton<Database>.Instance;
				if (instance4 != null)
				{
					ObjectDataTable lure = instance4.Lure;
					if (lure != null)
					{
						lure.Sort();
					}
				}
				Database instance5 = ScriptableObjectSingleton<Database>.Instance;
				if (instance5 != null)
				{
					ObjectDataTable fish = instance5.Fish;
					if (fish != null)
					{
						fish.Sort();
					}
				}
			}
			catch (Exception ex)
			{
				Log.Warning("Failed to re-sort item tables: " + ex.Message);
			}
			try
			{
				GUIShop val = Object.FindObjectOfType<GUIShop>();
				if ((Object)(object)val != (Object)null)
				{
					val.RefreshItems();
					Log.Msg("Shop was open — refreshed its item list.");
				}
			}
			catch (Exception ex2)
			{
				Log.Warning("Failed to refresh open shop: " + ex2.Message);
			}
		}

		private static bool IsImageFile(string path)
		{
			string text = Path.GetExtension(path).ToLowerInvariant();
			if (!(text == ".png") && !(text == ".jpg"))
			{
				return text == ".jpeg";
			}
			return true;
		}

		private static List<(string Path, string Number, string Name)> ScanNumberedFiles(string dir, Regex regex)
		{
			return (from f in Directory.GetFiles(dir)
				select new
				{
					Path = f,
					Match = regex.Match(Path.GetFileNameWithoutExtension(f))
				} into x
				where x.Match.Success && IsImageFile(x.Path)
				orderby int.Parse(x.Match.Groups[1].Value)
				select (Path: x.Path, Value: x.Match.Groups[1].Value, x.Match.Groups[2].Success ? x.Match.Groups[2].Value.Trim() : null)).ToList();
		}

		private static Sprite CreateMatchedSprite(Texture2D texture, Sprite templateSprite, float sizeMultiplier = 1f)
		{
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			float num = (((Object)(object)templateSprite != (Object)null) ? templateSprite.pixelsPerUnit : 100f) / Mathf.Max(0.01f, sizeMultiplier);
			Vector2 val = default(Vector2);
			((Vector2)(ref val))..ctor(0.5f, 0.5f);
			if ((Object)(object)templateSprite != (Object)null)
			{
				Rect rect = templateSprite.rect;
				if (((Rect)(ref rect)).width > 0f)
				{
					rect = templateSprite.rect;
					if (((Rect)(ref rect)).height > 0f)
					{
						float x = templateSprite.pivot.x;
						rect = templateSprite.rect;
						float num2 = x / ((Rect)(ref rect)).width;
						float y = templateSprite.pivot.y;
						rect = templateSprite.rect;
						((Vector2)(ref val))..ctor(num2, y / ((Rect)(ref rect)).height);
					}
				}
			}
			return Sprite.Create(texture, new Rect(0f, 0f, (float)((Texture)texture).width, (float)((Texture)texture).height), val, num);
		}

		private static Texture2D LoadTexture(string imagePath, out byte[] bytes)
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Expected O, but got Unknown
			bytes = File.ReadAllBytes(imagePath);
			Texture2D val = new Texture2D(2, 2);
			if (!ImageConversion.LoadImage(val, Il2CppStructArray<byte>.op_Implicit(bytes)))
			{
				return null;
			}
			return val;
		}

		private static UpgradeData[] CloneLevels(Il2CppReferenceArray<UpgradeData> templateLevels, string idPrefix, Action<UpgradeData> edit = null)
		{
			if (templateLevels == null)
			{
				return null;
			}
			UpgradeData[] array = (UpgradeData[])(object)new UpgradeData[((Il2CppArrayBase<UpgradeData>)(object)templateLevels).Length];
			for (int i = 0; i < ((Il2CppArrayBase<UpgradeData>)(object)templateLevels).Length; i++)
			{
				UpgradeData val = ((Il2CppArrayBase<UpgradeData>)(object)templateLevels)[i];
				if ((Object)(object)val == (Object)null)
				{
					array[i] = null;
					continue;
				}
				UpgradeData val2 = Object.Instantiate<UpgradeData>(val);
				((ObjectData)val2).id = $"{idPrefix}_{i}";
				((ObjectData)val2).AssetName = ((ObjectData)val2).id;
				edit?.Invoke(val2);
				array[i] = val2;
			}
			return array;
		}

		private static int RegisterBoatTextures(string dir)
		{
			if ((Object)(object)ScriptableObjectSingleton<Database>.Instance == (Object)null || Journal.Instance == null)
			{
				Log.Msg("No save loaded yet, skipping boat textures this pass — open a save and click Reload.");
				return 0;
			}
			int num = 0;
			foreach (var item in ScanNumberedFiles(dir, BoatFileRegex))
			{
				bool flag = CheatsMod.CustomBoatMotor != null && CheatsMod.CustomBoatMotor.Value;
				BoatData template = FindTemplateBoat(flag, requireIce: false);
				if (RegisterVehicleFromTexture("CustomBoat" + item.Number, item.Path, item.Name, template, flag ? "motor" : "paddle"))
				{
					num++;
				}
			}
			return num;
		}

		private static int RegisterSnowmobileTextures(string dir)
		{
			if ((Object)(object)ScriptableObjectSingleton<Database>.Instance == (Object)null || Journal.Instance == null)
			{
				Log.Msg("No save loaded yet, skipping snowmobile textures this pass — open a save and click Reload.");
				return 0;
			}
			int num = 0;
			foreach (var item in ScanNumberedFiles(dir, SnowmobileFileRegex))
			{
				BoatData template = FindTemplateBoat(wantMotor: true, requireIce: true);
				if (RegisterVehicleFromTexture("CustomSnow" + item.Number, item.Path, item.Name, template, "snowmobile"))
				{
					num++;
				}
			}
			return num;
		}

		private static BoatData FindTemplateBoat(bool wantMotor, bool requireIce)
		{
			BoatData defaultBoat = Database.GetDefaultBoat();
			foreach (BoatData item in Resources.FindObjectsOfTypeAll<BoatData>())
			{
				if (!((Object)(object)item == (Object)null) && item.engine != null && (((ObjectData)item).id == null || (!((ObjectData)item).id.StartsWith("CustomBoat", StringComparison.OrdinalIgnoreCase) && !((ObjectData)item).id.StartsWith("CustomSnow", StringComparison.OrdinalIgnoreCase))) && (!requireIce || ((ShopItemData)item).IsIce))
				{
					bool flag = !item.engine.row && ((Upgradable)item.engine).levels != null && ((Il2CppArrayBase<UpgradeData>)(object)((Upgradable)item.engine).levels).Length > 0;
					if (wantMotor && flag)
					{
						return item;
					}
					if (!wantMotor && item.engine.row)
					{
						return item;
					}
				}
			}
			if (!requireIce)
			{
				return defaultBoat;
			}
			return null;
		}

		private static bool RegisterVehicleFromTexture(string id, string imagePath, string customName, BoatData template, string kindLabel)
		{
			//IL_0142: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)template == (Object)null || (Object)(object)template.defaultVariant == (Object)null)
			{
				Log.Warning($"No matching template boat available to clone for '{id}' ({kindLabel}).");
				return false;
			}
			byte[] bytes;
			Texture2D val = LoadTexture(imagePath, out bytes);
			if ((Object)(object)val == (Object)null)
			{
				Log.Warning("'" + imagePath + "' isn't a valid image, skipping.");
				return false;
			}
			float num = ((CheatsMod.CustomBoatSize != null) ? CheatsMod.CustomBoatSize.Value : 1f);
			Sprite val2 = CreateMatchedSprite(val, template.defaultVariant.sprite, num);
			Sprite val3 = CreateMatchedSprite(val, ((ItemData)template).thumbSprite);
			BoatData defaultBoat = Database.GetDefaultBoat();
			BoatData val4 = Object.Instantiate<BoatData>(template);
			((ObjectData)val4).id = id;
			((ObjectData)val4).AssetName = id;
			((ShopItemData)val4).cost = ((ShopItemData)template).cost;
			((ItemData)val4).sprite = val3;
			((ItemData)val4).thumbSprite = val3;
			((ItemData)val4).keys?.Clear();
			if ((Object)(object)defaultBoat != (Object)null && !((ShopItemData)template).IsIce)
			{
				val4.locationType = defaultBoat.locationType;
			}
			int storageCapacity = ((CheatsMod.CustomBoatFishStorage != null) ? CheatsMod.CustomBoatFishStorage.Value : 20);
			Engine engine = val4.engine;
			if (((engine != null) ? ((Upgradable)engine).levels : null) != null)
			{
				((Upgradable)val4.engine).levels = Il2CppReferenceArray<UpgradeData>.op_Implicit(CloneLevels(((Upgradable)val4.engine).levels, id + "_engine"));
			}
			Storage storage = val4.storage;
			if (((storage != null) ? ((Upgradable)storage).levels : null) != null)
			{
				((Upgradable)val4.storage).levels = Il2CppReferenceArray<UpgradeData>.op_Implicit(CloneLevels(((Upgradable)val4.storage).levels, id + "_storage", delegate(UpgradeData tier)
				{
					BoatStorageData val6 = (BoatStorageData)(object)((tier is BoatStorageData) ? tier : null);
					if (val6 != null)
					{
						val6.capacity = storageCapacity;
					}
				}));
			}
			BoatVariantData val5 = Object.Instantiate<BoatVariantData>(template.defaultVariant);
			((ObjectData)val5).id = id + "_variant";
			((ObjectData)val5).AssetName = ((ObjectData)val5).id;
			val5.sprite = val2;
			val5.boat = val4;
			val5.animatedSprite = null;
			val4.defaultVariant = val5;
			ScriptableObjectSingleton<Database>.Instance.Boat.m_list.Add((ObjectData)(object)val4);
			ScriptableObjectSingleton<Database>.Instance.BoatVariant.m_list.Add((ObjectData)(object)val5);
			_registeredBoats.Add(val4);
			_registeredBoatVariants.Add(val5);
			_customBoatWorldSprites[id] = val2;
			_customBoatThumbSprites[id] = val3;
			try
			{
				Journal instance = Journal.Instance;
				if (instance != null)
				{
					instance.GetItemUpgrades(id);
				}
			}
			catch
			{
			}
			if (!string.IsNullOrEmpty(customName))
			{
				_customNames[id] = customName;
			}
			Log.Msg($"Registered custom {kindLabel} '{id}' from '{Path.GetFileName(imagePath)}' ({num:0.00}x, storage {storageCapacity}, cloned from '{((ObjectData)template).id}'{((customName != null) ? (", named '" + customName + "'") : "")}).");
			return true;
		}

		private static int RegisterRodTextures(string dir)
		{
			if ((Object)(object)ScriptableObjectSingleton<Database>.Instance == (Object)null || Journal.Instance == null)
			{
				Log.Msg("No save loaded yet, skipping rod textures this pass — open a save and click Reload.");
				return 0;
			}
			int num = 0;
			foreach (var item in ScanNumberedFiles(dir, RodFileRegex))
			{
				if (RegisterRodFromTexture("CustomRod" + item.Number, item.Path, item.Name))
				{
					num++;
				}
			}
			return num;
		}

		public static List<string> GetAvailableRodIds()
		{
			if ((Object)(object)ScriptableObjectSingleton<Database>.Instance == (Object)null)
			{
				return new List<string>();
			}
			return (from r in (IEnumerable<RodData>)Resources.FindObjectsOfTypeAll<RodData>()
				where (Object)(object)r != (Object)null && ((ObjectData)r).id != null && !((ObjectData)r).id.StartsWith("CustomRod", StringComparison.OrdinalIgnoreCase)
				select ((ObjectData)r).id).Distinct().OrderBy<string, string>((string rid) => rid, StringComparer.OrdinalIgnoreCase).ToList();
		}

		public static List<string> GetAvailableLureTypeIds()
		{
			if ((Object)(object)ScriptableObjectSingleton<Database>.Instance == (Object)null)
			{
				return new List<string>();
			}
			return (from l in (IEnumerable<LureTypeData>)Resources.FindObjectsOfTypeAll<LureTypeData>()
				where (Object)(object)l != (Object)null && ((ObjectData)l).id != null
				select ((ObjectData)l).id).Distinct().OrderBy<string, string>((string lid) => lid, StringComparer.OrdinalIgnoreCase).ToList();
		}

		public static List<string> GetAvailableFishIds()
		{
			if ((Object)(object)ScriptableObjectSingleton<Database>.Instance == (Object)null)
			{
				return new List<string>();
			}
			return (from f in (IEnumerable<FishData>)Resources.FindObjectsOfTypeAll<FishData>()
				where (Object)(object)f != (Object)null && ((ObjectData)f).id != null
				select ((ObjectData)f).id).Distinct().OrderBy<string, string>((string fid) => fid, StringComparer.OrdinalIgnoreCase).ToList();
		}

		private static RodData FindTemplateRod()
		{
			string text = CheatsMod.CustomRodTemplateId?.Value;
			if (!string.IsNullOrEmpty(text))
			{
				RodData val = Database.FindRod(text);
				if ((Object)(object)val != (Object)null)
				{
					return val;
				}
			}
			RodData defaultRod = Database.GetDefaultRod();
			foreach (RodData item in Resources.FindObjectsOfTypeAll<RodData>())
			{
				if (!((Object)(object)item == (Object)null) && (((ObjectData)item).id == null || !((ObjectData)item).id.StartsWith("CustomRod", StringComparison.OrdinalIgnoreCase)))
				{
					return item;
				}
			}
			return defaultRod;
		}

		private static bool RegisterRodFromTexture(string id, string imagePath, string customName)
		{
			RodData val = FindTemplateRod();
			if ((Object)(object)val == (Object)null)
			{
				Log.Warning("No template rod available to clone for '" + id + "'.");
				return false;
			}
			byte[] bytes;
			Texture2D val2 = LoadTexture(imagePath, out bytes);
			if ((Object)(object)val2 == (Object)null)
			{
				Log.Warning("'" + imagePath + "' isn't a valid image, skipping.");
				return false;
			}
			Sprite val3 = CreateMatchedSprite(val2, ((ItemData)val).sprite);
			Sprite thumbSprite = CreateMatchedSprite(val2, ((ItemData)val).thumbSprite);
			RodData val4 = Object.Instantiate<RodData>(val);
			((ObjectData)val4).id = id;
			((ObjectData)val4).AssetName = id;
			((ItemData)val4).sprite = val3;
			val4.gameSprite = val3;
			((ItemData)val4).thumbSprite = thumbSprite;
			((ItemData)val4).keys?.Clear();
			float weightKg = ((CheatsMod.CustomRodWeightKg != null) ? CheatsMod.CustomRodWeightKg.Value : 10f);
			Strength strength = val4.strength;
			if (((strength != null) ? ((Upgradable)strength).levels : null) != null)
			{
				((Upgradable)val4.strength).levels = Il2CppReferenceArray<UpgradeData>.op_Implicit(CloneLevels(((Upgradable)val4.strength).levels, id + "_str", delegate(UpgradeData tier)
				{
					RodStrengthData val5 = (RodStrengthData)(object)((tier is RodStrengthData) ? tier : null);
					if (val5 != null)
					{
						val5.weight = Mathf.RoundToInt(weightKg);
					}
				}));
			}
			Length length = val4.length;
			if (((length != null) ? ((Upgradable)length).levels : null) != null)
			{
				((Upgradable)val4.length).levels = Il2CppReferenceArray<UpgradeData>.op_Implicit(CloneLevels(((Upgradable)val4.length).levels, id + "_len"));
			}
			ScriptableObjectSingleton<Database>.Instance.Rod.m_list.Add((ObjectData)(object)val4);
			_registeredRods.Add(val4);
			try
			{
				Journal instance = Journal.Instance;
				if (instance != null)
				{
					instance.GetItemUpgrades(id);
				}
			}
			catch
			{
			}
			if (!string.IsNullOrEmpty(customName))
			{
				_customNames[id] = customName;
			}
			Log.Msg($"Registered custom rod '{id}' from '{Path.GetFileName(imagePath)}' ({weightKg:0}kg capacity, cloned from '{((ObjectData)val).id}'{((customName != null) ? (", named '" + customName + "'") : "")}).");
			return true;
		}

		private static int RegisterFishTextures(string dir)
		{
			if ((Object)(object)ScriptableObjectSingleton<Database>.Instance == (Object)null || Journal.Instance == null)
			{
				Log.Msg("No save loaded yet, skipping fish textures this pass — open a save and click Reload.");
				return 0;
			}
			int num = 0;
			foreach (var item in ScanNumberedFiles(dir, FishFileRegex))
			{
				if (RegisterFishFromTexture("CustomFish" + item.Number, item.Path, item.Name))
				{
					num++;
				}
			}
			return num;
		}

		private static FishData FindTemplateFish()
		{
			foreach (FishData item in Resources.FindObjectsOfTypeAll<FishData>())
			{
				if (!((Object)(object)item == (Object)null) && ((ObjectData)item).id != null && !((ObjectData)item).id.StartsWith("CustomFish", StringComparison.OrdinalIgnoreCase))
				{
					return item;
				}
			}
			return null;
		}

		private static bool RegisterFishFromTexture(string id, string imagePath, string customName)
		{
			FishData val = FindTemplateFish();
			if ((Object)(object)val == (Object)null)
			{
				Log.Warning("No template fish available to clone for '" + id + "'.");
				return false;
			}
			byte[] bytes;
			Texture2D val2 = LoadTexture(imagePath, out bytes);
			if ((Object)(object)val2 == (Object)null)
			{
				Log.Warning("'" + imagePath + "' isn't a valid image, skipping.");
				return false;
			}
			Sprite val3 = CreateMatchedSprite(val2, ((ItemData)val).sprite);
			FishData val4 = Object.Instantiate<FishData>(val);
			((ObjectData)val4).id = id;
			((ObjectData)val4).AssetName = id;
			((ItemData)val4).sprite = val3;
			((ItemData)val4).keys?.Clear();
			if (val4.sizeSprites != null && ((Il2CppArrayBase<Sprite>)(object)val4.sizeSprites).Length > 0)
			{
				Sprite[] array = (Sprite[])(object)new Sprite[((Il2CppArrayBase<Sprite>)(object)val4.sizeSprites).Length];
				for (int i = 0; i < array.Length; i++)
				{
					array[i] = val3;
				}
				val4.sizeSprites = Il2CppReferenceArray<Sprite>.op_Implicit(array);
			}
			string lureTypeId = CheatsMod.CustomFishLureTypeId?.Value;
			if (!string.IsNullOrEmpty(lureTypeId))
			{
				LureTypeData val5 = ((IEnumerable<LureTypeData>)Resources.FindObjectsOfTypeAll<LureTypeData>()).FirstOrDefault((Func<LureTypeData, bool>)((LureTypeData l) => (Object)(object)l != (Object)null && ((ObjectData)l).id == lureTypeId));
				if ((Object)(object)val5 != (Object)null)
				{
					val4.preferredLureTypes = Il2CppReferenceArray<LureTypeData>.op_Implicit((LureTypeData[])(object)new LureTypeData[1] { val5 });
					val4.ignoreLureTypes = Il2CppReferenceArray<LureTypeData>.op_Implicit(Array.Empty<LureTypeData>());
				}
				else
				{
					Log.Warning($"Lure type '{lureTypeId}' not found, leaving '{id}' with its template's lure preferences.");
				}
			}
			ScriptableObjectSingleton<Database>.Instance.Fish.m_list.Add((ObjectData)(object)val4);
			_registeredFish.Add(val4);
			TryAddFishToCurrentLocation(id);
			if (!string.IsNullOrEmpty(customName))
			{
				_customNames[id] = customName;
			}
			Log.Msg($"Registered custom fish '{id}' from '{Path.GetFileName(imagePath)}' (cloned from '{((ObjectData)val).id}'{((lureTypeId != null) ? (", requires lure '" + lureTypeId + "'") : "")}{((customName != null) ? (", named '" + customName + "'") : "")}).");
			return true;
		}

		private static void TryAddFishToCurrentLocation(string fishId)
		{
			try
			{
				Location instance = Singleton<Location>.Instance;
				LocationData val = ((instance != null) ? instance.Data : null);
				if ((Object)(object)val == (Object)null)
				{
					return;
				}
				Il2CppStringArray fish = val.fish;
				List<string> list = new List<string>();
				if (fish != null)
				{
					foreach (string item in (Il2CppArrayBase<string>)(object)fish)
					{
						list.Add(item);
					}
					if (list.Contains(fishId))
					{
						return;
					}
				}
				list.Add(fishId);
				val.fish = Il2CppStringArray.op_Implicit(list.ToArray());
			}
			catch (Exception ex)
			{
				Log.Warning("Couldn't add '" + fishId + "' to the current location's spawn pool: " + ex.Message);
			}
		}

		public static string GetCustomName(string itemId)
		{
			if (itemId == null || !_customNames.TryGetValue(itemId, out var value))
			{
				return null;
			}
			return value;
		}

		public static Sprite GetCustomBoatWorldSprite(string itemId)
		{
			if (itemId == null || !_customBoatWorldSprites.TryGetValue(itemId, out var value))
			{
				return null;
			}
			return value;
		}

		public static Sprite GetCustomBoatThumbSprite(string itemId)
		{
			if (itemId == null || !_customBoatThumbSprites.TryGetValue(itemId, out var value))
			{
				return null;
			}
			return value;
		}

		public static void RegisterUniversalLure()
		{
			if ((Object)(object)ScriptableObjectSingleton<Database>.Instance == (Object)null || Journal.Instance == null)
			{
				Log.Warning("No save loaded yet, can't add the universal lure.");
				return;
			}
			if ((Object)(object)_universalLure != (Object)null)
			{
				Log.Msg("Universal Lure is already in the shop.");
				RefreshShop();
				return;
			}
			LureData defaultLure = Database.GetDefaultLure();
			if ((Object)(object)defaultLure == (Object)null)
			{
				Log.Warning("No template lure available to clone for the universal lure.");
				return;
			}
			LureData val = Object.Instantiate<LureData>(defaultLure);
			((ObjectData)val).id = "UniversalLure";
			((ObjectData)val).AssetName = "UniversalLure";
			((ShopItemData)val).cost = 5000;
			((ItemData)val).keys?.Clear();
			ScriptableObjectSingleton<Database>.Instance.Lure.m_list.Add((ObjectData)(object)val);
			_universalLure = val;
			Log.Msg("Registered Universal Lure ($5000, cloned from '" + ((ObjectData)defaultLure).id + "') — works on any fish.");
			RefreshShop();
		}

		private static bool RegisterRod(RodDefinition def, AssetBundle bundle)
		{
			if (def == null || string.IsNullOrWhiteSpace(def.id))
			{
				Log.Warning("Skipping rod entry with no id.");
				return false;
			}
			if ((Object)(object)ScriptableObjectSingleton<Database>.Instance == (Object)null || Journal.Instance == null)
			{
				Log.Warning("No save loaded yet, can't register rod '" + def.id + "'.");
				return false;
			}
			RodData val = (string.IsNullOrEmpty(def.cloneFrom) ? null : Database.FindRod(def.cloneFrom));
			if (val == null)
			{
				val = Database.GetDefaultRod();
			}
			if ((Object)(object)val == (Object)null)
			{
				Log.Warning("No template rod available to clone for '" + def.id + "'.");
				return false;
			}
			RodData val2 = Object.Instantiate<RodData>(val);
			((ObjectData)val2).id = def.id;
			((ObjectData)val2).AssetName = def.id;
			((ShopItemData)val2).cost = def.cost;
			if (!string.IsNullOrEmpty(def.spriteAsset))
			{
				Sprite val3 = bundle.LoadAsset<Sprite>(def.spriteAsset);
				if ((Object)(object)val3 != (Object)null)
				{
					((ItemData)val2).sprite = val3;
					val2.gameSprite = val3;
				}
				else
				{
					Log.Warning($"Sprite '{def.spriteAsset}' not found in bundle for rod '{def.id}'.");
				}
			}
			Strength strength = val2.strength;
			if (((strength != null) ? ((Upgradable)strength).levels : null) != null)
			{
				((Upgradable)val2.strength).levels = Il2CppReferenceArray<UpgradeData>.op_Implicit(CloneLevels(((Upgradable)val2.strength).levels, def.id + "_str"));
			}
			ScriptableObjectSingleton<Database>.Instance.Rod.m_list.Add((ObjectData)(object)val2);
			_registeredRods.Add(val2);
			Log.Msg($"Registered custom rod '{def.id}' (cloned from '{((ObjectData)val).id}').");
			return true;
		}

		private static void UnloadAll()
		{
			foreach (RodData registeredRod in _registeredRods)
			{
				try
				{
					Database instance = ScriptableObjectSingleton<Database>.Instance;
					if (instance != null)
					{
						ObjectDataTable rod = instance.Rod;
						if (rod != null)
						{
							rod.m_list?.Remove((ObjectData)(object)registeredRod);
						}
					}
				}
				catch
				{
				}
			}
			_registeredRods.Clear();
			foreach (BoatData registeredBoat in _registeredBoats)
			{
				try
				{
					Database instance2 = ScriptableObjectSingleton<Database>.Instance;
					if (instance2 != null)
					{
						ObjectDataTable boat = instance2.Boat;
						if (boat != null)
						{
							boat.m_list?.Remove((ObjectData)(object)registeredBoat);
						}
					}
				}
				catch
				{
				}
			}
			_registeredBoats.Clear();
			foreach (BoatVariantData registeredBoatVariant in _registeredBoatVariants)
			{
				try
				{
					Database instance3 = ScriptableObjectSingleton<Database>.Instance;
					if (instance3 != null)
					{
						ObjectDataTable boatVariant = instance3.BoatVariant;
						if (boatVariant != null)
						{
							boatVariant.m_list?.Remove((ObjectData)(object)registeredBoatVariant);
						}
					}
				}
				catch
				{
				}
			}
			_registeredBoatVariants.Clear();
			_customBoatWorldSprites.Clear();
			_customBoatThumbSprites.Clear();
			foreach (FishData item in _registeredFish)
			{
				try
				{
					Database instance4 = ScriptableObjectSingleton<Database>.Instance;
					if (instance4 != null)
					{
						ObjectDataTable fish = instance4.Fish;
						if (fish != null)
						{
							fish.m_list?.Remove((ObjectData)(object)item);
						}
					}
				}
				catch
				{
				}
			}
			_registeredFish.Clear();
			foreach (AssetBundle loadedBundle in _loadedBundles)
			{
				try
				{
					loadedBundle.Unload(true);
				}
				catch
				{
				}
			}
			_loadedBundles.Clear();
		}
	}
	internal static class FolderPicker
	{
		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
		private struct BROWSEINFO
		{
			public IntPtr hwndOwner;

			public IntPtr pidlRoot;

			public IntPtr pszDisplayName;

			public string lpszTitle;

			public uint ulFlags;

			public IntPtr lpfn;

			public IntPtr lParam;

			public int iImage;
		}

		private const uint BIF_RETURNONLYFSDIRS = 1u;

		private const uint BIF_NEWDIALOGSTYLE = 64u;

		[DllImport("shell32.dll", CharSet = CharSet.Auto)]
		private static extern IntPtr SHBrowseForFolder(ref BROWSEINFO lpbi);

		[DllImport("shell32.dll", CharSet = CharSet.Auto)]
		private static extern bool SHGetPathFromIDList(IntPtr pidl, StringBuilder pszPath);

		[DllImport("ole32.dll")]
		private static extern void CoTaskMemFree(IntPtr pv);

		public static string Pick(string title)
		{
			string result = null;
			Thread thread = new Thread((ThreadStart)delegate
			{
				result = PickOnCurrentThread(title);
			});
			thread.SetApartmentState(ApartmentState.STA);
			thread.Start();
			thread.Join();
			return result;
		}

		private static string PickOnCurrentThread(string title)
		{
			IntPtr intPtr = Marshal.AllocHGlobal(520);
			try
			{
				BROWSEINFO lpbi = new BROWSEINFO
				{
					pszDisplayName = intPtr,
					lpszTitle = title,
					ulFlags = 65u
				};
				IntPtr intPtr2 = SHBrowseForFolder(ref lpbi);
				if (intPtr2 == IntPtr.Zero)
				{
					return null;
				}
				try
				{
					StringBuilder stringBuilder = new StringBuilder(260);
					return SHGetPathFromIDList(intPtr2, stringBuilder) ? stringBuilder.ToString() : null;
				}
				finally
				{
					CoTaskMemFree(intPtr2);
				}
			}
			finally
			{
				Marshal.FreeHGlobal(intPtr);
			}
		}
	}
	public class CheatsMod : MelonMod
	{
		[HarmonyPatch(typeof(Fish), "SetSize")]
		private static class Patch_Fish_SetSize
		{
			private static void Prefix(ref int sizePercent)
			{
				if (MaxFishSize != null && MaxFishSize.Value)
				{
					sizePercent = 100;
				}
			}
		}

		[HarmonyPatch(typeof(Angler), "DrainStaminaOverTime")]
		private static class Patch_Angler_DrainStaminaOverTime
		{
			private static bool Prefix()
			{
				if (InfiniteStamina != null)
				{
					return !InfiniteStamina.Value;
				}
				return true;
			}
		}

		[HarmonyPatch(typeof(Angler), "DrainStaminaInstant")]
		private static class Patch_Angler_DrainStaminaInstant
		{
			private static bool Prefix()
			{
				if (InfiniteStamina != null)
				{
					return !InfiniteStamina.Value;
				}
				return true;
			}
		}

		[HarmonyPatch(typeof(Fish), "AttractToLure")]
		private static class Patch_Fish_AttractToLure
		{
			private static bool Prefix(Lure lure, ref bool __result)
			{
				if ((Object)(object)lure != (Object)null && (Object)(object)lure.Data != (Object)null && ((ObjectData)lure.Data).id == "UniversalLure")
				{
					__result = true;
					return false;
				}
				return true;
			}
		}

		internal static MelonPreferences_Category Category;

		internal static MelonPreferences_Entry<bool> MaxFishSize;

		internal static MelonPreferences_Entry<bool> MaxRodStrength;

		internal static MelonPreferences_Entry<bool> NoLineBreak;

		internal static MelonPreferences_Entry<bool> InfiniteStamina;

		internal static MelonPreferences_Entry<float> ReelSpeedMultiplier;

		internal static MelonPreferences_Entry<float> BoatSpeedMultiplier;

		internal static MelonPreferences_Entry<string> MenuKey;

		internal static MelonPreferences_Entry<bool> FreezeTimeOfDay;

		internal static MelonPreferences_Entry<float> TimeOfDayValue;

		internal static MelonPreferences_Entry<bool> ClickToTeleport;

		internal static MelonPreferences_Entry<string> ContentDirectory;

		internal static MelonPreferences_Entry<bool> CustomBoatMotor;

		internal static MelonPreferences_Entry<float> CustomBoatSize;

		internal static MelonPreferences_Entry<float> CustomRodWeightKg;

		internal static MelonPreferences_Entry<string> CustomRodTemplateId;

		internal static MelonPreferences_Entry<int> CustomBoatFishStorage;

		internal static MelonPreferences_Entry<string> CustomFishLureTypeId;

		internal static MelonPreferences_Entry<string> SpawnFishId;

		internal static MelonPreferences_Entry<int> SpawnFishSizePercent;

		private bool _showMenu;

		private int _tab;

		private Rect _windowRect = new Rect(40f, 40f, 620f, 600f);

		private string _toggleKeyName = "F1";

		private bool _customContentLoaded;

		private static readonly string[] ToggleKeyChoices = new string[4] { "F1", "F2", "Insert", "Home" };

		private static bool _lineDefaultsCaptured;

		private static float _origHookedReelSpeed;

		private static float _origAutoReelSpeed;

		private static float _origAutoReelSpeedMax;

		private static float _origSpoolSpeed;

		private static float _origBreakDelay;

		private static float _origTooBigBreakDelay;

		private static float _origBreakDelayDecay;

		private readonly Dictionary<BoatEngineData, (int maxSpeed, int accel, int decel)> _origBoatEngine = new Dictionary<BoatEngineData, (int, int, int)>();

		private readonly Dictionary<RodStrengthData, int> _origRodStrength = new Dictionary<RodStrengthData, int>();

		private int _actionCount;

		private string _lastAction = "(none yet)";

		private float? _origTimeOfDaySpeed;

		private readonly HashSet<int> _diagnosedShopItems = new HashSet<int>();

		private readonly HashSet<int> _diagnosedSpriteTargets = new HashSet<int>();

		private Boat _teleportBoat;

		private Vector3 _teleportTargetXY;

		private int _teleportFramesLeft;

		private float _cursorY;

		private const float Pad = 8f;

		private const float RowH = 22f;

		private const float Gap = 4f;

		private GUIStyle _blackLabelStyle;

		private GUIStyle _blackBoxStyle;

		private WindowFunction _windowFunc;

		private GUIStyle _blankWindowStyle;

		private static readonly string[] TabNames = new string[6] { "Cheats", "Config", "Boats", "Rods", "Snowmobiles", "Fish" };

		private Texture2D _backgroundTexture;

		private bool _backgroundLoadAttempted;

		private GUIStyle _backgroundStyle;

		private Texture2D _logoTexture;

		private bool _logoLoadAttempted;

		private GUIStyle _logoStyle;

		private GUIStyle BlackLabelStyle => _blackLabelStyle ?? (_blackLabelStyle = BuildBlackTextStyle(GUI.skin.label));

		private GUIStyle BlackBoxStyle => _blackBoxStyle ?? (_blackBoxStyle = BuildBlackTextStyle(GUI.skin.box));

		public override void OnInitializeMelon()
		{
			Category = MelonPreferences.CreateCategory("CastNChillCheats", "Cast n Chill Mod n Menu");
			MaxFishSize = Category.CreateEntry<bool>("MaxFishSize", false, "Max Fish Size", (string)null, false, false, (ValueValidator)null, (string)null);
			MaxRodStrength = Category.CreateEntry<bool>("MaxRodStrength", false, "Max Rod/Hook Strength", (string)null, false, false, (ValueValidator)null, (string)null);
			NoLineBreak = Category.CreateEntry<bool>("NoLineBreak", false, "Unbreakable Line", (string)null, false, false, (ValueValidator)null, (string)null);
			InfiniteStamina = Category.CreateEntry<bool>("InfiniteStamina", false, "Infinite Stamina", (string)null, false, false, (ValueValidator)null, (string)null);
			ReelSpeedMultiplier = Category.CreateEntry<float>("ReelSpeedMultiplier", 1f, "Reel Speed Multiplier", (string)null, false, false, (ValueValidator)null, (string)null);
			BoatSpeedMultiplier = Category.CreateEntry<float>("BoatSpeedMultiplier", 1f, "Boat Speed Multiplier", (string)null, false, false, (ValueValidator)null, (string)null);
			MenuKey = Category.CreateEntry<string>("MenuKey", "F1", "Menu Toggle Key", (string)null, false, false, (ValueValidator)null, (string)null);
			FreezeTimeOfDay = Category.CreateEntry<bool>("FreezeTimeOfDay", false, "Freeze Time of Day", (string)null, false, false, (ValueValidator)null, (string)null);
			TimeOfDayValue = Category.CreateEntry<float>("TimeOfDayValue", 12f, "Time of Day", (string)null, false, false, (ValueValidator)null, (string)null);
			ClickToTeleport = Category.CreateEntry<bool>("ClickToTeleport", false, "Click-to-Teleport Boat", (string)null, false, false, (ValueValidator)null, (string)null);
			ContentDirectory = Category.CreateEntry<string>("ContentDirectory", "", "Custom Content Folder", (string)null, false, false, (ValueValidator)null, (string)null);
			CustomBoatMotor = Category.CreateEntry<bool>("CustomBoatMotor", false, "Custom Boats Have Motor", (string)null, false, false, (ValueValidator)null, (string)null);
			CustomBoatSize = Category.CreateEntry<float>("CustomBoatSize", 1f, "Custom Boat Size", (string)null, false, false, (ValueValidator)null, (string)null);
			CustomRodWeightKg = Category.CreateEntry<float>("CustomRodWeightKg", 10f, "Custom Rod Weight Capacity (kg)", (string)null, false, false, (ValueValidator)null, (string)null);
			CustomRodTemplateId = Category.CreateEntry<string>("CustomRodTemplateId", "", "Custom Rod Base Template", (string)null, false, false, (ValueValidator)null, (string)null);
			CustomBoatFishStorage = Category.CreateEntry<int>("CustomBoatFishStorage", 20, "Custom Boat Fish Storage", (string)null, false, false, (ValueValidator)null, (string)null);
			CustomFishLureTypeId = Category.CreateEntry<string>("CustomFishLureTypeId", "", "Custom Fish Required Lure", (string)null, false, false, (ValueValidator)null, (string)null);
			SpawnFishId = Category.CreateEntry<string>("SpawnFishId", "", "Spawn Fish Id", (string)null, false, false, (ValueValidator)null, (string)null);
			SpawnFishSizePercent = Category.CreateEntry<int>("SpawnFishSizePercent", 50, "Spawn Fish Size %", (string)null, false, false, (ValueValidator)null, (string)null);
			_toggleKeyName = ((Array.IndexOf(ToggleKeyChoices, MenuKey.Value) >= 0) ? MenuKey.Value : "F1");
			((MelonBase)this).LoggerInstance.Msg("Cast n Chill Mod n Menu loaded. Press " + _toggleKeyName + " to open the mod menu.");
		}

		private static KeyControl GetKeyControl(string keyName)
		{
			Keyboard current = Keyboard.current;
			if (current == null)
			{
				return null;
			}
			return (KeyControl)(keyName switch
			{
				"F1" => current.f1Key, 
				"F2" => current.f2Key, 
				"Insert" => current.insertKey, 
				"Home" => current.homeKey, 
				_ => current.f1Key, 
			});
		}

		public override void OnUpdate()
		{
			KeyControl keyControl = GetKeyControl(_toggleKeyName);
			if (keyControl != null && ((ButtonControl)keyControl).wasPressedThisFrame)
			{
				_showMenu = !_showMenu;
				((MelonBase)this).LoggerInstance.Msg("[UI] Menu " + (_showMenu ? "opened" : "closed") + " via " + _toggleKeyName);
				if (!_showMenu)
				{
					MelonPreferences.Save();
				}
			}
			ApplyLineConfig();
			ApplyBoatAndRodOverrides();
			ApplyCustomShopNames();
			ApplyCustomBoatSprites();
			DumpAllShopItems();
			if (Journal.Instance != null && Journal.Instance.Cash < 0)
			{
				Journal.Instance.Cash = 0;
			}
			if (!_customContentLoaded && (Object)(object)ScriptableObjectSingleton<Database>.Instance != (Object)null && Journal.Instance != null)
			{
				_customContentLoaded = true;
				CustomContentManager.Reload();
			}
			ApplyTimeOfDayOverride();
			if (ClickToTeleport.Value && !_showMenu)
			{
				Mouse current = Mouse.current;
				if (current != null && current.leftButton.wasPressedThisFrame)
				{
					StartTeleportBoatToCursor();
				}
			}
			ContinueTeleportHold();
		}

		private void ApplyTimeOfDayOverride()
		{
			Location instance = Singleton<Location>.Instance;
			if ((Object)(object)instance == (Object)null)
			{
				return;
			}
			if (FreezeTimeOfDay.Value)
			{
				float valueOrDefault = _origTimeOfDaySpeed.GetValueOrDefault();
				if (!_origTimeOfDaySpeed.HasValue)
				{
					valueOrDefault = instance.TimeOfDaySpeed;
					_origTimeOfDaySpeed = valueOrDefault;
				}
				instance.TimeOfDaySpeed = 0f;
				LocationVariation variation = instance.Variation;
				if (variation != null)
				{
					variation.TimeOfDay = TimeOfDayValue.Value;
				}
			}
			else if (_origTimeOfDaySpeed.HasValue)
			{
				instance.TimeOfDaySpeed = _origTimeOfDaySpeed.Value;
				_origTimeOfDaySpeed = null;
			}
		}

		private void ApplyBoatAndRodOverrides()
		{
			float value = BoatSpeedMultiplier.Value;
			foreach (BoatEngineData item in Resources.FindObjectsOfTypeAll<BoatEngineData>())
			{
				if (!_origBoatEngine.TryGetValue(item, out (int, int, int) value2))
				{
					value2 = (item.maxSpeed, item.acceleration, item.deceleration);
					_origBoatEngine[item] = value2;
				}
				item.maxSpeed = (int)((float)value2.Item1 * value);
				item.acceleration = (int)((float)value2.Item2 * value);
			}
			foreach (RodStrengthData item2 in Resources.FindObjectsOfTypeAll<RodStrengthData>())
			{
				if (!_origRodStrength.TryGetValue(item2, out var value3))
				{
					value3 = item2.weight;
					_origRodStrength[item2] = value3;
				}
				item2.weight = (MaxRodStrength.Value ? 9999 : value3);
			}
		}

		private void ApplyCustomShopNames()
		{
			foreach (GUIShopItem item in Resources.FindObjectsOfTypeAll<GUIShopItem>())
			{
				ShopItemData val = ((item != null) ? item.Data : null);
				if (!((Object)(object)val == (Object)null) && ((ObjectData)val).id != null)
				{
					string customName = CustomContentManager.GetCustomName(((ObjectData)val).id);
					if (customName != null && !((Object)(object)item.displayNameText == (Object)null) && item.displayNameText.text != customName)
					{
						item.displayNameText.text = customName;
					}
				}
			}
		}

		private void DumpAllShopItems()
		{
			foreach (GUIShopItem item in Resources.FindObjectsOfTypeAll<GUIShopItem>())
			{
				if ((Object)(object)item == (Object)null)
				{
					continue;
				}
				int instanceID = ((Object)((Component)item).gameObject).GetInstanceID();
				if (!_diagnosedShopItems.Add(instanceID))
				{
					continue;
				}
				try
				{
					ShopItemData data = item.Data;
					((MelonBase)this).LoggerInstance.Msg($"[ShopDump] type={((object)item).GetType().Name} id={((data != null) ? ((ObjectData)data).id : null) ?? "null"} go='{((Object)((Component)item).gameObject).name}' displayNameText={(((Object)(object)item.displayNameText != (Object)null) ? item.displayNameText.text : "null")}");
					foreach (Text componentsInChild in ((Component)item).gameObject.GetComponentsInChildren<Text>(true))
					{
						((MelonBase)this).LoggerInstance.Msg($"[ShopDump]   UI.Text '{((Object)((Component)componentsInChild).gameObject).name}' text=\"{componentsInChild.text}\"");
					}
					foreach (TMP_Text componentsInChild2 in ((Component)item).gameObject.GetComponentsInChildren<TMP_Text>(true))
					{
						((MelonBase)this).LoggerInstance.Msg($"[ShopDump]   TMP_Text '{((Object)((Component)componentsInChild2).gameObject).name}' text=\"{componentsInChild2.text}\"");
					}
					foreach (Image componentsInChild3 in ((Component)item).gameObject.GetComponentsInChildren<Image>(true))
					{
						Instance loggerInstance = ((MelonBase)this).LoggerInstance;
						string name = ((Object)((Component)componentsInChild3).gameObject).name;
						Sprite sprite = componentsInChild3.sprite;
						loggerInstance.Msg("[ShopDump]   Image '" + name + "' sprite=" + (((sprite != null) ? ((Object)sprite).name : null) ?? "null"));
					}
					foreach (SpriteRenderer componentsInChild4 in ((Component)item).gameObject.GetComponentsInChildren<SpriteRenderer>(true))
					{
						Instance loggerInstance2 = ((MelonBase)this).LoggerInstance;
						string name2 = ((Object)((Component)componentsInChild4).gameObject).name;
						Sprite sprite2 = componentsInChild4.sprite;
						loggerInstance2.Msg("[ShopDump]   SpriteRenderer '" + name2 + "' sprite=" + (((sprite2 != null) ? ((Object)sprite2).name : null) ?? "null"));
					}
				}
				catch (Exception ex)
				{
					((MelonBase)this).LoggerInstance.Warning("[ShopDump] failed: " + ex.Message);
				}
			}
		}

		private void ApplyCustomBoatSprites()
		{
			foreach (Boat item in Resources.FindObjectsOfTypeAll<Boat>())
			{
				object obj;
				if (item == null)
				{
					obj = null;
				}
				else
				{
					BoatData data = item.Data;
					obj = ((data != null) ? ((ObjectData)data).id : null);
				}
				string text = (string)obj;
				if (text == null)
				{
					continue;
				}
				Sprite customBoatWorldSprite = CustomContentManager.GetCustomBoatWorldSprite(text);
				if (!((Object)(object)customBoatWorldSprite == (Object)null))
				{
					if ((Object)(object)item.boatRenderer != (Object)null && (Object)(object)item.boatRenderer.sprite != (Object)(object)customBoatWorldSprite)
					{
						item.boatRenderer.sprite = customBoatWorldSprite;
					}
					int instanceID = ((Object)((Component)item).gameObject).GetInstanceID();
					if (_diagnosedSpriteTargets.Add(instanceID))
					{
						DumpSpriteComponents("Boat", text, ((Component)item).gameObject);
					}
				}
			}
			foreach (GUIShopBoat item2 in Resources.FindObjectsOfTypeAll<GUIShopBoat>())
			{
				object obj2;
				if (item2 == null)
				{
					obj2 = null;
				}
				else
				{
					BoatData boatData = item2.BoatData;
					obj2 = ((boatData != null) ? ((ObjectData)boatData).id : null);
				}
				string text2 = (string)obj2;
				if (text2 == null)
				{
					continue;
				}
				Sprite customBoatThumbSprite = CustomContentManager.GetCustomBoatThumbSprite(text2);
				if ((Object)(object)customBoatThumbSprite == (Object)null)
				{
					continue;
				}
				if ((Object)(object)((GUIShopItem)item2).image != (Object)null)
				{
					if ((Object)(object)((GUIShopItem)item2).image.sprite != (Object)(object)customBoatThumbSprite)
					{
						((GUIShopItem)item2).image.sprite = customBoatThumbSprite;
					}
					if (!((GUIShopItem)item2).image.preserveAspect)
					{
						((GUIShopItem)item2).image.preserveAspect = true;
					}
				}
				int instanceID2 = ((Object)((Component)item2).gameObject).GetInstanceID();
				if (_diagnosedSpriteTargets.Add(instanceID2))
				{
					DumpSpriteComponents("GUIShopBoat", text2, ((Component)item2).gameObject);
				}
			}
		}

		private void DumpSpriteComponents(string context, string id, GameObject go)
		{
			try
			{
				((MelonBase)this).LoggerInstance.Msg($"[SpriteDump] {context} '{id}' on GameObject '{((Object)go).name}':");
				foreach (SpriteRenderer componentsInChild in go.GetComponentsInChildren<SpriteRenderer>(true))
				{
					Instance loggerInstance = ((MelonBase)this).LoggerInstance;
					DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(49, 3);
					defaultInterpolatedStringHandler.AppendLiteral("[SpriteDump]   SpriteRenderer '");
					defaultInterpolatedStringHandler.AppendFormatted(((Object)((Component)componentsInChild).gameObject).name);
					defaultInterpolatedStringHandler.AppendLiteral("' sprite=");
					Sprite sprite = componentsInChild.sprite;
					defaultInterpolatedStringHandler.AppendFormatted(((sprite != null) ? ((Object)sprite).name : null) ?? "null");
					defaultInterpolatedStringHandler.AppendLiteral(" enabled=");
					defaultInterpolatedStringHandler.AppendFormatted(((Renderer)componentsInChild).enabled);
					loggerInstance.Msg(defaultInterpolatedStringHandler.ToStringAndClear());
				}
				foreach (Image componentsInChild2 in go.GetComponentsInChildren<Image>(true))
				{
					Instance loggerInstance2 = ((MelonBase)this).LoggerInstance;
					DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(40, 3);
					defaultInterpolatedStringHandler.AppendLiteral("[SpriteDump]   Image '");
					defaultInterpolatedStringHandler.AppendFormatted(((Object)((Component)componentsInChild2).gameObject).name);
					defaultInterpolatedStringHandler.AppendLiteral("' sprite=");
					Sprite sprite2 = componentsInChild2.sprite;
					defaultInterpolatedStringHandler.AppendFormatted(((sprite2 != null) ? ((Object)sprite2).name : null) ?? "null");
					defaultInterpolatedStringHandler.AppendLiteral(" enabled=");
					defaultInterpolatedStringHandler.AppendFormatted(((Behaviour)componentsInChild2).enabled);
					loggerInstance2.Msg(defaultInterpolatedStringHandler.ToStringAndClear());
				}
			}
			catch (Exception ex)
			{
				((MelonBase)this).LoggerInstance.Warning($"[SpriteDump] Failed for {context} '{id}': {ex.Message}");
			}
		}

		private void StartTeleportBoatToCursor()
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			Camera main = Camera.main;
			Boat val = Object.FindObjectOfType<Boat>();
			if (!((Object)(object)main == (Object)null) && !((Object)(object)val == (Object)null))
			{
				Vector2 val2 = ((InputControl<Vector2>)(object)((Pointer)Mouse.current).position).ReadValue();
				float z = main.WorldToScreenPoint(((Component)val).transform.position).z;
				Vector3 teleportTargetXY = main.ScreenToWorldPoint(new Vector3(val2.x, val2.y, z));
				_teleportBoat = val;
				_teleportTargetXY = teleportTargetXY;
				_teleportFramesLeft = 15;
			}
		}

		private void ContinueTeleportHold()
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			if (_teleportFramesLeft > 0 && !((Object)(object)_teleportBoat == (Object)null))
			{
				Vector3 position = ((Component)_teleportBoat).transform.position;
				((Component)_teleportBoat).transform.position = new Vector3(_teleportTargetXY.x, _teleportTargetXY.y, position.z);
				_teleportFramesLeft--;
			}
		}

		private void UnlockAllGear()
		{
			Journal instance = Journal.Instance;
			if (instance == null)
			{
				((MelonBase)this).LoggerInstance.Warning("No active save loaded — open a save first.");
				return;
			}
			int num = 0;
			foreach (RodData item in Resources.FindObjectsOfTypeAll<RodData>())
			{
				if (!((ShopItemData)item).IsOwned)
				{
					instance.Buy((ShopItemData)(object)item);
					num++;
				}
			}
			foreach (BoatData item2 in Resources.FindObjectsOfTypeAll<BoatData>())
			{
				if (!((ShopItemData)item2).IsOwned)
				{
					instance.Buy((ShopItemData)(object)item2);
					num++;
				}
			}
			foreach (LureData item3 in Resources.FindObjectsOfTypeAll<LureData>())
			{
				if (!((ShopItemData)item3).IsOwned)
				{
					instance.Buy((ShopItemData)(object)item3);
					num++;
				}
			}
			((MelonBase)this).LoggerInstance.Msg($"Unlocked {num} item(s).");
		}

		private void ApplyLineConfig()
		{
			FishingLineConfig instance = ScriptableObjectSingleton<FishingLineConfig>.Instance;
			if (!((Object)(object)instance == (Object)null))
			{
				if (!_lineDefaultsCaptured)
				{
					_origHookedReelSpeed = instance.hookedReelSpeed;
					_origAutoReelSpeed = instance.autoReelSpeed;
					_origAutoReelSpeedMax = instance.autoReelSpeedMax;
					_origSpoolSpeed = instance.spoolSpeed;
					_origBreakDelay = instance.breakDelay;
					_origTooBigBreakDelay = instance.tooBigBreakDelay;
					_origBreakDelayDecay = instance.breakDelayDecay;
					_lineDefaultsCaptured = true;
				}
				float value = ReelSpeedMultiplier.Value;
				instance.hookedReelSpeed = _origHookedReelSpeed * value;
				instance.autoReelSpeed = _origAutoReelSpeed * value;
				instance.autoReelSpeedMax = _origAutoReelSpeedMax * value;
				instance.spoolSpeed = _origSpoolSpeed * value;
				if (NoLineBreak.Value)
				{
					instance.breakDelay = 9999f;
					instance.tooBigBreakDelay = 9999f;
					instance.breakDelayDecay = 0f;
				}
				else
				{
					instance.breakDelay = _origBreakDelay;
					instance.tooBigBreakDelay = _origTooBigBreakDelay;
					instance.breakDelayDecay = _origBreakDelayDecay;
				}
			}
		}

		private Rect NextRect(float height = 22f)
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			Rect result = new Rect(8f, _cursorY, ((Rect)(ref _windowRect)).width - 16f, height);
			_cursorY += height + 4f;
			return result;
		}

		private static bool WasClicked(Rect r)
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			Event current = Event.current;
			if (current != null && (int)current.type == 0 && current.button == 0 && ((Rect)(ref r)).Contains(current.mousePosition))
			{
				current.Use();
				return true;
			}
			return false;
		}

		private static GUIStyle BuildBlackTextStyle(GUIStyle source)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: 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)
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Expected O, but got Unknown
			GUIStyle val = new GUIStyle
			{
				border = source.border,
				padding = source.padding,
				margin = source.margin,
				overflow = source.overflow,
				alignment = source.alignment,
				fontSize = source.fontSize,
				fontStyle = source.fontStyle,
				wordWrap = source.wordWrap
			};
			val.normal.background = source.normal.background;
			val.normal.textColor = Color.black;
			val.hover.background = source.hover.background;
			val.hover.textColor = Color.black;
			val.active.background = source.active.background;
			val.active.textColor = Color.black;
			return val;
		}

		private void Lbl(Rect r, string text)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			GUI.Label(r, text, BlackLabelStyle);
		}

		private bool Btn(Rect r, string label, string actionName = null)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			GUI.Box(r, label, BlackBoxStyle);
			bool num = WasClicked(r);
			if (num)
			{
				_actionCount++;
				_lastAction = actionName ?? label;
				((MelonBase)this).LoggerInstance.Msg($"[UI] Clicked: {_lastAction} (#{_actionCount})");
			}
			return num;
		}

		private bool Tgl(Rect r, bool value, string label)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			GUI.Box(r, (value ? "[X] " : "[ ] ") + label, BlackBoxStyle);
			bool flag = value;
			if (WasClicked(r))
			{
				flag = !value;
				_actionCount++;
				_lastAction = label + " -> " + (flag ? "ON" : "OFF");
				((MelonBase)this).LoggerInstance.Msg($"[UI] {_lastAction} (#{_actionCount})");
			}
			return flag;
		}

		private void DrawValueStepper(string label, MelonPreferences_Entry<float> entry, float min, float max, float step, string format, string suffix = "")
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
			Rect val = NextRect();
			float num = ((Rect)(ref val)).width - 52f - 46f;
			Lbl(new Rect(((Rect)(ref val)).x, ((Rect)(ref val)).y, num, 22f), label);
			if (Btn(new Rect(((Rect)(ref val)).x + num, ((Rect)(ref val)).y, 26f, 22f), "-", label + " -"))
			{
				entry.Value = Mathf.Max(min, entry.Value - step);
			}
			Lbl(new Rect(((Rect)(ref val)).x + num + 26f, ((Rect)(ref val)).y, 46f, 22f), entry.Value.ToString(format) + suffix);
			if (Btn(new Rect(((Rect)(ref val)).x + num + 26f + 46f, ((Rect)(ref val)).y, 26f, 22f), "+", label + " +"))
			{
				entry.Value = Mathf.Min(max, entry.Value + step);
			}
		}

		private void DrawIntStepper(string label, MelonPreferences_Entry<int> entry, int min, int max, int step, string suffix = "")
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_012c: Unknown result type (might be due to invalid IL or missing references)
			Rect val = NextRect();
			float num = ((Rect)(ref val)).width - 52f - 90f;
			Lbl(new Rect(((Rect)(ref val)).x, ((Rect)(ref val)).y, num, 22f), label);
			if (Btn(new Rect(((Rect)(ref val)).x + num, ((Rect)(ref val)).y, 26f, 22f), "-", label + " -"))
			{
				entry.Value = Mathf.Max(min, entry.Value - step);
			}
			string text = (string.IsNullOrEmpty(suffix) ? entry.Value.ToString() : $"{entry.Value} {suffix}");
			Lbl(new Rect(((Rect)(ref val)).x + num + 26f, ((Rect)(ref val)).y, 90f, 22f), text);
			if (Btn(new Rect(((Rect)(ref val)).x + num + 26f + 90f, ((Rect)(ref val)).y, 26f, 22f), "+", label + " +"))
			{
				entry.Value = Mathf.Min(max, entry.Value + step);
			}
		}

		public override void OnGUI()
		{
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			if (_showMenu)
			{
				if (_windowFunc == null)
				{
					_windowFunc = WindowFunction.op_Implicit((Action<int>)DrawWindow);
				}
				if (_blankWindowStyle == null)
				{
					_blankWindowStyle = new GUIStyle();
				}
				_windowRect = GUI.Window(1128484419, _windowRect, _windowFunc, "", _blankWindowStyle);
			}
		}

		private Texture2D GetBackgroundTexture()
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Expected O, but got Unknown
			if ((Object)(object)_backgroundTexture != (Object)null || _backgroundLoadAttempted)
			{
				return _backgroundTexture;
			}
			_backgroundLoadAttempted = true;
			try
			{
				byte[] array = Convert.FromBase64String("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