using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using EntityStates;
using EntityStates.BrotherMonster;
using EntityStates.BrotherMonster.Weapon;
using On.EntityStates.BrotherMonster;
using On.EntityStates.BrotherMonster.Weapon;
using On.RoR2;
using R2API;
using RoR2;
using RoR2.Projectile;
using RoR2.Skills;
using UnityEngine;
using UnityEngine.AddressableAssets;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("ArtifactofTheKing")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("ArtifactofTheKing")]
[assembly: AssemblyTitle("ArtifactofTheKing")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace ArtifactofTheKing;
[BepInPlugin("com.Blobface.ArtifactKing", "Artifact of the King", "1.2.0")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class ArtifactOfTheKing : BaseUnityPlugin
{
public const string Author = "Original by Blobface, ported to SoTS by viliger";
public const string ModName = "Artifact of the King";
public const string Version = "1.2.0";
public const string GUID = "com.Blobface.ArtifactKing";
public static ArtifactDef King;
private static GameObject Mithrix;
private static bool hasFiredWeaponSlam;
private static bool hasFiredSkyLeapFirst;
private static bool hasFiredSkyLeapSecond;
private void Awake()
{
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00d5: Expected O, but got Unknown
//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
//IL_00e6: 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_00fe: Unknown result type (might be due to invalid IL or missing references)
//IL_0108: Expected O, but got Unknown
//IL_010f: Unknown result type (might be due to invalid IL or missing references)
//IL_0119: Expected O, but got Unknown
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
//IL_012a: Expected O, but got Unknown
//IL_0131: Unknown result type (might be due to invalid IL or missing references)
//IL_013b: Expected O, but got Unknown
//IL_0142: Unknown result type (might be due to invalid IL or missing references)
//IL_014c: Expected O, but got Unknown
//IL_015f: Unknown result type (might be due to invalid IL or missing references)
//IL_0169: Expected O, but got Unknown
//IL_0170: Unknown result type (might be due to invalid IL or missing references)
//IL_017a: Expected O, but got Unknown
KingConfiguration.PopulateConfig(((BaseUnityPlugin)this).Config);
AssetBundle val = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "assetbundles", "artifactoftheking"));
Mithrix = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Brother/BrotherBody.prefab").WaitForCompletion();
King = ScriptableObject.CreateInstance<ArtifactDef>();
((Object)King).name = "ArtifactOfKing_Blobface";
King.nameToken = "ARTIFACT_OF_THE_KING_NAME";
King.descriptionToken = "ARTIFACT_OF_THE_KING_DESCRIPTION";
King.smallIconSelectedSprite = val.LoadAsset<Sprite>("Assets/ArtifactOfTheKing/headon.png");
King.smallIconDeselectedSprite = val.LoadAsset<Sprite>("Assets/ArtifactOfTheKing/headoff.png");
ContentAddition.AddArtifactDef(King);
Language.collectLanguageRootFolders += Language_collectLanguageRootFolders;
Run.Start += new hook_Start(Run_Start);
HealthComponent.ServerFixedUpdate += new hook_ServerFixedUpdate(HealthComponent_ServerFixedUpdate);
HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_TakeDamage);
SlideIntroState.OnEnter += new hook_OnEnter(SlideIntroState_OnEnter);
SprintBash.OnEnter += new hook_OnEnter(SprintBash_OnEnter);
WeaponSlam.OnEnter += new hook_OnEnter(WeaponSlam_OnEnter);
WeaponSlam.FixedUpdate += new hook_FixedUpdate(WeaponSlam_FixedUpdate);
FireLunarShards.OnEnter += new hook_OnEnter(FireLunarShards_OnEnter);
if (KingConfiguration.EnableFixes.Value)
{
ExitSkyLeap.OnEnter += new hook_OnEnter(ExitSkyLeap_OnEnter);
ExitSkyLeap.FixedUpdate += new hook_FixedUpdate(ExitSkyLeap_FixedUpdate);
}
}
private void ExitSkyLeap_FixedUpdate(orig_FixedUpdate orig, ExitSkyLeap self)
{
if (RunArtifactManager.instance.IsArtifactEnabled(King) && ((EntityState)self).isAuthority)
{
if (((EntityState)self).fixedAge > 0.45f * self.duration && !hasFiredSkyLeapFirst)
{
hasFiredSkyLeapFirst = true;
self.FireRingAuthority();
}
if (((EntityState)self).fixedAge > 0.9f * self.duration && !hasFiredSkyLeapSecond)
{
hasFiredSkyLeapSecond = true;
self.FireRingAuthority();
}
}
orig.Invoke(self);
}
private void ExitSkyLeap_OnEnter(orig_OnEnter orig, ExitSkyLeap self)
{
if (RunArtifactManager.instance.IsArtifactEnabled(King) && ((EntityState)self).isAuthority)
{
hasFiredSkyLeapFirst = false;
hasFiredSkyLeapSecond = false;
}
orig.Invoke(self);
}
private void FireLunarShards_OnEnter(orig_OnEnter orig, FireLunarShards self)
{
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0076: Unknown result type (might be due to invalid IL or missing references)
//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
//IL_00da: Unknown result type (might be due to invalid IL or missing references)
//IL_0130: Unknown result type (might be due to invalid IL or missing references)
//IL_013e: Unknown result type (might be due to invalid IL or missing references)
//IL_0143: Unknown result type (might be due to invalid IL or missing references)
//IL_0148: Unknown result type (might be due to invalid IL or missing references)
if (RunArtifactManager.instance.IsArtifactEnabled(King) && ((EntityState)self).isAuthority && self is FireLunarShardsHurt)
{
Ray aimRay = ((BaseState)self).GetAimRay();
Transform val = ((BaseState)self).FindModelChild(FireLunarShards.muzzleString);
if (Object.op_Implicit((Object)(object)val))
{
((Ray)(ref aimRay)).origin = val.position;
}
FireProjectileInfo val2 = default(FireProjectileInfo);
val2.position = ((Ray)(ref aimRay)).origin;
val2.rotation = Quaternion.LookRotation(((Ray)(ref aimRay)).direction);
val2.crit = ((BaseState)self).RollCrit();
val2.damage = ((BaseState)self).damageStat * self.damageCoefficient;
val2.owner = ((EntityState)self).gameObject;
val2.force = 0f;
val2.projectilePrefab = FireLunarShards.projectilePrefab;
FireProjectileInfo val3 = val2;
for (int i = 0; i < KingConfiguration.LunarShardAdd.Value; i++)
{
ProjectileManager.instance.FireProjectile(val3);
((Ray)(ref aimRay)).direction = Util.ApplySpread(((Ray)(ref aimRay)).direction, 0f, self.maxSpread * (1f + 0.45f * (float)i), self.spreadYawScale * (1f + 0.45f * (float)i), self.spreadPitchScale * (1f + 0.45f * (float)i), 0f, 0f);
val3.rotation = Quaternion.LookRotation(((Ray)(ref aimRay)).direction);
}
}
orig.Invoke(self);
}
private void WeaponSlam_FixedUpdate(orig_FixedUpdate orig, WeaponSlam self)
{
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: 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_0095: 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)
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
if (RunArtifactManager.instance.IsArtifactEnabled(King) && ((EntityState)self).isAuthority && self.hasDoneBlastAttack && Object.op_Implicit((Object)(object)self.modelTransform) && !hasFiredWeaponSlam)
{
hasFiredWeaponSlam = true;
float num = 360f / KingConfiguration.SlamOrbCount.Value;
Vector3 val = Vector3.ProjectOnPlane(((EntityState)self).inputBank.aimDirection, Vector3.up);
Transform val2 = ((BaseState)self).FindModelChild(WeaponSlam.muzzleString);
for (int i = 0; (float)i < KingConfiguration.SlamOrbCount.Value; i++)
{
Vector3 val3 = Quaternion.AngleAxis(num * (float)i, Vector3.up) * val;
ProjectileManager.instance.FireProjectile(FistSlam.waveProjectilePrefab, val2.position, Util.QuaternionSafeLookRotation(val3), ((EntityState)self).gameObject, ((BaseState)self).damageStat * FistSlam.waveProjectileDamageCoefficient, FistSlam.waveProjectileForce, ((BaseState)self).RollCrit(), (DamageColorIndex)0, (GameObject)null, -1f, (DamageTypeCombo?)null);
}
}
orig.Invoke(self);
}
private void WeaponSlam_OnEnter(orig_OnEnter orig, WeaponSlam self)
{
if (RunArtifactManager.instance.IsArtifactEnabled(King) && ((EntityState)self).isAuthority)
{
hasFiredWeaponSlam = false;
}
orig.Invoke(self);
}
private void SprintBash_OnEnter(orig_OnEnter orig, SprintBash self)
{
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: 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_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
if (RunArtifactManager.instance.IsArtifactEnabled(King) && ((EntityState)self).isAuthority)
{
Ray aimRay = ((BaseState)self).GetAimRay();
for (int i = 0; i < KingConfiguration.SecondaryFan.Value; i++)
{
Vector3 val = Util.ApplySpread(((Ray)(ref aimRay)).direction, 0f, 0f, 1f, 0f, (float)i * 5f, 0f);
ProjectileManager.instance.FireProjectile(FireLunarShards.projectilePrefab, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(val), ((EntityState)self).gameObject, ((BaseState)self).damageStat * 0.1f / 12f, 0f, ((BaseState)self).RollCrit(), (DamageColorIndex)0, (GameObject)null, -1f, (DamageTypeCombo?)null);
val = Util.ApplySpread(((Ray)(ref aimRay)).direction, 0f, 0f, 1f, 0f, (float)(-i) * 5f, 0f);
ProjectileManager.instance.FireProjectile(FireLunarShards.projectilePrefab, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(val), ((EntityState)self).gameObject, ((BaseState)self).damageStat * 0.1f / 12f, 0f, ((BaseState)self).RollCrit(), (DamageColorIndex)0, (GameObject)null, -1f, (DamageTypeCombo?)null);
}
}
orig.Invoke(self);
}
private void SlideIntroState_OnEnter(orig_OnEnter orig, SlideIntroState self)
{
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0086: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
if (RunArtifactManager.instance.IsArtifactEnabled(King) && ((EntityState)self).isAuthority)
{
Ray aimRay = ((BaseState)self).GetAimRay();
for (int i = 0; i < KingConfiguration.UtilityShotgun.Value; i++)
{
ProjectileManager.instance.FireProjectile(FireLunarShards.projectilePrefab, ((Ray)(ref aimRay)).origin, Quaternion.LookRotation(((Ray)(ref aimRay)).direction), ((EntityState)self).gameObject, ((BaseState)self).damageStat * 0.05f / 12f, 0f, ((BaseState)self).RollCrit(), (DamageColorIndex)0, (GameObject)null, -1f, (DamageTypeCombo?)null);
((Ray)(ref aimRay)).direction = Util.ApplySpread(((Ray)(ref aimRay)).direction, 0f, 4f, 4f, 4f, 0f, 0f);
}
}
orig.Invoke(self);
}
private void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo)
{
orig.Invoke(self, damageInfo);
if (RunArtifactManager.instance.IsArtifactEnabled(King))
{
float num = damageInfo.damage / self.fullCombinedHealth * 100f * 50f * (float)self.itemCounts.adaptiveArmor;
self.adaptiveArmorValue = Mathf.Min(self.adaptiveArmorValue + num, 900f);
}
}
private void HealthComponent_ServerFixedUpdate(orig_ServerFixedUpdate orig, HealthComponent self, float deltaTime)
{
orig.Invoke(self, deltaTime);
if (RunArtifactManager.instance.IsArtifactEnabled(King))
{
self.adaptiveArmorValue = Mathf.Max(0f, self.adaptiveArmorValue - 100f * deltaTime);
}
}
private void Run_Start(orig_Start orig, Run self)
{
if (RunArtifactManager.instance.IsArtifactEnabled(King))
{
((BaseUnityPlugin)this).Logger.LogMessage((object)"Initializing modded stats");
AdjustSkills();
AdjustStats();
}
else
{
((BaseUnityPlugin)this).Logger.LogMessage((object)"Reverting to vanilla stats");
RevertSkills();
RevertStats();
}
orig.Invoke(self);
}
private void AdjustSkills()
{
if (Object.op_Implicit((Object)(object)Mithrix))
{
SkillLocator component = Mithrix.GetComponent<SkillLocator>();
if (!((Object)(object)component == (Object)null))
{
ModifySkill(component.primary.skillFamily.variants[0].skillDef, KingConfiguration.PrimCD.Value, KingConfiguration.PrimStocks.Value);
ModifySkill(component.secondary.skillFamily.variants[0].skillDef, KingConfiguration.SecCD.Value, KingConfiguration.SecStocks.Value);
ModifySkill(component.utility.skillFamily.variants[0].skillDef, KingConfiguration.UtilCD.Value, KingConfiguration.UtilStocks.Value);
ModifySkill(component.special.skillFamily.variants[0].skillDef, KingConfiguration.SpecialCD.Value, KingConfiguration.SpecialStocks.Value);
}
}
}
private void AdjustStats()
{
if (Object.op_Implicit((Object)(object)Mithrix))
{
CharacterBody component = Mithrix.GetComponent<CharacterBody>();
component.baseMaxHealth = KingConfiguration.basehealth.Value;
component.levelMaxHealth = KingConfiguration.levelhealth.Value;
component.baseAttackSpeed = KingConfiguration.baseattackspeed.Value;
component.baseMoveSpeed = KingConfiguration.basespeed.Value;
component.baseAcceleration = KingConfiguration.acceleration.Value;
component.baseJumpPower = KingConfiguration.jumpingpower.Value;
component.baseArmor = KingConfiguration.basearmor.Value;
component.baseDamage = KingConfiguration.basedamage.Value;
component.levelDamage = KingConfiguration.leveldamage.Value;
Mithrix.GetComponent<CharacterDirection>().turnSpeed = KingConfiguration.turningspeed.Value;
CharacterMotor component2 = Mithrix.GetComponent<CharacterMotor>();
component2.mass = KingConfiguration.mass.Value;
component2.airControl = KingConfiguration.aircontrol.Value;
component2.jumpCount = KingConfiguration.jumpcount.Value;
FireLunarShards.projectilePrefab.GetComponent<ProjectileSteerTowardTarget>().rotationSpeed = KingConfiguration.ShardHoming.Value;
ProjectileDirectionalTargetFinder component3 = FireLunarShards.projectilePrefab.GetComponent<ProjectileDirectionalTargetFinder>();
component3.lookRange = KingConfiguration.ShardRange.Value;
component3.lookCone = KingConfiguration.ShardCone.Value;
component3.allowTargetLoss = true;
WeaponSlam.duration = 3.5f / KingConfiguration.baseattackspeed.Value;
HoldSkyLeap.duration = KingConfiguration.JumpPause.Value;
ExitSkyLeap.cloneCount = KingConfiguration.clonecount.Value;
ExitSkyLeap.cloneDuration = KingConfiguration.cloneduration.Value;
ExitSkyLeap.recastChance = KingConfiguration.JumpRecast.Value;
UltChannelState.waveProjectileCount = KingConfiguration.UltimateWaves.Value;
UltChannelState.maxDuration = KingConfiguration.UltimateDuration.Value;
UltChannelState.totalWaves = KingConfiguration.UltimateCount.Value;
}
}
private void RevertStats()
{
if (Object.op_Implicit((Object)(object)Mithrix))
{
CharacterBody component = Mithrix.GetComponent<CharacterBody>();
component.baseMaxHealth = 1400f;
component.levelMaxHealth = 420f;
component.baseAttackSpeed = 1f;
component.baseMoveSpeed = 15f;
component.baseAcceleration = 45f;
component.baseJumpPower = 25f;
component.baseArmor = 20f;
component.baseDamage = 16f;
component.levelDamage = 3.2f;
Mithrix.GetComponent<CharacterDirection>().turnSpeed = 270f;
CharacterMotor component2 = Mithrix.GetComponent<CharacterMotor>();
component2.mass = 900f;
component2.airControl = 0.25f;
component2.jumpCount = 0;
FireLunarShards.projectilePrefab.GetComponent<ProjectileSteerTowardTarget>().rotationSpeed = 20f;
ProjectileDirectionalTargetFinder component3 = FireLunarShards.projectilePrefab.GetComponent<ProjectileDirectionalTargetFinder>();
component3.lookRange = 80f;
component3.lookCone = 90f;
component3.allowTargetLoss = true;
WeaponSlam.duration = 3.5f;
HoldSkyLeap.duration = 3f;
ExitSkyLeap.cloneCount = 0;
ExitSkyLeap.cloneDuration = 0;
ExitSkyLeap.recastChance = 0f;
UltChannelState.waveProjectileCount = 8;
UltChannelState.maxDuration = 9f;
UltChannelState.totalWaves = 5;
}
}
private void RevertSkills()
{
if (Object.op_Implicit((Object)(object)Mithrix))
{
SkillLocator component = Mithrix.GetComponent<SkillLocator>();
if (!((Object)(object)component == (Object)null))
{
ModifySkill(component.primary.skillFamily.variants[0].skillDef, 4f, 1);
ModifySkill(component.secondary.skillFamily.variants[0].skillDef, 5f, 1);
ModifySkill(component.utility.skillFamily.variants[0].skillDef, 3f, 2);
ModifySkill(component.special.skillFamily.variants[0].skillDef, 30f, 5);
}
}
}
private void ModifySkill(SkillDef skillDef, float newRecharge, int newStock)
{
skillDef.baseRechargeInterval = newRecharge;
skillDef.baseMaxStock = newStock;
}
private void Language_collectLanguageRootFolders(List<string> folders)
{
folders.Add(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "Language"));
}
}
public static class KingConfiguration
{
public static ConfigEntry<bool> EnableFixes;
public static ConfigEntry<int> PrimStocks { get; set; }
public static ConfigEntry<int> SecStocks { get; set; }
public static ConfigEntry<int> UtilStocks { get; set; }
public static ConfigEntry<int> SpecialStocks { get; set; }
public static ConfigEntry<float> PrimCD { get; set; }
public static ConfigEntry<float> SecCD { get; set; }
public static ConfigEntry<float> UtilCD { get; set; }
public static ConfigEntry<float> SpecialCD { get; set; }
public static ConfigEntry<float> basehealth { get; set; }
public static ConfigEntry<float> levelhealth { get; set; }
public static ConfigEntry<float> basearmor { get; set; }
public static ConfigEntry<float> baseattackspeed { get; set; }
public static ConfigEntry<float> basedamage { get; set; }
public static ConfigEntry<float> leveldamage { get; set; }
public static ConfigEntry<float> basespeed { get; set; }
public static ConfigEntry<float> mass { get; set; }
public static ConfigEntry<float> turningspeed { get; set; }
public static ConfigEntry<float> jumpingpower { get; set; }
public static ConfigEntry<float> acceleration { get; set; }
public static ConfigEntry<int> jumpcount { get; set; }
public static ConfigEntry<float> aircontrol { get; set; }
public static ConfigEntry<float> SlamOrbCount { get; set; }
public static ConfigEntry<int> SecondaryFan { get; set; }
public static ConfigEntry<int> UtilityShotgun { get; set; }
public static ConfigEntry<int> LunarShardAdd { get; set; }
public static ConfigEntry<int> UltimateWaves { get; set; }
public static ConfigEntry<int> UltimateCount { get; set; }
public static ConfigEntry<float> UltimateDuration { get; set; }
public static ConfigEntry<int> clonecount { get; set; }
public static ConfigEntry<int> cloneduration { get; set; }
public static ConfigEntry<float> JumpRecast { get; set; }
public static ConfigEntry<float> JumpPause { get; set; }
public static ConfigEntry<float> ShardHoming { get; set; }
public static ConfigEntry<float> ShardRange { get; set; }
public static ConfigEntry<float> ShardCone { get; set; }
public static void PopulateConfig(ConfigFile config)
{
EnableFixes = config.Bind<bool>("Update", "Enabled quote fixes unquote", true, "Enables fixes to what I (viliger) believe to be bugs. This ammounts to two more wave attacks as Mithix lands. Leave disabled if you want it to function as it was originally.");
basehealth = config.Bind<float>("Stats", "BaseHealth", 1400f, "base health");
levelhealth = config.Bind<float>("Stats", "LevelHealth", 420f, "level health");
basedamage = config.Bind<float>("Stats", "BaseDamage", 16f, "base damage");
leveldamage = config.Bind<float>("Stats", "LevelDamage", 3.2f, "level damage");
basearmor = config.Bind<float>("Stats", "BaseArmor", 20f, "base armor");
baseattackspeed = config.Bind<float>("Stats", "BaseAttackSpeed", 1f, "base attack speed");
basespeed = config.Bind<float>("Movement", "BaseSpeed", 18f, "Mithrix's base movement speed");
mass = config.Bind<float>("Movement", "Mass", 1200f, "mass, recommended to increase if you increase his movement speed");
turningspeed = config.Bind<float>("Movement", "TurnSpeed", 900f, "how fast mithrix turns");
jumpingpower = config.Bind<float>("Movement", "MoonShoes", 75f, "how hard mithrix jumps, vanilla is 25 for context");
acceleration = config.Bind<float>("Movement", "Acceleration", 180f, "acceleration");
jumpcount = config.Bind<int>("Movement", "JumpCount", 3, "jump count, probably doesn't do anything");
aircontrol = config.Bind<float>("Movement", "Aircontrol", 1f, "air control");
PrimStocks = config.Bind<int>("Skills", "PrimStocks", 2, "Max Stocks for Mithrix's Weapon Slam");
SecStocks = config.Bind<int>("Skills", "SecondaryStocks", 2, "Max Stocks for Mithrix's Dash Attack");
UtilStocks = config.Bind<int>("Skills", "UtilStocks", 4, "Max Stocks for Mithrix's Dash");
SpecialStocks = config.Bind<int>("Skills", "SpecialStocks", 5, "Max Stocks for Mithrix's Sky Leap");
PrimCD = config.Bind<float>("Skills", "PrimCD", 3f, "Cooldown for Mithrix's Weapon Slam");
SecCD = config.Bind<float>("Skills", "SecCD", 3f, "Cooldown for Mithrix's Dash Attack");
UtilCD = config.Bind<float>("Skills", "UtilCD", 1f, "Cooldown for Mithrix's Dash");
SpecialCD = config.Bind<float>("Skills", "SpecialCD", 30f, "Cooldown for Mithrix's Jump Attack");
SlamOrbCount = config.Bind<float>("Skillmods", "OrbCount", 16f, "Orbs fired by weapon slam in a circle, note, set this to an integer");
SecondaryFan = config.Bind<int>("Skillmods", "FanCount", 5, "half the shards fired in a fan by the secondary skill");
UtilityShotgun = config.Bind<int>("Skillmods", "ShotgunCount", 5, "shots fired in a shotgun by utility");
LunarShardAdd = config.Bind<int>("Skillmods", "ShardAddCount", 5, "Bonus shards added to each shot of lunar shards");
UltimateWaves = config.Bind<int>("Skillmods", "WavePerShot", 16, "waves fired by ultimate per shot");
UltimateCount = config.Bind<int>("Skillmods", "WaveShots", 6, "Total shots of ultimate");
UltimateDuration = config.Bind<float>("Skillmods", "WaveDuration", 5.5f, "how long ultimate lasts");
clonecount = config.Bind<int>("Skillmods", "CloneCount", 2, "clones spawned in phase 3 by jump attack");
cloneduration = config.Bind<int>("Skillmods", "CloneDuration", 30, "how long clones take to despawn (like happiest mask)");
JumpRecast = config.Bind<float>("Skillmods", "RecastChance", 0f, "chance mithrix has to recast his jump skill. USE WITH CAUTION.");
JumpPause = config.Bind<float>("Skillmods", "JumpDelay", 0.2f, "How long Mithrix spends in the air when using his jump special");
ShardHoming = config.Bind<float>("Skillmods", "ShardHoming", 30f, "How strongly lunar shards home in to targets. Vanilla is 20f");
ShardRange = config.Bind<float>("Skillmods", "ShardRange", 60f, "Range (distance) in which shards look for targets");
ShardCone = config.Bind<float>("Skillmods", "ShardCone", 180f, "Cone (Angle) in which shards look for targets");
}
}