using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using AntsMod.Config;
using AntsMod.Coroutines;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using UnityEngine;
using UnityEngine.SceneManagement;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("AntsMod")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("HP")]
[assembly: AssemblyProduct("AntsMod")]
[assembly: AssemblyCopyright("Copyright © HP 2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("c5ef7ae0-29a6-411a-b796-2d42321f7f63")]
[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 AntsMod
{
[BepInPlugin("AntAptive.AntsMod", "Ant's Mod", "1.3.0")]
public class AntsModBase : BaseUnityPlugin
{
private const string modGUID = "AntAptive.AntsMod";
private const string modName = "Ant's Mod";
private const string modVersion = "1.3.0";
private readonly Harmony harmony = new Harmony("AntAptive.AntsMod");
private static AntsModBase Instance;
internal ManualLogSource mls;
public static AssetBundle MyCustomAssets;
public static ModConfig BoundConfig { get; private set; }
private void Awake()
{
if ((Object)(object)Instance == (Object)null)
{
Instance = this;
}
mls = Logger.CreateLogSource("AntAptive.AntsMod");
BoundConfig = new ModConfig(((BaseUnityPlugin)this).Config);
mls.LogInfo((object)"\n \r\n ............. ............. \r\n .....@@@@@@@@@@@....... ........@@@@@@@......... \r\n ....@@@@@@@@@@@@@@@@@@@@@@..... ......@@@@@@@@@@@@@............ \r\n ...@@@@@@@@@@@@@@@@@@@@@@@@@@@@@... ...@@@@@@@@@@@@@@@@@@@@@@@@@@@..... \r\n ..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@... ...@@@..............@@............@@.. \r\n ..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@... ..@@@................................@.. \r\n ..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@........@........................@........@.. \r\n .@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@.........@@............@@@....@@..@@.......@@. \r\n ..@@@@@@@@@@@@@@@....@@@@@.@@@@@@@@@@@@.........@@............@@@@.....@.........@.... \r\n ..@@@@@@@@@@@@@@@@@@@@@@@@@..@@@@@@@@@...........@..........@@@@@@@.....@........@.... \r\n ..@@@@@@@@@@@@@@@@@@@@@@@....@@@@@@@@.........................@@@................@@@.. \r\n ..@@@@@@@@@@@@@@@@@@@@@@@@@..@@@@@@@@................................................. \r\n ..@@@@@@@.....@@@@@@@@@@@@@@@@@@@@@@@................................................. \r\n ..@@@@@........@@@@@@@@@@@...@@@@@@@................................................ \r\n ..@@@@......................@@@@@@@@................................................ \r\n ..@@@@@@.............@@@@@@@@@@@@@@@@@.............................................. \r\n ...@@@@@@@@@.......@@@@@@@@@@@@@@@@@@@@@@@@......................................... \r\n ..@@@@@@@@@......@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.................................... \r\n ..@@@@@@@@@...@@@@@@@@@@@@@@@@@@@@@@....@@@@@@@................................. \r\n ...@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.................... \r\n ...@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@............... \r\n ..@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@..........@@@@@@@............ \r\n ....@@....@@@@@@@@@@@@@@@@@@@@@@@@......................@@@@@@.......... \r\n ........@@@@@@@@@@@@@@@@@@@@@..........................@@@@......... \r\n ......@@@@@@@@@@@@@@@@@................................@...... \r\n .....@@@@@@@@@@@@@@@@@@................................. \r\n ....@@@@@@@@@@@@@@@@.............................. \r\n .....@@@@@@@@@@@............................ \r\n ....@@@@@@............................ \r\n ................................ \r\n ........................... \r\n ...................... \r\n .................. \r\n .............. \r\n ............ \r\n ........ \r\n ...... \r\n .... \r\n .. \r\n ");
mls.LogInfo((object)"Ant's Mod has awaketh!");
mls.LogWarning((object)"Note: This is a personal mod by AntAptive for his friends! You probably won't find anything of significance here. Thanks for downloading anyways!");
string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
MyCustomAssets = AssetBundle.LoadFromFile(Path.Combine(directoryName, "antsmod"));
if ((Object)(object)MyCustomAssets == (Object)null)
{
mls.LogError((object)"[Ant's Mod] Failed to load custom assets :sadge:");
}
else
{
harmony.PatchAll();
}
}
}
}
namespace AntsMod.Patches
{
[HarmonyPatch(typeof(FlowermanAI))]
internal class FlowermanPatch
{
[HarmonyPatch("Start")]
[HarmonyPostfix]
public static void ModelAndSoundPatch(FlowermanAI __instance)
{
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
if (AntsModBase.BoundConfig.buddyBrackenEnabled.Value)
{
GameObject gameObject = ((Component)((Component)__instance).gameObject.transform.Find("FlowermanModel/AnimContainer/metarig/Torso1/Torso2/Torso3/Neck1")).gameObject;
GameObject val = Object.Instantiate<GameObject>(AntsModBase.MyCustomAssets.LoadAssetWithSubAssets<GameObject>("assets/AntsMod/Bracken/buddyboy.fbx")[0]);
val.transform.SetParent(gameObject.transform);
val.transform.localPosition = new Vector3(0f, 1.8f, -0.085f);
val.transform.localScale = new Vector3(0.78787f, 0.78787f, 0.78787f);
((Component)val.transform.Find("BuddyMask")).GetComponent<Renderer>().material = AntsModBase.MyCustomAssets.LoadAssetWithSubAssets<Material>("assets/AntsMod/Bracken/buddyboyMat.mat")[0];
((Component)val.transform.Find("Eyes")).GetComponent<Renderer>().material = AntsModBase.MyCustomAssets.LoadAssetWithSubAssets<Material>("assets/AntsMod/Bracken/buddyboyEyesMat.mat")[0];
__instance.creatureAngerVoice.clip = AntsModBase.MyCustomAssets.LoadAssetWithSubAssets<AudioClip>("assets/AntsMod/Bracken/buddyboyDying.mp3")[0];
}
}
}
[HarmonyPatch(typeof(ForestGiantAI))]
internal class ForestGiantPatch
{
private static GenoBurp genoBurp = new GenoBurp();
[HarmonyPatch("Start")]
[HarmonyPostfix]
public static void AddCustomSoundPatch(ForestGiantAI __instance)
{
if (AntsModBase.BoundConfig.genoBurpEnabled.Value)
{
GameObject gameObject = ((Component)((Component)__instance).transform.Find("FGiantModelContainer/FarWideSFX")).gameObject;
GameObject val = Object.Instantiate<GameObject>(gameObject);
((Object)val).name = "GenoBurp";
val.transform.parent = ((Component)((Component)__instance).transform.Find("FGiantModelContainer")).transform;
AudioSource component = val.GetComponent<AudioSource>();
component.playOnAwake = false;
component.loop = false;
component.clip = AntsModBase.MyCustomAssets.LoadAssetWithSubAssets<AudioClip>("assets/AntsMod/Common/GenoBurp.mp3")[0];
}
}
[HarmonyPatch("Update")]
[HarmonyPostfix]
public static void GenoBurpPatch(ForestGiantAI __instance)
{
if (AntsModBase.BoundConfig.genoBurpEnabled.Value && Traverse.Create((object)__instance).Field("inEatingPlayerAnimation").GetValue<bool>())
{
Debug.LogWarning((object)"ISEATINGPLAYER IS TRUE!");
if (genoBurp.canPlayGenoBurp)
{
genoBurp.canPlayGenoBurp = false;
((MonoBehaviour)__instance).StartCoroutine(genoBurp.WaitToPlayGenoBurpSound(__instance));
}
}
}
}
[HarmonyPatch(typeof(HoarderBugAI))]
internal class HoarderBugPatch
{
[HarmonyPatch("Start")]
[HarmonyPostfix]
public static void FaceImagePatch(HoarderBugAI __instance)
{
//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
//IL_0101: Unknown result type (might be due to invalid IL or missing references)
//IL_010e: Unknown result type (might be due to invalid IL or missing references)
//IL_011c: Unknown result type (might be due to invalid IL or missing references)
if (AntsModBase.BoundConfig.antBugEnabled.Value)
{
GameObject gameObject = ((Component)((Component)__instance).gameObject.transform.Find("HoarderBugModel/AnimContainer/Armature/Abdomen/Chest/Head")).gameObject;
GameObject val = Object.Instantiate<GameObject>(AntsModBase.MyCustomAssets.LoadAssetWithSubAssets<GameObject>("assets/AntsMod/HoarderBug/AntLuvsYewFace.prefab")[0]);
GameObject val2 = Object.Instantiate<GameObject>(AntsModBase.MyCustomAssets.LoadAssetWithSubAssets<GameObject>("assets/AntsMod/HoarderBug/AntLuvsYewMadFace.prefab")[0]);
val.transform.parent = gameObject.transform;
val2.transform.parent = gameObject.transform;
Vector3 localPosition = default(Vector3);
((Vector3)(ref localPosition))..ctor(-1.636f, 1.636f, 0f);
Quaternion localRotation = Quaternion.Euler(new Vector3(40f, -270f, 0f));
Vector3 localScale = default(Vector3);
((Vector3)(ref localScale))..ctor(0.5f, 0.5f, 0.5f);
val.transform.localPosition = localPosition;
val.transform.localRotation = localRotation;
val.transform.localScale = localScale;
val2.transform.localPosition = localPosition;
val2.transform.localRotation = localRotation;
val2.transform.localScale = localScale;
((Object)val).name = "AntLuvsYewFace";
((Object)val2).name = "AntLuvsYewMadFace";
val2.SetActive(false);
__instance.bugFlySFX = AntsModBase.MyCustomAssets.LoadAssetWithSubAssets<AudioClip>("assets/AntsMod/HoarderBug/panic.mp3")[0];
__instance.angryVoiceSFX = AntsModBase.MyCustomAssets.LoadAssetWithSubAssets<AudioClip>("assets/AntsMod/HoarderBug/antSquee.mp3")[0];
__instance.angryScreechSFX = AntsModBase.MyCustomAssets.LoadAssetWithSubAssets<AudioClip>("assets/AntsMod/HoarderBug/antSquee.mp3");
}
}
[HarmonyPatch("Update")]
[HarmonyPostfix]
public static void MadFacePatch(HoarderBugAI __instance)
{
if (!AntsModBase.BoundConfig.antBugEnabled.Value)
{
return;
}
GameObject gameObject = ((Component)((Component)__instance).gameObject.transform.Find("HoarderBugModel/AnimContainer/Armature/Abdomen/Chest/Head/AntLuvsYewFace")).gameObject;
GameObject gameObject2 = ((Component)((Component)__instance).gameObject.transform.Find("HoarderBugModel/AnimContainer/Armature/Abdomen/Chest/Head/AntLuvsYewMadFace")).gameObject;
if (!((EnemyAI)__instance).creatureAnimator.GetBool("Chase"))
{
if ((Object)(object)gameObject != (Object)null && (Object)(object)gameObject2 != (Object)null)
{
gameObject.SetActive(true);
gameObject2.SetActive(false);
}
else
{
Debug.LogWarning((object)"One or more of the ALYFaces are null!");
}
}
else if ((Object)(object)gameObject != (Object)null && (Object)(object)gameObject2 != (Object)null)
{
gameObject.SetActive(false);
gameObject2.SetActive(true);
}
else
{
Debug.LogWarning((object)"One or more of the ALYFaces are null and an Ant Bug is angry!");
}
}
}
[HarmonyPatch(typeof(PlayerControllerB))]
internal class MarchPatch
{
private static GameObject ripBuddySign;
private static bool IsSceneLoaded(string sceneName)
{
//IL_0007: 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)
for (int i = 0; i < SceneManager.sceneCount; i++)
{
Scene sceneAt = SceneManager.GetSceneAt(i);
if (((Scene)(ref sceneAt)).name == sceneName && ((Scene)(ref sceneAt)).isLoaded)
{
return true;
}
}
return false;
}
public static void PlaceBuddyboySign()
{
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)GameObject.Find("Environment/RipBuddySign")))
{
ripBuddySign = Object.Instantiate<GameObject>(AntsModBase.MyCustomAssets.LoadAssetWithSubAssets<GameObject>("assets/AntsMod/March/ripBuddyboy.prefab")[0]);
ripBuddySign.transform.parent = GameObject.Find("Environment").transform;
ripBuddySign.transform.localPosition = new Vector3(38f, -8.5f, -11.8f);
ripBuddySign.transform.localRotation = Quaternion.Euler(new Vector3(-88f, 192.5f, 151.6f));
ripBuddySign.transform.localScale = new Vector3(50f, 50f, 50f);
((Object)ripBuddySign.transform).name = "RipBuddySign";
Debug.Log((object)"rest in piece, sir buddy boy.");
}
}
[HarmonyPatch("Update")]
[HarmonyPostfix]
public static void ShowRipBuddyboySignPatch(PlayerControllerB __instance)
{
if (AntsModBase.BoundConfig.buddyMemorialEnabled.Value && IsSceneLoaded("Level4March"))
{
PlaceBuddyboySign();
}
}
}
}
namespace AntsMod.Coroutines
{
internal class GenoBurp
{
public bool canPlayGenoBurp = true;
public IEnumerator WaitToPlayGenoBurpSound(ForestGiantAI __instance)
{
Debug.LogWarning((object)"Geno Burp coroutine recieved.");
yield return (object)new WaitForSeconds(5f);
((Component)((Component)__instance).transform.Find("FGiantModelContainer/GenoBurp")).GetComponent<AudioSource>().Play();
yield return (object)new WaitForSeconds(5f);
canPlayGenoBurp = true;
}
}
}
namespace AntsMod.Config
{
public class ModConfig
{
public readonly ConfigEntry<bool> antBugEnabled;
public readonly ConfigEntry<bool> buddyBrackenEnabled;
public readonly ConfigEntry<bool> genoBurpEnabled;
public readonly ConfigEntry<bool> buddyMemorialEnabled;
public ModConfig(ConfigFile cfg)
{
cfg.SaveOnConfigSet = false;
antBugEnabled = cfg.Bind<bool>("General", "antBugEnabled", true, "If enabled, the Hoarding Bug's face will be turned to Ant's face and squee at you like Ant and play spooky piano music when angered.");
buddyBrackenEnabled = cfg.Bind<bool>("General", "buddyBrackenEnabled", true, "If enabled, the Bracken will don Buddyboy's Minecraft head and screech at you like Buddyboy when angered.");
genoBurpEnabled = cfg.Bind<bool>("General", "genoBurpEnabled", true, "If enabled, the Forest Giant will burp really loud like Geno when they eat a player.");
buddyMemorialEnabled = cfg.Bind<bool>("General", "buddyMemorialEnabled", true, "If enabled, a memorial sign will be placed on March for Buddyboy, who carelessly waltzed right off the edge and into the lake.");
ClearOrphanedEntries(cfg);
cfg.Save();
cfg.SaveOnConfigSet = true;
}
private static void ClearOrphanedEntries(ConfigFile cfg)
{
PropertyInfo propertyInfo = AccessTools.Property(typeof(ConfigFile), "OrphanedEntries");
Dictionary<ConfigDefinition, string> dictionary = (Dictionary<ConfigDefinition, string>)propertyInfo.GetValue(cfg);
dictionary.Clear();
}
}
}