using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using Overkill.Modules;
using R2API;
using R2API.Networking;
using R2API.Networking.Interfaces;
using RiskOfOptions;
using RiskOfOptions.OptionConfigs;
using RiskOfOptions.Options;
using RoR2;
using ThreeEyedGames;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("Overkill")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Overkill")]
[assembly: AssemblyTitle("Overkill")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace Overkill
{
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("com.rob.Overkill", "Overkill", "1.0.0")]
public class Plugin : BaseUnityPlugin
{
public const string MODUID = "com.rob.Overkill";
public static bool rooInstalled => Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions");
private void Awake()
{
Config.myConfig = ((BaseUnityPlugin)this).Config;
OverkillAssets.Init();
Config.Init();
NetworkingAPI.RegisterMessageType<SyncModelExplosion>();
Hook();
}
private void Hook()
{
GlobalEventManager.onCharacterDeathGlobal += GlobalEventManager_onCharacterDeathGlobal;
}
public static void SpawnBloodEffect(DamageReport damageReport)
{
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: 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_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: 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_0078: 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_0088: Expected O, but got Unknown
//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
//IL_01cc: Unknown result type (might be due to invalid IL or missing references)
//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
//IL_01d4: Unknown result type (might be due to invalid IL or missing references)
//IL_01d9: Unknown result type (might be due to invalid IL or missing references)
//IL_01de: Unknown result type (might be due to invalid IL or missing references)
//IL_01df: Unknown result type (might be due to invalid IL or missing references)
//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
//IL_01f4: Expected O, but got Unknown
//IL_018d: Unknown result type (might be due to invalid IL or missing references)
//IL_0192: Unknown result type (might be due to invalid IL or missing references)
//IL_0193: Unknown result type (might be due to invalid IL or missing references)
//IL_019a: Unknown result type (might be due to invalid IL or missing references)
//IL_019b: Unknown result type (might be due to invalid IL or missing references)
//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
//IL_01bb: Expected O, but got Unknown
//IL_014e: Unknown result type (might be due to invalid IL or missing references)
//IL_0153: Unknown result type (might be due to invalid IL or missing references)
//IL_0154: Unknown result type (might be due to invalid IL or missing references)
//IL_015b: Unknown result type (might be due to invalid IL or missing references)
//IL_015c: Unknown result type (might be due to invalid IL or missing references)
//IL_0161: Unknown result type (might be due to invalid IL or missing references)
//IL_0166: Unknown result type (might be due to invalid IL or missing references)
//IL_016e: Unknown result type (might be due to invalid IL or missing references)
//IL_0173: Unknown result type (might be due to invalid IL or missing references)
//IL_0178: Unknown result type (might be due to invalid IL or missing references)
//IL_0183: Expected O, but got Unknown
//IL_013d: Unknown result type (might be due to invalid IL or missing references)
if (!Config.enableGore.Value)
{
return;
}
CharacterBody victimBody = damageReport.victimBody;
if (!Object.op_Implicit((Object)(object)victimBody))
{
return;
}
Vector3 corePosition = victimBody.corePosition;
if (OverkillAssets.bloodExplosionOverrides.ContainsKey(((Object)victimBody).name))
{
EffectManager.SpawnEffect(OverkillAssets.bloodExplosionOverrides[((Object)victimBody).name], new EffectData
{
origin = corePosition,
rotation = Quaternion.identity,
color = Color32.op_Implicit(Color.white)
}, true);
}
else if (Object.op_Implicit((Object)(object)damageReport.victimBody.modelLocator) && Object.op_Implicit((Object)(object)damageReport.victimBody.modelLocator.modelTransform))
{
SurfaceDefProvider componentInChildren = ((Component)damageReport.victimBody.modelLocator.modelTransform).GetComponentInChildren<SurfaceDefProvider>();
if (Object.op_Implicit((Object)(object)componentInChildren) && Object.op_Implicit((Object)(object)componentInChildren.surfaceDef))
{
Decal componentInChildren2 = OverkillAssets.genericBloodExplosionEffect.GetComponentInChildren<Decal>();
if (Object.op_Implicit((Object)(object)componentInChildren2))
{
componentInChildren2.Material = Object.Instantiate<Material>(componentInChildren2.Material);
componentInChildren2.Material.SetColor("_Color", componentInChildren.surfaceDef.approximateColor);
}
EffectManager.SpawnEffect(OverkillAssets.genericBloodExplosionEffect, new EffectData
{
origin = corePosition,
rotation = Quaternion.identity,
color = Color32.op_Implicit(componentInChildren.surfaceDef.approximateColor)
}, true);
}
else
{
EffectManager.SpawnEffect(OverkillAssets.largeBloodExplosionEffect, new EffectData
{
origin = corePosition,
rotation = Quaternion.identity,
color = Color32.op_Implicit(Color.white)
}, true);
}
}
else
{
EffectManager.SpawnEffect(OverkillAssets.largeBloodExplosionEffect, new EffectData
{
origin = corePosition,
rotation = Quaternion.identity,
color = Color32.op_Implicit(Color.white)
}, true);
}
}
private static void GlobalEventManager_onCharacterDeathGlobal(DamageReport damageReport)
{
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
if (Object.op_Implicit((Object)(object)damageReport.victimBody) && Object.op_Implicit((Object)(object)damageReport.victimBody.healthComponent) && damageReport.damageDealt >= damageReport.victimBody.healthComponent.fullCombinedHealth * Config.healthThreshold.Value)
{
SpawnBloodEffect(damageReport);
((Component)damageReport.victimBody).gameObject.AddComponent<ExplodeModel>();
NetworkIdentity component = ((Component)damageReport.victimBody).gameObject.GetComponent<NetworkIdentity>();
if (Object.op_Implicit((Object)(object)component))
{
NetMessageExtensions.Send((INetMessage)(object)new SyncModelExplosion(component.netId, ((Component)damageReport.victimBody).gameObject), (NetworkDestination)1);
}
}
}
}
internal class SyncModelExplosion : INetMessage, ISerializableObject
{
private NetworkInstanceId netId;
private GameObject target;
public SyncModelExplosion()
{
}
public SyncModelExplosion(NetworkInstanceId netId, GameObject target)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
this.netId = netId;
this.target = target;
}
public void Deserialize(NetworkReader reader)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
netId = reader.ReadNetworkId();
target = reader.ReadGameObject();
}
public void OnReceived()
{
if (Object.op_Implicit((Object)(object)target))
{
target.AddComponent<ExplodeModel>();
}
}
public void Serialize(NetworkWriter writer)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
writer.Write(netId);
writer.Write(target);
}
}
public class ExplodeModel : MonoBehaviour
{
private void Awake()
{
((MonoBehaviour)this).Invoke("Boom", 0.1f);
}
private void Boom()
{
ModelLocator component = ((Component)this).GetComponent<ModelLocator>();
if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.modelTransform))
{
((Component)component.modelTransform).gameObject.SetActive(false);
}
Object.Destroy((Object)(object)this);
}
}
}
namespace Overkill.Modules
{
internal static class Config
{
public static ConfigFile myConfig;
public static ConfigEntry<bool> enableGore;
public static ConfigEntry<float> healthThreshold;
internal static void Init()
{
enableGore = BindAndOptions("01 - General", "Enable Gore", defaultValue: true, "If true, spawns a bloody explosion when an enemy is overkilled. Disable for a performance boost.");
healthThreshold = BindAndOptionsSlider("01 - General", "Health Threshold", 5f, "The damage threshold needed to trigger an overkill.", 1f, 50f);
}
public static void InitROO(Sprite modSprite, string modDescription)
{
if (Plugin.rooInstalled)
{
_InitROO(modSprite, modDescription);
}
}
public static void _InitROO(Sprite modSprite, string modDescription)
{
ModSettingsManager.SetModIcon(modSprite);
ModSettingsManager.SetModDescription(modDescription);
}
public static ConfigEntry<T> BindAndOptions<T>(string section, string name, T defaultValue, string description = "", bool restartRequired = false)
{
if (string.IsNullOrEmpty(description))
{
description = name;
}
if (restartRequired)
{
description += " (restart required)";
}
ConfigEntry<T> val = myConfig.Bind<T>(section, name, defaultValue, description);
if (Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions"))
{
TryRegisterOption<T>(val, restartRequired);
}
return val;
}
public static ConfigEntry<float> BindAndOptionsSlider(string section, string name, float defaultValue, string description = "", float min = 0f, float max = 20f, bool restartRequired = false)
{
if (string.IsNullOrEmpty(description))
{
description = name;
}
if (restartRequired)
{
description += " (restart required)";
}
ConfigEntry<float> val = myConfig.Bind<float>(section, name, defaultValue, description);
if (Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions"))
{
TryRegisterOptionSlider(val, min, max, restartRequired);
}
return val;
}
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
private static void TryRegisterOption<T>(ConfigEntry<T> entry, bool restartRequired)
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Expected O, but got Unknown
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Expected O, but got Unknown
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Expected O, but got Unknown
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Expected O, but got Unknown
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: Expected O, but got Unknown
if (entry is ConfigEntry<float>)
{
ModSettingsManager.AddOption((BaseOption)new SliderOption(entry as ConfigEntry<float>, new SliderConfig
{
min = 0f,
max = 20f,
formatString = "{0:0.00}",
restartRequired = restartRequired
}));
}
if (entry is ConfigEntry<int>)
{
ModSettingsManager.AddOption((BaseOption)new IntSliderOption(entry as ConfigEntry<int>, restartRequired));
}
if (entry is ConfigEntry<bool>)
{
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(entry as ConfigEntry<bool>, restartRequired));
}
if (entry is ConfigEntry<KeyboardShortcut>)
{
ModSettingsManager.AddOption((BaseOption)new KeyBindOption(entry as ConfigEntry<KeyboardShortcut>, restartRequired));
}
}
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
private static void TryRegisterOptionSlider(ConfigEntry<float> entry, float min, float max, bool restartRequired)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Expected O, but got Unknown
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Expected O, but got Unknown
ModSettingsManager.AddOption((BaseOption)new SliderOption(entry, new SliderConfig
{
min = min,
max = max,
formatString = "{0:0.00}",
restartRequired = restartRequired
}));
}
}
public class OverkillAssets
{
internal static GameObject genericBloodExplosionEffect;
internal static GameObject largeBloodExplosionEffect;
internal static GameObject gupBloodExplosionEffect;
internal static GameObject golemBloodExplosionEffect;
internal static GameObject lunarGolemBloodExplosionEffect;
internal static GameObject insectBloodExplosionEffect;
internal static GameObject clayBloodExplosionEffect;
internal static GameObject fireBloodExplosionEffect;
internal static GameObject greenFireBloodExplosionEffect;
internal static GameObject purpleFireBloodExplosionEffect;
internal static GameObject healingBloodExplosionEffect;
internal static Dictionary<string, GameObject> bloodExplosionOverrides = new Dictionary<string, GameObject>();
public static void Init()
{
//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_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Unknown result type (might be due to invalid IL or missing references)
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_0119: Unknown result type (might be due to invalid IL or missing references)
//IL_011e: Unknown result type (might be due to invalid IL or missing references)
//IL_0141: Unknown result type (might be due to invalid IL or missing references)
//IL_0146: Unknown result type (might be due to invalid IL or missing references)
//IL_0159: Unknown result type (might be due to invalid IL or missing references)
//IL_015e: Unknown result type (might be due to invalid IL or missing references)
//IL_017b: Unknown result type (might be due to invalid IL or missing references)
//IL_0180: Unknown result type (might be due to invalid IL or missing references)
//IL_0193: Unknown result type (might be due to invalid IL or missing references)
//IL_0198: Unknown result type (might be due to invalid IL or missing references)
//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
//IL_0207: Unknown result type (might be due to invalid IL or missing references)
//IL_020c: Unknown result type (might be due to invalid IL or missing references)
//IL_0229: Unknown result type (might be due to invalid IL or missing references)
//IL_022e: Unknown result type (might be due to invalid IL or missing references)
//IL_0241: Unknown result type (might be due to invalid IL or missing references)
//IL_0246: Unknown result type (might be due to invalid IL or missing references)
//IL_0263: Unknown result type (might be due to invalid IL or missing references)
//IL_0268: Unknown result type (might be due to invalid IL or missing references)
//IL_027b: Unknown result type (might be due to invalid IL or missing references)
//IL_0280: Unknown result type (might be due to invalid IL or missing references)
//IL_029d: Unknown result type (might be due to invalid IL or missing references)
//IL_02a2: Unknown result type (might be due to invalid IL or missing references)
//IL_02b5: Unknown result type (might be due to invalid IL or missing references)
//IL_02ba: Unknown result type (might be due to invalid IL or missing references)
//IL_02d7: Unknown result type (might be due to invalid IL or missing references)
//IL_02dc: Unknown result type (might be due to invalid IL or missing references)
//IL_02ef: Unknown result type (might be due to invalid IL or missing references)
//IL_02f4: Unknown result type (might be due to invalid IL or missing references)
//IL_0311: Unknown result type (might be due to invalid IL or missing references)
//IL_0316: Unknown result type (might be due to invalid IL or missing references)
//IL_0329: Unknown result type (might be due to invalid IL or missing references)
//IL_032e: Unknown result type (might be due to invalid IL or missing references)
using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Overkill.overkill_bank.bnk"))
{
byte[] array = new byte[stream.Length];
stream.Read(array, 0, array.Length);
SoundBanks.Add(array);
}
Config.InitROO(null, "Badass");
Material val = Object.Instantiate<Material>(Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/blackbeach/matBloodDecal.mat").WaitForCompletion());
val.SetTexture("_MaskTex", Addressables.LoadAssetAsync<Texture>((object)"RoR2/Base/ClayBruiser/texClayBruiserDeathDecalMask.png").WaitForCompletion());
val.SetTexture("_MainTex", (Texture)null);
Material val2 = Object.Instantiate<Material>(Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/blackbeach/matBloodDecal.mat").WaitForCompletion());
val2.SetTexture("_MaskTex", Addressables.LoadAssetAsync<Texture>((object)"RoR2/Base/ClayBruiser/texClayBruiserDeathDecalMask.png").WaitForCompletion());
val2.SetTexture("_MainTex", (Texture)null);
val2.SetColor("_Color", Color.red);
genericBloodExplosionEffect = CreateBloodExplosionEffect("RavagerGenericBloodExplosion", Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Common/VFX/matBloodGeneric.mat").WaitForCompletion(), 1f, val);
largeBloodExplosionEffect = CreateBloodExplosionEffect("RavagerLargeBloodExplosion", Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Common/VFX/matBloodHumanLarge.mat").WaitForCompletion(), 3f, val2);
gupBloodExplosionEffect = CreateBloodExplosionEffect("RavagerGupBloodExplosion", Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/Gup/matGupBlood.mat").WaitForCompletion(), 1f, Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/FireballsOnHit/matFireMeatballDecal.mat").WaitForCompletion());
golemBloodExplosionEffect = CreateBloodExplosionEffect("RavagerGolemBloodExplosion", Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Titan/matTitanLaserGlob.mat").WaitForCompletion(), 1f, Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/VoidSurvivor/matVoidPodImpactDecal.mat").WaitForCompletion());
lunarGolemBloodExplosionEffect = CreateBloodExplosionEffect("RavagerLunarGolemBloodExplosion", Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/LunarGolem/matLunarGolemExplosion.mat").WaitForCompletion(), 1f, Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/LunarExploder/matLunarExploderDeathDecal.mat").WaitForCompletion());
insectBloodExplosionEffect = CreateBloodExplosionEffect("RavagerInsectBloodExplosion", Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/AcidLarva/matAcidLarvaBlood.mat").WaitForCompletion(), 1f, Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetleQueenAcidDecal.mat").WaitForCompletion());
clayBloodExplosionEffect = CreateBloodExplosionEffect("RavagerClayBloodExplosion", Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Common/VFX/matBloodClayLarge.mat").WaitForCompletion(), 1f, Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/ClayBruiser/matClayGooDecalSplat.mat").WaitForCompletion());
fireBloodExplosionEffect = CreateBloodExplosionEffect("RavagerFireBloodExplosion", Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Common/VFX/matFirePillarParticle.mat").WaitForCompletion(), 1f, Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/Molotov/matMolotovDecal.mat").WaitForCompletion());
greenFireBloodExplosionEffect = CreateBloodExplosionEffect("RavagerGreenFireBloodExplosion", Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/GreaterWisp/matOmniExplosion1GreaterWisp.mat").WaitForCompletion(), 1f, Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/AcidLarva/matAcidLarvaDeathDecal.mat").WaitForCompletion());
purpleFireBloodExplosionEffect = CreateBloodExplosionEffect("RavagerPurpleFireBloodExplosion", Addressables.LoadAssetAsync<Material>((object)"RoR2/Junk/AncientWisp/matAncientWillowispSpiral.mat").WaitForCompletion(), 1f, Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/Molotov/matMolotovDecal.mat").WaitForCompletion());
healingBloodExplosionEffect = CreateBloodExplosionEffect("RavagerHealingBloodExplosion", Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetleQueenAcidFizz.mat").WaitForCompletion(), 1f, Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/AcidLarva/matAcidLarvaDeathDecal.mat").WaitForCompletion());
bloodExplosionOverrides = new Dictionary<string, GameObject>
{
{ "GolemBody(Clone)", golemBloodExplosionEffect },
{ "TitanBody(Clone)", golemBloodExplosionEffect },
{ "GupBody(Clone)", gupBloodExplosionEffect },
{ "GeepBody(Clone)", gupBloodExplosionEffect },
{ "GipBody(Clone)", gupBloodExplosionEffect },
{ "ClayBruiserBody(Clone)", clayBloodExplosionEffect },
{ "ClayGrenadierBody(Clone)", clayBloodExplosionEffect },
{ "MoffeinClayManBody(Clone)", clayBloodExplosionEffect },
{ "AcidLarvaBody(Clone)", insectBloodExplosionEffect },
{ "LunarConstructBody(Clone)", lunarGolemBloodExplosionEffect },
{ "LunarWispBody(Clone)", lunarGolemBloodExplosionEffect },
{ "LunarGolemBody(Clone)", lunarGolemBloodExplosionEffect },
{ "LunarExploderBody(Clone)", lunarGolemBloodExplosionEffect },
{ "BellBody(Clone)", golemBloodExplosionEffect },
{ "BodyBrassMonolith(Clone)", golemBloodExplosionEffect },
{ "WispBody(Clone)", fireBloodExplosionEffect },
{ "GreaterWispBody(Clone)", greenFireBloodExplosionEffect },
{ "MoffeinAncientWispBody(Clone)", purpleFireBloodExplosionEffect },
{ "RoboBallMiniBody(Clone)", golemBloodExplosionEffect },
{ "RoboBallBossBody(Clone)", golemBloodExplosionEffect },
{ "SuperRoboBallBossBody(Clone)", golemBloodExplosionEffect },
{ "NewtBody(Clone)", lunarGolemBloodExplosionEffect },
{ "AffixEarthHealerBody(Clone)", healingBloodExplosionEffect }
};
}
private static GameObject CreateBloodExplosionEffect(string effectName, Material bloodMat, float scale = 1f, Material decalMat = null)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
//IL_0139: Unknown result type (might be due to invalid IL or missing references)
//IL_013e: Unknown result type (might be due to invalid IL or missing references)
//IL_0161: Unknown result type (might be due to invalid IL or missing references)
//IL_0166: Unknown result type (might be due to invalid IL or missing references)
//IL_0185: Unknown result type (might be due to invalid IL or missing references)
//IL_018a: Unknown result type (might be due to invalid IL or missing references)
//IL_01b2: Unknown result type (might be due to invalid IL or missing references)
//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
//IL_0215: Unknown result type (might be due to invalid IL or missing references)
//IL_0235: Unknown result type (might be due to invalid IL or missing references)
//IL_023f: Unknown result type (might be due to invalid IL or missing references)
//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
//IL_02c6: Unknown result type (might be due to invalid IL or missing references)
GameObject val = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Brother/BrotherSlamImpact.prefab").WaitForCompletion(), effectName, true);
DestroyOnTimer component = val.GetComponent<DestroyOnTimer>();
if (Object.op_Implicit((Object)(object)component))
{
component.duration = 360f;
}
((Component)val.transform.Find("Spikes, Small")).gameObject.SetActive(false);
((Component)val.transform.Find("PP")).gameObject.SetActive(false);
((Component)val.transform.Find("Point light")).gameObject.SetActive(false);
((Renderer)((Component)val.transform.Find("Flash Lines")).GetComponent<ParticleSystemRenderer>()).material = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Common/VFX/matOpaqueDustLargeDirectional.mat").WaitForCompletion();
((Renderer)((Component)val.transform.GetChild(3)).GetComponent<ParticleSystemRenderer>()).material = bloodMat;
((Renderer)((Component)val.transform.Find("Flash Lines, Fire")).GetComponent<ParticleSystemRenderer>()).material = bloodMat;
((Renderer)((Component)val.transform.GetChild(6)).GetComponent<ParticleSystemRenderer>()).material = bloodMat;
((Renderer)((Component)val.transform.Find("Fire")).GetComponent<ParticleSystemRenderer>()).material = bloodMat;
MainModule main = ((Component)val.transform.Find("Fire")).GetComponent<ParticleSystem>().main;
((MainModule)(ref main)).startLifetimeMultiplier = 0.7f;
main = ((Component)val.transform.Find("Flash Lines, Fire")).GetComponent<ParticleSystem>().main;
((MainModule)(ref main)).startLifetimeMultiplier = 0.5f;
main = ((Component)val.transform.GetChild(6)).GetComponent<ParticleSystem>().main;
((MainModule)(ref main)).startLifetimeMultiplier = 0.6f;
((Renderer)((Component)val.transform.Find("Physics")).GetComponent<ParticleSystemRenderer>()).material = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/MagmaWorm/matFracturedGround.mat").WaitForCompletion();
((Component)val.transform.Find("Decal")).GetComponent<Decal>().Material = decalMat;
((Component)val.transform.Find("Decal")).GetComponent<AnimateShaderAlpha>().timeMax = 360f;
((Component)val.transform.Find("Decal")).transform.localPosition = Vector3.zero;
((Component)val.transform.Find("Decal")).transform.localScale = Vector3.one * 8f;
((Component)val.transform.Find("FoamSplash")).gameObject.SetActive(false);
((Component)val.transform.Find("FoamBilllboard")).gameObject.SetActive(false);
((Component)val.transform.Find("Dust")).gameObject.SetActive(false);
((Component)val.transform.Find("Dust, Directional")).gameObject.SetActive(false);
val.transform.localScale = Vector3.one * scale;
ContentAddition.AddEffect(val);
val.GetComponent<EffectComponent>().soundName = "sfx_rob_overkill";
ParticleSystemColorFromEffectData val2 = val.AddComponent<ParticleSystemColorFromEffectData>();
val2.particleSystems = (ParticleSystem[])(object)new ParticleSystem[4]
{
((Component)val.transform.Find("Fire")).GetComponent<ParticleSystem>(),
((Component)val.transform.Find("Flash Lines, Fire")).GetComponent<ParticleSystem>(),
((Component)val.transform.GetChild(6)).GetComponent<ParticleSystem>(),
((Component)val.transform.GetChild(3)).GetComponent<ParticleSystem>()
};
val2.effectComponent = val.GetComponent<EffectComponent>();
return val;
}
}
}