using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using CRUSH;
using Configgy;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using TMPro;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: AssemblyCompany("CRUSH")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("My first plugin")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("CRUSH")]
[assembly: AssemblyTitle("CRUSH")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
public static class FontLoader
{
public static TMP_FontAsset font;
public static void LoadFont(string filePath)
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Expected O, but got Unknown
if (string.IsNullOrEmpty(filePath) || !File.Exists(filePath))
{
Debug.LogError((object)("Font file not found: " + filePath));
return;
}
File.ReadAllBytes(filePath);
font = TMP_FontAsset.CreateFontAsset(new Font(filePath));
}
}
public class MFDOOM : MonoBehaviour
{
public float floatSpeed = 1f;
private MovementType movementMode = ((ConfigValueElement<MovementType>)(object)Plugin.fortnaught).Value;
private TextMeshPro textMesh;
private float fadeOutTimer = ((ConfigValueElement<float>)(object)Plugin.imrunningoutofnames).Value;
private Vector2 sizenerd = ((ConfigValueElement<Vector2>)(object)Plugin.sigmaprime).Value;
private Vector3 bounceDirection;
private void Awake()
{
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
//IL_0108: Unknown result type (might be due to invalid IL or missing references)
//IL_010d: Unknown result type (might be due to invalid IL or missing references)
textMesh = ((Component)this).GetComponent<TextMeshPro>();
((Component)this).gameObject.AddComponent<AlwaysLookAtCamera>();
((Component)this).gameObject.tag = "IgnorePushes";
((Component)this).transform.localScale = new Vector3(0f - sizenerd.x, sizenerd.y, 1f);
if (((ConfigValueElement<bool>)(object)Plugin.enableCustomFont).Value && (Object)(object)FontLoader.font != (Object)null)
{
((TMP_Text)textMesh).font = FontLoader.font;
}
((TMP_Text)textMesh).fontMaterial.SetFloat(ShaderUtilities.ID_OutlineWidth, ((ConfigValueElement<bool>)(object)Plugin.enableOutline).Value ? ((ConfigValueElement<float>)(object)Plugin.outlineThickness).Value : 0f);
((TMP_Text)textMesh).fontMaterial.SetColor(ShaderUtilities.ID_OutlineColor, ((ConfigValueElement<bool>)(object)Plugin.enableOutline).Value ? ((ConfigValueElement<Color>)(object)Plugin.outlineColor).Value : Color.clear);
if (movementMode == MovementType.FlyingAway)
{
bounceDirection = ((Random.value < 0.5f) ? Vector3.left : Vector3.right) + Vector3.up;
((Vector3)(ref bounceDirection)).Normalize();
}
}
private void Update()
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
if (movementMode == MovementType.Normal)
{
Transform transform = ((Component)this).transform;
transform.position += Vector3.up * floatSpeed * Time.deltaTime;
}
else if (movementMode == MovementType.FlyingAway)
{
Transform transform2 = ((Component)this).transform;
transform2.position += (bounceDirection = Vector3.Lerp(bounceDirection, Vector3.zero, Time.deltaTime)) * floatSpeed * Time.deltaTime * 30f;
}
fadeOutTimer -= Time.deltaTime;
if (fadeOutTimer <= 0f)
{
Object.Destroy((Object)(object)((Component)this).gameObject);
}
ApplyGradientColor();
}
private void ApplyGradientColor()
{
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
if (((ConfigValueElement<bool>)(object)Plugin.useGradient).Value)
{
((Graphic)textMesh).color = Color.white;
((TMP_Text)textMesh).enableVertexGradient = true;
((TMP_Text)textMesh).colorGradient = new VertexGradient(((ConfigValueElement<Color>)(object)Plugin.startGradientColor).Value, ((ConfigValueElement<Color>)(object)Plugin.startGradientColor).Value, ((ConfigValueElement<Color>)(object)Plugin.endGradientColor).Value, ((ConfigValueElement<Color>)(object)Plugin.endGradientColor).Value);
}
else
{
((Graphic)textMesh).color = ((ConfigValueElement<Color>)(object)Plugin.ilikemycheesedrippybruh).Value;
((TMP_Text)textMesh).enableVertexGradient = false;
}
}
public void SetText(float damage)
{
if ((float)Mathf.FloorToInt(damage * 10f) / 10f != 0f)
{
((TMP_Text)textMesh).text = damage.ToString("F1");
}
else
{
Object.Destroy((Object)(object)((Component)this).gameObject);
}
}
}
namespace CRUSH
{
public enum MovementType
{
Normal,
FlyingAway
}
[BepInPlugin("doomahreal.ultrakill.CRUSH", "CRUSH", "1.0.0")]
public class Plugin : BaseUnityPlugin
{
public static GameObject floatingTextPrefab;
public static AudioClip bundledHitSound;
public static AudioSource hitsnd_plr;
public static AudioClip[] customHitSounds;
private ConfigBuilder config;
[Configgable("MAIN STUFF", "ENABLED:", 0, null)]
public static ConfigToggle enabled = new ConfigToggle(true);
[Configgable("MAIN STUFF", "ENABLE HIT SOUND", 1, null)]
public static ConfigToggle enableHitSound = new ConfigToggle(false);
[Configgable("MAIN STUFF", "SIZE OF DMG TEXT:", 2, null)]
public static ConfigVector2 sigmaprime = new ConfigVector2(new Vector2(1f, 1f), (Func<Vector2, bool>)null);
[Configgable("MAIN STUFF", "TEXT DURATION:", 3, null)]
public static ConfigInputField<float> imrunningoutofnames = new ConfigInputField<float>(1.5f, (Func<float, bool>)null, (Func<string, ValueTuple<bool, float>>)null);
[Configgable("MAIN STUFF", "TEXT MOVEMENT TYPE:", 4, null)]
public static ConfigDropdown<MovementType> fortnaught = new ConfigDropdown<MovementType>(new MovementType[2]
{
MovementType.Normal,
MovementType.FlyingAway
}, (string[])null, 0);
[Configgable("DMG TEXT COLOR SLIDERS", "SOLID COLOR:", 0, null)]
public static ConfigColor ilikemycheesedrippybruh = new ConfigColor(Color.green);
[Configgable("DMG TEXT COLOR SLIDERS", "USE GRADIENT COLOR", 0, null)]
public static ConfigToggle useGradient = new ConfigToggle(false);
[Configgable("DMG TEXT COLOR SLIDERS", "START COLOR", 0, null)]
public static ConfigColor startGradientColor = new ConfigColor(Color.green);
[Configgable("DMG TEXT COLOR SLIDERS", "END COLOR", 0, null)]
public static ConfigColor endGradientColor = new ConfigColor(Color.yellow);
[Configgable("CUSTOM FONT MAKER", "ENABLE CUSTOM FONT", 0, null)]
public static ConfigToggle enableCustomFont = new ConfigToggle(false);
[Configgable("CUSTOM FONT MAKER", null, 0, null)]
public static ConfigButton fontButton = new ConfigButton((Action)OpenFontsFolder, "OPEN FONT FOLDER (ONLY SUPPORTS 1 .TTF FILE)");
[Configgable("CUSTOM FONT MAKER", null, 0, null)]
public static ConfigButton refreshFontButton = new ConfigButton((Action)RefreshFont, "REFRESH FONT");
[Configgable("CUSTOM HIT SOUND", null, 0, null)]
public static ConfigButton openHitsoundFolderButton = new ConfigButton((Action)SoundLoader.OpenHitsoundFolder, "OPEN HITSOUND FOLDER (SUPPORTS MULTIPLE SOUND FILES)");
[Configgable("CUSTOM HIT SOUND", null, 0, null)]
public static ConfigButton refreshHitsoundButton = new ConfigButton((Action)SoundLoader.RefreshHitSounds, "REFRESH HITSOUND");
[Configgable("RANDOM PITCH", "ENABLE PITCH RANDOMIZATION", 0, null)]
public static ConfigToggle enablePitchRandomization = new ConfigToggle(true);
[Configgable("RANDOM PITCH", "MINIMUM PITCH", 0, null)]
public static ConfigInputField<float> minPitch = new ConfigInputField<float>(0.8f, (Func<float, bool>)null, (Func<string, ValueTuple<bool, float>>)null);
[Configgable("RANDOM PITCH", "MAXIMUM PITCH", 0, null)]
public static ConfigInputField<float> maxPitch = new ConfigInputField<float>(1.2f, (Func<float, bool>)null, (Func<string, ValueTuple<bool, float>>)null);
[Configgable("OUTLINES", "ENABLE OUTLINE", 0, null)]
public static ConfigToggle enableOutline = new ConfigToggle(false);
[Configgable("OUTLINES", "OUTLINE THICKNESS", 1, null)]
public static ConfigInputField<float> outlineThickness = new ConfigInputField<float>(0.2f, (Func<float, bool>)null, (Func<string, ValueTuple<bool, float>>)null);
[Configgable("OUTLINES", "OUTLINE COLOR", 2, null)]
public static ConfigColor outlineColor = new ConfigColor(Color.black);
private void Awake()
{
//IL_0080: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_008b: Expected O, but got Unknown
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Fonts");
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
string[] files = Directory.GetFiles(path, "*.ttf");
if (((ConfigValueElement<bool>)(object)enableCustomFont).Value && files.Length != 0)
{
FontLoader.LoadFont(files[0]);
}
AssetBundle obj = AssetBundle.LoadFromMemory(ExtractResource("ULTRAKILLBepInExTemplate.ligmaballs.bundle"));
floatingTextPrefab = obj.LoadAsset<GameObject>("cool_damage_text");
bundledHitSound = obj.LoadAsset<AudioClip>("tf2_sigma");
GameObject val = new GameObject("le epic hitsound");
Object.DontDestroyOnLoad((Object)val);
hitsnd_plr = val.AddComponent<AudioSource>();
SoundLoader.RefreshHitSounds();
new Harmony("doomahreal.ultrakill.CRUSH").PatchAll();
}
public static byte[] ExtractResource(string filename)
{
using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(filename);
if (stream == null)
{
return null;
}
byte[] array = new byte[stream.Length];
stream.Read(array, 0, array.Length);
return array;
}
public static void OpenFontsFolder()
{
Application.OpenURL(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Fonts"));
}
public static void RefreshFont()
{
string[] files = Directory.GetFiles(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Fonts"), "*.ttf");
if (((ConfigValueElement<bool>)(object)enableCustomFont).Value && files.Length != 0)
{
FontLoader.LoadFont(files[0]);
}
}
private void Start()
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Expected O, but got Unknown
config = new ConfigBuilder("doomahreal.ultrakill.CRUSH", "CRUSH");
config.BuildAll();
}
}
[HarmonyPatch(typeof(EnemyIdentifier), "DeliverDamage")]
public static class DeliverDamagePatch
{
public static void Postfix(EnemyIdentifier __instance, GameObject target, Vector3 force, Vector3 hitPoint, float multiplier, bool tryForExplode, float critMultiplier, GameObject sourceWeapon, bool ignoreTotalDamageTakenMultiplier, bool fromExplosion)
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
if (__instance.dead || !((ConfigValueElement<bool>)(object)Plugin.enabled).Value)
{
return;
}
Vector3 val = hitPoint + new Vector3(Random.Range(-0.5f, 0.5f), 2f, Random.Range(-0.5f, 0.5f));
Object.Instantiate<GameObject>(Plugin.floatingTextPrefab, val, Quaternion.identity).GetComponent<MFDOOM>().SetText(multiplier);
if (((ConfigValueElement<bool>)(object)Plugin.enableHitSound).Value)
{
AudioSource val2 = Object.Instantiate<AudioSource>(Plugin.hitsnd_plr);
if (((ConfigValueElement<bool>)(object)Plugin.enablePitchRandomization).Value)
{
val2.pitch = Random.Range(((ConfigValueElement<float>)(object)Plugin.minPitch).Value, ((ConfigValueElement<float>)(object)Plugin.maxPitch).Value);
}
else
{
val2.pitch = 1f;
}
if (Plugin.customHitSounds.Length != 0)
{
val2.clip = Plugin.customHitSounds[Random.Range(0, Plugin.customHitSounds.Length)];
}
else
{
val2.clip = Plugin.bundledHitSound;
}
val2.Play();
Object.Destroy((Object)(object)val2, val2.clip.length / val2.pitch);
}
}
}
public static class SoundLoader
{
private static string hitsoundDirectory = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Hitsounds");
public static void OpenHitsoundFolder()
{
Application.OpenURL(hitsoundDirectory);
}
public static void RefreshHitSounds()
{
if (!Directory.Exists(hitsoundDirectory))
{
Directory.CreateDirectory(hitsoundDirectory);
}
MonoBehaviour val = Object.FindObjectOfType<MonoBehaviour>();
val.StartCoroutine(LoadAudioClips(Directory.GetFiles(hitsoundDirectory, "*.*"), val));
}
public static AudioType GetAudioType(string file)
{
return (AudioType)(Path.GetExtension(file).ToLower() switch
{
".mp3" => 13,
".wav" => 20,
".ogg" => 14,
_ => 0,
});
}
private static IEnumerator LoadAudioClips(string[] audioFiles, MonoBehaviour context)
{
List<AudioClip> loadedClips = new List<AudioClip>();
foreach (string text in audioFiles)
{
DownloadHandlerAudioClip dh = new DownloadHandlerAudioClip("file://" + text, GetAudioType(text));
dh.compressed = true;
UnityWebRequest wr = new UnityWebRequest("file://" + text, "GET", (DownloadHandler)(object)dh, (UploadHandler)null);
try
{
yield return wr.SendWebRequest();
if (wr.responseCode == 200)
{
AudioClip audioClip = dh.audioClip;
if ((Object)(object)audioClip != (Object)null)
{
loadedClips.Add(audioClip);
}
}
}
finally
{
((IDisposable)wr)?.Dispose();
}
}
Plugin.customHitSounds = loadedClips.ToArray();
Plugin.hitsnd_plr.clip = ((Plugin.customHitSounds.Length == 0) ? Plugin.bundledHitSound : null);
}
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
internal sealed class IgnoresAccessChecksToAttribute : Attribute
{
internal IgnoresAccessChecksToAttribute(string assemblyName)
{
}
}
}