Decompiled source of HEYYEYAAEYAAAEYAEYAA LoudHorn v1.0.0

plugin/HEYYEYAAEYAAAEYAEYAALoudHorn.dll

Decompiled 6 months ago
using System;
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("HEYYEYAAEYAAAEYAEYAALoudHorn")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("Blast HEYYEYAAEYAAAEYAEYAA from the Loud Horn")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("HEYYEYAAEYAAAEYAEYAA Loud Horn")]
[assembly: AssemblyTitle("HEYYEYAAEYAAAEYAEYAALoudHorn")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace HEYYEYAAEYAAAEYAEYAALoudHorn;

[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[DebuggerNonUserCode]
[CompilerGenerated]
internal class AudioResources
{
	private static ResourceManager resourceMan;

	private static CultureInfo resourceCulture;

	[EditorBrowsable(EditorBrowsableState.Advanced)]
	internal static ResourceManager ResourceManager
	{
		get
		{
			if (resourceMan == null)
			{
				resourceMan = new ResourceManager("HEYYEYAAEYAAAEYAEYAALoudHorn.AudioResources", typeof(AudioResources).Assembly);
			}
			return resourceMan;
		}
	}

	[EditorBrowsable(EditorBrowsableState.Advanced)]
	internal static CultureInfo Culture
	{
		get
		{
			return resourceCulture;
		}
		set
		{
			resourceCulture = value;
		}
	}

	internal static UnmanagedMemoryStream hey_loop => ResourceManager.GetStream("hey_loop", resourceCulture);

	internal static UnmanagedMemoryStream hey_loop_far => ResourceManager.GetStream("hey_loop_far", resourceCulture);

	internal AudioResources()
	{
	}
}
internal class PCMHelpers
{
	public readonly struct PcmHeader
	{
		private const int SizeIndex = 16;

		private readonly float _positiveDepth;

		private readonly float _negativeDepth;

		public int BitDepth { get; }

		public int AudioSampleSize { get; }

		public int AudioSampleCount { get; }

		public ushort Channels { get; }

		public int SampleRate { get; }

		public int AudioStartIndex { get; }

		public int ByteRate { get; }

		public ushort BlockAlign { get; }

		private PcmHeader(int bitDepth, int audioSize, int audioStartIndex, ushort channels, int sampleRate, int byteRate, ushort blockAlign)
		{
			BitDepth = bitDepth;
			_negativeDepth = Mathf.Pow(2f, (float)BitDepth - 1f);
			_positiveDepth = _negativeDepth - 1f;
			AudioSampleSize = bitDepth / 8;
			AudioSampleCount = Mathf.FloorToInt((float)audioSize / (float)AudioSampleSize);
			AudioStartIndex = audioStartIndex;
			Channels = channels;
			SampleRate = sampleRate;
			ByteRate = byteRate;
			BlockAlign = blockAlign;
		}

		public static PcmHeader FromBytes(byte[] pcmBytes)
		{
			using MemoryStream pcmStream = new MemoryStream(pcmBytes);
			return FromStream(pcmStream);
		}

		public static PcmHeader FromStream(Stream pcmStream)
		{
			pcmStream.Position = 16L;
			using BinaryReader binaryReader = new BinaryReader(pcmStream);
			int num = binaryReader.ReadInt32();
			ushort num2 = binaryReader.ReadUInt16();
			string audioFormatFromCode = GetAudioFormatFromCode(num2);
			if (num2 != 1 && num2 == 65534)
			{
				throw new ArgumentOutOfRangeException("pcmStream", $"Detected format code '{num2}' {audioFormatFromCode}, but only PCM and WaveFormatExtensible uncompressed formats are currently supported.");
			}
			ushort channels = binaryReader.ReadUInt16();
			int sampleRate = binaryReader.ReadInt32();
			int byteRate = binaryReader.ReadInt32();
			ushort blockAlign = binaryReader.ReadUInt16();
			ushort bitDepth = binaryReader.ReadUInt16();
			pcmStream.Position = 16 + num + 8;
			int audioSize = binaryReader.ReadInt32();
			return new PcmHeader(bitDepth, audioSize, (int)pcmStream.Position, channels, sampleRate, byteRate, blockAlign);
		}

		public float NormalizeSample(float rawSample)
		{
			float num = ((rawSample < 0f) ? _negativeDepth : _positiveDepth);
			return rawSample / num;
		}

		private static string GetAudioFormatFromCode(ushort code)
		{
			return code switch
			{
				1 => "PCM", 
				2 => "ADPCM", 
				3 => "IEEE", 
				7 => "?-law", 
				65534 => "WaveFormatExtensible", 
				_ => throw new ArgumentOutOfRangeException("code", code, "Unknown wav code format."), 
			};
		}
	}

	public readonly struct PcmData
	{
		public float[] Value { get; }

		public int Length { get; }

		public int Channels { get; }

		public int SampleRate { get; }

		private PcmData(float[] value, int channels, int sampleRate)
		{
			Value = value;
			Length = value.Length;
			Channels = channels;
			SampleRate = sampleRate;
		}

		public static PcmData FromBytes(byte[] bytes)
		{
			if (bytes == null)
			{
				throw new ArgumentNullException("bytes");
			}
			PcmHeader pcmHeader = PcmHeader.FromBytes(bytes);
			if (pcmHeader.BitDepth != 16 && pcmHeader.BitDepth != 32 && pcmHeader.BitDepth != 8)
			{
				throw new ArgumentOutOfRangeException("BitDepth", pcmHeader.BitDepth, "Supported values are: 8, 16, 32");
			}
			float[] array = new float[pcmHeader.AudioSampleCount];
			for (int i = 0; i < array.Length; i++)
			{
				int num = pcmHeader.AudioStartIndex + i * pcmHeader.AudioSampleSize;
				array[i] = pcmHeader.NormalizeSample(pcmHeader.BitDepth switch
				{
					8 => (int)bytes[num], 
					16 => BitConverter.ToInt16(bytes, num), 
					32 => BitConverter.ToInt32(bytes, num), 
					_ => throw new ArgumentOutOfRangeException("BitDepth", pcmHeader.BitDepth, "Supported values are: 8, 16, 32"), 
				});
			}
			return new PcmData(array, pcmHeader.Channels, pcmHeader.SampleRate);
		}
	}
}
[BepInPlugin("HEYYEYAAEYAAAEYAEYAALoudHorn", "HEYYEYAAEYAAAEYAEYAA Loud Horn", "1.0.0")]
public class Plugin : BaseUnityPlugin
{
	public ManualLogSource PluginLogger;

	public static AudioClip heMan;

	public static AudioClip heManFar;

	private void Awake()
	{
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		PluginLogger = ((BaseUnityPlugin)this).Logger;
		((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin HEYYEYAAEYAAAEYAEYAALoudHorn is loaded!");
		Harmony val = new Harmony("HEYYEYAAEYAAAEYAEYAALoudHorn");
		((BaseUnityPlugin)this).Logger.LogInfo((object)"Audio loading...");
		heMan = GetClipFromResources(AudioResources.hey_loop);
		heManFar = GetClipFromResources(AudioResources.hey_loop_far);
		((BaseUnityPlugin)this).Logger.LogInfo((object)"Audio loaded!");
		val.PatchAll();
	}

	private static AudioClip GetClipFromResources(UnmanagedMemoryStream audioResource, string clipName = "pcm")
	{
		MemoryStream memoryStream = new MemoryStream();
		audioResource.CopyTo(memoryStream);
		PCMHelpers.PcmData pcmData = PCMHelpers.PcmData.FromBytes(memoryStream.ToArray());
		AudioClip obj = AudioClip.Create(clipName, pcmData.Length, pcmData.Channels, pcmData.SampleRate, false);
		obj.SetData(pcmData.Value, 0);
		return obj;
	}
}
[HarmonyPatch(typeof(ShipAlarmCord))]
public class ShipHornPatch
{
	[HarmonyPatch("HoldCordDown")]
	[HarmonyPatch("PullCordClientRpc")]
	[HarmonyPatch("PullCordServerRpc")]
	[HarmonyPrefix]
	private static void SoundPatch(AudioSource ___hornClose, AudioSource ___hornFar)
	{
		___hornClose.clip = Plugin.heMan;
		___hornFar.clip = Plugin.heManFar;
	}
}
public static class PluginInfo
{
	public const string PLUGIN_GUID = "HEYYEYAAEYAAAEYAEYAALoudHorn";

	public const string PLUGIN_NAME = "HEYYEYAAEYAAAEYAEYAA Loud Horn";

	public const string PLUGIN_VERSION = "1.0.0";
}