using System;
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 AngryDuck.Patches;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("angryduck")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("angryduck")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("177ce422-ce2b-4a69-838c-55bec10d7e7f")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
[BepInPlugin("atomiclabs.ANGRYDUCK", "Angry Duck", "1.0.0")]
public class AngryDuckMod : BaseUnityPlugin
{
public const string modGUID = "atomiclabs.ANGRYDUCK";
public const string modName = "Angry Duck";
public const string modVersion = "1.0.0";
public static AngryDuckMod instance;
public static List<AudioClip> sounds;
public static readonly Random random = new Random();
private Harmony harmony;
private AssetBundle bundle;
internal ManualLogSource logger;
public AudioClip attackLoopClip;
public AudioClip stunClip;
public AudioClip stunStopClip;
public AudioClip transformClip;
public AudioClip deathClip;
public AudioClip noticeClip;
private void Awake()
{
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Expected O, but got Unknown
logger = ((BaseUnityPlugin)this).Logger;
logger.LogInfo((object)"Loading Angry Duck mod...");
if ((Object)(object)instance == (Object)null)
{
instance = this;
harmony = new Harmony("atomiclabs.ANGRYDUCK");
harmony.PatchAll(typeof(EnemyDuckAnimPatch));
sounds = new List<AudioClip>();
string location = ((BaseUnityPlugin)this).Info.Location;
location = location.TrimEnd("AngryDuck.dll".ToCharArray());
bundle = AssetBundle.LoadFromFile(location + "angryducksounds");
if ((Object)(object)bundle == (Object)null)
{
logger.LogError((object)"Failed to load asset bundle!");
return;
}
sounds = bundle.LoadAllAssets<AudioClip>().ToList();
if (sounds.Count == 0)
{
logger.LogError((object)"No sounds found in the asset bundle!");
return;
}
logger.LogInfo((object)$"Loaded {sounds.Count} sounds from asset bundle! First sound: {((Object)sounds[0]).name}");
logger.LogInfo((object)"Successfully started Angry Duck mod!");
attackLoopClip = bundle.LoadAsset<AudioClip>("attackloopsound");
stunClip = bundle.LoadAsset<AudioClip>("stunsound");
stunStopClip = bundle.LoadAsset<AudioClip>("stunstopsound");
transformClip = bundle.LoadAsset<AudioClip>("transformsound");
deathClip = bundle.LoadAsset<AudioClip>("deathsound");
noticeClip = bundle.LoadAsset<AudioClip>("noticesound");
if ((Object)(object)attackLoopClip == (Object)null || (Object)(object)stunClip == (Object)null || (Object)(object)stunStopClip == (Object)null || (Object)(object)transformClip == (Object)null || (Object)(object)deathClip == (Object)null || (Object)(object)noticeClip == (Object)null)
{
logger.LogError((object)"Failed to load one or more sounds from asset bundle!");
}
}
else
{
Object.Destroy((Object)(object)this);
}
}
public AudioClip GetRandomSound()
{
if (sounds == null || sounds.Count == 0)
{
logger.LogError((object)"Sounds list is empty or null.");
return null;
}
return sounds[random.Next(sounds.Count)];
}
}
namespace AngryDuck.Patches;
[HarmonyPatch(typeof(EnemyDuckAnim))]
internal class EnemyDuckAnimPatch
{
[HarmonyPatch("Awake")]
[HarmonyPostfix]
private static void ReplaceAudio(EnemyDuckAnim __instance)
{
AudioClip randomSound = AngryDuckMod.instance.GetRandomSound();
if ((Object)(object)randomSound != (Object)null)
{
__instance.quackSound.Sounds = (AudioClip[])(object)new AudioClip[1] { randomSound };
AngryDuckMod.instance.logger.LogInfo((object)("Replaced quack sound with " + ((Object)randomSound).name));
}
else
{
AngryDuckMod.instance.logger.LogError((object)"Failed to get a random quack sound.");
}
if ((Object)(object)AngryDuckMod.instance.attackLoopClip != (Object)null)
{
__instance.attackLoopSound.Sounds = (AudioClip[])(object)new AudioClip[1] { AngryDuckMod.instance.attackLoopClip };
AngryDuckMod.instance.logger.LogInfo((object)("Replaced attackLoop sound with " + ((Object)AngryDuckMod.instance.attackLoopClip).name));
}
if ((Object)(object)AngryDuckMod.instance.stunClip != (Object)null)
{
__instance.stunSound.Sounds = (AudioClip[])(object)new AudioClip[1] { AngryDuckMod.instance.stunClip };
AngryDuckMod.instance.logger.LogInfo((object)("Replaced stun sound with " + ((Object)AngryDuckMod.instance.stunClip).name));
}
if ((Object)(object)AngryDuckMod.instance.stunStopClip != (Object)null)
{
__instance.stunStopSound.Sounds = (AudioClip[])(object)new AudioClip[1] { AngryDuckMod.instance.stunStopClip };
AngryDuckMod.instance.logger.LogInfo((object)("Replaced stunStop sound with " + ((Object)AngryDuckMod.instance.stunStopClip).name));
}
if ((Object)(object)AngryDuckMod.instance.transformClip != (Object)null)
{
__instance.transformSound.Sounds = (AudioClip[])(object)new AudioClip[1] { AngryDuckMod.instance.transformClip };
AngryDuckMod.instance.logger.LogInfo((object)("Replaced transform sound with " + ((Object)AngryDuckMod.instance.transformClip).name));
}
if ((Object)(object)AngryDuckMod.instance.deathClip != (Object)null)
{
__instance.deathSound.Sounds = (AudioClip[])(object)new AudioClip[1] { AngryDuckMod.instance.deathClip };
AngryDuckMod.instance.logger.LogInfo((object)("Replaced death sound with " + ((Object)AngryDuckMod.instance.deathClip).name));
}
if ((Object)(object)AngryDuckMod.instance.noticeClip != (Object)null)
{
__instance.noticeSound.Sounds = (AudioClip[])(object)new AudioClip[1] { AngryDuckMod.instance.noticeClip };
AngryDuckMod.instance.logger.LogInfo((object)("Replaced notice sound with " + ((Object)AngryDuckMod.instance.noticeClip).name));
}
}
}