using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using On.RoR2;
using On.RoR2.Artifacts;
using R2API.Utils;
using RiskOfOptions;
using RiskOfOptions.OptionConfigs;
using RiskOfOptions.Options;
using RoR2;
using RoR2.Artifacts;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("BetterSpite")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("BetterSpite")]
[assembly: AssemblyTitle("BetterSpite")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: UnverifiableCode]
namespace BetterSpite
{
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("HIFU.BetterSpite", "BetterSpite", "1.1.1")]
public class Main : BaseUnityPlugin
{
public const string PluginGUID = "HIFU.BetterSpite";
public const string PluginAuthor = "HIFU";
public const string PluginName = "BetterSpite";
public const string PluginVersion = "1.1.1";
public static ConfigFile BSConfig;
public static ManualLogSource BSLogger;
public AssetBundle betterspite;
public void Awake()
{
BSLogger = ((BaseUnityPlugin)this).Logger;
BSConfig = ((BaseUnityPlugin)this).Config;
betterspite = AssetBundle.LoadFromFile(Assembly.GetExecutingAssembly().Location.Replace("BetterSpite.dll", "betterspite"));
ModSettingsManager.SetModIcon(betterspite.LoadAsset<Sprite>("texModIcon.png"));
IEnumerable<Type> enumerable = from type in Assembly.GetExecutingAssembly().GetTypes()
where !type.IsAbstract && type.IsSubclassOf(typeof(TweakBase))
select type;
BSLogger.LogInfo((object)"==+----------------==TWEAKS==----------------+==");
foreach (Type item in enumerable)
{
TweakBase tweakBase = (TweakBase)Activator.CreateInstance(item);
if (ValidateTweak(tweakBase))
{
tweakBase.Init();
}
}
}
public bool ValidateTweak(TweakBase tb)
{
if (tb.isEnabled && ((BaseUnityPlugin)this).Config.Bind<bool>(tb.Name, "Enable?", true, "Vanilla is false").Value)
{
return true;
}
return false;
}
}
internal class Publicize
{
}
public abstract class TweakBase
{
public abstract string Name { get; }
public virtual bool isEnabled { get; } = true;
public T ConfigOption<T>(T value, string name, string description)
{
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Expected O, but got Unknown
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Expected O, but got Unknown
//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
//IL_0113: Expected O, but got Unknown
//IL_010e: Unknown result type (might be due to invalid IL or missing references)
//IL_0118: Expected O, but got Unknown
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: 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)
//IL_00b9: Expected O, but got Unknown
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_00be: Expected O, but got Unknown
//IL_0122: Unknown result type (might be due to invalid IL or missing references)
//IL_0127: Unknown result type (might be due to invalid IL or missing references)
//IL_012e: Unknown result type (might be due to invalid IL or missing references)
//IL_0135: Unknown result type (might be due to invalid IL or missing references)
//IL_014e: Expected O, but got Unknown
//IL_0149: Unknown result type (might be due to invalid IL or missing references)
//IL_0153: Expected O, but got Unknown
ConfigEntryBase val = (ConfigEntryBase)(object)Main.BSConfig.Bind<T>(Name, name, value, description);
if (!(value is bool))
{
if (!(value is float))
{
if (value is int)
{
ModSettingsManager.AddOption((BaseOption)new IntSliderOption((ConfigEntry<int>)(object)val, new IntSliderConfig
{
restartRequired = true,
min = 0,
max = (int)val.DefaultValue * 10
}));
}
else
{
Main.BSLogger.LogInfo((object)("Failed to add a Risk Of Options config for" + Name));
}
}
else if ((float)val.DefaultValue == 0f)
{
ModSettingsManager.AddOption((BaseOption)new StepSliderOption((ConfigEntry<float>)(object)val, new StepSliderConfig
{
restartRequired = true,
increment = 0.01f,
min = 0f,
max = 1f
}));
}
else
{
ModSettingsManager.AddOption((BaseOption)new StepSliderOption((ConfigEntry<float>)(object)val, new StepSliderConfig
{
restartRequired = true,
increment = (float)val.DefaultValue / 10f,
min = 0f,
max = (float)val.DefaultValue * 10f
}));
}
}
else
{
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption((ConfigEntry<bool>)(object)val, new CheckBoxConfig
{
restartRequired = true
}));
}
return Main.BSConfig.Bind<T>(Name, name, value, description).Value;
}
public abstract void Hooks();
public virtual void Init()
{
Hooks();
Main.BSLogger.LogInfo((object)("Added " + Name));
}
}
}
namespace BetterSpite.Tweaks
{
public class HIFUBallTweaks : TweakBase
{
[CompilerGenerated]
private static class <>O
{
public static hook_OnArtifactEnabled <0>__ChangeStats;
public static hook_FixedUpdate <1>__ChaoticSpiteBombsPart1;
public static hook_Start <2>__ChaoticSpiteBombsPart2;
}
public static float BlastRadius;
public static float DamageCoefficient;
public static float FuseTimeout;
public static float SpawnBaseRadius;
public static float SpawnRadiusCoefficient;
public static float ExtraPerRadius;
public static int MaxCount;
public static float MaxFallDistance;
public static float MaxStepUpDistance;
public static float ScaleBlastRadius;
public static float ScaleDamageCoefficient;
public static float ScaleFuseTimeout;
public static float MinimumFuse;
public static float ScaleSpawnBaseRadius;
public static float ScaleSpawnRadiusCoefficient;
public static float ScaleExtraPerRadius;
public static int ScaleMaxCount;
public override string Name => "Artifact of Spite Changes";
public override void Init()
{
BlastRadius = ConfigOption(7.5f, "Explosion Radius", "Vanilla is 7");
DamageCoefficient = ConfigOption(1.2f, "Damage Coefficient", "Vanilla is 1.5");
FuseTimeout = ConfigOption(4.5f, "Max Fuse Time", "Vanilla is 8");
SpawnBaseRadius = ConfigOption(7f, "Spawn Radius", "Vanilla is 3");
SpawnRadiusCoefficient = ConfigOption(7f, "Spawn Radius Coefficient", "Vanilla is 4");
ExtraPerRadius = ConfigOption(16f, "Extra Bombs per Radius", "Vanilla is 4");
MaxCount = ConfigOption(1000, "Max Bomb Count", "Vanilla is 30");
MaxFallDistance = ConfigOption(500f, "Max Fall Distance", "Vanilla is 60");
MaxStepUpDistance = ConfigOption(100f, "Max Step Up Distance", "Vanilla is 8");
ScaleBlastRadius = ConfigOption(0f, "Scaling Explosion Radius", "Vanilla is 0");
ScaleDamageCoefficient = ConfigOption(0.1f, "Scaling Damage Coefficient", "Vanilla is 0");
ScaleFuseTimeout = ConfigOption(0.1f, "Scaling Max Fuse Time", "Vanilla is 0");
ScaleSpawnBaseRadius = ConfigOption(0.15f, "Scaling Spawn Radius", "Vanilla is 0");
ScaleSpawnRadiusCoefficient = ConfigOption(0.15f, "Scaling Spawn Radius Coefficient", "Vanilla is 0");
ScaleExtraPerRadius = ConfigOption(0.15f, "Scaling Extra Bombs per Radius", "Vanilla is 0");
ScaleMaxCount = ConfigOption(10, "Scaling Max Bomb Count", "Vanilla is 0");
MinimumFuse = ConfigOption(0.4f, "Minimum Fuse Time", "Default is 0.4");
base.Init();
}
public override void Hooks()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Expected O, but got Unknown
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Expected O, but got Unknown
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Expected O, but got Unknown
object obj = <>O.<0>__ChangeStats;
if (obj == null)
{
hook_OnArtifactEnabled val = ChangeStats;
<>O.<0>__ChangeStats = val;
obj = (object)val;
}
BombArtifactManager.OnArtifactEnabled += (hook_OnArtifactEnabled)obj;
object obj2 = <>O.<1>__ChaoticSpiteBombsPart1;
if (obj2 == null)
{
hook_FixedUpdate val2 = ChaoticSpiteBombsPart1;
<>O.<1>__ChaoticSpiteBombsPart1 = val2;
obj2 = (object)val2;
}
SpiteBombController.FixedUpdate += (hook_FixedUpdate)obj2;
object obj3 = <>O.<2>__ChaoticSpiteBombsPart2;
if (obj3 == null)
{
hook_Start val3 = ChaoticSpiteBombsPart2;
<>O.<2>__ChaoticSpiteBombsPart2 = val3;
obj3 = (object)val3;
}
SpiteBombController.Start += (hook_Start)obj3;
}
public static void ChangeStats(orig_OnArtifactEnabled orig, RunArtifactManager runArtifactManager, ArtifactDef artifactDef)
{
BombArtifactManager.bombBlastRadius = BlastRadius + 1f * ScaleBlastRadius * (float)Run.instance.stageClearCount;
BombArtifactManager.bombDamageCoefficient = DamageCoefficient + 1f * ScaleDamageCoefficient * (float)Run.instance.stageClearCount;
BombArtifactManager.bombFuseTimeout = FuseTimeout - 1f * ScaleFuseTimeout * (float)Run.instance.stageClearCount;
BombArtifactManager.bombSpawnBaseRadius = SpawnBaseRadius + 1f * ScaleSpawnBaseRadius * (float)Run.instance.stageClearCount;
BombArtifactManager.bombSpawnRadiusCoefficient = SpawnRadiusCoefficient + 1f * ScaleSpawnRadiusCoefficient * (float)Run.instance.stageClearCount;
BombArtifactManager.extraBombPerRadius = ExtraPerRadius + 1f * ScaleExtraPerRadius * (float)Run.instance.stageClearCount;
BombArtifactManager.maxBombCount = MaxCount + ScaleMaxCount * Run.instance.stageClearCount;
BombArtifactManager.maxBombFallDistance = MaxFallDistance;
BombArtifactManager.maxBombStepUpDistance = MaxStepUpDistance;
if (BombArtifactManager.bombFuseTimeout < 0f)
{
BombArtifactManager.bombFuseTimeout = MinimumFuse;
}
orig.Invoke(runArtifactManager, artifactDef);
}
public static void ChaoticSpiteBombsPart1(orig_FixedUpdate orig, SpiteBombController self)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//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_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: 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_004a: 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_00be: Unknown result type (might be due to invalid IL or missing references)
//IL_00bf: 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_00c6: 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_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: 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_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: 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_00e0: Unknown result type (might be due to invalid IL or missing references)
//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
Vector3 val = self.velocity;
float fixedDeltaTime = Time.fixedDeltaTime;
val.y += fixedDeltaTime * Physics.gravity.y;
Vector3 position = self.transform.position;
float num = ((Vector3)(ref val)).magnitude * fixedDeltaTime + self.radius;
Vector3 val2 = position;
Vector3 val3 = val;
RaycastHit val4 = default(RaycastHit);
if (Physics.Raycast(val2, val3, ref val4, num, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask), (QueryTriggerInteraction)1))
{
position = ((RaycastHit)(ref val4)).point;
val -= 2f * Vector3.Dot(val, ((RaycastHit)(ref val4)).normal) * ((RaycastHit)(ref val4)).normal;
val *= 0.8f;
try
{
Reflection.InvokeMethod((object)self, "OnBounce");
}
catch
{
}
}
else
{
position += val * fixedDeltaTime;
}
Reflection.SetFieldValue<Vector3>((object)self, "velocity", val);
self.rb.MovePosition(position);
self.delayBlast.position = position;
}
public static void ChaoticSpiteBombsPart2(orig_Start orig, SpiteBombController self)
{
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
self.initialVelocityY = Random.Range(-40f, 40f);
Vector3 position = self.transform.position;
float num = Trajectory.CalculateFlightDuration(position.y, self.bouncePosition.y, self.initialVelocityY);
Vector3 val = self.bouncePosition - position;
val.y = 0f;
float magnitude = ((Vector3)(ref val)).magnitude;
float num2 = Trajectory.CalculateGroundSpeed(num, magnitude);
Vector3 val2 = val / magnitude * num2;
val2.y = self.initialVelocityY;
Reflection.SetFieldValue<Vector3>((object)self, "velocity", val2);
}
public static void ThemissileknowswhereitisatalltimesItknowsthisbecauseitknowswhereitisntBysubtractingwhereitisfromwhereitisntorwhereitisntfromwhereitiswhicheverisgreateritobtainsadifferenceordeviationTheguidancesubsystemusesdeviationstogeneratecorrectivecommandstodrivethemissilefromapositionwhereitistoapositionwhereitisntandarrivingatapositionwhereitwasntitnowisConsquentlythepositionwhereitisisnowthepositionthatitwasntanditfollowsthatthepositionthatitwasisnowthepositionthatitisntIntheeventthatthepositionthatitisinisnotthepositionthatitwasntthesystemhasacquiredavariation()
{
}
public static void ThevariationbeingthedifferencebetweenwherethemissileisandwhereitwasntIfvariationisconsideredtobeasignificantfactorittoomaybecorrectedbytheGEAhoweverthemissilemustalsoknowwhereitwasThemissileguidancecomputerscenarioworksasfollowsBecausethevariationhasmodifiedsomeoftheinformationthemissilehasobtaineditisnotsurejustwhereitishoweveritissurewhereitisntwithinreasonanditknowswhereitwasItnowsubtractswhereitshouldbefromwhereitwasntorviceversaAndbydifferentiatingthisfromthealgebraicsumofwhereitshouldntbeandwhereitwasitisabletoobtainthedeviationanditsvariationwhichiscallederror()
{
}
}
}