RUMBLE does not support other mod managers. If you want to use a manager, you must use the RUMBLE Mod Manager, a manager specifically designed for this game.
Decompiled source of CustomHoward v1.1.0
Mods/CustomHoward.dll
Decompiled a year agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using CustomHoward; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Il2CppRUMBLE.Environment.Howard; using Il2CppRUMBLE.Interactions.InteractionBase; using Il2CppRUMBLE.MoveSystem; using Il2CppSystem; using Il2CppSystem.Collections.Generic; using Il2CppTMPro; using MelonLoader; using MelonLoader.Utils; using RumbleModUI; using UnityEngine; using UnityEngine.Events; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: MelonInfo(typeof(CustomHowardClass), "CustomHoward", "1.1.0", "Baumritter", null)] [assembly: MelonGame("Buckethead Entertainment", "RUMBLE")] [assembly: VerifyLoaderVersion(0, 6, 4, true)] [assembly: MelonColor(200, 0, 200, 0)] [assembly: MelonAuthorColor(200, 0, 200, 0)] [assembly: AssemblyTitle("CustomHoward")] [assembly: AssemblyDescription("Makes Howard do scary things")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("CustomHoward")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("119ab8f3-317c-4577-b08c-ba93dd1bbd2c")] [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 CustomHoward; internal class General { internal class Delay { private readonly bool debug = false; private DateTime debugTime; private object CRObj; public string name; private bool Running = false; public bool Done = false; private DateTime StartTime; private double Wait; public void Delay_Start(double WaitTime, bool AllowRetrigger = false) { if (!Running || AllowRetrigger) { if (Running) { MelonCoroutines.Stop(CRObj); } Done = false; Wait = WaitTime; StartTime = DateTime.Now; debugTime = DateTime.Now; CRObj = MelonCoroutines.Start(WaitLoop()); if (debug) { MelonLogger.Msg(name + " - Started"); } } } public void Delay_Stop(bool Done = false) { if (Done) { this.Done = true; } if (Running) { MelonCoroutines.Stop(CRObj); } Running = false; if (debug && Done) { MelonLogger.Msg(name + " - Done"); } if (debug && !Done) { MelonLogger.Msg(name + " - Stopped"); } TimeSpan timeSpan = DateTime.Now - debugTime; if (debug && Done) { MelonLogger.Msg(name + " - " + timeSpan.TotalMilliseconds); } } private IEnumerator WaitLoop() { WaitForFixedUpdate waitForFixedUpdate = new WaitForFixedUpdate(); Running = true; while (true) { if (DateTime.Now >= StartTime.AddSeconds(Wait)) { Delay_Stop(Done: true); yield return null; } yield return waitForFixedUpdate; } } } internal class Folders { private readonly bool debug = false; private string UserData = "UserData"; private string ModFolder; private List<string> SubFolders = new List<string>(); public void SetModFolderCustom(string ModName) { ModFolder = ModName; if (debug) { MelonLogger.Msg("Set ModFolder to " + ModFolder); } } public void SetModFolderNamespace() { ModFolder = GetType().Namespace; if (debug) { MelonLogger.Msg("Set ModFolder to " + ModFolder); } } public void AddSubFolder(string FolderName) { SubFolders.Add(FolderName); if (debug) { MelonLogger.Msg("Added Subfolder " + FolderName); } } public void RemoveSubFolder(string FolderName) { SubFolders.Remove(FolderName); if (debug) { MelonLogger.Msg("Removed Subfolder " + FolderName); } } public void CheckAllFoldersExist() { CreateFolderIfNotExisting(GetFolderString()); if (SubFolders.Count <= 0) { return; } foreach (string subFolder in SubFolders) { CreateFolderIfNotExisting(GetFolderString(subFolder)); } } public void RemoveOtherFolders() { if (debug) { MelonLogger.Msg("Folder Removal: Start"); } string[] directories = Directory.GetDirectories(GetFolderString("", IgnoreList: true)); string[] array = directories; foreach (string text in array) { if (debug) { MelonLogger.Msg(text); } string text2 = text.Split(new char[1] { '\\' })[^1]; if (CheckIfFolderInList(text2)) { Directory.Delete(GetFolderString(text2, IgnoreList: true), recursive: true); if (debug) { MelonLogger.Msg("Deleted: " + GetFolderString(text2, IgnoreList: true)); } } } if (debug) { MelonLogger.Msg("Folder Removal: End"); } } private string GetFolderString(string SubFolder = "", bool IgnoreList = false) { string text = UserData + "\\" + ModFolder; if (SubFolder != "" && (SubFolders.Contains(SubFolder) || IgnoreList)) { text = ((!IgnoreList) ? (text + "\\" + SubFolders.FirstOrDefault((string x) => x.Contains(SubFolder))) : (text + "\\" + SubFolder)); if (debug) { MelonLogger.Msg("Generated Path: " + text); } } else if (debug) { MelonLogger.Msg("Generated Path with no SubFolder: " + text); } return text; } private void CreateFolderIfNotExisting(string Path) { if (debug && !Directory.Exists(Path)) { MelonLogger.Msg("Path doesn't exist: " + Path); } else if (debug && Directory.Exists(Path)) { MelonLogger.Msg("Path does exist: " + Path); } if (!Directory.Exists(Path)) { Directory.CreateDirectory(Path); } } private bool CheckIfFolderInList(string FolderName) { bool flag = false; string folderString = GetFolderString(FolderName, IgnoreList: true); if (!SubFolders.Contains(FolderName) && Directory.Exists(folderString)) { flag = true; } if (debug && flag) { MelonLogger.Msg("Folder not in List " + folderString); } else if (debug && !flag) { MelonLogger.Msg("Folder in List " + folderString); } return flag; } } internal class Button { private GameObject ButtonTemplate; public List<GameObject> Buttons = new List<GameObject>(); public void GetTemplateButton() { if ((Object)(object)ButtonTemplate == (Object)null) { GameObject val = GameObject.Find("------------TUTORIAL------------/Static tutorials/RUMBLE Starter Guide/Next Page Button/InteractionButton"); ButtonTemplate = Object.Instantiate<GameObject>(val); ((UnityEventBase)((Component)ButtonTemplate.transform.GetChild(0)).GetComponent<InteractionButton>().OnPressed).m_PersistentCalls.Clear(); ((Object)ButtonTemplate).name = "ButtonTemplate"; ButtonTemplate.SetActive(false); Object.DontDestroyOnLoad((Object)(object)ButtonTemplate); } } public void AddButton(string name) { GameObject val = Object.Instantiate<GameObject>(ButtonTemplate); ((Object)val).name = name; Buttons.Add(val); } public void RemoveButton(string name) { Enumerator<GameObject> enumerator = Buttons.GetEnumerator(); while (enumerator.MoveNext()) { GameObject current = enumerator.Current; if (((Object)current).name == name) { GameObject val = current; Buttons.Remove(val); break; } } } public UnityEvent OnPressed(string name = "", int index = -1) { if (name != "") { int num = SearchButtonList(name); if (num != -1) { return ((Component)Buttons[num].transform.GetChild(0)).GetComponent<InteractionButton>().OnPressed; } return ((Component)Buttons[0].transform.GetChild(0)).GetComponent<InteractionButton>().OnPressed; } if (index != -1) { return ((Component)Buttons[index].transform.GetChild(0)).GetComponent<InteractionButton>().OnPressed; } return ((Component)Buttons[0].transform.GetChild(0)).GetComponent<InteractionButton>().OnPressed; } private int SearchButtonList(string name) { for (int i = 0; i < Buttons.Count; i++) { if (((Object)Buttons[i]).name == name) { return i; } } return -1; } } internal class StringExtension { public static string SanitizeName(string Input) { bool flag = false; char[] array = Input.ToCharArray(); string text = ""; if (Input.Contains("<u>")) { Input.Replace("<u>", ""); } if (Input.Contains(",")) { Input.Replace(",", ""); } for (int i = 0; i < Input.Length; i++) { if (array[i] == '<' && i != Input.Length && (array[i + 1] == '#' || array[i + 1] == 'c')) { flag = true; } if (!flag) { text += array[i]; } if (array[i] == '>') { flag = false; } } return text; } } } public static class BuildInfo { public const string ModName = "CustomHoward"; public const string ModVersion = "1.1.0"; public const string Description = "Makes Howard do scary things"; public const string Author = "Baumritter"; public const string Company = ""; } public class LogicData : MonoBehaviour { public string LogicName { get; set; } public float MaxHP { get; set; } public float DecisionMin { get; set; } public float DecisionMax { get; set; } public float ReactionTime { get; set; } public Color HeadLight { get; set; } public Color IdleColor { get; set; } public Color ActiveColor { get; set; } public float Chance_DoSeq { get; set; } public float Chance_Dodge { get; set; } public float Chance_Nothing { get; set; } } public class SeqGenData : MonoBehaviour { public string SeqName { get; set; } public string AtkName { get; set; } public float Weight { get; set; } public float WeightDec { get; set; } public float PreWait { get; set; } public float PostWait { get; set; } public float RangeMin { get; set; } public float RangeMax { get; set; } } public class PoseGenData : MonoBehaviour { public int StackNumber { get; set; } public float PreWait { get; set; } public float PostWait { get; set; } public string AnimationName { get; set; } } public class CustomHowardClass : MelonMod { private const double SceneDelay = 8.0; private const string MoveFolder = "CustomMoveSet"; private const int Stack_Parry = 3; private const int Stack_Cube = 5; private const int Stack_Uppercut = 7; private const int Stack_Wall = 8; private const int Stack_Kick = 10; private const int Stack_Ball = 11; private const int Stack_Stomp = 12; private const int Stack_Pillar = 13; private const int Stack_Straight = 14; private const string Anim_Straight = "Straight"; private const string Anim_Kick = "Kick"; private const string Anim_Spawn = "SpawnStructure"; private readonly bool debug = false; private readonly bool debug2 = false; private readonly bool debug3 = false; private bool LogicLoaded = false; private int currentlogicindex = 0; private string currentscene; private string MoveSetPath; private string CurrentLogicName; private DateTime ButtonDelay = DateTime.Now; private int LogicMaxPage; private int LogicCurPage = 0; private int LogicLoopMax; private bool LogicLoopRun = false; private GameObject Howard_Obj; private HowardLogic[] Base_Logic_Array = (HowardLogic[])(object)new HowardLogic[3]; private List<Stack> StackList; private GameObject LogicText_Obj; private GameObject Lamp_Obj; private List<string> LogicNames = new List<string>(); private General.Folders Folders = new General.Folders(); private Mod Mod = new Mod(); private UI UI = UI.instance; private ModSetting<bool> Reload; private General.Delay Delay = new General.Delay(); private General.Delay Haptics = new General.Delay(); private General.Delay PageScroll = new General.Delay(); public override void OnLateInitializeMelon() { ((MelonBase)this).OnLateInitializeMelon(); Folders.SetModFolderCustom("CustomHoward"); Folders.AddSubFolder("CustomMoveSet"); Folders.CheckAllFoldersExist(); UI.UI_Initialized += OnUIInit; MoveSetPath = MelonEnvironment.UserDataDirectory + "\\CustomHoward\\CustomMoveSet\\"; } public override void OnUpdate() { //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Unknown result type (might be due to invalid IL or missing references) //IL_0264: Unknown result type (might be due to invalid IL or missing references) //IL_0269: Unknown result type (might be due to invalid IL or missing references) //IL_02bd: Unknown result type (might be due to invalid IL or missing references) //IL_0294: Unknown result type (might be due to invalid IL or missing references) ((MelonBase)this).OnUpdate(); if (!(currentscene == "Gym") || !Delay.Done) { return; } if ((Object)(object)Howard_Obj == (Object)null) { Howard_Obj = GameObject.Find("--------------LOGIC--------------/Heinhouser products/Howard root"); if (debug) { MelonLogger.Msg("Got Howard Object"); } Howard_Obj.GetComponent<Howard>().howardAnimator.changeLevelAnimationWaitTime = 0.5f; if (debug) { MelonLogger.Msg("Changed Animation Speed"); } Base_Logic_Array = Il2CppArrayBase<HowardLogic>.op_Implicit((Il2CppArrayBase<HowardLogic>)(object)Howard_Obj.GetComponent<Howard>().LogicLevels); if (debug) { MelonLogger.Msg("Got Base Logic Objects"); } StackList = GameObject.Find("Player Controller(Clone)").GetComponent<PlayerStackProcessor>().availableStacks; if (debug) { MelonLogger.Msg("Available Stacks:"); } Enumerator<Stack> enumerator = StackList.GetEnumerator(); while (enumerator.MoveNext()) { Stack current = enumerator.Current; if (debug) { MelonLogger.Msg(((Object)current).name); } } GetFromFile(); if (debug) { MelonLogger.Msg("GotFromFile"); } ModifyHowardConsole(); LogicText_Obj = GameObject.Find("--------------LOGIC--------------/Heinhouser products/Howard root/Howards console/Base Plate Custom/Upper Canvas/LogicText"); Lamp_Obj = GameObject.Find("--------------LOGIC--------------/Heinhouser products/Howard root/Howards console/Base Plate Custom/Status Lamp"); } else { if ((bool)((ModSetting)Reload).Value && ButtonDelay <= DateTime.Now) { ButtonHandler(2); ((ModSetting)Reload).Value = false; Haptics.Delay_Start(0.5); } if (Haptics.Done) { UI.ForceRefresh(); Haptics.Done = false; } if (LogicLoaded && UI.IsUIVisible() && UI.IsModSelected("CustomHoward") && UI.IsOptionSelected("Description") && PageScroll.Done) { PageScrollLogic(); } if (ButtonDelay <= DateTime.Now) { ((Renderer)((Component)Lamp_Obj.transform).GetComponent<MeshRenderer>()).material.SetColor("_EmissionColor", Color.green); } else { ((Renderer)((Component)Lamp_Obj.transform).GetComponent<MeshRenderer>()).material.SetColor("_EmissionColor", Color.red); } } } private void OnUIInit() { //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Expected O, but got Unknown //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Expected O, but got Unknown Mod.ModName = "CustomHoward"; Mod.ModVersion = "1.1.0"; Mod.SetFolder("CustomHoward"); Mod.AddDescription("Description", "", "Makes Howard do scary things", new Tags()); Reload = Mod.AddToList("Reload all Movesets", false, 0, "Reloads all Moveset Files", new Tags()); Mod.GetFromFile(); UI.AddMod(Mod); MelonLogger.Msg("Added Mod."); } private SequenceSet CreatePoseSequence(List<PoseGenData> PGD, SeqGenData SGD) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Expected O, but got Unknown //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Expected O, but got Unknown //IL_0034: 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_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Expected O, but got Unknown //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Expected O, but got Unknown //IL_0218: Unknown result type (might be due to invalid IL or missing references) SequenceSet val = new SequenceSet(); HowardSequence val2 = new HowardSequence(); HowardBehaviourTiming[] array = (HowardBehaviourTiming[])(object)new HowardBehaviourTiming[1]; HowardAttackBehaviour val3 = new HowardAttackBehaviour(); TimedStack[] array2 = (TimedStack[])(object)new TimedStack[PGD.Count]; for (int i = 0; i < array2.Length; i++) { array2[i] = new TimedStack { PreWaitTime = PGD[i].PreWait, PostWaitTime = PGD[i].PostWait, AnimationTriggerName = PGD[i].AnimationName }; Enumerator<Stack> enumerator = StackList.GetEnumerator(); while (enumerator.MoveNext()) { Stack current = enumerator.Current; if (((Object)current).name == MatchStack(PGD[i].StackNumber)) { array2[i].Stack = current; break; } } if (debug3) { MelonLogger.Msg(((Object)array2[i].Stack).name); } if (PGD[i].StackNumber == 14 || PGD[i].StackNumber == 10 || PGD[i].StackNumber == 7 || PGD[i].StackNumber == 3 || PGD[i].StackNumber == 12) { array2[i].IsPersistentStack = true; } else { array2[i].IsPersistentStack = false; } } ((Object)val3).name = SGD.AtkName; val3.timedStacks = Il2CppReferenceArray<TimedStack>.op_Implicit(array2); val3.usePrediction = true; array[0] = new HowardBehaviourTiming { Behaviour = (HowardBehaviour)(object)val3, PreActivationWaitTime = SGD.PreWait, PostActivationWaitTime = SGD.PostWait }; ((Object)val2).name = SGD.SeqName; val2.BehaviourTimings = Il2CppReferenceArray<HowardBehaviourTiming>.op_Implicit(array); val.Sequence = val2; val.Weight = SGD.Weight; val.WeightDecrementationWhenSelected = SGD.WeightDec; val.RequiredMinMaxRange = new Vector2(SGD.RangeMin, SGD.RangeMax); return val; } private string MatchStack(int StackNumber) { return StackNumber switch { 3 => "Parry", 5 => "SpawnCube", 7 => "Uppercut", 8 => "SpawnWall", 10 => "Kick", 11 => "SpawnBall", 12 => "Stomp", 13 => "SpawnPillar", 14 => "Straight", 15 => "Disc", _ => "Disc", }; } public void ModifyHowardConsole() { //IL_027d: Unknown result type (might be due to invalid IL or missing references) //IL_02c4: Unknown result type (might be due to invalid IL or missing references) //IL_02d3: Unknown result type (might be due to invalid IL or missing references) //IL_02e2: Unknown result type (might be due to invalid IL or missing references) //IL_0332: Unknown result type (might be due to invalid IL or missing references) //IL_0341: Unknown result type (might be due to invalid IL or missing references) //IL_0350: Unknown result type (might be due to invalid IL or missing references) //IL_0391: Unknown result type (might be due to invalid IL or missing references) //IL_03a0: Unknown result type (might be due to invalid IL or missing references) //IL_0418: Unknown result type (might be due to invalid IL or missing references) //IL_0519: Unknown result type (might be due to invalid IL or missing references) //IL_0528: Unknown result type (might be due to invalid IL or missing references) //IL_0537: Unknown result type (might be due to invalid IL or missing references) //IL_0570: Unknown result type (might be due to invalid IL or missing references) //IL_057f: Unknown result type (might be due to invalid IL or missing references) //IL_058e: Unknown result type (might be due to invalid IL or missing references) //IL_05d9: Unknown result type (might be due to invalid IL or missing references) //IL_05ea: Unknown result type (might be due to invalid IL or missing references) //IL_05fb: Unknown result type (might be due to invalid IL or missing references) //IL_0635: Unknown result type (might be due to invalid IL or missing references) //IL_0683: Unknown result type (might be due to invalid IL or missing references) //IL_0694: Unknown result type (might be due to invalid IL or missing references) //IL_06a5: Unknown result type (might be due to invalid IL or missing references) //IL_06df: Unknown result type (might be due to invalid IL or missing references) //IL_0768: Unknown result type (might be due to invalid IL or missing references) //IL_076a: Unknown result type (might be due to invalid IL or missing references) //IL_076f: Unknown result type (might be due to invalid IL or missing references) //IL_0774: Unknown result type (might be due to invalid IL or missing references) //IL_078d: Unknown result type (might be due to invalid IL or missing references) //IL_07a3: Unknown result type (might be due to invalid IL or missing references) //IL_07e9: Unknown result type (might be due to invalid IL or missing references) //IL_07eb: Unknown result type (might be due to invalid IL or missing references) //IL_07f0: Unknown result type (might be due to invalid IL or missing references) //IL_07f5: Unknown result type (might be due to invalid IL or missing references) //IL_0806: Unknown result type (might be due to invalid IL or missing references) //IL_0814: Unknown result type (might be due to invalid IL or missing references) int num = 3; float num2 = 0.3f; List<GameObject> list = new List<GameObject>(); Vector3 localPosition = default(Vector3); ((Vector3)(ref localPosition))..ctor(-7.57f, 0.1f, -3.51f); Vector3 localPosition2 = default(Vector3); ((Vector3)(ref localPosition2))..ctor(11.39f, 1.275f, 0.07f); Vector3 localEulerAngles = default(Vector3); ((Vector3)(ref localEulerAngles))..ctor(330f, 91f, 0f); Vector3 localScale = default(Vector3); ((Vector3)(ref localScale))..ctor(0.6f, 0.6f, 0.6f); Vector3 localPosition3 = default(Vector3); ((Vector3)(ref localPosition3))..ctor(-0.12f, 0.12f, 0.34f); Vector3 localPosition4 = default(Vector3); ((Vector3)(ref localPosition4))..ctor(0f, 0.04f, 0f); Vector3 localEulerAngles2 = default(Vector3); ((Vector3)(ref localEulerAngles2))..ctor(90f, 0f, 0f); Vector3 localPosition5 = default(Vector3); ((Vector3)(ref localPosition5))..ctor(-0.6f, 0.07f, -0.55f); Vector3 localEulerAngles3 = default(Vector3); ((Vector3)(ref localEulerAngles3))..ctor(0f, 0f, 270f); Vector3 localScale2 = default(Vector3); ((Vector3)(ref localScale2))..ctor(1f, 0.7f, 0.5f); Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(-0.4f, 0.105f, -0.53f); Vector3 val2 = default(Vector3); ((Vector3)(ref val2))..ctor(num2, 0f, 0f); Vector3 localEulerAngles4 = default(Vector3); ((Vector3)(ref localEulerAngles4))..ctor(0f, 180f, 0f); Vector3 localScale3 = default(Vector3); ((Vector3)(ref localScale3))..ctor(1.25f, 1.25f, 1.25f); Vector3 val3 = default(Vector3); ((Vector3)(ref val3))..ctor(-0.4f, -0.73f, -0.07f); Vector3 localEulerAngles5 = default(Vector3); ((Vector3)(ref localEulerAngles5))..ctor(0f, 0f, 0f); Vector3 localPosition6 = default(Vector3); ((Vector3)(ref localPosition6))..ctor(0.5166f, 0.03f, 0.503f); Vector3 localEulerAngles6 = default(Vector3); ((Vector3)(ref localEulerAngles6))..ctor(90f, 0f, 0f); Vector3 localScale4 = default(Vector3); ((Vector3)(ref localScale4))..ctor(1f, 1f, 1f); GameObject gameObject = GameObject.Find("--------------LOGIC--------------/Heinhouser products/Howard root/Howards console").gameObject; GameObject val4 = Object.Instantiate<GameObject>(GameObject.Find("--------------LOGIC--------------/Heinhouser products/MoveLearning/MoveLearnSelector/Model/Move selector")); GameObject val5 = GameObject.Find("--------------LOGIC--------------/Slabbuddy menu variant/MenuForm/Base/ControlsSlab/GameSlabCanvas"); GameObject val6 = GameObject.Find("--------------LOGIC--------------/Heinhouser products/Leaderboard/Text Objects/Titleplate/LeaderboardTitlePlate"); GameObject val7 = GameObject.Find("------------TUTORIAL------------/Static tutorials/RUMBLE Starter Guide/Next Page Button/InteractionButton"); GameObject val8 = Object.Instantiate<GameObject>(val7); ((UnityEventBase)((Component)val8.transform.GetChild(0)).GetComponent<InteractionButton>().OnPressed).m_PersistentCalls.Clear(); if (debug) { MelonLogger.Msg("Got Objects"); } ((Component)gameObject.transform.GetChild(0).GetChild(1)).gameObject.SetActive(false); ((Component)gameObject.transform.GetChild(1).GetChild(4)).gameObject.SetActive(false); gameObject.transform.localPosition = localPosition; if (debug) { MelonLogger.Msg("Did Stuff"); } ((Object)val4).name = "Base Plate Custom"; val4.transform.SetParent(gameObject.transform); val4.transform.localPosition = localPosition2; val4.transform.localEulerAngles = localEulerAngles; val4.transform.localScale = localScale; if (debug) { MelonLogger.Msg("Did Stuff"); } GameObject val9 = Object.Instantiate<GameObject>(val6); ((Object)val9).name = "Lower Plate"; val9.transform.SetParent(val4.transform); val9.transform.localPosition = localPosition5; val9.transform.localEulerAngles = localEulerAngles3; val9.transform.localScale = localScale2; GameObject val10 = Object.Instantiate<GameObject>(GameObject.Find("--------------LOGIC--------------/Heinhouser products/Telephone 2.0 REDUX special edition/Notification Screen/NotificationLight")); ((Object)val10).name = "Status Lamp"; val10.transform.SetParent(val4.transform); val10.transform.localPosition = localPosition6; val10.transform.localEulerAngles = localEulerAngles6; ((Renderer)((Component)val10.transform).GetComponent<MeshRenderer>()).material = ((Renderer)GameObject.Find("--------------LOGIC--------------/Heinhouser products/Howard root/DummyRoot/Howard/Dummy").GetComponent<SkinnedMeshRenderer>()).material; ((Renderer)((Component)val10.transform).GetComponent<MeshRenderer>()).material.EnableKeyword("_EMISSION"); ((Renderer)((Component)val10.transform).GetComponent<MeshRenderer>()).material.globalIlluminationFlags = (MaterialGlobalIlluminationFlags)2; ((Renderer)((Component)val10.transform).GetComponent<MeshRenderer>()).material.SetColor("_EmissionColor", Color.green); GameObject val11 = Object.Instantiate<GameObject>(val5); ((Object)val11).name = "SlabCanvas"; val11.transform.SetParent(val4.transform); if (debug) { MelonLogger.Msg("Did Stuff"); } ((Object)val11.transform.GetChild(0).GetChild(0).GetChild(1)).name = "Text"; ((Component)val11.transform.GetChild(0)).gameObject.SetActive(false); val11.SetActive(false); GameObject gameObject2 = ((Component)val11.transform.GetChild(0).GetChild(0).GetChild(1)).gameObject; if (debug) { MelonLogger.Msg("Did Stuff"); } GameObject val12 = Object.Instantiate<GameObject>(val11); GameObject val13 = Object.Instantiate<GameObject>(val11); val12.SetActive(true); ((Object)val12).name = "Upper Canvas"; val12.transform.SetParent(val4.transform); val12.transform.localPosition = localPosition3; val12.transform.localEulerAngles = localEulerAngles2; val12.transform.localScale = localScale4; val13.SetActive(true); ((Object)val13).name = "Lower Canvas"; val13.transform.SetParent(val4.transform); val13.transform.localPosition = localPosition4; val13.transform.localEulerAngles = localEulerAngles2; val13.transform.localScale = localScale4; if (debug) { MelonLogger.Msg("Did Stuff"); } GameObject val14 = Object.Instantiate<GameObject>(gameObject2); ((Object)val14).name = "LogicText"; val14.transform.SetParent(val12.transform); val14.transform.localPosition = Vector3.zero; val14.transform.localEulerAngles = Vector3.zero; val14.transform.localScale = localScale4; ((TMP_Text)val14.GetComponent<TextMeshProUGUI>()).text = "Level 1"; ((TMP_Text)val14.GetComponent<TextMeshProUGUI>()).fontSize = 0.18f; val14.GetComponent<RectTransform>().sizeDelta = new Vector2(2f, 0.24f); if (debug) { MelonLogger.Msg("Did Stuff"); } val14 = Object.Instantiate<GameObject>(gameObject2); ((Object)val14).name = "LogicText"; val14.transform.SetParent(val13.transform); val14.transform.localPosition = Vector3.zero; val14.transform.localEulerAngles = Vector3.zero; val14.transform.localScale = localScale4; ((TMP_Text)val14.GetComponent<TextMeshProUGUI>()).text = ""; ((TMP_Text)val14.GetComponent<TextMeshProUGUI>()).fontSize = 0.22f; val14.GetComponent<RectTransform>().sizeDelta = new Vector2(2f, 0.24f); if (debug) { MelonLogger.Msg("Did Stuff"); } for (int i = 0; i < num; i++) { list.Add(Object.Instantiate<GameObject>(val8)); ((Object)list[i]).name = "SlabButton" + (i + 1); list[i].transform.SetParent(val4.transform); list[i].transform.localPosition = val + val2 * (float)i; list[i].transform.localEulerAngles = localEulerAngles4; list[i].transform.localScale = localScale3; val14 = Object.Instantiate<GameObject>(gameObject2); val14.transform.SetParent(val13.transform); ((Object)val14).name = "ButtonText" + (i + 1); val14.transform.localPosition = val3 + val2 * (float)i; val14.transform.localEulerAngles = localEulerAngles5; val14.transform.localScale = localScale4; switch (i) { case 0: ((TMP_Text)val14.GetComponent<TextMeshProUGUI>()).text = "Prev"; ((TMP_Text)val14.GetComponent<TextMeshProUGUI>()).fontSize = 0.1f; ((Component)list[i].transform.GetChild(0)).GetComponent<InteractionButton>().OnPressed.AddListener(UnityAction.op_Implicit((Action)delegate { ButtonHandler(0); })); break; case 1: ((TMP_Text)val14.GetComponent<TextMeshProUGUI>()).text = "Next"; ((TMP_Text)val14.GetComponent<TextMeshProUGUI>()).fontSize = 0.1f; ((Component)list[i].transform.GetChild(0)).GetComponent<InteractionButton>().OnPressed.AddListener(UnityAction.op_Implicit((Action)delegate { ButtonHandler(1); })); break; case 2: ((TMP_Text)val14.GetComponent<TextMeshProUGUI>()).text = "Reload"; ((TMP_Text)val14.GetComponent<TextMeshProUGUI>()).fontSize = 0.1f; ((Component)list[i].transform.GetChild(0)).GetComponent<InteractionButton>().OnPressed.AddListener(UnityAction.op_Implicit((Action)delegate { ButtonHandler(2); })); break; } ((TMP_Text)val14.GetComponent<TextMeshProUGUI>()).autoSizeTextContainer = true; } Object.Destroy((Object)(object)val11); Object.Destroy((Object)(object)((Component)val12.transform.GetChild(0)).gameObject); Object.Destroy((Object)(object)((Component)val13.transform.GetChild(0)).gameObject); Object.Destroy((Object)(object)GameObject.Find("InteractionButton(Clone)")); Object.Destroy((Object)(object)GameObject.Find("Title(Clone)")); if (debug) { MelonLogger.Msg("Did Stuff"); } } public void ButtonHandler(int Number) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: 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_004a: 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_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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) //IL_0099: Unknown result type (might be due to invalid IL or missing references) if (ButtonDelay <= DateTime.Now) { DateTime now; switch (Number) { case 0: DecreaseLogicIndex(); now = DateTime.Now; ButtonDelay = ((DateTime)(ref now)).AddSeconds(1.0); break; case 1: IncreaseLogicIndex(); now = DateTime.Now; ButtonDelay = ((DateTime)(ref now)).AddSeconds(1.0); break; case 2: TriggerReload(); now = DateTime.Now; ButtonDelay = ((DateTime)(ref now)).AddSeconds(3.0); break; } if (debug2) { MelonLogger.Msg("Button pressed"); } } } public void DecreaseLogicIndex() { if (currentlogicindex > 0) { currentlogicindex--; Howard_Obj.GetComponent<Howard>().SetCurrentLogicLevel(currentlogicindex); CurrentLogicName = LogicNameSanitization(((Object)((Il2CppArrayBase<HowardLogic>)(object)Howard_Obj.GetComponent<Howard>().LogicLevels)[currentlogicindex]).name); ((TMP_Text)LogicText_Obj.GetComponent<TextMeshProUGUI>()).text = CurrentLogicName; if (debug2) { MelonLogger.Msg("Howard Logic to " + CurrentLogicName); } } } public void IncreaseLogicIndex() { if (currentlogicindex < ((Il2CppArrayBase<HowardLogic>)(object)Howard_Obj.GetComponent<Howard>().LogicLevels).Count - 1) { currentlogicindex++; Howard_Obj.GetComponent<Howard>().SetCurrentLogicLevel(currentlogicindex); CurrentLogicName = LogicNameSanitization(((Object)((Il2CppArrayBase<HowardLogic>)(object)Howard_Obj.GetComponent<Howard>().LogicLevels)[currentlogicindex]).name); ((TMP_Text)LogicText_Obj.GetComponent<TextMeshProUGUI>()).text = CurrentLogicName; if (debug2) { MelonLogger.Msg("Howard Logic to " + CurrentLogicName); } } } public void TriggerReload() { Howard_Obj.GetComponent<Howard>().SetHowardLogicActive(false); Howard_Obj.GetComponent<Howard>().SetCurrentLogicLevel(0); currentlogicindex = 0; CurrentLogicName = LogicNameSanitization(((Object)((Il2CppArrayBase<HowardLogic>)(object)Howard_Obj.GetComponent<Howard>().LogicLevels)[currentlogicindex]).name); ((TMP_Text)LogicText_Obj.GetComponent<TextMeshProUGUI>()).text = CurrentLogicName; GetFromFile(); if (debug2) { MelonLogger.Msg("Refreshed Logic Files"); } } public void GetFromFile() { //IL_0487: Unknown result type (might be due to invalid IL or missing references) //IL_0571: Unknown result type (might be due to invalid IL or missing references) //IL_04a5: Unknown result type (might be due to invalid IL or missing references) //IL_04aa: Unknown result type (might be due to invalid IL or missing references) //IL_065b: Unknown result type (might be due to invalid IL or missing references) //IL_058f: Unknown result type (might be due to invalid IL or missing references) //IL_0594: Unknown result type (might be due to invalid IL or missing references) //IL_0679: Unknown result type (might be due to invalid IL or missing references) //IL_067e: Unknown result type (might be due to invalid IL or missing references) //IL_1244: Unknown result type (might be due to invalid IL or missing references) //IL_1249: Unknown result type (might be due to invalid IL or missing references) //IL_1257: Unknown result type (might be due to invalid IL or missing references) //IL_1265: Unknown result type (might be due to invalid IL or missing references) //IL_1274: Unknown result type (might be due to invalid IL or missing references) //IL_127f: Unknown result type (might be due to invalid IL or missing references) //IL_128d: Unknown result type (might be due to invalid IL or missing references) //IL_1290: Unknown result type (might be due to invalid IL or missing references) //IL_129b: Unknown result type (might be due to invalid IL or missing references) //IL_129e: Unknown result type (might be due to invalid IL or missing references) //IL_12a9: Unknown result type (might be due to invalid IL or missing references) //IL_12ac: Unknown result type (might be due to invalid IL or missing references) //IL_12bc: Expected O, but got Unknown //IL_12f5: Unknown result type (might be due to invalid IL or missing references) //IL_12fa: Unknown result type (might be due to invalid IL or missing references) //IL_1306: Unknown result type (might be due to invalid IL or missing references) //IL_130f: Unknown result type (might be due to invalid IL or missing references) //IL_1318: Unknown result type (might be due to invalid IL or missing references) //IL_1321: Unknown result type (might be due to invalid IL or missing references) //IL_132d: Unknown result type (might be due to invalid IL or missing references) //IL_1339: Unknown result type (might be due to invalid IL or missing references) //IL_1343: Expected O, but got Unknown //IL_1381: Unknown result type (might be due to invalid IL or missing references) //IL_13a3: Unknown result type (might be due to invalid IL or missing references) //IL_13c5: Unknown result type (might be due to invalid IL or missing references) //IL_13f5: Unknown result type (might be due to invalid IL or missing references) //IL_13fa: Unknown result type (might be due to invalid IL or missing references) //IL_1405: Unknown result type (might be due to invalid IL or missing references) //IL_1410: Unknown result type (might be due to invalid IL or missing references) //IL_1419: Unknown result type (might be due to invalid IL or missing references) //IL_1427: Expected O, but got Unknown //IL_144f: Unknown result type (might be due to invalid IL or missing references) //IL_1456: Expected O, but got Unknown //IL_14b0: Unknown result type (might be due to invalid IL or missing references) //IL_14b5: Unknown result type (might be due to invalid IL or missing references) //IL_14c1: Unknown result type (might be due to invalid IL or missing references) //IL_14d2: Expected O, but got Unknown //IL_14ea: Unknown result type (might be due to invalid IL or missing references) //IL_14ef: Unknown result type (might be due to invalid IL or missing references) //IL_14fb: Unknown result type (might be due to invalid IL or missing references) //IL_1504: Unknown result type (might be due to invalid IL or missing references) //IL_150d: Unknown result type (might be due to invalid IL or missing references) //IL_1516: Unknown result type (might be due to invalid IL or missing references) //IL_1522: Unknown result type (might be due to invalid IL or missing references) //IL_152e: Unknown result type (might be due to invalid IL or missing references) //IL_1538: Expected O, but got Unknown bool flag = false; bool flag2 = false; float weight = 0f; float weightDecrementationWhenSelected = 0f; float anglePerSecond = 0f; float minAngle = 0f; float maxAngle = 0f; float anglePerSecond2 = 0f; float minAngle2 = 0f; float maxAngle2 = 0f; CultureInfo provider = new CultureInfo("en-US"); LogicData logicData = new LogicData(); SeqGenData seqGenData = new SeqGenData(); string[] array = new string[2]; string[] array2 = new string[4]; List<HowardLogic> list = new List<HowardLogic>(); List<PoseGenData> list2 = new List<PoseGenData>(); List<SequenceSet> val = new List<SequenceSet>(); LogicNames.Clear(); string[] files = Directory.GetFiles(MoveSetPath); for (int i = 0; i < files.Length; i++) { string[] array3 = File.ReadAllLines(files[i]); if (debug) { MelonLogger.Msg("Filename: " + files[i]); } if (debug) { MelonLogger.Msg("FileLength: " + array3.Length); } for (int j = 0; j < array3.Length; j++) { if (array3[j].Contains("!")) { continue; } if (array3[j].Contains("LogicName: ")) { array.Initialize(); array = array3[j].Split(new char[1] { ':' }); array[1] = array[1].Trim(new char[1] { ' ' }); logicData.LogicName = array[1]; LogicNames.Add(array[1]); if (debug) { MelonLogger.Msg("Name: " + logicData.LogicName); } } if (array3[j].Contains("MaxHP: ")) { array.Initialize(); array = array3[j].Split(new char[1] { ':' }); array[1] = array[1].Trim(new char[1] { ' ' }); logicData.MaxHP = float.Parse(array[1], provider); if (debug) { MelonLogger.Msg("MaxHP: " + logicData.MaxHP); } } if (array3[j].Contains("DecisionMin: ")) { array.Initialize(); array = array3[j].Split(new char[1] { ':' }); array[1] = array[1].Trim(new char[1] { ' ' }); logicData.DecisionMin = float.Parse(array[1], provider); if (debug) { MelonLogger.Msg("DecisionMin: " + logicData.DecisionMin); } } if (array3[j].Contains("DecisionMax: ")) { array.Initialize(); array = array3[j].Split(new char[1] { ':' }); array[1] = array[1].Trim(new char[1] { ' ' }); logicData.DecisionMax = float.Parse(array[1], provider); if (debug) { MelonLogger.Msg("DecisionMax: " + logicData.DecisionMax); } } if (array3[j].Contains("ReactionTime: ")) { array.Initialize(); array = array3[j].Split(new char[1] { ':' }); array[1] = array[1].Trim(new char[1] { ' ' }); logicData.ReactionTime = float.Parse(array[1], provider); if (debug) { MelonLogger.Msg("ReactionTime: " + logicData.ReactionTime); } } Color val2; if (array3[j].Contains("HeadLight: ")) { array.Initialize(); array2.Initialize(); array = array3[j].Split(new char[1] { ':' }); array[1] = array[1].Trim(new char[1] { ' ' }); array2 = array[1].Split(new char[1] { ',' }); logicData.HeadLight = new Color(float.Parse(array2[0]) / 255f, float.Parse(array2[1]) / 255f, float.Parse(array2[2]) / 255f, float.Parse(array2[3]) / 255f); if (debug) { val2 = logicData.HeadLight; MelonLogger.Msg("HeadLight: " + ((object)(Color)(ref val2)).ToString()); } } if (array3[j].Contains("IdleColor: ")) { array.Initialize(); array2.Initialize(); array = array3[j].Split(new char[1] { ':' }); array[1] = array[1].Trim(new char[1] { ' ' }); array2 = array[1].Split(new char[1] { ',' }); logicData.IdleColor = new Color(float.Parse(array2[0]) / 255f, float.Parse(array2[1]) / 255f, float.Parse(array2[2]) / 255f, float.Parse(array2[3]) / 255f); if (debug) { val2 = logicData.IdleColor; MelonLogger.Msg("IdleColor: " + ((object)(Color)(ref val2)).ToString()); } } if (array3[j].Contains("ActiveColor: ")) { array.Initialize(); array2.Initialize(); array = array3[j].Split(new char[1] { ':' }); array[1] = array[1].Trim(new char[1] { ' ' }); array2 = array[1].Split(new char[1] { ',' }); logicData.ActiveColor = new Color(float.Parse(array2[0]) / 255f, float.Parse(array2[1]) / 255f, float.Parse(array2[2]) / 255f, float.Parse(array2[3]) / 255f); if (debug) { val2 = logicData.ActiveColor; MelonLogger.Msg("ActiveColor: " + ((object)(Color)(ref val2)).ToString()); } } if (array3[j].Contains("DoMove: ")) { array.Initialize(); array = array3[j].Split(new char[1] { ':' }); array[1] = array[1].Trim(new char[1] { ' ' }); logicData.Chance_DoSeq = float.Parse(array[1], provider); if (debug) { MelonLogger.Msg("DoMove: " + logicData.Chance_DoSeq); } } if (array3[j].Contains("Dodge: ")) { array.Initialize(); array = array3[j].Split(new char[1] { ':' }); array[1] = array[1].Trim(new char[1] { ' ' }); logicData.Chance_Dodge = float.Parse(array[1], provider); if (debug) { MelonLogger.Msg("Dodge: " + logicData.Chance_Dodge); } } if (array3[j].Contains("DoNothing: ")) { array.Initialize(); array = array3[j].Split(new char[1] { ':' }); array[1] = array[1].Trim(new char[1] { ' ' }); logicData.Chance_Nothing = float.Parse(array[1], provider); if (debug) { MelonLogger.Msg("DoNothing: " + logicData.Chance_Nothing); } } if (array3[j].Contains("Sequence - Init")) { val = new List<SequenceSet>(); } if (array3[j].Contains("Sequence - BaseMovement")) { array = array3[j + 1].Split(new char[1] { ':' }); flag2 = bool.Parse(array[1].Trim(new char[1] { ' ' })); if (debug) { MelonLogger.Msg("Movement Enable: " + flag2); } if (flag2) { array = array3[j + 2].Split(new char[1] { ':' }); weight = float.Parse(array[1].Trim(new char[1] { ' ' }), provider); if (debug) { MelonLogger.Msg("Movement Weight: " + weight); } array = array3[j + 3].Split(new char[1] { ':' }); weightDecrementationWhenSelected = float.Parse(array[1].Trim(new char[1] { ' ' }), provider); if (debug) { MelonLogger.Msg("Movement WeightDec: " + weightDecrementationWhenSelected); } array = array3[j + 4].Split(new char[1] { ':' }); anglePerSecond = float.Parse(array[1].Trim(new char[1] { ' ' }), provider); if (debug) { MelonLogger.Msg("Movement Speed: " + anglePerSecond); } array = array3[j + 5].Split(new char[1] { ':' }); minAngle = float.Parse(array[1].Trim(new char[1] { ' ' }), provider); if (debug) { MelonLogger.Msg("Movement Min Angle: " + minAngle); } array = array3[j + 6].Split(new char[1] { ':' }); maxAngle = float.Parse(array[1].Trim(new char[1] { ' ' }), provider); if (debug) { MelonLogger.Msg("Movement Max Angle: " + maxAngle); } } } if (array3[j].Contains("Sequence - Dodge")) { array = array3[j + 1].Split(new char[1] { ':' }); anglePerSecond2 = float.Parse(array[1].Trim(new char[1] { ' ' }), provider); if (debug) { MelonLogger.Msg("Dodge Speed: " + anglePerSecond2); } array = array3[j + 2].Split(new char[1] { ':' }); minAngle2 = float.Parse(array[1].Trim(new char[1] { ' ' }), provider); if (debug) { MelonLogger.Msg("Dodge Min Angle: " + minAngle2); } array = array3[j + 3].Split(new char[1] { ':' }); maxAngle2 = float.Parse(array[1].Trim(new char[1] { ' ' }), provider); if (debug) { MelonLogger.Msg("Dodge Max Angle: " + maxAngle2); } } if (array3[j].Contains("Sequence - Start") && !flag) { flag = true; list2 = new List<PoseGenData>(); if (debug) { MelonLogger.Msg("Sequence - Start"); } } if (flag) { if (array3[j].Contains("Sequence - Data")) { seqGenData = new SeqGenData(); array.Initialize(); array = array3[j + 1].Split(new char[1] { ':' }); seqGenData.SeqName = array[1].Trim(new char[1] { ' ' }) + "Seq"; if (debug) { MelonLogger.Msg("SeqName: " + seqGenData.SeqName); } seqGenData.AtkName = array[1].Trim(new char[1] { ' ' }) + "Atk"; if (debug) { MelonLogger.Msg("AtkName: " + seqGenData.AtkName); } array = array3[j + 2].Split(new char[1] { ':' }); seqGenData.Weight = float.Parse(array[1].Trim(new char[1] { ' ' }), provider); if (debug) { MelonLogger.Msg("Weight: " + array[1].Trim(new char[1] { ' ' })); } array = array3[j + 3].Split(new char[1] { ':' }); seqGenData.WeightDec = float.Parse(array[1].Trim(new char[1] { ' ' }), provider); if (debug) { MelonLogger.Msg("Weight_Decrease: " + array[1].Trim(new char[1] { ' ' })); } array = array3[j + 4].Split(new char[1] { ':' }); seqGenData.PreWait = float.Parse(array[1].Trim(new char[1] { ' ' }), provider); if (debug) { MelonLogger.Msg("PreWait: " + array[1].Trim(new char[1] { ' ' })); } array = array3[j + 5].Split(new char[1] { ':' }); seqGenData.PostWait = float.Parse(array[1].Trim(new char[1] { ' ' }), provider); if (debug) { MelonLogger.Msg("PostWait: " + array[1].Trim(new char[1] { ' ' })); } array = array3[j + 6].Split(new char[1] { ':' }); seqGenData.RangeMin = float.Parse(array[1].Trim(new char[1] { ' ' }), provider); if (debug) { MelonLogger.Msg("RangeMin: " + array[1].Trim(new char[1] { ' ' })); } array = array3[j + 7].Split(new char[1] { ':' }); seqGenData.RangeMax = float.Parse(array[1].Trim(new char[1] { ' ' }), provider); if (debug) { MelonLogger.Msg("RangeMax: " + array[1].Trim(new char[1] { ' ' })); } } if (array3[j].Contains("Sequence - MoveData")) { PoseGenData poseGenData = new PoseGenData(); array = array3[j + 1].Split(new char[1] { ':' }); poseGenData.StackNumber = int.Parse(array[1].Trim(new char[1] { ' ' })); if (debug) { MelonLogger.Msg("MoveNumber: " + poseGenData.StackNumber); } array = array3[j + 2].Split(new char[1] { ':' }); poseGenData.PreWait = float.Parse(array[1].Trim(new char[1] { ' ' }), provider); if (debug) { MelonLogger.Msg("PreWait: " + poseGenData.PreWait); } array = array3[j + 3].Split(new char[1] { ':' }); poseGenData.PostWait = float.Parse(array[1].Trim(new char[1] { ' ' }), provider); if (debug) { MelonLogger.Msg("PostWait: " + poseGenData.PostWait); } switch (poseGenData.StackNumber) { case 10: poseGenData.AnimationName = "Kick"; break; case 5: case 8: case 11: case 13: poseGenData.AnimationName = "SpawnStructure"; break; default: poseGenData.AnimationName = "Straight"; break; } if (debug) { MelonLogger.Msg("AnimName: " + poseGenData.AnimationName.ToString()); } list2.Add(poseGenData); } } if (array3[j].Contains("Sequence - End") && flag) { flag = false; val.Add(CreatePoseSequence(list2, seqGenData)); if (debug) { MelonLogger.Msg("Sequence - End"); } } if (!array3[j].Contains("Logic - End")) { continue; } if (list.Count > 0) { foreach (HowardLogic item in list) { if (((Object)item).name == logicData.LogicName) { logicData.LogicName += "_"; } } } if (debug) { MelonLogger.Msg("Got Duplicates"); } list.Add(new HowardLogic { name = logicData.LogicName, maxHealth = logicData.MaxHP, MinMaxDecisionTime = new Vector2(logicData.DecisionMin, logicData.DecisionMax), standStillReactiontime = logicData.ReactionTime, howardHeadlightColor = logicData.HeadLight, howardIdleLevelColor = logicData.IdleColor, howardLevelColor = logicData.ActiveColor }); if (debug) { MelonLogger.Msg("Logic Init"); } int index = list.Count - 1; if (debug) { MelonLogger.Msg("Logic Count"); } HowardMoveBehaviour dodgeBehaviour = new HowardMoveBehaviour { name = "CustomDodge", AnglePerSecond = anglePerSecond2, minAngle = minAngle2, maxAngle = maxAngle2, negativeMoveAnimationTrigger = "RockSlideLeft", positiveMoveAnimationTrigger = "RockSlideRight", randomizeMovementSign = true }; list[index].DodgeBehaviour = dodgeBehaviour; if (debug) { MelonLogger.Msg("Logic Dodge"); } ((Il2CppArrayBase<ReactionChance>)(object)list[index].reactions)[0] = ModifyReactions(0, logicData.Chance_DoSeq); ((Il2CppArrayBase<ReactionChance>)(object)list[index].reactions)[1] = ModifyReactions(1, logicData.Chance_Dodge); ((Il2CppArrayBase<ReactionChance>)(object)list[index].reactions)[2] = ModifyReactions(2, logicData.Chance_Nothing); if (debug) { MelonLogger.Msg("Logic Reactions"); } if (flag2) { val.Add(new SequenceSet { RequiredMinMaxRange = new Vector2(0f, float.MaxValue), Weight = weight, WeightDecrementationWhenSelected = weightDecrementationWhenSelected }); if (debug) { MelonLogger.Msg("1"); } SequenceSet obj = val[val.Count - 1]; HowardSequence val3 = new HowardSequence(); ((Object)val3).name = "CustomMovement"; val3.BehaviourTimings = Il2CppReferenceArray<HowardBehaviourTiming>.op_Implicit((HowardBehaviourTiming[])(object)new HowardBehaviourTiming[1]); obj.Sequence = val3; if (debug) { MelonLogger.Msg("2"); } ((Il2CppArrayBase<HowardBehaviourTiming>)(object)val[val.Count - 1].Sequence.BehaviourTimings)[0] = new HowardBehaviourTiming { PostActivationWaitTime = 0f, PreActivationWaitTime = 0.5f }; if (debug) { MelonLogger.Msg("3"); } HowardMoveBehaviour behaviour = new HowardMoveBehaviour { name = "CustomMovement", AnglePerSecond = anglePerSecond, minAngle = minAngle, maxAngle = maxAngle, negativeMoveAnimationTrigger = "RockSlideLeft", positiveMoveAnimationTrigger = "RockSlideRight", randomizeMovementSign = true }; if (debug) { MelonLogger.Msg("4"); } ((Il2CppArrayBase<HowardBehaviourTiming>)(object)val[val.Count - 1].Sequence.BehaviourTimings)[0].Behaviour = (HowardBehaviour)(object)behaviour; if (debug) { MelonLogger.Msg("Logic Sequence Move"); } } list[index].SequenceSets = val; if (debug) { MelonLogger.Msg("Logic Sequence Custom"); } if (debug) { MelonLogger.Msg("Logic Applied"); } } } int count = list.Count; int num = Base_Logic_Array.Length; if (debug) { MelonLogger.Msg("Get Length: " + count + "|" + num); } HowardLogic[] array4 = (HowardLogic[])(object)new HowardLogic[num + count]; if (debug) { MelonLogger.Msg("Size Array"); } for (int k = 0; k < array4.Length; k++) { if (k < num) { array4[k] = Base_Logic_Array[k]; } if (k >= num) { array4[k] = list[k - num]; } if (debug) { MelonLogger.Msg("Loop: " + k); } } if (debug) { MelonLogger.Msg("Applied new logic"); } Howard_Obj.GetComponent<Howard>().LogicLevels = Il2CppReferenceArray<HowardLogic>.op_Implicit(array4); if (debug) { MelonLogger.Msg("Applied all logic"); } LogicLoaded = true; } private ReactionChance ModifyReactions(int Index, float Input) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_000c: 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_001e: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_004c: 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_006d: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) ReactionChance val = default(ReactionChance); val.Type = (ReactionType)0; val.Weight = 0f; ReactionChance result = val; switch (Index) { case 0: result.Type = (ReactionType)2; result.Weight = Input; break; case 1: result.Type = (ReactionType)1; result.Weight = Input; break; case 2: result.Type = (ReactionType)0; result.Weight = Input; break; } return result; } private string LogicNameSanitization(string Input) { switch (Input) { case "HowardLevel1": return "Level 1"; case "HowardLevel2": return "Level 2"; case "HowardLevel3": return "Level 3"; default: if (Input.Length == 0) { ((TMP_Text)LogicText_Obj.GetComponent<TextMeshProUGUI>()).fontSize = 0.18f; return "No Name"; } if (Input.Length >= 12) { float num = ((float)Input.Length - 12f) / 150f; ((TMP_Text)LogicText_Obj.GetComponent<TextMeshProUGUI>()).fontSize = 0.18f - num; return Input; } ((TMP_Text)LogicText_Obj.GetComponent<TextMeshProUGUI>()).fontSize = 0.18f; return Input; } } private void PageScrollLogic() { string text = "Makes Howard do scary things" + Environment.NewLine; text = text + "Custom Movesets: " + Environment.NewLine; if (LogicNames.Count <= 10) { foreach (string logicName in LogicNames) { text = text + logicName + Environment.NewLine; } Mod.Settings[0].Description = text; UI.ForceRefresh(); LogicLoaded = false; } else { if (LogicNames.Count <= 10 || !PageScroll.Done) { return; } if (!LogicLoopRun) { LogicMaxPage = LogicNames.Count / 10 + 1; LogicCurPage = 1; LogicLoopRun = true; } if (LogicCurPage == LogicMaxPage) { for (int i = (LogicMaxPage - 1) * 10; i < LogicNames.Count; i++) { text = text + LogicNames[i] + Environment.NewLine; } LogicLoopRun = false; } if (LogicCurPage < LogicMaxPage) { LogicLoopMax = LogicCurPage * 10; for (int j = LogicLoopMax - 10; j < LogicLoopMax; j++) { text = text + LogicNames[j] + Environment.NewLine; } LogicCurPage++; } Mod.Settings[0].Description = text; UI.ForceRefresh(); PageScroll.Delay_Start(3.0); } } public override void OnSceneWasLoaded(int buildIndex, string sceneName) { ((MelonMod)this).OnSceneWasLoaded(buildIndex, sceneName); currentscene = sceneName; Delay.Delay_Start(8.0, AllowRetrigger: true); PageScroll.Delay_Start(1.0); } }