using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using MelonLoader;
using NostalgicRing;
using RUMBLE.Combat.ShiftStones;
using UnhollowerBaseLib;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: MelonInfo(typeof(main), "Ring Swapper", "1.2.2", "UlvakSkillz", null)]
[assembly: MelonGame("Buckethead Entertainment", "RUMBLE")]
[assembly: AssemblyTitle("RingSwapper")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("RingSwapper")]
[assembly: AssemblyCopyright("Copyright © 2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("2fa22153-4207-4920-b248-5fd3db5f3f12")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace NostalgicRing;
public class main : MelonMod
{
private string settingsFile = "UserData\\RingSwapper\\Settings.txt";
private string currentScene = "";
private bool sceneChanged = false;
private int[] ringTypes = new int[3];
private int ringType = 0;
private bool gymInitRan = false;
private GameObject materialsGameObject;
private Material[] materials;
private Random random = new Random();
public override void OnSceneWasLoaded(int buildIndex, string sceneName)
{
currentScene = sceneName;
sceneChanged = true;
if (File.Exists(settingsFile))
{
try
{
string[] array = File.ReadAllLines(settingsFile);
ringTypes[0] = int.Parse(array[0]);
ringTypes[1] = int.Parse(array[1]);
ringTypes[2] = int.Parse(array[2]);
if (array[3].ToString().ToLower() == "true")
{
ringTypes[0] = random.Next(0, 15);
ringTypes[1] = random.Next(0, 15);
ringTypes[2] = random.Next(0, 15);
}
if (ringType < 0 || 15 < ringType)
{
ringType = 0;
}
return;
}
catch (Exception arg)
{
MelonLogger.Error($"Error Reading {settingsFile}: {arg}");
return;
}
}
MelonLogger.Error("File not Found: " + settingsFile);
}
public override void OnFixedUpdate()
{
//IL_016f: Unknown result type (might be due to invalid IL or missing references)
//IL_0175: Expected O, but got Unknown
//IL_01df: Unknown result type (might be due to invalid IL or missing references)
//IL_01e5: Expected O, but got Unknown
//IL_024f: Unknown result type (might be due to invalid IL or missing references)
//IL_0255: Expected O, but got Unknown
//IL_02c1: Unknown result type (might be due to invalid IL or missing references)
//IL_02c7: Expected O, but got Unknown
//IL_0333: Unknown result type (might be due to invalid IL or missing references)
//IL_0339: Expected O, but got Unknown
//IL_03c1: Unknown result type (might be due to invalid IL or missing references)
//IL_03c7: Expected O, but got Unknown
//IL_0358: Unknown result type (might be due to invalid IL or missing references)
//IL_035e: Expected O, but got Unknown
//IL_03cb: Unknown result type (might be due to invalid IL or missing references)
//IL_03d5: Expected O, but got Unknown
//IL_019a: Unknown result type (might be due to invalid IL or missing references)
//IL_01a0: Expected O, but got Unknown
//IL_020a: Unknown result type (might be due to invalid IL or missing references)
//IL_0210: Expected O, but got Unknown
//IL_027b: Unknown result type (might be due to invalid IL or missing references)
//IL_0281: Expected O, but got Unknown
//IL_02ed: Unknown result type (might be due to invalid IL or missing references)
//IL_02f3: Expected O, but got Unknown
//IL_037b: Unknown result type (might be due to invalid IL or missing references)
//IL_0381: Expected O, but got Unknown
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Expected O, but got Unknown
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: Expected O, but got Unknown
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Expected O, but got Unknown
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_00ca: Expected O, but got Unknown
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
//IL_00eb: Expected O, but got Unknown
//IL_0106: Unknown result type (might be due to invalid IL or missing references)
//IL_010c: Expected O, but got Unknown
//IL_012d: Unknown result type (might be due to invalid IL or missing references)
//IL_0133: Expected O, but got Unknown
if (!sceneChanged)
{
return;
}
try
{
if (currentScene == "Gym")
{
if (!gymInitRan)
{
materials = (Material[])(object)new Material[13];
materials[0] = new Material(((Renderer)GameObject.Find("Player Controller(Clone)/Visuals/Suit").GetComponent<SkinnedMeshRenderer>()).material);
materials[1] = new Material(((Renderer)GameObject.Find("--------------SCENE--------------/Gym_Production/Sub static group(buildings)/Rumble_station/Root").GetComponent<MeshRenderer>()).material);
materials[2] = new Material(((Renderer)GameObject.Find("--------------SCENE--------------/Gym_Production/Main static group/Spawn_area/SpawnRingFloor").GetComponent<MeshRenderer>()).material);
materials[3] = new Material(((Renderer)GameObject.Find("--------------SCENE--------------/Gym_Production/Main static group/Foliage/Root_leaves").GetComponent<MeshRenderer>()).material);
materials[4] = new Material(((Renderer)GameObject.Find("--------------SCENE--------------/Gym_Production/Main static group/FloorMeshParent/Floormesh").GetComponent<MeshRenderer>()).material);
materials[5] = new Material(((Renderer)GameObject.Find("--------------SCENE--------------/Gym_Production/Sub static group(buildings)/Rumble_station/Wood/Bench/Woodset_large__1__1").GetComponent<MeshRenderer>()).material);
try
{
materials[6] = new Material(((ShiftStone)GameObject.Find("Game Instance/Pre-Initializable/PoolManager/Pool: ChargeStone (RUMBLE.Combat.ShiftStones.ChargeStone)/ChargeStone").GetComponent<ChargeStone>()).gemRenderer.material);
}
catch
{
PlayerShiftStoneSystem component = GameObject.Find("Player Controller(Clone)/Shiftstones").GetComponent<PlayerShiftStoneSystem>();
materials[6] = new Material(((Il2CppArrayBase<ShiftStone>)(object)component.GetEquippedShiftstones())[component.GetSocketIndex("Charge Stone")].gemRenderer.material);
}
try
{
materials[7] = new Material(((ShiftStone)GameObject.Find("Game Instance/Pre-Initializable/PoolManager/Pool: AdamantStone (RUMBLE.Combat.ShiftStones.UnyieldingStone)/AdamantStone").GetComponent<UnyieldingStone>()).gemRenderer.material);
}
catch
{
PlayerShiftStoneSystem component2 = GameObject.Find("Player Controller(Clone)/Shiftstones").GetComponent<PlayerShiftStoneSystem>();
materials[7] = new Material(((Il2CppArrayBase<ShiftStone>)(object)component2.GetEquippedShiftstones())[component2.GetSocketIndex("Adamant Stone")].gemRenderer.material);
}
try
{
materials[8] = new Material(((ShiftStone)GameObject.Find("Game Instance/Pre-Initializable/PoolManager/Pool: GuardStone (RUMBLE.Combat.ShiftStones.GuardStone)/GuardStone").GetComponent<GuardStone>()).gemRenderer.material);
}
catch
{
PlayerShiftStoneSystem component3 = GameObject.Find("Player Controller(Clone)/Shiftstones").GetComponent<PlayerShiftStoneSystem>();
materials[8] = new Material(((Il2CppArrayBase<ShiftStone>)(object)component3.GetEquippedShiftstones())[component3.GetSocketIndex("Guard Stone")].gemRenderer.material);
}
try
{
materials[9] = new Material(((ShiftStone)GameObject.Find("Game Instance/Pre-Initializable/PoolManager/Pool: VolatileStone (RUMBLE.Combat.ShiftStones.VolatileStone)/VolatileStone").GetComponent<VolatileStone>()).gemRenderer.material);
}
catch
{
PlayerShiftStoneSystem component4 = GameObject.Find("Player Controller(Clone)/Shiftstones").GetComponent<PlayerShiftStoneSystem>();
materials[9] = new Material(((Il2CppArrayBase<ShiftStone>)(object)component4.GetEquippedShiftstones())[component4.GetSocketIndex("Volatile Stone")].gemRenderer.material);
}
try
{
materials[10] = new Material(((ShiftStone)GameObject.Find("Game Instance/Pre-Initializable/PoolManager/Pool: SurgeStone (RUMBLE.Combat.ShiftStones.CounterStone)/SurgeStone").GetComponent<CounterStone>()).gemRenderer.material);
}
catch
{
PlayerShiftStoneSystem component5 = GameObject.Find("Player Controller(Clone)/Shiftstones").GetComponent<PlayerShiftStoneSystem>();
materials[10] = new Material(((Il2CppArrayBase<ShiftStone>)(object)component5.GetEquippedShiftstones())[component5.GetSocketIndex("Surge Stone")].gemRenderer.material);
}
materials[11] = new Material(((Renderer)GameObject.Find("Game Instance/Pre-Initializable/PoolManager/Pool: LargeRock (RUMBLE.MoveSystem.Structure)/LargeRock").GetComponent<MeshRenderer>()).material);
try
{
materials[12] = new Material(((Renderer)GameObject.Find("--------------LOGIC--------------/Heinhouser products/ShiftstoneCabinet/Cabinet/ShiftstoneBox/FlowStone/Gem10 (1)").GetComponent<MeshRenderer>()).material);
}
catch
{
PlayerShiftStoneSystem component6 = GameObject.Find("Player Controller(Clone)/Shiftstones").GetComponent<PlayerShiftStoneSystem>();
materials[11] = new Material(((Il2CppArrayBase<ShiftStone>)(object)component6.GetEquippedShiftstones())[component6.GetSocketIndex("Flow Stone")].gemRenderer.material);
}
materialsGameObject = new GameObject();
materialsGameObject.AddComponent<MeshRenderer>();
((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials = Il2CppReferenceArray<Material>.op_Implicit(materials);
Object.DontDestroyOnLoad((Object)(object)materialsGameObject);
gymInitRan = true;
MelonLogger.Msg("Initialized");
}
}
else if (currentScene == "Map0")
{
SwitchRingType(GameObject.Find("Map0_production/Main static group/Ring_boarder"));
}
else if (currentScene == "Map1")
{
SwitchRingType(GameObject.Find("Map1_production/Main static group/RingClamp"));
}
else if (currentScene == "Park")
{
SwitchRingType(GameObject.Find("________________SCENE_________________/Park/Main static group/Arenas/Gymarena/Arena"));
}
sceneChanged = false;
}
catch
{
}
}
private void SwitchRingType(GameObject objectToModify)
{
try
{
switch (currentScene)
{
case "Park":
ringType = ringTypes[0];
break;
case "Map0":
ringType = ringTypes[1];
break;
case "Map1":
ringType = ringTypes[2];
break;
}
switch (ringType)
{
case 1:
ReskinRing(objectToModify.GetComponent<MeshRenderer>(), ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[1].shader, ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[1].shader);
break;
case 2:
CopyReskinRing(objectToModify.GetComponent<MeshRenderer>(), ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[1], ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[1]);
break;
case 3:
ReskinRing(objectToModify.GetComponent<MeshRenderer>(), ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[0].shader, ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[0].shader);
break;
case 4:
ReskinRing(objectToModify.GetComponent<MeshRenderer>(), ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[2].shader, ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[0].shader);
break;
case 5:
ReskinRing(objectToModify.GetComponent<MeshRenderer>(), ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[1], ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[1]);
break;
case 6:
ReskinRing(objectToModify.GetComponent<MeshRenderer>(), ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[4], ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[3]);
break;
case 7:
ReskinRing(objectToModify.GetComponent<MeshRenderer>(), ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[5], ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[5]);
break;
case 8:
ReskinRing(objectToModify.GetComponent<MeshRenderer>(), ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[2].shader, ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[6]);
break;
case 9:
ReskinRing(objectToModify.GetComponent<MeshRenderer>(), ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[6], ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[2].shader);
break;
case 10:
ReskinRing(objectToModify.GetComponent<MeshRenderer>(), ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[7], ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[0].shader);
break;
case 11:
ReskinRing(objectToModify.GetComponent<MeshRenderer>(), ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[8], ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[6]);
break;
case 12:
ReskinRing(objectToModify.GetComponent<MeshRenderer>(), ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[9], ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[10]);
break;
case 13:
ReskinRing(objectToModify.GetComponent<MeshRenderer>(), ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[11], ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[11]);
break;
case 14:
ReskinRing(objectToModify.GetComponent<MeshRenderer>(), ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[12], ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[8]);
break;
case 15:
ReskinRing(objectToModify.GetComponent<MeshRenderer>(), ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[9], ((Il2CppArrayBase<Material>)(object)((Renderer)materialsGameObject.GetComponent<MeshRenderer>()).materials)[12]);
break;
}
}
catch (Exception ex)
{
MelonLogger.Error((object)ex);
}
}
private void CopyReskinRing(MeshRenderer meshRendererToBeReskinned, Material mat1, Material mat2)
{
if (currentScene == "Map0")
{
((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[0].CopyPropertiesFromMaterial(mat1);
((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[1].CopyPropertiesFromMaterial(mat2);
}
else if (currentScene == "Map1")
{
((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[0].CopyPropertiesFromMaterial(mat2);
((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[1].CopyPropertiesFromMaterial(mat1);
}
else if (currentScene == "Park")
{
((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[1].CopyPropertiesFromMaterial(mat1);
((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[2].CopyPropertiesFromMaterial(mat2);
}
}
private void ReskinRing(MeshRenderer meshRendererToBeReskinned, Shader shader, Material material)
{
if (currentScene == "Map0")
{
((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[0].shader = shader;
((Renderer)meshRendererToBeReskinned).materials = Il2CppReferenceArray<Material>.op_Implicit((Material[])(object)new Material[2]
{
((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[0],
material
});
}
else if (currentScene == "Map1")
{
((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[0].shader = shader;
Material[] array = (Material[])(object)new Material[2];
array[1] = ((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[0];
array[0] = material;
((Renderer)meshRendererToBeReskinned).materials = Il2CppReferenceArray<Material>.op_Implicit(array);
}
else if (currentScene == "Park")
{
((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[1].shader = shader;
((Renderer)meshRendererToBeReskinned).materials = Il2CppReferenceArray<Material>.op_Implicit((Material[])(object)new Material[3]
{
((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[0],
((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[1],
material
});
}
}
private void ReskinRing(MeshRenderer meshRendererToBeReskinned, Material material, Shader shader)
{
if (currentScene == "Map0")
{
Material[] array = (Material[])(object)new Material[2]
{
material,
((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[1]
};
array[1].shader = shader;
((Renderer)meshRendererToBeReskinned).materials = Il2CppReferenceArray<Material>.op_Implicit(array);
}
else if (currentScene == "Map1")
{
Material[] array2 = (Material[])(object)new Material[2];
array2[1] = material;
array2[0] = ((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[1];
array2[0].shader = shader;
((Renderer)meshRendererToBeReskinned).materials = Il2CppReferenceArray<Material>.op_Implicit(array2);
}
else if (currentScene == "Park")
{
Material[] array3 = (Material[])(object)new Material[3]
{
((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[0],
material,
((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[2]
};
array3[2].shader = shader;
((Renderer)meshRendererToBeReskinned).materials = Il2CppReferenceArray<Material>.op_Implicit(array3);
}
}
private void ReskinRing(MeshRenderer meshRendererToBeReskinned, Shader shader1, Shader shader2)
{
if (currentScene == "Map0")
{
((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[0].shader = shader1;
((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[1].shader = shader2;
}
else if (currentScene == "Map1")
{
((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[1].shader = shader1;
((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[0].shader = shader2;
}
else if (currentScene == "Park")
{
((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[1].shader = shader1;
((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[2].shader = shader2;
}
}
private void ReskinRing(MeshRenderer meshRendererToBeReskinned, Material mat1, Material mat2)
{
if (currentScene == "Map0")
{
((Renderer)meshRendererToBeReskinned).materials = Il2CppReferenceArray<Material>.op_Implicit((Material[])(object)new Material[2] { mat1, mat2 });
}
else if (currentScene == "Map1")
{
Material[] array = (Material[])(object)new Material[2];
array[1] = mat1;
array[0] = mat2;
((Renderer)meshRendererToBeReskinned).materials = Il2CppReferenceArray<Material>.op_Implicit(array);
}
else if (currentScene == "Park")
{
((Renderer)meshRendererToBeReskinned).materials = Il2CppReferenceArray<Material>.op_Implicit((Material[])(object)new Material[3]
{
((Il2CppArrayBase<Material>)(object)((Renderer)meshRendererToBeReskinned).materials)[0],
mat1,
mat2
});
}
}
}