Decompiled source of EnemiesReturns v0.2.7
plugins/Risky_Sleeps-EnemiesReturns/EnemiesReturns.dll
Decompiled a week ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Cryptography; using System.Security.Permissions; using System.Text; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using EnemiesReturns.EditorHelpers; using EnemiesReturns.Enemies.Colossus; using EnemiesReturns.Enemies.Ifrit; using EnemiesReturns.Enemies.Ifrit.Pillar; using EnemiesReturns.Enemies.Spitter; using EnemiesReturns.Helpers; using EnemiesReturns.Items.ColossalKnurl; using EnemiesReturns.Items.SpawnPillarOnChampionKill; using EnemiesReturns.Junk.ModdedEntityStates.Colossus.HeadLaser; using EnemiesReturns.Junk.ModdedEntityStates.Ifrit; using EnemiesReturns.Junk.ModdedEntityStates.Spitter; using EnemiesReturns.ModdedEntityStates; using EnemiesReturns.ModdedEntityStates.Colossus; using EnemiesReturns.ModdedEntityStates.Colossus.Death; using EnemiesReturns.ModdedEntityStates.Colossus.HeadLaserBarrage; using EnemiesReturns.ModdedEntityStates.Colossus.RockClap; using EnemiesReturns.ModdedEntityStates.Colossus.Stomp; using EnemiesReturns.ModdedEntityStates.Ifrit; using EnemiesReturns.ModdedEntityStates.Ifrit.FlameCharge; using EnemiesReturns.ModdedEntityStates.Ifrit.Hellzone; using EnemiesReturns.ModdedEntityStates.Ifrit.Pillar; using EnemiesReturns.ModdedEntityStates.Ifrit.Pillar.Enemy; using EnemiesReturns.ModdedEntityStates.Ifrit.Pillar.Player; using EnemiesReturns.ModdedEntityStates.Spitter; using EnemiesReturns.PrefabAPICompat; using EnemiesReturns.Projectiles; using EntityStates; using EntityStates.AI.Walker; using EntityStates.TitanMonster; using Grumpy; using HG; using HG.Reflection; using KinematicCharacterController; using On.RoR2; using R2API; using Rewired.Utils.Classes.Utility; using RoR2; using RoR2.Audio; using RoR2.CharacterAI; using RoR2.ContentManagement; using RoR2.EntityLogic; using RoR2.Mecanim; using RoR2.Navigation; using RoR2.Networking; using RoR2.Projectile; using RoR2.Skills; using RoR2.UI; using ThreeEyedGames; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Events; using UnityEngine.Networking; using UnityEngine.Rendering; using UnityEngine.Rendering.PostProcessing; [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: OptIn] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("EnemiesReturns")] [assembly: AssemblyTitle("EnemiesReturns")] [assembly: AssemblyCompany("EnemiesReturns")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace EnemiesReturns { public class ContentProvider : IContentPackProvider { [StructLayout(LayoutKind.Sequential, Size = 1)] public struct MonsterCategories { public const string Champions = "Champions"; public const string Minibosses = "Minibosses"; public const string BasicMonsters = "Basic Monsters"; public const string Special = "Special"; } private readonly ContentPack _contentPack = new ContentPack(); public const string AssetBundleName = "EnemiesReturns"; public const string AssetBundleFolder = "AssetBundles"; public const string SoundbankFolder = "Soundbanks"; public const string SoundsSoundBankFileName = "EnemiesReturnsSounds"; private readonly List<GameObject> bodyList = new List<GameObject>(); private readonly List<GameObject> masterList = new List<GameObject>(); private readonly List<Type> stateList = new List<Type>(); private readonly List<SkillFamily> sfList = new List<SkillFamily>(); private readonly List<SkillDef> sdList = new List<SkillDef>(); private readonly List<EffectDef> effectsList = new List<EffectDef>(); private readonly List<GameObject> projectilesList = new List<GameObject>(); private readonly List<UnlockableDef> unlockablesList = new List<UnlockableDef>(); private readonly List<ItemDef> itemList = new List<ItemDef>(); private readonly List<NetworkSoundEventDef> nseList = new List<NetworkSoundEventDef>(); public static readonly Dictionary<string, string> ShaderLookup = new Dictionary<string, string> { { "stubbedror2/base/shaders/hgstandard", "RoR2/Base/Shaders/HGStandard.shader" }, { "stubbedror2/base/shaders/hgsnowtopped", "RoR2/Base/Shaders/HGSnowTopped.shader" }, { "stubbedror2/base/shaders/hgtriplanarterrainblend", "RoR2/Base/Shaders/HGTriplanarTerrainBlend.shader" }, { "stubbedror2/base/shaders/hgintersectioncloudremap", "RoR2/Base/Shaders/HGIntersectionCloudRemap.shader" }, { "stubbedror2/base/shaders/hgcloudremap", "RoR2/Base/Shaders/HGCloudRemap.shader" }, { "stubbedror2/base/shaders/hgopaquecloudremap", "RoR2/Base/Shaders/HGOpaqueCloudRemap.shader" }, { "stubbedror2/base/shaders/hgdistortion", "RoR2/Base/Shaders/HGDistortion.shader" }, { "stubbedcalm water/calmwater - dx11 - doublesided", "Calm Water/CalmWater - DX11 - DoubleSided.shader" }, { "stubbedcalm water/calmwater - dx11", "Calm Water/CalmWater - DX11.shader" }, { "stubbednature/speedtree", "RoR2/Base/Shaders/SpeedTreeCustom.shader" }, { "stubbeddecalicious/decaliciousdeferreddecal", "Decalicious/DecaliciousDeferredDecal.shader" } }; public static Dictionary<string, Material> MaterialCache = new Dictionary<string, Material>(); public string identifier => "com.Viliger.EnemiesReturns.ContentProvider"; public IEnumerator FinalizeAsync(FinalizeAsyncArgs args) { args.ReportProgress(1f); yield break; } public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args) { ContentPack.Copy(_contentPack, args.output); args.ReportProgress(1f); yield break; } public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args) { Stopwatch totalStopwatch = new Stopwatch(); ((StopwatchBase)totalStopwatch).Start(); _contentPack.identifier = identifier; Stopwatch val = new Stopwatch(); ((StopwatchBase)val).Start(); string soundbanksFolderPath = Path.Combine(Path.GetDirectoryName(typeof(ContentProvider).Assembly.Location), "Soundbanks"); LoadSoundBanks(soundbanksFolderPath); ((StopwatchBase)val).Stop(); Log.Info("Soundbanks loaded in " + ((StopwatchBase)val).elapsedSeconds); string path = Path.Combine(Path.GetDirectoryName(typeof(ContentProvider).Assembly.Location), "AssetBundles"); AssetBundle assetbundle = null; yield return LoadAssetBundle(Path.Combine(path, "EnemiesReturns"), args.progressReceiver, delegate(AssetBundle resultAssetBundle) { assetbundle = resultAssetBundle; }); yield return LoadAllAssetsAsync<Material>(assetbundle, args.progressReceiver, (Action<Material[]>)delegate(Material[] assets) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) Stopwatch val4 = new Stopwatch(); ((StopwatchBase)val4).Start(); if (assets != null) { Material[] array = assets; foreach (Material val5 in array) { Shader val6 = Addressables.LoadAssetAsync<Shader>((object)ShaderLookup[((Object)val5.shader).name.ToLower()]).WaitForCompletion(); if (Object.op_Implicit((Object)(object)val6)) { val5.shader = val6; } else { Log.Info("Couldn't find replacement shader for " + ((Object)val5.shader).name.ToLower()); } MaterialCache.Add(((Object)val5).name, val5); } } ((StopwatchBase)val4).Stop(); Log.Info("Materials swapped in " + ((StopwatchBase)val4).elapsedSeconds); }); Dictionary<string, Sprite> iconLookup = new Dictionary<string, Sprite>(); Texture2D texLavaCrackRound = null; yield return LoadAllAssetsAsync<Texture2D>(assetbundle, args.progressReceiver, (Action<Texture2D[]>)delegate(Texture2D[] textures) { texLavaCrackRound = textures.First((Texture2D texture) => ((Object)texture).name == "texLavaCrackRound"); }); yield return LoadAllAssetsAsync<Sprite>(assetbundle, args.progressReceiver, (Action<Sprite[]>)delegate(Sprite[] assets) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown Stopwatch val3 = new Stopwatch(); ((StopwatchBase)val3).Start(); iconLookup = assets.ToDictionary((Sprite item) => ((Object)item).name, (Sprite item) => item); ((StopwatchBase)val3).Stop(); Log.Info("Icons loaded in " + ((StopwatchBase)val3).elapsedSeconds); }); Dictionary<string, AnimationCurveDef> acdLookup = new Dictionary<string, AnimationCurveDef>(); yield return LoadAllAssetsAsync<AnimationCurveDef>(assetbundle, args.progressReceiver, (Action<AnimationCurveDef[]>)delegate(AnimationCurveDef[] assets) { acdLookup = assets.ToDictionary((AnimationCurveDef item) => ((Object)item).name); }); yield return LoadAllAssetsAsync<GameObject>(assetbundle, args.progressReceiver, (Action<GameObject[]>)delegate(GameObject[] assets) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown Stopwatch val2 = new Stopwatch(); ((StopwatchBase)val2).Start(); stateList.Add(typeof(BaseEmoteState)); CreateSpitter(assets, iconLookup); CreateColossus(assets, iconLookup, acdLookup); CreateIfrit(assets, iconLookup, texLavaCrackRound, acdLookup); ((StopwatchBase)val2).Stop(); Log.Info("Characters created in " + ((StopwatchBase)val2).elapsedSeconds); }); _contentPack.bodyPrefabs.Add(bodyList.ToArray()); _contentPack.masterPrefabs.Add(masterList.ToArray()); _contentPack.skillDefs.Add(sdList.ToArray()); _contentPack.skillFamilies.Add(sfList.ToArray()); _contentPack.entityStateTypes.Add(stateList.ToArray()); _contentPack.effectDefs.Add(effectsList.ToArray()); _contentPack.projectilePrefabs.Add(projectilesList.ToArray()); _contentPack.unlockableDefs.Add(unlockablesList.ToArray()); _contentPack.itemDefs.Add(itemList.ToArray()); _contentPack.networkSoundEventDefs.Add(nseList.ToArray()); ((StopwatchBase)totalStopwatch).Stop(); Log.Info("Total loading time: " + ((StopwatchBase)totalStopwatch).elapsedSeconds); } private void CreateIfrit(GameObject[] assets, Dictionary<string, Sprite> iconLookup, Texture2D texLavaCrackRound, Dictionary<string, AnimationCurveDef> acdLookup) { //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Expected O, but got Unknown //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Expected O, but got Unknown //IL_0358: Unknown result type (might be due to invalid IL or missing references) //IL_035d: Unknown result type (might be due to invalid IL or missing references) //IL_0368: Unknown result type (might be due to invalid IL or missing references) //IL_0378: Unknown result type (might be due to invalid IL or missing references) //IL_037a: Unknown result type (might be due to invalid IL or missing references) //IL_037f: Unknown result type (might be due to invalid IL or missing references) //IL_0386: Unknown result type (might be due to invalid IL or missing references) //IL_0398: Expected O, but got Unknown //IL_0398: Unknown result type (might be due to invalid IL or missing references) //IL_039d: Unknown result type (might be due to invalid IL or missing references) //IL_03a5: Unknown result type (might be due to invalid IL or missing references) //IL_03a7: Unknown result type (might be due to invalid IL or missing references) //IL_03ae: Expected O, but got Unknown CreateIfritPillar(assets, iconLookup, acdLookup); ExplicitPickupDropTable droptable = CreateIfritItem(assets, iconLookup); if (EnemiesReturnsConfiguration.Ifrit.Enabled.Value) { IfritFactory ifritFactory = new IfritFactory(); assets.First((GameObject mane) => ((Object)mane).name == "IfritManeFireParticle").GetComponent<Renderer>().material = GetOrCreateMaterial("matIfritManeFire", ifritFactory.CreateManeFiresMaterial); SummonPylon.screamPrefab = ifritFactory.CreateBreathParticle(); effectsList.Add(new EffectDef(SummonPylon.screamPrefab)); NetworkSoundEventDef val = Utils.CreateNetworkSoundDef("ER_Ifrit_Hellzone_Rock_Play"); nseList.Add(val); GameObject gameObject = assets.First((GameObject effect) => ((Object)effect).name == "IfritSpawnPortal"); EnemiesReturns.ModdedEntityStates.Ifrit.SpawnState.spawnEffect = ifritFactory.CreateSpawnEffect(gameObject, acdLookup["acdPortalPP"]); effectsList.Add(new EffectDef(EnemiesReturns.ModdedEntityStates.Ifrit.SpawnState.spawnEffect)); GameObject gameObject2 = assets.First((GameObject projectile) => ((Object)projectile).name == "IfritHellzonePillarProjectile"); GameObject ghostPrefab = assets.First((GameObject projectile) => ((Object)projectile).name == "IfritHellzonePillarProjectileGhost"); GameObject volcanoEffectPrefab = assets.First((GameObject projectile) => ((Object)projectile).name == "IfritHellzoneVolcanoEffect"); GameObject val2 = ifritFactory.CreateHellzonePillarProjectile(gameObject2, ghostPrefab); GameObject val3 = ifritFactory.CreateHellfireDotZoneProjectile(val2, volcanoEffectPrefab, texLavaCrackRound, val); GameObject val4 = ifritFactory.CreateHellzoneProjectile(); GameObject val5 = ifritFactory.CreateHellzonePredictionProjectile(val3, texLavaCrackRound); projectilesList.Add(val3); projectilesList.Add(val4); projectilesList.Add(val2); projectilesList.Add(val5); FlameCharge.flamethrowerEffectPrefab = ifritFactory.CreateFlameBreath(); FireHellzoneFire.projectilePrefab = val4; FireHellzoneFire.dotZoneProjectile = val5; IfritFactory.Skills.Hellzone = ifritFactory.CreateHellzoneSkill(); IfritFactory.SkillFamilies.Secondary = Utils.CreateSkillFamily("IfritSecondaryFamily", IfritFactory.Skills.Hellzone); IfritFactory.Skills.SummonPylon = ifritFactory.CreateSummonPylonSkill(); IfritFactory.SkillFamilies.Special = Utils.CreateSkillFamily("IfritSpecialFamily", IfritFactory.Skills.SummonPylon); IfritFactory.Skills.FlameCharge = ifritFactory.CreateFlameChargeSkill(); IfritFactory.SkillFamilies.Utility = Utils.CreateSkillFamily("IfritUtilityFamily", IfritFactory.Skills.FlameCharge); IfritFactory.Skills.Smash = ifritFactory.CreateSmashSkill(); IfritFactory.SkillFamilies.Primary = Utils.CreateSkillFamily("IfritPrimaryFamily", IfritFactory.Skills.Smash); UnlockableDef val6 = Utils.CreateUnlockableDef("Logs.IfritBody.0", "ENEMIES_RETURNS_UNLOCKABLE_LOG_IFRIT"); unlockablesList.Add(val6); GameObject val7 = assets.First((GameObject body) => ((Object)body).name == "IfritBody"); IfritFactory.IfritBody = ifritFactory.CreateBody(val7, iconLookup["texIconIfritBody"], val6, droptable); bodyList.Add(IfritFactory.IfritBody); GameObject val8 = assets.First((GameObject master) => ((Object)master).name == "IfritMaster"); IfritFactory.IfritMaster = ifritFactory.CreateMaster(val8, IfritFactory.IfritBody); masterList.Add(IfritFactory.IfritMaster); IfritFactory.SpawnCards.cscIfritDefault = ifritFactory.CreateCard("cscIfritDefault", val8, IfritFactory.SkinDefs.Default, val7); DirectorCard card = new DirectorCard { spawnCard = (SpawnCard)(object)IfritFactory.SpawnCards.cscIfritDefault, selectionWeight = EnemiesReturnsConfiguration.Ifrit.SelectionWeight.Value, spawnDistance = (MonsterSpawnDistance)0, preventOverhead = true, minimumStageCompletions = EnemiesReturnsConfiguration.Ifrit.MinimumStageCompletion.Value }; DirectorCardHolder directorCard = new DirectorCardHolder { Card = card, MonsterCategory = (MonsterCategory)4 }; Utils.AddMonsterToStage(EnemiesReturnsConfiguration.Ifrit.DefaultStageList.Value, directorCard); stateList.Add(typeof(EnemiesReturns.ModdedEntityStates.Ifrit.SpawnState)); stateList.Add(typeof(DeathState)); stateList.Add(typeof(SummonPylon)); stateList.Add(typeof(FireHellzoneStart)); stateList.Add(typeof(FireHellzoneFire)); stateList.Add(typeof(FireHellzoneEnd)); stateList.Add(typeof(FlameChargeBegin)); stateList.Add(typeof(FlameCharge)); stateList.Add(typeof(FlameChargeEnd)); stateList.Add(typeof(Smash)); } } private ExplicitPickupDropTable CreateIfritItem(GameObject[] assets, Dictionary<string, Sprite> iconLookup) { //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) ExplicitPickupDropTable val = null; if (EnemiesReturnsConfiguration.Ifrit.ItemEnabled.Value) { SpawnPillarOnChampionKillFactory.itemDef = new SpawnPillarOnChampionKillFactory().CreateItem(assets.First((GameObject item) => ((Object)item).name == "IfritItem"), iconLookup["texIconIfritItem"]); itemList.Add(SpawnPillarOnChampionKillFactory.itemDef); val = ScriptableObject.CreateInstance<ExplicitPickupDropTable>(); ((Object)val).name = "epdtIfrit"; ((PickupDropTable)val).canDropBeReplaced = true; val.pickupEntries = (PickupDefEntry[])(object)new PickupDefEntry[1] { new PickupDefEntry { pickupWeight = 1f, pickupDef = (Object)(object)SpawnPillarOnChampionKillFactory.itemDef } }; } return val; } private void CreateIfritPillar(GameObject[] assets, Dictionary<string, Sprite> iconLookup, Dictionary<string, AnimationCurveDef> acdLookup) { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Expected O, but got Unknown //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Expected O, but got Unknown //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0297: Unknown result type (might be due to invalid IL or missing references) //IL_029c: Unknown result type (might be due to invalid IL or missing references) //IL_02ac: Unknown result type (might be due to invalid IL or missing references) //IL_02b1: Unknown result type (might be due to invalid IL or missing references) if (EnemiesReturnsConfiguration.Ifrit.ItemEnabled.Value || EnemiesReturnsConfiguration.Ifrit.Enabled.Value) { IfritPillarFactory ifritPillarFactory = new IfritPillarFactory(); EnemiesReturns.ModdedEntityStates.Ifrit.Pillar.SpawnState.burrowPrefab = ifritPillarFactory.CreateSpawnEffect(); effectsList.Add(new EffectDef(EnemiesReturns.ModdedEntityStates.Ifrit.Pillar.SpawnState.burrowPrefab)); BaseDeathState.fallEffect = ifritPillarFactory.CreateDeathFallEffect(); effectsList.Add(new EffectDef(BaseDeathState.fallEffect)); KilledDeathState.explosionPrefab = (BaseFireExplosion.explosionPrefab = ifritPillarFactory.CreateExlosionEffectAlt()); effectsList.Add(new EffectDef(BaseFireExplosion.explosionPrefab)); GameObject val = assets.First((GameObject body) => ((Object)body).name == "IfritPylonBody"); GameObject val2 = assets.First((GameObject master) => ((Object)master).name == "IfritPylonMaster"); KilledDeathState.fireballYCurve = acdLookup["acdFireballFallCurve"].curve; if (EnemiesReturnsConfiguration.Ifrit.Enabled.Value) { IfritPillarFactory.BodyInformation bodyInformation = new IfritPillarFactory.BodyInformation { bodyPrefab = PrefabAPI.InstantiateClone(val, "IfritPylonEnemyBody", false), sprite = iconLookup["texIconPillarEnemy"], baseDamage = EnemiesReturnsConfiguration.Ifrit.BaseDamage.Value, levelDamage = EnemiesReturnsConfiguration.Ifrit.LevelDamage.Value, mainState = new SerializableEntityStateType(typeof(EnemiesReturns.ModdedEntityStates.Ifrit.Pillar.Enemy.ChargingExplosion)), deathState = new SerializableEntityStateType(typeof(KilledDeathState)), enableLineRenderer = true, explosionRadius = EnemiesReturnsConfiguration.Ifrit.PillarExplosionRadius.Value }; IfritPillarFactory.Enemy.IfritPillarBody = ifritPillarFactory.CreateBody(bodyInformation, acdLookup); bodyList.Add(IfritPillarFactory.Enemy.IfritPillarBody); IfritPillarFactory.Enemy.IfritPillarMaster = ifritPillarFactory.CreateMaster(PrefabAPI.InstantiateClone(val2, "IfritPylonEnemyMaster", false), IfritPillarFactory.Enemy.IfritPillarBody); masterList.Add(IfritPillarFactory.Enemy.IfritPillarMaster); IfritPillarFactory.Enemy.scIfritPillar = (SpawnCard)(object)ifritPillarFactory.CreateCard("cscIfritEnemyPillar", IfritPillarFactory.Enemy.IfritPillarMaster); stateList.Add(typeof(EnemiesReturns.ModdedEntityStates.Ifrit.Pillar.Enemy.ChargingExplosion)); stateList.Add(typeof(EnemiesReturns.ModdedEntityStates.Ifrit.Pillar.Enemy.FireExplosion)); stateList.Add(typeof(SuicideDeathState)); stateList.Add(typeof(KilledDeathState)); } if (EnemiesReturnsConfiguration.Ifrit.ItemEnabled.Value) { IfritPillarFactory.BodyInformation bodyInformation2 = new IfritPillarFactory.BodyInformation { bodyPrefab = PrefabAPI.InstantiateClone(val, "IfritPylonPlayerBody", false), sprite = iconLookup["texIconPillarAlly"], baseDamage = EnemiesReturnsConfiguration.Ifrit.SpawnPillarOnChampionKillBodyBaseDamage.Value, levelDamage = EnemiesReturnsConfiguration.Ifrit.SpawnPillarOnChampionKillBodyLevelDamage.Value, mainState = new SerializableEntityStateType(typeof(EnemiesReturns.ModdedEntityStates.Ifrit.Pillar.Player.ChargingExplosion)), deathState = new SerializableEntityStateType(typeof(SuicideDeathState)), enableLineRenderer = false, explosionRadius = EnemiesReturnsConfiguration.Ifrit.SpawnPillarOnChampionKillRadius.Value }; IfritPillarFactory.Player.IfritPillarBody = ifritPillarFactory.CreateBody(bodyInformation2, acdLookup); bodyList.Add(IfritPillarFactory.Player.IfritPillarBody); IfritPillarFactory.Player.IfritPillarMaster = ifritPillarFactory.CreateMaster(PrefabAPI.InstantiateClone(val2, "IfritPylonPlayerMaster", false), IfritPillarFactory.Player.IfritPillarBody); masterList.Add(IfritPillarFactory.Player.IfritPillarMaster); IfritPillarFactory.Player.scIfritPillar = (SpawnCard)(object)ifritPillarFactory.CreateCard("cscIfritPlayerPillar", IfritPillarFactory.Player.IfritPillarMaster); stateList.Add(typeof(EnemiesReturns.ModdedEntityStates.Ifrit.Pillar.Player.ChargingExplosion)); stateList.Add(typeof(EnemiesReturns.ModdedEntityStates.Ifrit.Pillar.Player.FireExplosion)); } stateList.Add(typeof(EnemiesReturns.ModdedEntityStates.Ifrit.Pillar.SpawnState)); } } private void CreateColossus(GameObject[] assets, Dictionary<string, Sprite> iconLookup, Dictionary<string, AnimationCurveDef> acdLookup) { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Expected O, but got Unknown //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Expected O, but got Unknown //IL_04d4: Unknown result type (might be due to invalid IL or missing references) //IL_04d9: Unknown result type (might be due to invalid IL or missing references) //IL_04e4: Unknown result type (might be due to invalid IL or missing references) //IL_04f4: Unknown result type (might be due to invalid IL or missing references) //IL_04f6: Unknown result type (might be due to invalid IL or missing references) //IL_04fb: Unknown result type (might be due to invalid IL or missing references) //IL_0502: Unknown result type (might be due to invalid IL or missing references) //IL_0514: Expected O, but got Unknown //IL_0514: Unknown result type (might be due to invalid IL or missing references) //IL_0519: Unknown result type (might be due to invalid IL or missing references) //IL_0521: Unknown result type (might be due to invalid IL or missing references) //IL_0523: Unknown result type (might be due to invalid IL or missing references) //IL_052a: Expected O, but got Unknown //IL_0536: Unknown result type (might be due to invalid IL or missing references) //IL_053b: Unknown result type (might be due to invalid IL or missing references) //IL_0573: Unknown result type (might be due to invalid IL or missing references) //IL_0578: Unknown result type (might be due to invalid IL or missing references) //IL_0583: Unknown result type (might be due to invalid IL or missing references) //IL_0593: Unknown result type (might be due to invalid IL or missing references) //IL_0595: Unknown result type (might be due to invalid IL or missing references) //IL_059a: Unknown result type (might be due to invalid IL or missing references) //IL_05a1: Unknown result type (might be due to invalid IL or missing references) //IL_05b3: Expected O, but got Unknown //IL_05b3: Unknown result type (might be due to invalid IL or missing references) //IL_05b8: Unknown result type (might be due to invalid IL or missing references) //IL_05c0: Unknown result type (might be due to invalid IL or missing references) //IL_05c2: Unknown result type (might be due to invalid IL or missing references) //IL_05c9: Expected O, but got Unknown //IL_05f3: Unknown result type (might be due to invalid IL or missing references) //IL_05f8: Unknown result type (might be due to invalid IL or missing references) //IL_0603: Unknown result type (might be due to invalid IL or missing references) //IL_0613: Unknown result type (might be due to invalid IL or missing references) //IL_0615: Unknown result type (might be due to invalid IL or missing references) //IL_061a: Unknown result type (might be due to invalid IL or missing references) //IL_0621: Unknown result type (might be due to invalid IL or missing references) //IL_0633: Expected O, but got Unknown //IL_0633: Unknown result type (might be due to invalid IL or missing references) //IL_0638: Unknown result type (might be due to invalid IL or missing references) //IL_0640: Unknown result type (might be due to invalid IL or missing references) //IL_0642: Unknown result type (might be due to invalid IL or missing references) //IL_0649: Expected O, but got Unknown //IL_0655: Unknown result type (might be due to invalid IL or missing references) //IL_065a: Unknown result type (might be due to invalid IL or missing references) //IL_0692: Unknown result type (might be due to invalid IL or missing references) //IL_0697: Unknown result type (might be due to invalid IL or missing references) //IL_06a2: Unknown result type (might be due to invalid IL or missing references) //IL_06b2: Unknown result type (might be due to invalid IL or missing references) //IL_06b4: Unknown result type (might be due to invalid IL or missing references) //IL_06b9: Unknown result type (might be due to invalid IL or missing references) //IL_06c0: Unknown result type (might be due to invalid IL or missing references) //IL_06d2: Expected O, but got Unknown //IL_06d2: Unknown result type (might be due to invalid IL or missing references) //IL_06d7: Unknown result type (might be due to invalid IL or missing references) //IL_06df: Unknown result type (might be due to invalid IL or missing references) //IL_06e1: Unknown result type (might be due to invalid IL or missing references) //IL_06e8: Expected O, but got Unknown //IL_0712: Unknown result type (might be due to invalid IL or missing references) //IL_0717: Unknown result type (might be due to invalid IL or missing references) //IL_0722: Unknown result type (might be due to invalid IL or missing references) //IL_0732: Unknown result type (might be due to invalid IL or missing references) //IL_0734: Unknown result type (might be due to invalid IL or missing references) //IL_0739: Unknown result type (might be due to invalid IL or missing references) //IL_0740: Unknown result type (might be due to invalid IL or missing references) //IL_0752: Expected O, but got Unknown //IL_0752: Unknown result type (might be due to invalid IL or missing references) //IL_0757: Unknown result type (might be due to invalid IL or missing references) //IL_075f: Unknown result type (might be due to invalid IL or missing references) //IL_0761: Unknown result type (might be due to invalid IL or missing references) //IL_0768: Expected O, but got Unknown //IL_0774: Unknown result type (might be due to invalid IL or missing references) //IL_0779: Unknown result type (might be due to invalid IL or missing references) //IL_07b1: Unknown result type (might be due to invalid IL or missing references) //IL_07b6: Unknown result type (might be due to invalid IL or missing references) //IL_07c1: Unknown result type (might be due to invalid IL or missing references) //IL_07d1: Unknown result type (might be due to invalid IL or missing references) //IL_07d3: Unknown result type (might be due to invalid IL or missing references) //IL_07d8: Unknown result type (might be due to invalid IL or missing references) //IL_07df: Unknown result type (might be due to invalid IL or missing references) //IL_07f1: Expected O, but got Unknown //IL_07f1: Unknown result type (might be due to invalid IL or missing references) //IL_07f6: Unknown result type (might be due to invalid IL or missing references) //IL_07fe: Unknown result type (might be due to invalid IL or missing references) //IL_0800: Unknown result type (might be due to invalid IL or missing references) //IL_0807: Expected O, but got Unknown //IL_0813: Unknown result type (might be due to invalid IL or missing references) //IL_0818: Unknown result type (might be due to invalid IL or missing references) ExplicitPickupDropTable droptable = CreateColossusItem(assets, iconLookup); if (EnemiesReturnsConfiguration.Colossus.Enabled.Value) { ColossusFactory colossusFactory = new ColossusFactory(); GameObject val = (StompBase.stompEffectPrefab = colossusFactory.CreateStompEffect()); effectsList.Add(new EffectDef(val)); GameObject item = (StompBase.projectilePrefab = colossusFactory.CreateStompProjectile()); projectilesList.Add(item); GameObject val2 = colossusFactory.CreateDeathFallEffect(); effectsList.Add(new EffectDef(val2)); BaseDeath.fallEffect = val2; GameObject val3 = colossusFactory.CreateDeath2Effect(); effectsList.Add(new EffectDef(val3)); Death2.deathEffect = val3; RockClapEnd.clapEffect = colossusFactory.CreateClapEffect(); GameObject item2 = (RockClapEnd.projectilePrefab = colossusFactory.CreateFlyingRockProjectile(FloatingRocksController.flyingRockPrefab = colossusFactory.CreateFlyingRocksGhost())); projectilesList.Add(item2); GameObject item3 = (HeadLaserBarrageAttack.projectilePrefab = colossusFactory.CreateLaserBarrageProjectile()); projectilesList.Add(item3); GameObject val4 = (EnemiesReturns.ModdedEntityStates.Colossus.SpawnState.burrowPrefab = colossusFactory.CreateSpawnEffect()); effectsList.Add(new EffectDef(val4)); HeadLaserBarrageAttack.intencityGraph = acdLookup["LaserBarrageLightIntencity"].curve; UnlockableDef val5 = Utils.CreateUnlockableDef("Logs.ColossusBody.0", "ENEMIES_RETURNS_UNLOCKABLE_LOG_COLOSSUS"); unlockablesList.Add(val5); HeadLaserAttack.beamPrefab = colossusFactory.CreateLaserEffect(); ColossusFactory.Skills.Stomp = colossusFactory.CreateStompSkill(); ColossusFactory.Skills.StoneClap = colossusFactory.CreateStoneClapSkill(); ColossusFactory.Skills.LaserBarrage = colossusFactory.CreateLaserBarrageSkill(); ColossusFactory.Skills.HeadLaser = colossusFactory.CreateHeadLaserSkill(); sdList.Add(ColossusFactory.Skills.Stomp); sdList.Add(ColossusFactory.Skills.StoneClap); sdList.Add(ColossusFactory.Skills.LaserBarrage); sdList.Add(ColossusFactory.Skills.HeadLaser); ColossusFactory.SkillFamilies.Primary = Utils.CreateSkillFamily("ColossusPrimaryFamily", ColossusFactory.Skills.Stomp); ColossusFactory.SkillFamilies.Secondary = Utils.CreateSkillFamily("ColossusSecondaryFamily", ColossusFactory.Skills.StoneClap); ColossusFactory.SkillFamilies.Utility = Utils.CreateSkillFamily("ColossusUtilityFamily", ColossusFactory.Skills.LaserBarrage); ColossusFactory.SkillFamilies.Special = Utils.CreateSkillFamily("ColossusSpecialFamily", ColossusFactory.Skills.HeadLaser); sfList.Add(ColossusFactory.SkillFamilies.Primary); sfList.Add(ColossusFactory.SkillFamilies.Secondary); sfList.Add(ColossusFactory.SkillFamilies.Utility); sfList.Add(ColossusFactory.SkillFamilies.Special); GameObject val6 = assets.First((GameObject body) => ((Object)body).name == "ColossusBody"); ColossusFactory.ColossusBody = colossusFactory.CreateBody(val6, iconLookup["texColossusIcon"], val5, droptable); bodyList.Add(ColossusFactory.ColossusBody); GameObject val7 = assets.First((GameObject master) => ((Object)master).name == "ColossusMaster"); ColossusFactory.ColossusMaster = colossusFactory.CreateMaster(val7, val6); masterList.Add(ColossusFactory.ColossusMaster); stateList.Add(typeof(ColossusMain)); stateList.Add(typeof(EnemiesReturns.ModdedEntityStates.Colossus.SpawnState)); stateList.Add(typeof(DancePlayer)); stateList.Add(typeof(InitialDeathState)); stateList.Add(typeof(BaseDeath)); stateList.Add(typeof(DeathFallBase)); stateList.Add(typeof(Death1)); stateList.Add(typeof(Death2)); stateList.Add(typeof(DeathBoner)); stateList.Add(typeof(RockClapEnd)); stateList.Add(typeof(RockClapStart)); stateList.Add(typeof(StompEnter)); stateList.Add(typeof(StompBase)); stateList.Add(typeof(StompL)); stateList.Add(typeof(StompR)); stateList.Add(typeof(HeadLaserBarrageStart)); stateList.Add(typeof(HeadLaserBarrageAttack)); stateList.Add(typeof(HeadLaserBarrageEnd)); stateList.Add(typeof(HeadLaserStart)); stateList.Add(typeof(HeadLaserAttack)); stateList.Add(typeof(HeadLaserEnd)); ColossusFactory.SpawnCards.cscColossusDefault = colossusFactory.CreateCard("cscColossusDefault", val7, ColossusFactory.SkinDefs.Default, val6); DirectorCard card = new DirectorCard { spawnCard = (SpawnCard)(object)ColossusFactory.SpawnCards.cscColossusDefault, selectionWeight = EnemiesReturnsConfiguration.Colossus.SelectionWeight.Value, spawnDistance = (MonsterSpawnDistance)0, preventOverhead = true, minimumStageCompletions = EnemiesReturnsConfiguration.Colossus.MinimumStageCompletion.Value }; DirectorCardHolder directorCard = new DirectorCardHolder { Card = card, MonsterCategory = (MonsterCategory)4 }; Utils.AddMonsterToCardCategory(card, "Champions", (DirectorCardCategorySelection)(object)Addressables.LoadAssetAsync<FamilyDirectorCardCategorySelection>((object)"RoR2/Base/Common/dccsGolemFamily.asset").WaitForCompletion()); Utils.AddMonsterToStage(EnemiesReturnsConfiguration.Colossus.DefaultStageList.Value, directorCard); ColossusFactory.SpawnCards.cscColossusSkyMeadow = colossusFactory.CreateCard("cscColossusSkyMeadow", val7, ColossusFactory.SkinDefs.SkyMeadow, val6); DirectorCard card2 = new DirectorCard { spawnCard = (SpawnCard)(object)ColossusFactory.SpawnCards.cscColossusSkyMeadow, selectionWeight = EnemiesReturnsConfiguration.Colossus.SelectionWeight.Value, spawnDistance = (MonsterSpawnDistance)0, preventOverhead = true, minimumStageCompletions = EnemiesReturnsConfiguration.Colossus.MinimumStageCompletion.Value }; DirectorCardHolder directorCard2 = new DirectorCardHolder { Card = card2, MonsterCategory = (MonsterCategory)4 }; Utils.AddMonsterToStage(EnemiesReturnsConfiguration.Colossus.SkyMeadowStageList.Value, directorCard2); ColossusFactory.SpawnCards.cscColossusGrassy = colossusFactory.CreateCard("cscColossusGrassy", val7, ColossusFactory.SkinDefs.Grassy, val6); DirectorCard card3 = new DirectorCard { spawnCard = (SpawnCard)(object)ColossusFactory.SpawnCards.cscColossusGrassy, selectionWeight = EnemiesReturnsConfiguration.Colossus.SelectionWeight.Value, spawnDistance = (MonsterSpawnDistance)0, preventOverhead = true, minimumStageCompletions = EnemiesReturnsConfiguration.Colossus.MinimumStageCompletion.Value }; DirectorCardHolder directorCard3 = new DirectorCardHolder { Card = card3, MonsterCategory = (MonsterCategory)4 }; Utils.AddMonsterToCardCategory(card3, "Champions", (DirectorCardCategorySelection)(object)Addressables.LoadAssetAsync<FamilyDirectorCardCategorySelection>((object)"RoR2/Base/Common/dccsGolemFamilyNature").WaitForCompletion()); Utils.AddMonsterToStage(EnemiesReturnsConfiguration.Colossus.GrassyStageList.Value, directorCard3); ColossusFactory.SpawnCards.cscColossusCastle = colossusFactory.CreateCard("cscColossusCastle", val7, ColossusFactory.SkinDefs.Castle, val6); DirectorCard card4 = new DirectorCard { spawnCard = (SpawnCard)(object)ColossusFactory.SpawnCards.cscColossusCastle, selectionWeight = EnemiesReturnsConfiguration.Colossus.SelectionWeight.Value, spawnDistance = (MonsterSpawnDistance)0, preventOverhead = true, minimumStageCompletions = EnemiesReturnsConfiguration.Colossus.MinimumStageCompletion.Value }; DirectorCardHolder directorCard4 = new DirectorCardHolder { Card = card4, MonsterCategory = (MonsterCategory)4 }; Utils.AddMonsterToStage(EnemiesReturnsConfiguration.Colossus.CastleStageList.Value, directorCard4); ColossusFactory.SpawnCards.cscColossusSandy = colossusFactory.CreateCard("cscColossusSandy", val7, ColossusFactory.SkinDefs.Sandy, val6); DirectorCard card5 = new DirectorCard { spawnCard = (SpawnCard)(object)ColossusFactory.SpawnCards.cscColossusSandy, selectionWeight = EnemiesReturnsConfiguration.Colossus.SelectionWeight.Value, spawnDistance = (MonsterSpawnDistance)0, preventOverhead = true, minimumStageCompletions = EnemiesReturnsConfiguration.Colossus.MinimumStageCompletion.Value }; DirectorCardHolder directorCard5 = new DirectorCardHolder { Card = card5, MonsterCategory = (MonsterCategory)4 }; Utils.AddMonsterToCardCategory(card5, "Champions", (DirectorCardCategorySelection)(object)Addressables.LoadAssetAsync<FamilyDirectorCardCategorySelection>((object)"RoR2/Base/Common/dccsGolemFamilySandy.asset").WaitForCompletion()); Utils.AddMonsterToStage(EnemiesReturnsConfiguration.Colossus.SandyStageList.Value, directorCard5); ColossusFactory.SpawnCards.cscColossusSnowy = colossusFactory.CreateCard("cscColossusSnowy", val7, ColossusFactory.SkinDefs.Snowy, val6); DirectorCard card6 = new DirectorCard { spawnCard = (SpawnCard)(object)ColossusFactory.SpawnCards.cscColossusSnowy, selectionWeight = EnemiesReturnsConfiguration.Colossus.SelectionWeight.Value, spawnDistance = (MonsterSpawnDistance)0, preventOverhead = true, minimumStageCompletions = EnemiesReturnsConfiguration.Colossus.MinimumStageCompletion.Value }; DirectorCardHolder directorCard6 = new DirectorCardHolder { Card = card6, MonsterCategory = (MonsterCategory)4 }; Utils.AddMonsterToCardCategory(card6, "Champions", (DirectorCardCategorySelection)(object)Addressables.LoadAssetAsync<FamilyDirectorCardCategorySelection>((object)"RoR2/Base/Common/dccsGolemFamilySnowy.asset").WaitForCompletion()); Utils.AddMonsterToStage(EnemiesReturnsConfiguration.Colossus.SnowyStageList.Value, directorCard6); } } private ExplicitPickupDropTable CreateColossusItem(GameObject[] assets, Dictionary<string, Sprite> iconLookup) { //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) ExplicitPickupDropTable val = null; if (EnemiesReturnsConfiguration.Colossus.ItemEnabled.Value) { ColossalKnurlFactory colossalKnurlFactory = new ColossalKnurlFactory(); ColossalKnurlFactory.itemDef = colossalKnurlFactory.CreateItem(assets.First((GameObject item) => ((Object)item).name == "PickupColossalCurl"), iconLookup["texColossalKnurlIcon"]); itemList.Add(ColossalKnurlFactory.itemDef); val = ScriptableObject.CreateInstance<ExplicitPickupDropTable>(); ((Object)val).name = "epdtColossus"; ((PickupDropTable)val).canDropBeReplaced = true; val.pickupEntries = (PickupDefEntry[])(object)new PickupDefEntry[1] { new PickupDefEntry { pickupWeight = 1f, pickupDef = (Object)(object)ColossalKnurlFactory.itemDef } }; GameObject prefab = assets.First((GameObject item) => ((Object)item).name == "ColossalKnurlFistProjectileGhost"); prefab = colossalKnurlFactory.CreateFistGhostPrefab(prefab); GameObject fistPrefab = assets.First((GameObject item) => ((Object)item).name == "ColossalKnurlFistProjectile"); ColossalKnurlFactory.projectilePrefab = colossalKnurlFactory.CreateFistProjectile(fistPrefab, prefab); projectilesList.Add(ColossalKnurlFactory.projectilePrefab); } return val; } private void CreateSpitter(GameObject[] assets, Dictionary<string, Sprite> iconLookup) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown //IL_024f: Unknown result type (might be due to invalid IL or missing references) //IL_0254: Unknown result type (might be due to invalid IL or missing references) //IL_025f: Unknown result type (might be due to invalid IL or missing references) //IL_026f: Unknown result type (might be due to invalid IL or missing references) //IL_0271: Unknown result type (might be due to invalid IL or missing references) //IL_0276: Unknown result type (might be due to invalid IL or missing references) //IL_027d: Unknown result type (might be due to invalid IL or missing references) //IL_028f: Expected O, but got Unknown //IL_028f: Unknown result type (might be due to invalid IL or missing references) //IL_0294: Unknown result type (might be due to invalid IL or missing references) //IL_029c: Unknown result type (might be due to invalid IL or missing references) //IL_029e: Unknown result type (might be due to invalid IL or missing references) //IL_02a5: Expected O, but got Unknown //IL_02cf: Unknown result type (might be due to invalid IL or missing references) //IL_02d4: Unknown result type (might be due to invalid IL or missing references) //IL_02df: 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_02f1: Unknown result type (might be due to invalid IL or missing references) //IL_02f6: Unknown result type (might be due to invalid IL or missing references) //IL_02fd: Unknown result type (might be due to invalid IL or missing references) //IL_030f: Expected O, but got Unknown //IL_030f: Unknown result type (might be due to invalid IL or missing references) //IL_0314: Unknown result type (might be due to invalid IL or missing references) //IL_031c: Unknown result type (might be due to invalid IL or missing references) //IL_031e: Unknown result type (might be due to invalid IL or missing references) //IL_0325: Expected O, but got Unknown //IL_034f: Unknown result type (might be due to invalid IL or missing references) //IL_0354: Unknown result type (might be due to invalid IL or missing references) //IL_035f: Unknown result type (might be due to invalid IL or missing references) //IL_036f: Unknown result type (might be due to invalid IL or missing references) //IL_0371: Unknown result type (might be due to invalid IL or missing references) //IL_0376: Unknown result type (might be due to invalid IL or missing references) //IL_037d: Unknown result type (might be due to invalid IL or missing references) //IL_038f: Expected O, but got Unknown //IL_038f: Unknown result type (might be due to invalid IL or missing references) //IL_0394: Unknown result type (might be due to invalid IL or missing references) //IL_039c: Unknown result type (might be due to invalid IL or missing references) //IL_039e: Unknown result type (might be due to invalid IL or missing references) //IL_03a5: Expected O, but got Unknown //IL_03cf: Unknown result type (might be due to invalid IL or missing references) //IL_03d4: Unknown result type (might be due to invalid IL or missing references) //IL_03df: Unknown result type (might be due to invalid IL or missing references) //IL_03ef: Unknown result type (might be due to invalid IL or missing references) //IL_03f1: Unknown result type (might be due to invalid IL or missing references) //IL_03f6: Unknown result type (might be due to invalid IL or missing references) //IL_03fd: Unknown result type (might be due to invalid IL or missing references) //IL_040f: Expected O, but got Unknown //IL_040f: Unknown result type (might be due to invalid IL or missing references) //IL_0414: Unknown result type (might be due to invalid IL or missing references) //IL_041c: Unknown result type (might be due to invalid IL or missing references) //IL_041e: Unknown result type (might be due to invalid IL or missing references) //IL_0425: Expected O, but got Unknown if (EnemiesReturnsConfiguration.Spitter.Enabled.Value) { SpitterFactory spitterFactory = new SpitterFactory(); GameObject val = (Bite.biteEffectPrefab = spitterFactory.CreateBiteEffect()); effectsList.Add(new EffectDef(val)); GameObject val2 = spitterFactory.CreatedChargedSpitSmallDoTZone(); GameObject val3 = spitterFactory.CreateChargedSpitDoTZone(); GameObject val4 = spitterFactory.CreateChargedSpitSplitProjectile(val2); GameObject item = (FireChargedSpit.projectilePrefab = spitterFactory.CreateChargedSpitProjectile(val3, val4)); projectilesList.Add(item); projectilesList.Add(val2); projectilesList.Add(val3); projectilesList.Add(val4); NormalSpit.normalSpitProjectile = spitterFactory.CreateNormalSpitProjectile(); projectilesList.Add(NormalSpit.normalSpitProjectile); UnlockableDef val5 = Utils.CreateUnlockableDef("Logs.SpitterBody.0", "ENEMIES_RETURNS_UNLOCKABLE_LOG_SPITTER"); unlockablesList.Add(val5); SpitterFactory.Skills.NormalSpit = spitterFactory.CreateNormalSpitSkill(); SpitterFactory.Skills.Bite = spitterFactory.CreateBiteSkill(); SpitterFactory.Skills.ChargedSpit = spitterFactory.CreateChargedSpitSkill(); sdList.Add(SpitterFactory.Skills.NormalSpit); sdList.Add(SpitterFactory.Skills.Bite); sdList.Add(SpitterFactory.Skills.ChargedSpit); SpitterFactory.SkillFamilies.Primary = Utils.CreateSkillFamily("SpitterPrimaryFamily", SpitterFactory.Skills.NormalSpit); SpitterFactory.SkillFamilies.Secondary = Utils.CreateSkillFamily("SpitterSecondaryFamily", SpitterFactory.Skills.Bite); SpitterFactory.SkillFamilies.Special = Utils.CreateSkillFamily("SpitterSpecialFamily", SpitterFactory.Skills.ChargedSpit); sfList.Add(SpitterFactory.SkillFamilies.Primary); sfList.Add(SpitterFactory.SkillFamilies.Secondary); sfList.Add(SpitterFactory.SkillFamilies.Special); GameObject val6 = assets.First((GameObject body) => ((Object)body).name == "SpitterBody"); SpitterFactory.SpitterBody = spitterFactory.CreateBody(val6, iconLookup["texSpitterIcon"], val5); bodyList.Add(SpitterFactory.SpitterBody); GameObject val7 = assets.First((GameObject master) => ((Object)master).name == "SpitterMaster"); SpitterFactory.SpitterMaster = spitterFactory.CreateMaster(val7, val6); masterList.Add(SpitterFactory.SpitterMaster); SpitterFactory.SpawnCards.cscSpitterDefault = spitterFactory.CreateCard("cscSpitterDefault", val7, SpitterFactory.SkinDefs.Default, val6); DirectorCard card = new DirectorCard { spawnCard = (SpawnCard)(object)SpitterFactory.SpawnCards.cscSpitterDefault, selectionWeight = EnemiesReturnsConfiguration.Spitter.SelectionWeight.Value, spawnDistance = (MonsterSpawnDistance)0, preventOverhead = true, minimumStageCompletions = EnemiesReturnsConfiguration.Spitter.MinimumStageCompletion.Value }; DirectorCardHolder directorCard = new DirectorCardHolder { Card = card, MonsterCategory = (MonsterCategory)3 }; Utils.AddMonsterToStage(EnemiesReturnsConfiguration.Spitter.DefaultStageList.Value, directorCard); SpitterFactory.SpawnCards.cscSpitterLakes = spitterFactory.CreateCard("cscSpitterLakes", val7, SpitterFactory.SkinDefs.Lakes, val6); DirectorCard card2 = new DirectorCard { spawnCard = (SpawnCard)(object)SpitterFactory.SpawnCards.cscSpitterLakes, selectionWeight = EnemiesReturnsConfiguration.Spitter.SelectionWeight.Value, spawnDistance = (MonsterSpawnDistance)0, preventOverhead = true, minimumStageCompletions = EnemiesReturnsConfiguration.Spitter.MinimumStageCompletion.Value }; DirectorCardHolder directorCard2 = new DirectorCardHolder { Card = card2, MonsterCategory = (MonsterCategory)3 }; Utils.AddMonsterToStage(EnemiesReturnsConfiguration.Spitter.LakesStageList.Value, directorCard2); SpitterFactory.SpawnCards.cscSpitterSulfur = spitterFactory.CreateCard("cscSpitterSulfur", val7, SpitterFactory.SkinDefs.Sulfur, val6); DirectorCard card3 = new DirectorCard { spawnCard = (SpawnCard)(object)SpitterFactory.SpawnCards.cscSpitterSulfur, selectionWeight = EnemiesReturnsConfiguration.Spitter.SelectionWeight.Value, spawnDistance = (MonsterSpawnDistance)0, preventOverhead = true, minimumStageCompletions = EnemiesReturnsConfiguration.Spitter.MinimumStageCompletion.Value }; DirectorCardHolder directorCard3 = new DirectorCardHolder { Card = card3, MonsterCategory = (MonsterCategory)3 }; Utils.AddMonsterToStage(EnemiesReturnsConfiguration.Spitter.SulfurStageList.Value, directorCard3); SpitterFactory.SpawnCards.cscSpitterDepths = spitterFactory.CreateCard("cscSpitterDepths", val7, SpitterFactory.SkinDefs.Depths, val6); DirectorCard card4 = new DirectorCard { spawnCard = (SpawnCard)(object)SpitterFactory.SpawnCards.cscSpitterDepths, selectionWeight = EnemiesReturnsConfiguration.Spitter.SelectionWeight.Value, spawnDistance = (MonsterSpawnDistance)0, preventOverhead = true, minimumStageCompletions = EnemiesReturnsConfiguration.Spitter.MinimumStageCompletion.Value }; DirectorCardHolder directorCard4 = new DirectorCardHolder { Card = card4, MonsterCategory = (MonsterCategory)3 }; Utils.AddMonsterToStage(EnemiesReturnsConfiguration.Spitter.DepthStageList.Value, directorCard4); if (EnemiesReturnsConfiguration.Spitter.HelminthroostReplaceMushrum.Value) { Helpers.RemoveExistingMonsterFromStage(MonsterNames.MiniMushrum, (Stage)1099511627776L, ""); } stateList.Add(typeof(Bite)); stateList.Add(typeof(EnemiesReturns.ModdedEntityStates.Spitter.SpawnState)); stateList.Add(typeof(NormalSpit)); stateList.Add(typeof(ChargeChargedSpit)); stateList.Add(typeof(FireChargedSpit)); stateList.Add(typeof(DeathDance)); stateList.Add(typeof(SpitterMain)); stateList.Add(typeof(DeathDancePlayer)); } } private IEnumerator LoadAssetBundle(string assetBundleFullPath, IProgress<float> progress, Action<AssetBundle> onAssetBundleLoaded) { Stopwatch stopwatch = new Stopwatch(); ((StopwatchBase)stopwatch).Start(); AssetBundleCreateRequest assetBundleCreateRequest = AssetBundle.LoadFromFileAsync(assetBundleFullPath); while (!((AsyncOperation)assetBundleCreateRequest).isDone) { progress.Report(((AsyncOperation)assetBundleCreateRequest).progress); yield return null; } onAssetBundleLoaded(assetBundleCreateRequest.assetBundle); ((StopwatchBase)stopwatch).Stop(); Log.Info("Asset bundle " + assetBundleFullPath + " loaded in " + ((StopwatchBase)stopwatch).elapsedSeconds); } private static IEnumerator LoadAllAssetsAsync<T>(AssetBundle assetBundle, IProgress<float> progress, Action<T[]> onAssetsLoaded) where T : Object { AssetBundleRequest sceneDefsRequest = assetBundle.LoadAllAssetsAsync<T>(); while (!((AsyncOperation)sceneDefsRequest).isDone) { progress.Report(((AsyncOperation)sceneDefsRequest).progress); yield return null; } onAssetsLoaded(sceneDefsRequest.allAssets.Cast<T>().ToArray()); } public static Material GetOrCreateMaterial(string materialName, Func<Material> materialCreateFunc) { if (!MaterialCache.TryGetValue(materialName, out var value)) { return materialCreateFunc(); } return value; } public static Material GetOrCreateMaterial(string materialName, Func<Texture2D, Material> materialCreateFunc, Texture2D texture) { if (!MaterialCache.TryGetValue(materialName, out var value)) { return materialCreateFunc(texture); } return value; } private void LoadSoundBanks(string soundbanksFolderPath) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: 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_0009: Invalid comparison between Unknown and I4 //IL_002d: 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_004e: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Invalid comparison between Unknown and I4 //IL_0068: Unknown result type (might be due to invalid IL or missing references) AKRESULT val = AkSoundEngine.AddBasePath(soundbanksFolderPath); if ((int)val == 1) { Log.Info("Added bank base path : " + soundbanksFolderPath); } else { Log.Error("Error adding base path : " + soundbanksFolderPath + " " + $"Error code : {val}"); } uint num = default(uint); val = AkSoundEngine.LoadBank("EnemiesReturnsSounds", ref num); if ((int)val == 1) { Log.Info("Added bank : EnemiesReturnsSounds"); } else { Log.Error("Error loading bank : EnemiesReturnsSounds " + $"Error code : {val}"); } } } public static class EnemiesReturnsConfiguration { [StructLayout(LayoutKind.Sequential, Size = 1)] public struct Spitter { public static ConfigEntry<bool> Enabled; public static ConfigEntry<int> DirectorCost; public static ConfigEntry<int> SelectionWeight; public static ConfigEntry<int> MinimumStageCompletion; public static ConfigEntry<bool> HelminthroostReplaceMushrum; public static ConfigEntry<string> DefaultStageList; public static ConfigEntry<string> DepthStageList; public static ConfigEntry<string> LakesStageList; public static ConfigEntry<string> SulfurStageList; public static ConfigEntry<float> BaseMaxHealth; public static ConfigEntry<float> BaseMoveSpeed; public static ConfigEntry<float> BaseJumpPower; public static ConfigEntry<float> BaseDamage; public static ConfigEntry<float> BaseArmor; public static ConfigEntry<float> LevelMaxHealth; public static ConfigEntry<float> LevelDamage; public static ConfigEntry<float> LevelArmor; public static ConfigEntry<float> BiteCooldown; public static ConfigEntry<float> BiteDamageModifier; public static ConfigEntry<float> BiteDamageForce; public static ConfigEntry<float> ChargedProjectileCooldown; public static ConfigEntry<float> ChargedProjectileDamage; public static ConfigEntry<float> ChargedProjectileForce; public static ConfigEntry<float> ChargedProjectileLargeDoTZoneDamage; public static ConfigEntry<float> ChargedProjectileLargeDoTZoneScale; public static ConfigEntry<float> ChargedProjectileFlyTime; public static ConfigEntry<float> ChargedProjectileSmallDoTZoneDamage; public static ConfigEntry<float> ChargedProjectileSmallDoTZoneScale; public static ConfigEntry<KeyCode> EmoteKey; } [StructLayout(LayoutKind.Sequential, Size = 1)] public struct Colossus { public static ConfigEntry<bool> Enabled; public static ConfigEntry<int> DirectorCost; public static ConfigEntry<int> SelectionWeight; public static ConfigEntry<int> MinimumStageCompletion; public static ConfigEntry<string> DefaultStageList; public static ConfigEntry<string> SkyMeadowStageList; public static ConfigEntry<string> GrassyStageList; public static ConfigEntry<string> CastleStageList; public static ConfigEntry<string> SandyStageList; public static ConfigEntry<string> SnowyStageList; public static ConfigEntry<float> BaseMaxHealth; public static ConfigEntry<float> BaseMoveSpeed; public static ConfigEntry<float> BaseJumpPower; public static ConfigEntry<float> BaseDamage; public static ConfigEntry<float> BaseArmor; public static ConfigEntry<float> LevelMaxHealth; public static ConfigEntry<float> LevelDamage; public static ConfigEntry<float> LevelArmor; public static ConfigEntry<bool> DestroyModelOnDeath; public static ConfigEntry<float> FootstepShockwaveDistance; public static ConfigEntry<float> FootstepShockwaveForce; public static ConfigEntry<float> StompCooldown; public static ConfigEntry<float> StompOverlapAttackDamage; public static ConfigEntry<float> StompOverlapAttackForce; public static ConfigEntry<float> StompProjectileDamage; public static ConfigEntry<float> StompProjectileForce; public static ConfigEntry<float> StompProjectileSpeed; public static ConfigEntry<int> StompProjectileCount; public static ConfigEntry<float> StompProjectileScale; public static ConfigEntry<float> StompProjectileLifetime; public static ConfigEntry<float> RockClapCooldown; public static ConfigEntry<float> RockClapProjectileDamage; public static ConfigEntry<float> RockClapProjectileForce; public static ConfigEntry<float> RockClapProjectileSpeed; public static ConfigEntry<float> RockClapProjectileSpeedDelta; public static ConfigEntry<float> RockClapProjectileBlastRadius; public static ConfigEntry<float> RockClapProjectileDistanceFraction; public static ConfigEntry<float> RockClapProjectileDistanceFractionDelta; public static ConfigEntry<float> RockClapProjectileSpawnDistance; public static ConfigEntry<int> RockClapProjectileCount; public static ConfigEntry<float> RockClapDamage; public static ConfigEntry<float> RockClapForce; public static ConfigEntry<float> RockClapRadius; public static ConfigEntry<float> RockClapHomingSpeed; public static ConfigEntry<float> RockClapHomingRange; public static ConfigEntry<bool> RockClapPostLoopSpawns; public static ConfigEntry<float> LaserBarrageCooldown; public static ConfigEntry<float> LaserBarrageDuration; public static ConfigEntry<float> LaserBarrageFrequency; public static ConfigEntry<float> LaserBarrageDamage; public static ConfigEntry<float> LaserBarrageProjectileSpeed; public static ConfigEntry<float> LaserBarrageForce; public static ConfigEntry<float> LaserBarrageSpread; public static ConfigEntry<float> LaserBarrageHeadPitch; public static ConfigEntry<int> LaserBarrageProjectileCount; public static ConfigEntry<float> LaserBarrageExplosionRadius; public static ConfigEntry<float> LaserBarrageExplosionDamage; public static ConfigEntry<float> LaserBarrageExplosionDelay; public static ConfigEntry<bool> ItemEnabled; public static ConfigEntry<float> KnurlDamage; public static ConfigEntry<float> KnurlDamagePerStack; public static ConfigEntry<float> KnurlProcChance; public static ConfigEntry<float> KnurlProcCoefficient; public static ConfigEntry<float> KnurlForce; public static ConfigEntry<KeyCode> EmoteKey; } [StructLayout(LayoutKind.Sequential, Size = 1)] public struct Ifrit { public static ConfigEntry<bool> Enabled; public static ConfigEntry<int> DirectorCost; public static ConfigEntry<int> SelectionWeight; public static ConfigEntry<int> MinimumStageCompletion; public static ConfigEntry<string> DefaultStageList; public static ConfigEntry<float> BaseMaxHealth; public static ConfigEntry<float> BaseMoveSpeed; public static ConfigEntry<float> BaseJumpPower; public static ConfigEntry<float> BaseDamage; public static ConfigEntry<float> BaseArmor; public static ConfigEntry<float> LevelMaxHealth; public static ConfigEntry<float> LevelDamage; public static ConfigEntry<float> LevelArmor; public static ConfigEntry<float> TurnSpeed; public static ConfigEntry<float> FlameChargeCooldown; public static ConfigEntry<float> FlameChargeDuration; public static ConfigEntry<float> FlameChargeSpeedCoefficient; public static ConfigEntry<float> FlameChargeDamage; public static ConfigEntry<float> FlameChargeForce; public static ConfigEntry<float> FlameChargeProcCoefficient; public static ConfigEntry<float> FlameChargeFlameDamage; public static ConfigEntry<float> FlameChargeFlameIgniteChance; public static ConfigEntry<float> FlameChargeFlameForce; public static ConfigEntry<float> FlameChargeFlameTickFrequency; public static ConfigEntry<float> FlameChargeFlameProcCoefficient; public static ConfigEntry<float> FlameChargeHeighCheck; public static ConfigEntry<float> HellzoneCooldown; public static ConfigEntry<float> HellzoneFireballDamage; public static ConfigEntry<float> HellzoneFireballProjectileSpeed; public static ConfigEntry<float> HellzoneFireballForce; public static ConfigEntry<float> HellzoneDoTZoneDamage; public static ConfigEntry<float> HellzoneDoTZoneLifetime; public static ConfigEntry<float> HellzoneRadius; public static ConfigEntry<int> HellzonePillarCount; public static ConfigEntry<float> HellzonePillarDelay; public static ConfigEntry<float> HellzonePillarDamage; public static ConfigEntry<float> HellzonePillarForce; public static ConfigEntry<float> PillarCooldown; public static ConfigEntry<float> PillarExplosionDamage; public static ConfigEntry<float> PillarExplosionChargeDuration; public static ConfigEntry<float> PillarExplosionRadius; public static ConfigEntry<bool> PillarExplosionIgnoesLoS; public static ConfigEntry<float> PillarBodyBaseMaxHealth; public static ConfigEntry<float> PillarBodyLevelMaxHealth; public static ConfigEntry<float> PillarExplosionForce; public static ConfigEntry<int> PillarMaxInstances; public static ConfigEntry<float> PillarMinSpawnDistance; public static ConfigEntry<float> PillarMaxSpawnDistance; public static ConfigEntry<bool> ItemEnabled; public static ConfigEntry<float> SpawnPillarOnChampionKillDamage; public static ConfigEntry<float> SpawnPillarOnChampionKillDamagePerStack; public static ConfigEntry<float> SpawnPillarOnChampionKillRadius; public static ConfigEntry<float> SpawnPillarOnChampionKillChargeTime; public static ConfigEntry<float> SpawnPillarOnChampionKillProcCoefficient; public static ConfigEntry<float> SpawnPillarOnChampionKillBodyBaseDamage; public static ConfigEntry<float> SpawnPillarOnChampionKillBodyLevelDamage; public static ConfigEntry<float> SpawnPillarOnChampionKillEliteChance; } public static ConfigEntry<float> DebugWalkSpeedValue; public static ConfigEntry<float> testconfig; public static void PopulateConfig(ConfigFile config) { DebugWalkSpeedValue = config.Bind<float>("Debug", "walkSpeed value", 1f, "Value speed for walkSpeed animation. For debugging."); testconfig = config.Bind<float>("test", "test", 5f, "test"); Spitter.Enabled = config.Bind<bool>("Spitter Director", "Enable Spitter", true, "Enables Spitter."); Spitter.SelectionWeight = config.Bind<int>("Spitter Director", "Selection Weight", 1, "Selection weight of Spitter."); Spitter.MinimumStageCompletion = config.Bind<int>("Spitter Director", "Minimum Stage Completion", 0, "Minimum stages players need to complete before monster starts spawning."); Spitter.DirectorCost = config.Bind<int>("Spitter Director", "Director Cost", 30, "Director cost of Spitter."); Spitter.HelminthroostReplaceMushrum = config.Bind<bool>("Spitter Director", "Replace Mini Mushrum On Helminth Hatchery", true, "Spitter replaces Mini Mushrum on Helminth Hatchery"); Spitter.DefaultStageList = config.Bind<string>("Spitter Director", "Default Variant Stage List", string.Join(",", DirectorAPI.ToInternalStageName((Stage)8), DirectorAPI.ToInternalStageName((Stage)4096), DirectorAPI.ToInternalStageName((Stage)32768), "FBLScene"), "Stages that Default Spitter appears in. Stages should be separated by coma, internal names can be found in game via \"list_scenes\" command."); Spitter.LakesStageList = config.Bind<string>("Spitter Director", "Lakes Variant Stage List", string.Join(",", DirectorAPI.ToInternalStageName((Stage)1073741824)), "Stages that Lakes Spitter appears in. Stages should be separated by coma, internal names can be found in game via \"list_scenes\" command."); Spitter.SulfurStageList = config.Bind<string>("Spitter Director", "Sulfur Variant Stage List", string.Join(",", DirectorAPI.ToInternalStageName((Stage)134217728)), "Stages that Sulfur Spitter appears in. Stages should be separated by coma, internal names can be found in game via \"list_scenes\" command."); Spitter.DepthStageList = config.Bind<string>("Spitter Director", "Depth Variant Stage List", string.Join(",", DirectorAPI.ToInternalStageName((Stage)128), DirectorAPI.ToInternalStageName((Stage)1048576), DirectorAPI.ToInternalStageName((Stage)1099511627776L)), "Stages that Depth Spitter appears in. Stages should be separated by coma, internal names can be found in game via \"list_scenes\" command."); Spitter.BaseMaxHealth = config.Bind<float>("Spitter Character Stats", "Base Max Health", 300f, "Spitter's base health."); Spitter.BaseMoveSpeed = config.Bind<float>("Spitter Character Stats", "Base Movement Speed", 7f, "Spitter's base movement speed."); Spitter.BaseJumpPower = config.Bind<float>("Spitter Character Stats", "Base Jump Power", 20f, "Spitter's base jump power."); Spitter.BaseDamage = config.Bind<float>("Spitter Character Stats", "Base Damage", 20f, "Spitter's base damage."); Spitter.BaseArmor = config.Bind<float>("Spitter Character Stats", "Base Armor", 0f, "Spitter's base armor."); Spitter.LevelMaxHealth = config.Bind<float>("Spitter Character Stats", "Health per Level", 90f, "Spitter's health increase per level."); Spitter.LevelDamage = config.Bind<float>("Spitter Character Stats", "Damage per Level", 4f, "Spitter's damage increase per level."); Spitter.LevelArmor = config.Bind<float>("Spitter Character Stats", "Armor per Level", 0f, "Spitter's armor increase per level."); Spitter.BiteCooldown = config.Bind<float>("Spitter Bite", "Bite Cooldown", 2f, "Spitter's Bite cooldown."); Spitter.BiteDamageModifier = config.Bind<float>("Spitter Bite", "Bite Damage", 1.5f, "Spitter's Bite damage."); Spitter.BiteDamageForce = config.Bind<float>("Spitter Bite", "Bite Force", 200f, "Spitter's Bite force, by default equal to that of Lemurian."); Spitter.ChargedProjectileCooldown = config.Bind<float>("Spitter Charged Spit", "Charged Spit Cooldown", 6f, "Charged Spit Cooldown"); Spitter.ChargedProjectileDamage = config.Bind<float>("Spitter Charged Spit", "Charged Spit Damage", 1.6f, "Spitter's Charged projectile damage."); Spitter.ChargedProjectileForce = config.Bind<float>("Spitter Charged Spit", "Charged Spit Force", 0f, "Spitter's Charged projectile force."); Spitter.ChargedProjectileFlyTime = config.Bind<float>("Spitter Charged Spit", "Charged Spit Fly Time", 0.75f, "Spitter's Charged Projectile fly time. The higher the value the bigger the arc and the slower the projectile will be. Don't set it too low otherwise projectile will fly pass targes and puddles will be somewhere in the back."); Spitter.ChargedProjectileLargeDoTZoneDamage = config.Bind<float>("Spitter Charged Spit", "Charged Spit Large DoT Zone Damage", 0.15f, "Spitter's Charged Large DoT zone damage off projectile's damage."); Spitter.ChargedProjectileLargeDoTZoneScale = config.Bind<float>("Spitter Charged Spit", "Charged Spit Large DoT Zone Size Scale", 0.55f, "Spitter's Charged Large DoT Zone size scale off Mini Mushrim's DoT zone (since it was used as basis). Also controls projectile's blast radius."); Spitter.ChargedProjectileSmallDoTZoneDamage = config.Bind<float>("Spitter Charged Spit", "Charged Spit Small DoT Zone Damage", 0.15f, "Spitter's Charged Large DoT zone damage off projectile's damage."); Spitter.ChargedProjectileSmallDoTZoneScale = config.Bind<float>("Spitter Charged Spit", "Charged Spit Small DoT Zone Scale", 0.3f, "Spitter's Charged Large DoT Zone scale off Mini Mushrim's DoT zone (since it was used as basis). Also controls projectile's blast radius."); Spitter.EmoteKey = config.Bind<KeyCode>("Colossus Emotes", "Dance Emote", (KeyCode)49, "Key used to Dance."); Colossus.Enabled = config.Bind<bool>("Colossus Director", "Enable Colossus", true, "Enables Colossus."); Colossus.SelectionWeight = config.Bind<int>("Colossus Director", "Selection Weight", 1, "Selection weight of Colossus."); Colossus.MinimumStageCompletion = config.Bind<int>("Colossus Director", "Minimum Stage Completion", 0, "Minimum stages players need to complete before monster starts spawning."); Colossus.DirectorCost = config.Bind<int>("Colossus Director", "Director Cost", 1150, "Director cost of Colossus."); Colossus.DefaultStageList = config.Bind<string>("Colossus Director", "Default Variant Stage List", string.Join(",", ""), "Stages that Default Colossus appears in. Stages should be separated by coma, internal names can be found in game via \"list_scenes\" command."); Colossus.SkyMeadowStageList = config.Bind<string>("Colossus Director", "Sky Meadow Variant Stage List", string.Join(",", DirectorAPI.ToInternalStageName((Stage)16384), DirectorAPI.ToInternalStageName((Stage)33554432)), "Stages that Sky Meadow Colossus appears in. Stages should be separated by coma, internal names can be found in game via \"list_scenes\" command."); Colossus.GrassyStageList = config.Bind<string>("Colossus Director", "Grassy Variant Stage List", string.Join(",", DirectorAPI.ToInternalStageName((Stage)2), DirectorAPI.ToInternalStageName((Stage)4194304), DirectorAPI.ToInternalStageName((Stage)4096), DirectorAPI.ToInternalStageName((Stage)34359738368L), DirectorAPI.ToInternalStageName((Stage)68719476736L), "FBLScene"), "Stages that Grassy Colossus appears in. Stages should be separated by coma, internal names can be found in game via \"list_scenes\" command."); Colossus.CastleStageList = config.Bind<string>("Colossus Director", "Castle Variant Stage List", string.Join(",", "sm64_bbf_SM64_BBF"), "Stages that Castle Colossus appears in. Stages should be separated by coma, internal names can be found in game via \"list_scenes\" command."); Colossus.SandyStageList = config.Bind<string>("Colossus Director", "Sandy Variant Stage List", string.Join(",", DirectorAPI.ToInternalStageName((Stage)16), DirectorAPI.ToInternalStageName((Stage)8388608)), "Stages that Sandy Colossus appears in. Stages should be separated by coma, internal names can be found in game via \"list_scenes\" command."); Colossus.SnowyStageList = config.Bind<string>("Colossus Director", "Snowy Variant Stage List", string.Join(",", DirectorAPI.ToInternalStageName((Stage)67108864), DirectorAPI.ToInternalStageName((Stage)32), DirectorAPI.ToInternalStageName((Stage)2097152)), "Stages that Snowy Colossus appears in. Stages should be separated by coma, internal names can be found in game via \"list_scenes\" command."); Colossus.BaseMaxHealth = config.Bind<float>("Colossus Character Stats", "Base Max Health", 7000f, "Colossus' base health."); Colossus.BaseMoveSpeed = config.Bind<float>("Colossus Character Stats", "Base Movement Speed", 8f, "Colossus' base movement speed."); Colossus.BaseJumpPower = config.Bind<float>("Colossus Character Stats", "Base Jump Power", 10f, "Colossus' base jump power."); Colossus.BaseDamage = config.Bind<float>("Colossus Character Stats", "Base Damage", 40f, "Colossus' base damage."); Colossus.BaseArmor = config.Bind<float>("Colossus Character Stats", "Base Armor", 35f, "Colossus' base armor."); Colossus.LevelMaxHealth = config.Bind<float>("Colossus Character Stats", "Health per Level", 2100f, "Colossus' health increase per level."); Colossus.LevelDamage = config.Bind<float>("Colossus Character Stats", "Damage per Level", 8f, "Colossus' damage increase per level."); Colossus.LevelArmor = config.Bind<float>("Colossus Character Stats", "Armor per Level", 0f, "Colossus' armor increase per level."); Colossus.DestroyModelOnDeath = config.Bind<bool>("Colossus Model", "Destroy Model On Death", false, "Destroys model 5 seconds after Colossus' death. Use to remove a giant slab from the battlefield that might block stuff."); Colossus.FootstepShockwaveDistance = config.Bind<float>("Colossus Footstep Shockwave", "Shockwave Distance", 9f, "Colossus's footstep shockwave distance."); Colossus.FootstepShockwaveForce = config.Bind<float>("Colossus Footstep Shockwave", "Shockwave Force", 1800f, "Colossus's footstep shockwave force."); Colossus.StompCooldown = config.Bind<float>("Colossus Stomp", "Stomp Cooldown", 10f, "Colossus' Stomp cooldown."); Colossus.StompOverlapAttackDamage = config.Bind<float>("Colossus Stomp", "Stomp Overlap Damage", 2.5f, "Colossus' Stomp Overlap (aka stomp itself) damage."); Colossus.StompOverlapAttackForce = config.Bind<float>("Colossus Stomp", "Stomp Overlap Force", 6000f, "Colossus' Stomp Overlap (aka stomp itself) force."); Colossus.StompProjectileDamage = config.Bind<float>("Colossus Stomp", "Stomp Projectile Damage", 1.5f, "Colossus' Stomp Projectile damage."); Colossus.StompProjectileForce = config.Bind<float>("Colossus Stomp", "Stomp Projectile Force", -2500f, "Colossus' Stomp Projectile force. Default number is negative, that means it pulls towards Colossus."); Colossus.StompProjectileSpeed = config.Bind<float>("Colossus Stomp", "Stomp Projectile Speed", 60f, "Colossus' Stomp Projectile speed."); Colossus.StompProjectileCount = config.Bind<int>("Colossus Stomp", "Stomp Projectile Count", 16, "Colossus' Stomp Projectile count."); Colossus.StompProjectileScale = config.Bind<float>("Colossus Stomp", "Stomp Projectile Scale", 2f, "Colossus' Stomp Projectile scale."); Colossus.StompProjectileLifetime = config.Bind<float>("Colossus Stomp", "Stomp Projectile Lifetime", 2f, "Colossus' Stomp Projectile lifetime."); Colossus.RockClapCooldown = config.Bind<float>("Colossus Rock Clap", "Rock Clap Cooldown", 15f, "Colossus' Rock Clap cooldown."); Colossus.RockClapProjectileDamage = config.Bind<float>("Colossus Rock Clap", "Rock Clap Projectile Damage", 1.25f, "Colossus' Rock Clap projectile damage."); Colossus.RockClapProjectileForce = config.Bind<float>("Colossus Rock Clap", "Rock Clap Projectile Force", 3000f, "Colossus' Rock Clap projectile force."); Colossus.RockClapProjectileSpeed = config.Bind<float>("Colossus Rock Clap", "Rock Clap Projectile Speed", 50f, "Colossus' Rock Clap projectile speed."); Colossus.RockClapProjectileSpeedDelta = config.Bind<float>("Colossus Rock Clap", "Rock Clap Projectile Speed Delta", 5f, "Colossus' Rock Clap projectile speed delta (speed = Random(speed - delta, speed + delta))."); Colossus.RockClapProjectileBlastRadius = config.Bind<float>("Colossus Rock Clap", "Rock Clap Projectile Blast Radius", 5f, "Colossus' Rock Clap projectile blast radius."); Colossus.RockClapProjectileDistanceFraction = config.Bind<float>("Colossus Rock Clap", "Rock Clap Projectile Distance Fraction", 0.8f, "Basically determines angle at which rocks fly upwards. Uses colossus' position and rock initial position and takes a distance between them at this fraction."); Colossus.RockClapProjectileDistanceFractionDelta = config.Bind<float>("Colossus Rock Clap", "Rock Clap Projectile Distance Fraction Delta", 0.1f, "Projectile distance delta. See Projectile distance for explanation and see Speed delta for the formula."); Colossus.RockClapProjectileSpawnDistance = config.Bind<float>("Colossus Rock Clap", "Rock Clap Projectile Spawn Distance", 15f, "Colossus' Rock Clap projectile distance from body. Basically controls how far rocks spawn from the center of the body."); Colossus.RockClapProjectileCount = config.Bind<int>("Colossus Rock Clap", "Rock Clap Projectile Count", 20, "Colossus' Rock Clap projectile count."); Colossus.RockClapDamage = config.Bind<float>("Colossus Rock Clap", "Rock Clap Damage", 2.5f, "Colossus' Rock Clap damage."); Colossus.RockClapForce = config.Bind<float>("Colossus Rock Clap", "Rock Clap Force", 6000f, "Colossus' Rock Clap force."); Colossus.RockClapRadius = config.Bind<float>("Colossus Rock Clap", "Rock Clap Radius", 16f, "Colossus' Rock Clap radius."); Colossus.RockClapHomingSpeed = config.Bind<float>("Colossus Rock Clap", "Rock Clap Homing Speed", 15f, "Colossus' Rock Clap homing speed. Rocks home onto target by x and z axis (basically parallel to the ground, without homing up or down)."); Colossus.RockClapHomingRange = config.Bind<float>("Colossus Rock Clap", "Rock Clap Homing Range", 100f, "Colossus' Rock Clap homing range. How far rocks look for a targer."); Colossus.RockClapPostLoopSpawns = config.Bind<bool>("Colossus Rock Clap", "Rock Clap Post Loop Spawns", false, "Colossus' Rock Clap spawns enemies post loop, similar to how he does it in RoR1."); Colossus.LaserBarrageCooldown = config.Bind<float>("Colossus Laser Barrage", "Laser Barrage Cooldown", 45f, "Colossus' Laser Barrage cooldown."); Colossus.LaserBarrageDamage = config.Bind<float>("Colossus Laser Barrage", "Laser Barrage Damage", 0.5f, "Colossus' Laser Barrage damage."); Colossus.LaserBarrageDuration = config.Bind<float>("Colossus Laser Barrage", "Laser Barrage Duration", 5f, "Colossus' Laser Barrage duration."); Colossus.LaserBarrageProjectileSpeed = config.Bind<float>("Colossus Laser Barrage", "Laser Barrage Projectile Speed", 50f, "Colossus' Laser Barrage projectile speed."); Colossus.LaserBarrageFrequency = config.Bind<float>("Colossus Laser Barrage", "Laser Barrage Fire Frequency", 0.2f, "Colossus' Laser Barrage fire frequency."); Colossus.LaserBarrageSpread = config.Bind<float>("Colossus Laser Barrage", "Laser Barrage Spread", 0.15f, "Colossus' Laser Barrage spread. The lower the value, more tight each cluster of shots will be."); Colossus.LaserBarrageHeadPitch = config.Bind<float>("Colossus Laser Barrage", "Laser Barrage Head Pitch", 0.05f, "Colossus' Laser Barrage head pitch. 1 is all the way up, 0 is all the way down."); Colossus.LaserBarrageForce = config.Bind<float>("Colossus Laser Barrage", "Laser Barrage Force", 0f, "Colossus' Laser Barrage force."); Colossus.LaserBarrageProjectileCount = config.Bind<int>("Colossus Laser Barrage", "Laser Barrage Projectiles per Shot", 8, "Colossus' Laser Barrage projectiles per shot count."); Colossus.LaserBarrageExplosionRadius = config.Bind<float>("Colossus Laser Barrage", "Laser Barrage Explosion Radius", 10f, "Colossus' Laser Barrage explosion radius."); Colossus.LaserBarrageExplosionDamage = config.Bind<float>("Colossus Laser Barrage", "Laser Barrage Explosion Damage", 1.25f, "Colossus' Laser Barrage explosion damage, fraction of projectile damage."); Colossus.LaserBarrageExplosionDelay = config.Bind<float>("Colossus Laser Barrage", "Laser Barrage Explosion Delay", 0.5f, "Colossus' Laser Barrage explosion delay after hitting the ground."); Colossus.ItemEnabled = config.Bind<bool>("Colossal Fist", "Enable Colossal Fist", true, "Enables Colossal Fist to drop from Colossus and appear in printers."); Colossus.KnurlDamage = config.Bind<float>("Colossal Fist", "Colossal Fist Damage", 5f, "Colossal Fist' damage"); Colossus.KnurlDamagePerStack = config.Bind<float>("Colossal Fist", "Colossal Fist Damage Per Stack", 5f, "Colossal Fist' damage per stack"); Colossus.KnurlProcCoefficient = config.Bind<float>("Colossal Fist", "Colossal Fist Proc Coefficient", 0f, "Colossal Fist proc coefficient."); Colossus.KnurlProcChance = config.Bind<float>("Colossal Fist", "Colossal Fist Proc Chance", 8f, "Colossal Fist proc chance."); Colossus.KnurlForce = config.Bind<float>("Colossal Fist", "Colossal Fist Force", 0f, "Colossal Fist force."); Colossus.EmoteKey = config.Bind<KeyCode>("Colossus Emotes", "Dance Emote", (KeyCode)49, "Key used to Dance."); Ifrit.Enabled = config.Bind<bool>("Ifrit Director", "Enable Ifrit", true, "Enables Ifrit."); Ifrit.SelectionWeight = config.Bind<int>("Ifrit Director", "Selection Weight", 1, "Selection weight of Ifrit."); Ifrit.MinimumStageCompletion = config.Bind<int>("Ifrit Director", "Minimum Stage Completion", 2, "Minimum stages players need to complete before monster starts spawning."); Ifrit.DirectorCost = config.Bind<int>("Ifrit Director", "Director Cost", 800, "Director cost of Ifrit."); Ifrit.DefaultStageList = config.Bind<string>("Ifrit Director", "Default Variant Stage List", string.Join(",", DirectorAPI.ToInternalStageName((Stage)128), DirectorAPI.ToInternalStageName((Stage)1048576), DirectorAPI.ToInternalStageName((Stage)67108864), DirectorAPI.ToInternalStageName((Stage)32), DirectorAPI.ToInternalStageName((Stage)2097152), DirectorAPI.ToInternalStageName((Stage)1099511627776L), DirectorAPI.ToInternalStageName((Stage)4096), "catacombs_DS1_Catacombs", "snowtime_gephyrophobia"), "Stages that Default Ifrit appears in. Stages should be separated by coma, internal names can be found in game via \"list_scenes\" command."); Ifrit.BaseMaxHealth = config.Bind<float>("Ifrit Character Stats", "Base Max Health", 2800f, "Ifrit' base health."); Ifrit.BaseMoveSpeed = config.Bind<float>("Ifrit Character Stats", "Base Movement Speed", 13f, "Ifrit' base movement speed."); Ifrit.BaseJumpPower = config.Bind<float>("Ifrit Character Stats", "Base Jump Power", 15f, "Ifrit' base jump power."); Ifrit.BaseDamage = config.Bind<float>("Ifrit Character Stats", "Base Damage", 16f, "Ifrit' base damage."); Ifrit.BaseArmor = config.Bind<float>("Ifrit Character Stats", "Base Armor", 20f, "Ifrit' base armor."); Ifrit.TurnSpeed = config.Bind<float>("Ifrit Character Stats", "Turn Speed", 300f, "Ifrit's turn speed."); Ifrit.LevelMaxHealth = config.Bind<float>("Ifrit Character Stats", "Health per Level", 840f, "Ifrit' health increase per level."); Ifrit.LevelDamage = config.Bind<float>("Ifrit Character Stats", "Damage per Level", 3.2f, "Ifrit' damage increase per level."); Ifrit.LevelArmor = config.Bind<float>("Ifrit Character Stats", "Armor per Level", 0f, "Ifrit' armor increase per level."); Ifrit.FlameChargeCooldown = config.Bind<float>("Ifrit Flame Charge", "Flame Charge Cooldown", 15f, "Ifrit's Flame Charge cooldown."); Ifrit.FlameChargeDuration = config.Bind<float>("Ifrit Flame Charge", "Flame Charge Duration", 5f, "Ifrit's Flame Charge duration."); Ifrit.FlameChargeSpeedCoefficient = config.Bind<float>("Ifrit Flame Charge", "Flame Charge Movement Speed Multiplier", 2f, "Ifrit's Flame Charge speed multiplier."); Ifrit.FlameChargeDamage = config.Bind<float>("Ifrit Flame Charge", "Flame Charge Body Damage", 2.5f, "Ifrit's Flame Charge body contact damage."); Ifrit.FlameChargeForce = config.Bind<float>("Ifrit Flame Charge", "Flame Charge Body Force", 5000f, "Ifrit's Flame Charge body contact force."); Ifrit.FlameChargeProcCoefficient = config.Bind<float>("Ifrit Flame Charge", "Flame Charge Body Proc Coefficient", 1f, "Ifrit's Flame Charge body contact proc coefficient."); Ifrit.FlameChargeFlameDamage = config.Bind<float>("Ifrit Flame Charge", "Flame Charge Flame Damage", 0.4f, "Ifrit's Flame Charge flame damage."); Ifrit.FlameChargeFlameIgniteChance = config.Bind<float>("Ifrit Flame Charge", "Flame Charge Flame Ignite Chance", 100f, "Ifrit's Flame Charge flame ignite chance."); Ifrit.FlameChargeFlameForce = config.Bind<float>("Ifrit Flame Charge", "Flame Charge Flame Force", 0f, "Ifrit's Flame Charge flame force."); Ifrit.FlameChargeFlameTickFrequency = config.Bind<float>("Ifrit Flame Charge", "Flame Charge Flame Tick Frequence", 8f, "How many times per second Ifrit's Flame Charge flame deal damage."); Ifrit.FlameChargeFlameProcCoefficient = config.Bind<float>("Ifrit Flame Charge", "Flame Charge Flame Proc Coefficient", 0.2f, "Ifrit's Flame Charge flame proc coefficient."); Ifrit.FlameChargeHeighCheck = config.Bind<float>("Ifrit Flame Charge", "Flame Charge Height Check", 50f, "Checks for falls in front of Ifrit and stops his so he wouldn't yeet himself off cliffs. Set it above 1000 to basically disable the functionality."); Ifrit.HellzoneCooldown = config.Bind<float>("Ifrit Hellzone", "Hellzone Cooldown", 10f, "Ifrit's Hellzone cooldown."); Ifrit.HellzoneRadius = config.Bind<float>("Ifrit Hellzone", "Hellzone Radius", 9f, "Ifrit's Hellzone radius."); Ifrit.HellzoneFireballDamage = config.Bind<float>("Ifrit Hellzone", "Hellzone Fireball Damage", 2.5f, "Ifrit's Hellzone initial fireball projectile damage."); Ifrit.HellzoneFireballProjectileSpeed = config.Bind<float>("Ifrit Hellzone", "Hellzone Fireball Projectile Speed", 50f, "Ifrit's Hellzone fireball projectile speed."); Ifrit.HellzoneFireballForce = config.Bind<float>("Ifrit Hellzone", "Hellzone Fireball Projectile Force", 0f, "Ifrit's Hellzone fireball projectile force."); Ifrit.HellzonePillarCount = config.Bind<int>("Ifrit Hellzone", "Hellzone Secondary Projectile Count", 3, "Ifrit's Hellzone number of secondary explosions."); Ifrit.HellzonePillarDelay = config.Bind<float>("Ifrit Hellzone", "Hellzone Secondary Projectile Delay", 0.5f, "Ifrit's Hellzone delay between each secondary explosion."); Ifrit.HellzoneDoTZoneLifetime = config.Bind<float>("Ifrit Hellzone", "Hellzone DoT Zone Lifetime", 3f, "Ifrit's Hellzone DoT zone initial lifetime. Secondary projectile count multiplied by secondary projectile delay will be added to this value to get total dot zone lifetime."); Ifrit.HellzoneDoTZoneDamage = config.Bind<float>("Ifrit Hellzone", "Hellzone DoT Zone Damage", 0.5f, "Ifrit's Hellzone DoT zone damage. Scales off Hellzone initial projectile damage."); Ifrit.HellzonePillarDamage = config.Bind<float>("Ifrit Hellzone", "Hellzone Secondary Projectile Damage", 3f, "Ifrit's Hellzone secondary projectile damage. Scales of DoT Zone Damage."); Ifrit.HellzonePillarForce = config.Bind<float>("Ifrit Hellzone", "Hellzone Secondary Projectile Force", 2400f, "Ifrit's Hellzone secondary projectile force."); Ifrit.PillarCooldown = config.Bind<float>("Ifrit Pillar", "Summon Pillar Cooldown", 45f, "Ifrit's Summon Pillar cooldown."); Ifrit.PillarExplosionDamage = config.Bind<float>("Ifrit Pillar", "Summon Pillar Damage", 10f, "Ifrit's Summon Pillar explosion damage."); Ifrit.PillarExplosionChargeDuration = config.Bind<float>("Ifrit Pillar", "Summon Pillar Explosion Charge Time", 15f, "Ifrit's Summon Pillar explosion charge time."); Ifrit.PillarExplosionRadius = config.Bind<float>("Ifrit Pillar", "Summon Pillar Explosion Radius", 120f, "Ifrit's Summon Pillar explosion radius."); Ifrit.PillarExplosionForce = config.Bind<float>("Ifrit Pillar", "Summon Pillar Explosion Force", 3000f, "Ifrit's Summon Pillar explosion force."); Ifrit.PillarExplosionIgnoesLoS = config.Bind<bool>("Ifrit Pillar", "Summon Pillar Explosion Ignores LoS", false, "Ifrit's Summon Pillar explosion ignores line of sight."); Ifrit.PillarBodyBaseMaxHealth = config.Bind<float>("Ifrit Pillar", "Summon Pillar Body Base Max Health", 585f, "Ifrit's Summon Pillar body base max health."); Ifrit.PillarBodyLevelMaxHealth = config.Bind<float>("Ifrit Pillar", "Summon Pillar Body Per Level Max Health", 176f, "Ifrit's Summon Pillar body per level max health."); Ifrit.PillarMaxInstances = config.Bind<int>("Ifrit Pillar", "Summon Pillar Max Instances", 2, "Maximum instances of Ifrit's Pillar that can exist at the same time. This also controls how many pillar will be summoned on one skill use."); Ifrit.PillarMinSpawnDistance = config.Bind<float>("Ifrit Pillar", "Summon Pillar Min Spawn Distance", 50f, "Ifrit's Summon Pillar minimum distance for pillar spawning."); Ifrit.PillarMaxSpawnDistance = config.Bind<float>("Ifrit Pillar", "Summon Pillar Max Spawn Distance", 80f, "Ifrit's Summon Pillar maximum distance for pillar spawning."); Ifrit.ItemEnabled = config.Bind<bool>("Infernal Lantern", "Enable Infernal Lantern", true, "Enables Infernal Lantern to drop from Ifrit and appear in printers."); Ifrit.SpawnPillarOnChampionKillDamage = config.Bind<float>("Infernal Lantern", "Infernal Lantern Damage", 10f, "Infernal Lantern explosion damage."); Ifrit.SpawnPillarOnChampionKillDamagePerStack = config.Bind<float>("Infernal Lantern", "Infernal Lantern Damage Per Stack", 10f, "Infernal Lantern explosion damage per stack."); Ifrit.SpawnPillarOnChampionKillRadius = config.Bind<float>("Infernal Lantern", "Infernal Lantern Radius", 80f, "Infernal Lantern explosion radius."); Ifrit.SpawnPillarOnChampionKillChargeTime = config.Bind<float>("Infernal Lantern", "Infernal Lantern Charge Time", 5f, "Infernal Lantern explosion charge time."); Ifrit.SpawnPillarOnChampionKillProcCoefficient = config.Bind<float>("Infernal Lantern", "Infernal Lantern Proc Coefficient", 0f, "Infernal Lantern explosion proc coefficient."); Ifrit.SpawnPillarOnChampionKillBodyBaseDamage = config.Bind<float>("Infernal Lantern", "Infernal Lantern Base Damage", 12f, "Infernal Lantern pillar base damage. By default equal to most survivors."); Ifrit.SpawnPillarOnChampionKillBodyLevelDamage = config.Bind<float>("Infernal Lantern", "Infernal Lantern Base Damage", 2.4f, "Infernal Lantern pillar damage per level. By default equal to most survivors."); Ifrit.SpawnPillarOnChampionKillEliteChance = config.Bind<float>("Infernal Lantern", "Infernal Lantern Elite Kill Spawn Chance", 20f, "Infernal Lantern chance to spawn on elite kill."); } } [BepInPlugin("com.Viliger.EnemiesReturns", "EnemiesReturns", "0.2.7")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class EnemiesReturnsPlugin : BaseUnityPlugin { public const string Author = "Viliger"; public const string ModName = "EnemiesReturns"; public const string Version = "0.2.7"; public const string GUID = "com.Viliger.EnemiesReturns"; private void Awake() { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Expected O, but got Unknown ConfigEntry<bool> obj = ((BaseUnityPlugin)this).Config.Bind<bool>("Config", "Use Config File", false, "Use config file for storring config. Due to mod being currently unfinished and unbalanced, we deploy rapid changes to values. So this way we can still have configs, but without the issue of people having those values saved."); Log.Init(((BaseUnityPlugin)this).Logger); if (obj.Value) { EnemiesReturnsConfiguration.PopulateConfig(((BaseUnityPlugin)this).Config); } else { EnemiesReturnsConfiguration.PopulateConfig(new ConfigFile(Path.Combine(Paths.ConfigPath, "Config"), false) { SaveOnConfigSet = false }); } Hooks(); } private void Hooks() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown ContentManager.collectContentPackProviders += new CollectContentPackProvidersDelegate(ContentManager_collectContentPackProviders); Language.collectLanguageRootFolders += CollectLanguageRootFolders; Language.onCurrentLanguageChanged += Language.Language_onCurrentLanguageChanged; GlobalEventManager.onServerDamageDealt += GlobalEventManager_onServerDamageDealt; ColossalKnurlFactory.Hooks(); IfritFactory.Hooks(); SpawnPillarOnChampionKillFactory.Hooks(); } private void GlobalEventManager_onServerDamageDealt(DamageReport obj) { DamageInfo damageInfo = obj.damageInfo; GameObject gameObject = ((Component)obj.victim).gameObject; CharacterBody val = default(CharacterBody); if (Object.op_Implicit((Object)(object)damageInfo.attacker) && damageInfo.attacker.TryGetComponent<CharacterBody>(ref val) && Object.op_Implicit((Object)(object)val.master)) { ColossalKnurlFactory.OnHitEnemy(damageInfo, val, gameObject); } } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CCSpawnTitans(ConCommandArgs args) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: 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_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) CharacterBody cachedBody = LocalUserManager.readOnlyLocalUsersList[0].cachedBody; SpawnMonster(Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Base/Titan/cscTitanBlackBeach.asset").WaitForCompletion(), cachedBody.modelLocator.modelBaseTransform.position); SpawnMonster(Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Base/Titan/cscTitanDampCave.asset").WaitForCompletion(), cachedBody.modelLocator.modelBaseTransform.position); SpawnMonster(Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Base/Titan/cscTitanGolemPlains.asset").WaitForCompletion(), cachedBody.modelLocator.modelBaseTransform.position); SpawnMonster(Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Base/Titan/cscTitanGooLake.asset").WaitForCompletion(), cachedBody.modelLocator.modelBaseTransform.position); SpawnMonster(Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Base/Titan/cscTitanGold.asset").WaitForCompletion(), cachedBody.modelLocator.modelBaseTransform.position); } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CCSpawnSpitters(ConCommandArgs args) { //IL_0021: 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_0055: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) CharacterBody cachedBody = LocalUserManager.readOnlyLocalUsersList[0].cachedBody; SpawnMonster(SpitterFactory.SpawnCards.cscSpitterDefault, cachedBody.modelLocator.modelBaseTransform.position); SpawnMonster(SpitterFactory.SpawnCards.cscSpitterLakes, cachedBody.modelLocator.modelBaseTransform.position); SpawnMonster(SpitterFactory.SpawnCards.cscSpitterDepths, cachedBody.modelLocator.modelBaseTransform.position); SpawnMonster(SpitterFactory.SpawnCards.cscSpitterSulfur, cachedBody.modelLocator.modelBaseTransform.position); } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CCSpawnColossi(ConCommandArgs args) { //IL_0021: 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_0055: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) CharacterBody cachedBody = LocalUserManager.readOnlyLocalUsersList[0].cachedBody; SpawnMonster(ColossusFactory.SpawnCards.cscColossusDefault, cachedBody.modelLocator.modelBaseTransform.position); SpawnMonster(ColossusFactory.SpawnCards.cscColossusGrassy, cachedBody.modelLocator.modelBaseTransform.position); SpawnMonster(ColossusFactory.SpawnCards.cscColossusSnowy, cachedBody.modelLocator.modelBaseTransform.position); SpawnMonster(ColossusFactory.SpawnCards.cscColossusSandy, cachedBody.modelLocator.modelBaseTransform.position); SpawnMonster(ColossusFactory.SpawnCards.cscColossusSkyMeadow, cachedBody.modelLocator.modelBaseTransform.position); SpawnMonster(ColossusFactory.SpawnCards.cscColossusCastle, cachedBody.modelLocator.modelBaseTransform.position); } private static void SpawnMonster(CharacterSpawnCard card, Vector3 position) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: 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) //IL_000d: 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_000f: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown DirectorSpawnRequest val = new DirectorSpawnRequest((SpawnCard)(object)card, new DirectorPlacementRule { placementMode = (PlacementMode)3, position = position }, RoR2Application.rng); val.teamIndexOverride = (TeamIndex)2; val.ignoreTeamMemberLimit = true; DirectorCore.instance.TrySpawnObject(val); } private void ContentManager_collectContentPackProviders(AddContentPackProviderDelegate addContentPackProvider) { addContentPackProvider.Invoke((IContentPackProvider)(object)new ContentProvider()); } private void CollectLanguageRootFolders(List<string> folders) { folders.Add(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "Language")); } } public class Language { public const string LanguageFolder = "Language"; public static event Action<Language, List<KeyValuePair<string, string>>> onCurrentLangaugeChanged; public static void Language_onCurrentLanguageChanged() { Language currentLanguage = Language.currentLanguage; string text = Path.Combine(Path.GetDirectoryName(typeof(EnemiesReturnsPlugin).Assembly.Location), "Language", Language.currentLanguageName); if (Directory.Exists(text)) { List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>(); Language.LoadAllTokensFromFolder(text, list); Language.onCurrentLangaugeChanged?.Invoke(currentLanguage, list); } } } internal static class Log { private static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { _logSource.LogDebug(data); } internal static void Error(object data) { _logSource.LogError(data); } internal static void Fatal(object data) { _logSource.LogFatal(data); } internal static void