using System;
using System.Collections;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppSystem.Collections.Generic;
using MelonLoader;
using RumbleModUI;
using SeasonalLeaves;
using UnityEngine;
using UnityEngine.VFX;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: MelonInfo(typeof(SeasonalLeavesClass), "SeasonalLeaves", "4.1.1", "Baumritter", null)]
[assembly: MelonGame("Buckethead Entertainment", "RUMBLE")]
[assembly: VerifyLoaderVersion(0, 6, 2)]
[assembly: MelonColor(200, 0, 200, 0)]
[assembly: MelonAuthorColor(200, 0, 200, 0)]
[assembly: AssemblyTitle("SeasonalLeaves")]
[assembly: AssemblyDescription("Changes the color of all leaves based on season.")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("SeasonalLeaves")]
[assembly: AssemblyCopyright("Copyright © 2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("80d96e94-eda2-46b0-9b8b-23557ea773b5")]
[assembly: AssemblyFileVersion("4.1.1")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("4.1.1.0")]
namespace SeasonalLeaves;
public static class BuildInfo
{
public const string ModName = "SeasonalLeaves";
public const string ModVersion = "4.1.1";
public const string Description = "Changes the color of all leaves based on season.";
public const string Author = "Baumritter";
public const string Company = "";
}
public class SeasonalLeavesClass : MelonMod
{
private const double Delay = 6.0;
private const int LCT1 = 1365;
private const int LCB1 = 1366;
private const int LCT2 = 1359;
private const int LCB2 = 1361;
private const int GC1 = 1340;
private const int GC2 = 1342;
private const int GC3 = 1347;
private const int GC4 = 1349;
private const int VFXGradientID = 977;
private const string SettingsFolder = "Settings";
private Color color_cust_cherry = new Color(0.8f, 0.52f, 0.57f, 1f);
private Color color_sumr_lshgrn = new Color(0f, 0.15f, 0f, 1f);
private Color color_sumr_drkgrn = new Color(0.05f, 0.04f, 0f, 1f);
private Color color_fall_drkred = new Color(0.19f, 0.06f, 0f, 1f);
private Color color_fall_orange = new Color(0.25f, 0.1f, 0f, 1f);
private Color color_fall_yellow = new Color(0.25f, 0.16f, 0f, 1f);
private Color color_wntr_lghblu = new Color(0.5f, 0.5f, 0.8f, 1f);
private readonly bool debug = false;
private string currentscene;
private string[] ObjectStrings = new string[15]
{
"--------------SCENE--------------/Gym_Production/Main static group/Foliage/Root_leaves", "--------------SCENE--------------/Gym_Production/Main static group/Foliage/Root_leaves_001", "--------------SCENE--------------/Gym_Production/Main static group/Foliage/Root_leaves_002", "--------------SCENE--------------/Gym_Production/Main static group/Foliage/Root_leaves_003", "--------------SCENE--------------/Gym_Production/Main static group/Gymarena/Leave_sphere__23_", "--------------SCENE--------------/Gym_Production/Main static group/Gymarena/Leave_sphere__24_", "--------------SCENE--------------/Grass", "________________SCENE_________________/Park/Main static group/Leaves/Leave_sphere_park", "________________SCENE_________________/Park/Main static group/Leaves/Leave_sphere_park_001", "________________SCENE_________________/Park/Main static group/Leaves/Leave_sphere_park_002",
"________________SCENE_________________/Park/Main static group/Leaves/Leave_sphere_park_003", "Lighting and effects/Visual Effects/Falling Leaf VFXs", "Map0_production/Main static group/leave", "Map1_production/Main static group/Leaves_Map2", "Lighting & Effects/Visual Effects/Falling Leaf VFXs"
};
private List<Material> Mat_Trees = new List<Material>();
private List<Material> Mat_Grass = new List<Material>();
private GameObject GO_VFX;
private VisualEffect VFX_VFX;
private Mod Mod = new Mod();
private Delay LoadDelay = new Delay
{
DelayName = "SeasonalLeavesLoadDelay"
};
public override void OnLateInitializeMelon()
{
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: 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_006a: 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_0089: Unknown result type (might be due to invalid IL or missing references)
((MelonBase)this).OnLateInitializeMelon();
UI.instance.UI_Initialized += OnUIInit;
LoadHandler.PlayerLoaded += WaitAfterInit;
Shading.shades[0] = Color.HSVToRGB(0f, 1f, 1f);
Shading.shades[1] = Color.HSVToRGB(0f, 0.66f, 0.66f);
Shading.shades[2] = Color.HSVToRGB(0f, 0.33f, 0.33f);
}
private void OnUIInit()
{
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Expected O, but got Unknown
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Expected O, but got Unknown
//IL_009c: Unknown result type (might be due to invalid IL or missing references)
//IL_00a6: Expected O, but got Unknown
//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
//IL_00d2: Expected O, but got Unknown
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ef: Expected O, but got Unknown
//IL_0102: Unknown result type (might be due to invalid IL or missing references)
//IL_010c: Expected O, but got Unknown
Mod.ModName = "SeasonalLeaves";
Mod.ModVersion = "4.1.1";
Mod.SetFolder("SeasonalLeaves");
Mod.SetSubFolder("Settings");
Mod.AddDescription("Description", "", "Changes the color of all leaves based on season.", new Tags
{
IsSummary = true
});
Mod.AddToList("Grass", false, 0, "Enables continuous Shading of Grass. This is horrendous on performance.", new Tags());
Mod.AddToList("RGB", false, 1, "Turns the RGB theme on/off.", new Tags());
Mod.AddToList("Cursed", false, 1, "Turns the Cursed theme on/off." + Environment.NewLine + "Epilepsy Warning!", new Tags());
Mod.AddToList("Season", true, 1, "Turns the Seasonal theme on/off.", new Tags());
Mod.AddToList("Cherry", false, 1, "Turns the Cherry theme on/off.", new Tags());
Mod.SetLinkGroup(1, "Themes");
Mod.GetFromFile();
Mod.ModSaved += OnSaveOrInit;
UI.instance.AddMod(Mod);
MelonLoggerExtension.Log("Added Mod.");
}
private void WaitAfterInit()
{
LoadDelay.Start(6.0, false, (Action)delegate
{
OnSaveOrInit();
});
}
private void OnSaveOrInit()
{
//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
if (Shading.Coroutine != null)
{
MelonCoroutines.Stop(Shading.Coroutine);
}
ApplySettings();
switch (currentscene)
{
case "Gym":
if (!(bool)Mod.Settings.Find((ModSetting x) => x.Name == "Grass").Value & Shading.Continuous)
{
GetObjects(ShrinkArray(ObjectStrings, 0, 5), ObjectStrings[11]);
}
else
{
GetObjects(ShrinkArray(ObjectStrings, 0, 5), ObjectStrings[11], ObjectStrings[6]);
}
break;
case "Park":
GetObjects(ShrinkArray(ObjectStrings, 7, 10), ObjectStrings[11]);
break;
case "Map0":
GetObjects(ShrinkArray(ObjectStrings, 12, 12), ObjectStrings[14]);
break;
case "Map1":
GetObjects(ShrinkArray(ObjectStrings, 13, 13), ObjectStrings[14]);
break;
}
if (Shading.Continuous)
{
Shading.Coroutine = MelonCoroutines.Start(ContinuousShading());
return;
}
Shading.ApplyShadingbyColor(Shading.Static_Color);
ChangeProperties();
}
private IEnumerator ContinuousShading()
{
WaitForFixedUpdate waitForFixedUpdate = new WaitForFixedUpdate();
int FrameCounter = Shading.FrameDelay;
while (true)
{
if (FrameCounter >= Shading.FrameDelay)
{
Shading.ContinuousShading();
ChangeProperties();
FrameCounter = 0;
}
FrameCounter++;
yield return waitForFixedUpdate;
}
}
private void ApplySettings()
{
//IL_00de: Unknown result type (might be due to invalid IL or missing references)
//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
//IL_0146: Unknown result type (might be due to invalid IL or missing references)
//IL_014b: Unknown result type (might be due to invalid IL or missing references)
//IL_018c: Unknown result type (might be due to invalid IL or missing references)
//IL_0191: Unknown result type (might be due to invalid IL or missing references)
//IL_0199: Unknown result type (might be due to invalid IL or missing references)
//IL_019e: Unknown result type (might be due to invalid IL or missing references)
//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
//IL_01b8: Unknown result type (might be due to invalid IL or missing references)
//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
//IL_017e: Unknown result type (might be due to invalid IL or missing references)
//IL_0183: Unknown result type (might be due to invalid IL or missing references)
string text = "";
foreach (ModSetting setting in Mod.Settings)
{
if (setting.LinkGroup == 1 && (bool)setting.Value)
{
text = setting.Name;
break;
}
}
switch (text)
{
case "RGB":
Shading.Continuous = true;
Shading.ContinuousType = text;
Shading.FrameDelay = 10;
break;
case "Cursed":
Shading.Continuous = true;
Shading.ContinuousType = text;
Shading.FrameDelay = 5;
break;
case "Cherry":
Shading.Continuous = false;
Shading.Static_Color = color_cust_cherry;
break;
case "Season":
Shading.Continuous = false;
switch (DateTime.Now.Month)
{
case 1:
case 2:
case 3:
case 12:
Shading.Static_Color = color_wntr_lghblu;
break;
case 4:
if (DateTime.Now.Day == 1)
{
Shading.Static_Color = new Color(1f, 0f, 1f, 1f);
}
break;
case 5:
case 6:
Shading.Static_Color = color_sumr_lshgrn;
break;
case 7:
case 8:
Shading.Static_Color = color_sumr_drkgrn;
break;
case 9:
Shading.Static_Color = color_fall_yellow;
break;
case 10:
Shading.Static_Color = color_fall_orange;
break;
case 11:
Shading.Static_Color = color_fall_drkred;
break;
}
break;
default:
Application.Quit();
break;
}
}
private void GetObjects(string[] Trees, string VFX = "", string Grass = "")
{
Mat_Trees.Clear();
Mat_Grass.Clear();
GO_VFX = null;
VFX_VFX = null;
foreach (string text in Trees)
{
Mat_Trees.Add(((Renderer)GameObject.Find(text).GetComponent<MeshRenderer>()).material);
}
if (debug)
{
MelonLogger.Msg("Mat_Tree get");
}
if (VFX != "")
{
GO_VFX = GameObject.Find(VFX);
VFX_VFX = ((Component)GO_VFX.transform.GetChild(0)).gameObject.GetComponent<VisualEffect>();
Shading.gradient = VFX_VFX.GetGradient(977);
}
if (debug)
{
MelonLogger.Msg("GO_VFX get");
}
if (Grass != "")
{
for (int j = 0; j < GameObject.Find(Grass).transform.GetChildCount(); j++)
{
Mat_Grass.Add(((Renderer)((Component)GameObject.Find(Grass).transform.GetChild(j)).GetComponent<MeshRenderer>()).material);
Mat_Grass.Add(((Renderer)((Component)GameObject.Find(Grass).transform.GetChild(j).GetChild(0)).GetComponent<MeshRenderer>()).material);
}
if (debug)
{
MelonLogger.Msg("Mat_Grass get");
}
}
}
private void ChangeProperties()
{
//IL_0024: 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_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
Enumerator<Material> enumerator = Mat_Trees.GetEnumerator();
while (enumerator.MoveNext())
{
Material current = enumerator.Current;
current.SetColor(1365, Shading.shades[2]);
current.SetColor(1366, Shading.shades[0]);
current.SetColor(1359, Shading.shades[2]);
current.SetColor(1361, Shading.shades[0]);
}
if (debug)
{
MelonLogger.Msg("Applied Shading - Tree");
}
if ((Object)(object)GO_VFX != (Object)null)
{
Shading.keys[0].color = Shading.shades[1];
Shading.keys[1].color = Shading.shades[1];
Shading.gradient.colorKeys = Il2CppStructArray<GradientColorKey>.op_Implicit(Shading.keys);
for (int i = 0; i < GO_VFX.transform.GetChildCount(); i++)
{
VFX_VFX = ((Component)GO_VFX.transform.GetChild(i)).gameObject.GetComponent<VisualEffect>();
VFX_VFX.SetGradient(977, Shading.gradient);
}
if (debug)
{
MelonLogger.Msg("Applied Shading - VFX");
}
}
if (Mat_Grass.Count > 0)
{
Enumerator<Material> enumerator2 = Mat_Grass.GetEnumerator();
while (enumerator2.MoveNext())
{
Material current2 = enumerator2.Current;
current2.SetColor(1340, Shading.shades[1]);
current2.SetColor(1342, Shading.shades[0]);
current2.SetColor(1347, Shading.shades[1]);
current2.SetColor(1349, Shading.shades[0]);
}
}
}
private string[] ShrinkArray(string[] Input, int From, int To)
{
string[] array = new string[To - From + 1];
for (int i = From; i <= To; i++)
{
array[i - From] = Input[i];
}
return array;
}
public override void OnSceneWasUnloaded(int buildIndex, string sceneName)
{
((MelonMod)this).OnSceneWasUnloaded(buildIndex, sceneName);
if (Shading.Coroutine != null)
{
MelonCoroutines.Stop(Shading.Coroutine);
}
}
public override void OnSceneWasLoaded(int buildIndex, string sceneName)
{
((MelonMod)this).OnSceneWasLoaded(buildIndex, sceneName);
currentscene = sceneName;
}
}
internal static class Shading
{
internal static int LoopVar;
internal static bool Continuous;
internal static int FrameDelay;
internal static string ContinuousType;
internal static object Coroutine;
internal static Random Random = new Random();
internal static Color Static_Color = new Color(1f, 1f, 1f, 1f);
internal static Gradient gradient;
internal static GradientColorKey[] keys = (GradientColorKey[])(object)new GradientColorKey[2];
internal static Color[] shades = (Color[])(object)new Color[3];
internal static void ApplyShadingbyColor(Color Base)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0076: 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_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
float num = default(float);
float num2 = default(float);
float num3 = default(float);
Color.RGBToHSV(Base, ref num, ref num2, ref num3);
if (num2 > 0.9f)
{
num2 = 0.9f;
}
if (num2 < 0.1f)
{
num2 = 0.1f;
}
if (num3 > 0.9f)
{
num3 = 0.9f;
}
if (num3 < 0.1f)
{
num3 = 0.1f;
}
shades[0] = Color.HSVToRGB(num, num2 - 0.1f, num3 - 0.1f);
shades[1] = Color.HSVToRGB(num, num2, num3);
shades[2] = Color.HSVToRGB(num, num2 + 0.1f, num3 + 0.1f);
}
internal static void ContinuousShading()
{
string continuousType = ContinuousType;
string text = continuousType;
if (!(text == "RGB"))
{
if (text == "Cursed")
{
ApplyShadingbyHue(Random.Next(0, 360));
}
return;
}
if (LoopVar >= 360)
{
LoopVar = 0;
}
ApplyShadingbyHue(LoopVar);
LoopVar++;
}
private static void ApplyShadingbyHue(float Hue)
{
//IL_0018: 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_0039: 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_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
shades[0] = Color.HSVToRGB(Hue / 360f, 1f, 1f);
shades[1] = Color.HSVToRGB(Hue / 360f, 0.66f, 0.66f);
shades[2] = Color.HSVToRGB(Hue / 360f, 0.33f, 0.33f);
}
}