Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of NectarAllergic v1.0.0
Nectar Allergic.dll
Decompiled 2 weeks agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using GlobalSettings; using HarmonyLib; using InControl; using Silksong.AssetHelper.ManagedAssets; using UnityEngine; using UnityEngine.SceneManagement; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("Nectar Allergic")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Nectar Allergic")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("33c90e4f-2ae4-4a26-8667-294fd3e300d0")] [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")] [BepInPlugin("com.sealofapproval.nectarallergic", "Nectar Allergic", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class NectarAllergic : BaseUnityPlugin { private ManagedAsset<AudioClip> Garama1; private ManagedAsset<AudioClip> SlashSound; private ManagedAsset<AudioClip> WakeUp; private ManagedAsset<AudioClip> WallLand; private ManagedAsset<AudioClip> Demo1; private ManagedAsset<AudioClip> Demo2; private ManagedAsset<AudioClip> FollowUp; private ManagedAsset<AudioClip> Collapse; private ManagedAsset<AudioClip> FallOver; private ManagedAsset<AudioClip> Exert; private ManagedAsset<AudioClip> Loop; private ConfigEntry<bool> DamagedOrNot; private ConfigEntry<bool> Lethal; private ConfigEntry<float> DrinkVolume; private int lastDrinks = -1; private string anim1 = "Weakened Stun"; private string anim2 = "Weak Flinch To Idle"; private string anim4 = "Taunt Collapse1"; private string anim5 = "Taunt Collapse2"; private string anim6 = "Prostrate Rise"; private int times4 = 4; private int destr; private float volume; protected NectarAllergic() { DamagedOrNot = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Damaged?", true, "After drinking, should Hornet get damaged until she reaches 1 mask?"); Lethal = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Lethal?", false, "After drinking, should Hornet outright die? (WARNING: NOT RECOMMENDED FOR STEEL SOUL.)"); DrinkVolume = ((BaseUnityPlugin)this).Config.Bind<float>("General", "Volume multiplier", 1f, "What multiplier should the volume of the sounds have? 0 = no volume, 0.5 = half the volume, 1 = default volume, 2 = doubled volume, etc. Decimals allowed."); } private void Awake() { Loop = ManagedAsset<AudioClip>.FromNonSceneAsset("Assets/Audio/SFX/npc/hornet_weakened_effect_loop_2d.wav", "herosfxstatic_assets_all"); Exert = ManagedAsset<AudioClip>.FromNonSceneAsset("Assets/Audio/Voices/Hornet_Silksong/weak_hornet/weak_hornet_exert_standard_03.wav", "herosfxstatic_assets_all"); FallOver = ManagedAsset<AudioClip>.FromNonSceneAsset("Assets/Audio/SFX/Heroes/Hornet/hornet_fall_over_demo_end.wav", "herosfxstatic_assets_all"); Collapse = ManagedAsset<AudioClip>.FromNonSceneAsset("Assets/Audio/Voices/Hornet_Silksong/Garama_weak_collapse.wav", "herosfxstatic_assets_all"); FollowUp = ManagedAsset<AudioClip>.FromNonSceneAsset("Assets/Audio/Voices/Hornet_Silksong/Garama_weak_follow_up.wav", "herosfxstatic_assets_all"); Demo1 = ManagedAsset<AudioClip>.FromNonSceneAsset("Assets/Audio/SFX/npc/demo_end_black_fade_down_up.wav", "sfxstatic_assets_areatutorial"); Demo2 = ManagedAsset<AudioClip>.FromNonSceneAsset("Assets/Audio/SFX/npc/demo_end_black_fade_end.wav", "sfxstatic_assets_areatutorial"); WallLand = ManagedAsset<AudioClip>.FromNonSceneAsset("Assets/Audio/SFX/Enemy/Bosses/Hornet/hornet_wall_land.wav", "sfxstatic_assets_areamemoryareamossareatutorial"); SlashSound = ManagedAsset<AudioClip>.FromNonSceneAsset("Assets/Audio/SFX/sword_5.wav", "sfxstatic_assets_shared"); Garama1 = ManagedAsset<AudioClip>.FromNonSceneAsset("Assets/Audio/Voices/Hornet_Silksong/Garama_weak_02.wav", "sfxstatic_assets_areamoss"); WakeUp = ManagedAsset<AudioClip>.FromNonSceneAsset("Assets/Audio/Voices/Hornet_Silksong/weak_hornet/weak_hornet_exert_short_01.wav", "herosfxstatic_assets_all"); SceneManager.activeSceneChanged += SpawnAsset; } private void SpawnAsset(Scene oldScene, Scene newScene) { if (!(((Scene)(ref newScene)).name != "Halfway_01")) { ((MonoBehaviour)this).StartCoroutine(SpawnAssetRoutine()); } } private void Update() { PlayerData instance = PlayerData.instance; if (instance != null) { if (lastDrinks == -1) { lastDrinks = instance.HalfwayDrinksPurchased; } else if (instance.HalfwayDrinksPurchased > lastDrinks) { lastDrinks = instance.HalfwayDrinksPurchased; ((MonoBehaviour)this).StartCoroutine(TriggerPassOut()); } } } private IEnumerator TriggerPassOut() { HeroController heroController = HeroController.instance; if ((Object)(object)heroController == (Object)null) { yield break; } HeroAnimationController heroAnim = ((Component)heroController).GetComponent<HeroAnimationController>(); if ((Object)(object)heroAnim == (Object)null || (Object)(object)((Component)heroController).GetComponent<HeroAudioController>() == (Object)null) { yield break; } while (heroAnim.animator.IsPlaying("Charge Up")) { yield return null; } while (heroController.controlReqlinquished) { yield return null; } AudioClip Auclip1 = ((ManagedAssetBase<AudioClip>)(object)SlashSound).Load().Result; AudioClip Auclip2 = ((ManagedAssetBase<AudioClip>)(object)Garama1).Load().Result; AudioClip result = ((ManagedAssetBase<AudioClip>)(object)WallLand).Load().Result; AudioClip Auclip4 = ((ManagedAssetBase<AudioClip>)(object)Demo2).Load().Result; AudioClip Auclip5 = ((ManagedAssetBase<AudioClip>)(object)WakeUp).Load().Result; AudioClip result2 = ((ManagedAssetBase<AudioClip>)(object)Demo1).Load().Result; AudioClip AuClip7 = ((ManagedAssetBase<AudioClip>)(object)FollowUp).Load().Result; AudioClip Auclip8 = ((ManagedAssetBase<AudioClip>)(object)Collapse).Load().Result; AudioClip Auclip9 = ((ManagedAssetBase<AudioClip>)(object)FallOver).Load().Result; AudioClip result3 = ((ManagedAssetBase<AudioClip>)(object)Exert).Load().Result; AudioClip Auclip11 = ((ManagedAssetBase<AudioClip>)(object)Loop).Load().Result; heroController.IgnoreInput(); heroController.controlReqlinquished = true; heroController.StopAnimationControl(); PlayerData.instance.disablePause = true; AudioSource Ausource = ((Component)HeroController.instance).GetComponent<AudioSource>(); MethodInfo DoSpecialDamageMethod = AccessTools.Method(typeof(HeroController), "DoSpecialDamage", (Type[])null, (Type[])null); object[] args = new object[7] { 1, true, "Instant", true, true, true, false }; AudioSource[] array = Object.FindObjectsOfType<AudioSource>(); foreach (AudioSource val in array) { if (val.isPlaying) { volume = val.volume; val.volume *= 0f; } } ((MonoBehaviour)this).StartCoroutine(Shadow()); times4 = 4; destr = 0; Ausource.PlayOneShot(result2, 0.9f * DrinkVolume.Value); Ausource.PlayOneShot(result3, 1.5f * DrinkVolume.Value); Ausource.PlayOneShot(result, 0.5f * DrinkVolume.Value); while (times4 != 0) { float clipLength1 = heroAnim.GetClipDuration(anim1); heroAnim.PlayClipForced(anim1); while (heroAnim.animator.IsPlaying(heroAnim.animator.CurrentClip) && clipLength1 > 0f) { yield return null; clipLength1 -= Time.deltaTime; } times4--; } float clipLength2 = heroAnim.GetClipDuration(anim2); heroAnim.PlayClipForced(anim2); while (heroAnim.animator.IsPlaying(heroAnim.animator.CurrentClip) && clipLength2 > 0f) { yield return null; clipLength2 -= Time.deltaTime; } while (times4 < 7) { float clipLength1 = heroAnim.GetClipDuration(anim4); heroAnim.PlayClipForced(anim4); while (heroAnim.animator.IsPlaying(heroAnim.animator.CurrentClip) && clipLength1 > 0f) { yield return null; clipLength1 -= Time.deltaTime; if (clipLength1 < 0.6f) { if (times4 == 0) { Ausource.PlayOneShot(Auclip2, 0.65f * DrinkVolume.Value); Ausource.PlayOneShot(Auclip1, 0.65f * DrinkVolume.Value); times4++; } if (times4 == 2) { Ausource.PlayOneShot(Auclip11, 1f * DrinkVolume.Value); times4++; } if (times4 == 4) { Ausource.PlayOneShot(AuClip7, 0.7f * DrinkVolume.Value); times4++; } } } times4++; } if (DamagedOrNot.Value) { times4 = PlayerData.instance.health + PlayerData.instance.healthBlue - 1; if (!Gameplay.FracturedMaskTool.IsEmpty && ((ToolBase)Gameplay.FracturedMaskTool).IsEquipped) { times4 = PlayerData.instance.health + PlayerData.instance.healthBlue; } while (times4 > 0) { DoSpecialDamageMethod.Invoke(heroController, args); times4--; } } if (Lethal.Value) { for (int num = 20; num > 0; num--) { DoSpecialDamageMethod.Invoke(heroController, args); } } times4 = 0; GameCameras.instance.cameraFadeFSM.SetState("Scene Fade Out"); if (Lethal.Value) { yield return (object)new WaitForSeconds(2f); ((MonoBehaviour)this).StartCoroutine(Volume()); yield break; } Ausource.PlayOneShot(Auclip4, 0.9f * DrinkVolume.Value); Ausource.PlayOneShot(Auclip8, 0.7f * DrinkVolume.Value); Ausource.PlayOneShot(Auclip9, 0.7f * DrinkVolume.Value); float clipLength5 = heroAnim.GetClipDuration(anim5) - 0.25f; heroAnim.PlayClipForced(anim5); while (heroAnim.animator.IsPlaying(heroAnim.animator.CurrentClip) && clipLength5 > 0f) { yield return null; clipLength5 -= Time.deltaTime; } destr = 1; heroAnim.PlayClipForced("Prostrate"); float elapsed = 0f; yield return null; while (elapsed < 99999f) { if (elapsed > 4f && times4 == 0) { GameCameras.instance.cameraFadeFSM.SetState("Scene Fade In"); times4 = 1; ((MonoBehaviour)this).StartCoroutine(Volume()); } HeroActions inputActions = ManagerSingleton<InputHandler>.Instance.inputActions; if ((((OneAxisInputControl)inputActions.Jump).WasPressed || ((OneAxisInputControl)inputActions.Attack).WasPressed) && elapsed > 7f) { Ausource.PlayOneShot(Auclip5, 1.5f * DrinkVolume.Value); float clipLength1 = heroAnim.GetClipDuration(anim6); heroAnim.PlayClipForced(anim6); while (heroAnim.animator.IsPlaying(heroAnim.animator.CurrentClip) && clipLength1 > 0f) { yield return null; clipLength1 -= Time.deltaTime; } heroController.AcceptInput(); heroController.controlReqlinquished = false; heroController.StartAnimationControl(); PlayerData.instance.disablePause = false; break; } elapsed += Time.deltaTime; yield return null; } } private IEnumerator Volume() { AudioSource[] array = Object.FindObjectsOfType<AudioSource>(); foreach (AudioSource src in array) { if (Object.op_Implicit((Object)(object)src) && src.isPlaying) { float t = 0.05f; while (src.volume < volume) { src.volume += t; yield return (object)new WaitForSeconds(t); } } } } private IEnumerator Shadow() { GameObject val = ((IEnumerable<GameObject>)Resources.FindObjectsOfTypeAll<GameObject>()).FirstOrDefault((Func<GameObject, bool>)((GameObject obj) => ((Object)obj).name == "low_health_vignette_hi_res")); GameObject clone = Object.Instantiate<GameObject>(val); Transform ct = clone.transform; float t = 0.05f; for (float sc = 1f; sc > 0.5f; sc -= 0.05f) { Extensions.SetScaleMatching(ct, sc); yield return (object)new WaitForSeconds(t); } while (t == 0.05f) { if (destr == 1) { Object.Destroy((Object)(object)clone); break; } yield return null; } } private IEnumerator SpawnAssetRoutine() { ((ManagedAssetBase<AudioClip>)(object)Loop).Load(); yield return ((ManagedAssetBase<AudioClip>)(object)Loop).Handle; ((ManagedAssetBase<AudioClip>)(object)SlashSound).Load(); yield return ((ManagedAssetBase<AudioClip>)(object)SlashSound).Handle; ((ManagedAssetBase<AudioClip>)(object)Garama1).Load(); yield return ((ManagedAssetBase<AudioClip>)(object)Garama1).Handle; ((ManagedAssetBase<AudioClip>)(object)WakeUp).Load(); yield return ((ManagedAssetBase<AudioClip>)(object)WakeUp).Handle; ((ManagedAssetBase<AudioClip>)(object)WallLand).Load(); yield return ((ManagedAssetBase<AudioClip>)(object)WallLand).Handle; ((ManagedAssetBase<AudioClip>)(object)Demo1).Load(); yield return ((ManagedAssetBase<AudioClip>)(object)Demo1).Handle; ((ManagedAssetBase<AudioClip>)(object)Demo2).Load(); yield return ((ManagedAssetBase<AudioClip>)(object)Demo2).Handle; ((ManagedAssetBase<AudioClip>)(object)FollowUp).Load(); yield return ((ManagedAssetBase<AudioClip>)(object)FollowUp).Handle; ((ManagedAssetBase<AudioClip>)(object)Collapse).Load(); yield return ((ManagedAssetBase<AudioClip>)(object)Collapse).Handle; ((ManagedAssetBase<AudioClip>)(object)FallOver).Load(); yield return ((ManagedAssetBase<AudioClip>)(object)FallOver).Handle; ((ManagedAssetBase<AudioClip>)(object)Exert).Load(); yield return ((ManagedAssetBase<AudioClip>)(object)Exert).Handle; } }