using 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 Garama1; private ManagedAsset SlashSound; private ManagedAsset WakeUp; private ManagedAsset WallLand; private ManagedAsset Demo1; private ManagedAsset Demo2; private ManagedAsset FollowUp; private ManagedAsset Collapse; private ManagedAsset FallOver; private ManagedAsset Exert; private ManagedAsset Loop; private ConfigEntry DamagedOrNot; private ConfigEntry Lethal; private ConfigEntry 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("General", "Damaged?", true, "After drinking, should Hornet get damaged until she reaches 1 mask?"); Lethal = ((BaseUnityPlugin)this).Config.Bind("General", "Lethal?", false, "After drinking, should Hornet outright die? (WARNING: NOT RECOMMENDED FOR STEEL SOUL.)"); DrinkVolume = ((BaseUnityPlugin)this).Config.Bind("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.FromNonSceneAsset("Assets/Audio/SFX/npc/hornet_weakened_effect_loop_2d.wav", "herosfxstatic_assets_all"); Exert = ManagedAsset.FromNonSceneAsset("Assets/Audio/Voices/Hornet_Silksong/weak_hornet/weak_hornet_exert_standard_03.wav", "herosfxstatic_assets_all"); FallOver = ManagedAsset.FromNonSceneAsset("Assets/Audio/SFX/Heroes/Hornet/hornet_fall_over_demo_end.wav", "herosfxstatic_assets_all"); Collapse = ManagedAsset.FromNonSceneAsset("Assets/Audio/Voices/Hornet_Silksong/Garama_weak_collapse.wav", "herosfxstatic_assets_all"); FollowUp = ManagedAsset.FromNonSceneAsset("Assets/Audio/Voices/Hornet_Silksong/Garama_weak_follow_up.wav", "herosfxstatic_assets_all"); Demo1 = ManagedAsset.FromNonSceneAsset("Assets/Audio/SFX/npc/demo_end_black_fade_down_up.wav", "sfxstatic_assets_areatutorial"); Demo2 = ManagedAsset.FromNonSceneAsset("Assets/Audio/SFX/npc/demo_end_black_fade_end.wav", "sfxstatic_assets_areatutorial"); WallLand = ManagedAsset.FromNonSceneAsset("Assets/Audio/SFX/Enemy/Bosses/Hornet/hornet_wall_land.wav", "sfxstatic_assets_areamemoryareamossareatutorial"); SlashSound = ManagedAsset.FromNonSceneAsset("Assets/Audio/SFX/sword_5.wav", "sfxstatic_assets_shared"); Garama1 = ManagedAsset.FromNonSceneAsset("Assets/Audio/Voices/Hornet_Silksong/Garama_weak_02.wav", "sfxstatic_assets_areamoss"); WakeUp = ManagedAsset.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(); if ((Object)(object)heroAnim == (Object)null || (Object)(object)((Component)heroController).GetComponent() == (Object)null) { yield break; } while (heroAnim.animator.IsPlaying("Charge Up")) { yield return null; } while (heroController.controlReqlinquished) { yield return null; } AudioClip Auclip1 = ((ManagedAssetBase)(object)SlashSound).Load().Result; AudioClip Auclip2 = ((ManagedAssetBase)(object)Garama1).Load().Result; AudioClip result = ((ManagedAssetBase)(object)WallLand).Load().Result; AudioClip Auclip4 = ((ManagedAssetBase)(object)Demo2).Load().Result; AudioClip Auclip5 = ((ManagedAssetBase)(object)WakeUp).Load().Result; AudioClip result2 = ((ManagedAssetBase)(object)Demo1).Load().Result; AudioClip AuClip7 = ((ManagedAssetBase)(object)FollowUp).Load().Result; AudioClip Auclip8 = ((ManagedAssetBase)(object)Collapse).Load().Result; AudioClip Auclip9 = ((ManagedAssetBase)(object)FallOver).Load().Result; AudioClip result3 = ((ManagedAssetBase)(object)Exert).Load().Result; AudioClip Auclip11 = ((ManagedAssetBase)(object)Loop).Load().Result; heroController.IgnoreInput(); heroController.controlReqlinquished = true; heroController.StopAnimationControl(); PlayerData.instance.disablePause = true; AudioSource Ausource = ((Component)HeroController.instance).GetComponent(); 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(); 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.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(); 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)Resources.FindObjectsOfTypeAll()).FirstOrDefault((Func)((GameObject obj) => ((Object)obj).name == "low_health_vignette_hi_res")); GameObject clone = Object.Instantiate(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)(object)Loop).Load(); yield return ((ManagedAssetBase)(object)Loop).Handle; ((ManagedAssetBase)(object)SlashSound).Load(); yield return ((ManagedAssetBase)(object)SlashSound).Handle; ((ManagedAssetBase)(object)Garama1).Load(); yield return ((ManagedAssetBase)(object)Garama1).Handle; ((ManagedAssetBase)(object)WakeUp).Load(); yield return ((ManagedAssetBase)(object)WakeUp).Handle; ((ManagedAssetBase)(object)WallLand).Load(); yield return ((ManagedAssetBase)(object)WallLand).Handle; ((ManagedAssetBase)(object)Demo1).Load(); yield return ((ManagedAssetBase)(object)Demo1).Handle; ((ManagedAssetBase)(object)Demo2).Load(); yield return ((ManagedAssetBase)(object)Demo2).Handle; ((ManagedAssetBase)(object)FollowUp).Load(); yield return ((ManagedAssetBase)(object)FollowUp).Handle; ((ManagedAssetBase)(object)Collapse).Load(); yield return ((ManagedAssetBase)(object)Collapse).Handle; ((ManagedAssetBase)(object)FallOver).Load(); yield return ((ManagedAssetBase)(object)FallOver).Handle; ((ManagedAssetBase)(object)Exert).Load(); yield return ((ManagedAssetBase)(object)Exert).Handle; } }