using System;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using HutongGames.PlayMaker;
using HutongGames.PlayMaker.Actions;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("LastArbiter")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("LastArbiter")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("73b670ee-de4d-48bc-85cc-ae24e0cde37d")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
[BepInPlugin("com.slimybonesjones.lastarbiter", "Last Arbiter", "1.0.0")]
public class LastArbiter : BaseUnityPlugin
{
internal static ManualLogSource Log;
internal static HealthManager healthManager;
private void Awake()
{
Log = ((BaseUnityPlugin)this).Logger;
Log.LogInfo((object)"Plugin loaded and initialised");
Harmony.CreateAndPatchAll(typeof(LastArbiter), (string)null);
}
[HarmonyPostfix]
[HarmonyPatch(typeof(PlayMakerFSM), "Awake")]
private static void Postfix(PlayMakerFSM __instance)
{
GameObject val = ((__instance != null) ? ((Component)__instance).gameObject : null);
if ((Object)(object)val == (Object)null || !((Object)val).name.StartsWith("Last Judge", StringComparison.OrdinalIgnoreCase) || !string.Equals(__instance.FsmName, "Control", StringComparison.OrdinalIgnoreCase))
{
return;
}
FsmState state = __instance.Fsm.GetState("Idle");
if (state == null)
{
Log.LogWarning((object)"No state named Idle");
return;
}
Wait val2 = state.Actions.OfType<Wait>().FirstOrDefault((Func<Wait, bool>)((Wait a) => ((NamedVariable)a.time).Name == "Idle Time"));
val2.time = FsmFloat.op_Implicit(0f);
FsmState state2 = __instance.Fsm.GetState("Init");
if (state2 == null)
{
Log.LogWarning((object)"No state named Init");
return;
}
MultiplyIntByFloat val3 = state2.Actions.OfType<MultiplyIntByFloat>().FirstOrDefault((Func<MultiplyIntByFloat, bool>)((MultiplyIntByFloat a) => ((NamedVariable)a.storeResult).Name == "HP P2"));
val3.multiplyFloat = FsmFloat.op_Implicit(0.85f);
MultiplyIntByFloat val4 = state2.Actions.OfType<MultiplyIntByFloat>().FirstOrDefault((Func<MultiplyIntByFloat, bool>)((MultiplyIntByFloat a) => ((NamedVariable)a.storeResult).Name == "HP P3"));
val4.multiplyFloat = FsmFloat.op_Implicit(0.25f);
FsmState state3 = __instance.Fsm.GetState("Intro Roar");
if (state3 == null)
{
Log.LogWarning((object)"No state named Intro Roar");
return;
}
DisplayBossTitle val5 = state3.Actions.OfType<DisplayBossTitle>().FirstOrDefault();
val5.bossTitle = FsmString.op_Implicit("LAST_JUDGE");
FsmState state4 = __instance.Fsm.GetState("Spinning");
if (state4 == null)
{
Log.LogWarning((object)"No state named Spinning");
return;
}
Wait val6 = state4.Actions.OfType<Wait>().FirstOrDefault();
val6.time = FsmFloat.op_Implicit(0.5f);
FsmState state5 = __instance.Fsm.GetState("Rerage?");
if (state5 == null)
{
Log.LogWarning((object)"No state named Rerage?");
return;
}
IntCompare val7 = state5.Actions.OfType<IntCompare>().FirstOrDefault();
val7.integer2 = FsmInt.op_Implicit(-16);
FsmState state6 = __instance.Fsm.GetState("Rage End");
if (state6 == null)
{
Log.LogWarning((object)"No state named Rage End");
return;
}
SetFloatValue val8 = state6.Actions.OfType<SetFloatValue>().FirstOrDefault();
val8.floatValue = FsmFloat.op_Implicit(0.2f);
FsmState state7 = __instance.Fsm.GetState("Flame Spin Antic L");
if (state7 == null)
{
Log.LogWarning((object)"No state named Flame Spin Antic L");
return;
}
Wait val9 = state7.Actions.OfType<Wait>().FirstOrDefault();
val9.time = FsmFloat.op_Implicit(0f);
FsmState state8 = __instance.Fsm.GetState("Flame Dir");
if (state8 == null)
{
Log.LogWarning((object)"No state named Flame Dir");
return;
}
RandomFloat val10 = state8.Actions.OfType<RandomFloat>().FirstOrDefault((Func<RandomFloat, bool>)((RandomFloat a) => ((NamedVariable)a.storeResult).Name == "Speed R"));
val10.min = FsmFloat.op_Implicit(5f);
val10.max = FsmFloat.op_Implicit(15f);
FsmState state9 = __instance.Fsm.GetState("L Flame R");
if (state9 == null)
{
Log.LogWarning((object)"No state named L Flame R");
return;
}
Wait val11 = state9.Actions.OfType<Wait>().FirstOrDefault((Func<Wait, bool>)((Wait a) => a.time.Value == 1.7f));
val11.time = FsmFloat.op_Implicit(0.7f);
WaitBool val12 = state9.Actions.OfType<WaitBool>().FirstOrDefault();
val12.time = FsmFloat.op_Implicit(0.5f);
SendEventToRegisterDelay val13 = state9.Actions.OfType<SendEventToRegisterDelay>().FirstOrDefault();
val13.delay = FsmFloat.op_Implicit(0.5f);
Wait val14 = state9.Actions.OfType<Wait>().FirstOrDefault((Func<Wait, bool>)((Wait a) => a.time.Value == 1.25f));
val14.time = FsmFloat.op_Implicit(0.5f);
FsmState state10 = __instance.Fsm.GetState("R Flame L");
if (state10 == null)
{
Log.LogWarning((object)"No state named R Flame L");
return;
}
Wait val15 = state10.Actions.OfType<Wait>().FirstOrDefault((Func<Wait, bool>)((Wait a) => a.time.Value == 1.7f));
val15.time = FsmFloat.op_Implicit(0.7f);
WaitBool val16 = state10.Actions.OfType<WaitBool>().FirstOrDefault();
val16.time = FsmFloat.op_Implicit(0.5f);
SendEventToRegisterDelay val17 = state10.Actions.OfType<SendEventToRegisterDelay>().FirstOrDefault();
val13.delay = FsmFloat.op_Implicit(0.5f);
Wait val18 = state10.Actions.OfType<Wait>().FirstOrDefault((Func<Wait, bool>)((Wait a) => a.time.Value == 1.25f));
val14.time = FsmFloat.op_Implicit(0.5f);
FsmState state11 = __instance.Fsm.GetState("Charge");
if (state11 == null)
{
Log.LogWarning((object)"No state named Charge");
return;
}
Wait val19 = state11.Actions.OfType<Wait>().FirstOrDefault();
val19.time = FsmFloat.op_Implicit(1f);
FsmState state12 = __instance.Fsm.GetState("Charge Flame");
if (state12 == null)
{
Log.LogWarning((object)"No state named Charge Flame");
return;
}
Wait val20 = state12.Actions.OfType<Wait>().FirstOrDefault();
val20.time = FsmFloat.op_Implicit(0.2f);
FsmState state13 = __instance.Fsm.GetState("Charge Antic 2");
if (state13 == null)
{
Log.LogWarning((object)"No state named Charge Antic 2");
return;
}
Wait val21 = state13.Actions.OfType<Wait>().FirstOrDefault();
val21.time = FsmFloat.op_Implicit(0f);
FsmState state14 = __instance.Fsm.GetState("Charge Start");
if (state14 == null)
{
Log.LogWarning((object)"No state named Charge Start");
return;
}
SetVelocityByScale val22 = state14.Actions.OfType<SetVelocityByScale>().FirstOrDefault();
val22.speed = FsmFloat.op_Implicit(-22f);
FsmState state15 = __instance.Fsm.GetState("Stomp Flame Antic");
if (state15 == null)
{
Log.LogWarning((object)"No state named Stomp Flame Antic");
return;
}
Wait val23 = state15.Actions.OfType<Wait>().FirstOrDefault();
val23.time = FsmFloat.op_Implicit(0f);
FsmState state16 = __instance.Fsm.GetState("Stomp Flames");
if (state16 == null)
{
Log.LogWarning((object)"No state named Stomp Flames");
return;
}
Wait val24 = state16.Actions.OfType<Wait>().FirstOrDefault();
val24.time = FsmFloat.op_Implicit(0.1f);
FsmState state17 = __instance.Fsm.GetState("Stomp Regular");
if (state17 == null)
{
Log.LogWarning((object)"No state named Stomp Regular");
return;
}
Wait val25 = state17.Actions.OfType<Wait>().FirstOrDefault();
val25.time = FsmFloat.op_Implicit(0.1f);
FsmState state18 = __instance.Fsm.GetState("Stomp Rise and Antic");
if (state18 == null)
{
Log.LogWarning((object)"No state named Stomp Rise and Antic");
return;
}
EaseFloat val26 = state18.Actions.OfType<EaseFloat>().FirstOrDefault((Func<EaseFloat, bool>)((EaseFloat a) => ((NamedVariable)a.floatVariable).Name == "Tween X"));
((EaseFsmAction)val26).time = FsmFloat.op_Implicit(0.2f);
EaseFloat val27 = state18.Actions.OfType<EaseFloat>().FirstOrDefault((Func<EaseFloat, bool>)((EaseFloat a) => ((NamedVariable)a.floatVariable).Name == "Tween Y"));
((EaseFsmAction)val27).time = FsmFloat.op_Implicit(0.1f);
ActivateGameObjectDelay val28 = state18.Actions.OfType<ActivateGameObjectDelay>().FirstOrDefault((Func<ActivateGameObjectDelay, bool>)((ActivateGameObjectDelay a) => ((NamedVariable)a.activate).Name == "Flamed Up"));
val28.delay = FsmFloat.op_Implicit(0.1f);
FsmState state19 = __instance.Fsm.GetState("Jump Rise");
if (state19 == null)
{
Log.LogWarning((object)"No state named Jump Rise");
return;
}
EaseFloat val29 = state19.Actions.OfType<EaseFloat>().FirstOrDefault((Func<EaseFloat, bool>)((EaseFloat a) => ((NamedVariable)a.floatVariable).Name == "Tween X"));
((EaseFsmAction)val29).time = FsmFloat.op_Implicit(0.2f);
EaseFloat val30 = state19.Actions.OfType<EaseFloat>().FirstOrDefault((Func<EaseFloat, bool>)((EaseFloat a) => ((NamedVariable)a.floatVariable).Name == "Tween Y"));
((EaseFsmAction)val30).time = FsmFloat.op_Implicit(0.15f);
FsmState state20 = __instance.Fsm.GetState("Jump Fall");
if (state20 == null)
{
Log.LogWarning((object)"No state named Jump Fall");
return;
}
EaseFloat val31 = state20.Actions.OfType<EaseFloat>().FirstOrDefault((Func<EaseFloat, bool>)((EaseFloat a) => ((NamedVariable)a.floatVariable).Name == "Tween X"));
((EaseFsmAction)val31).time = FsmFloat.op_Implicit(0.15f);
EaseFloat val32 = state20.Actions.OfType<EaseFloat>().FirstOrDefault((Func<EaseFloat, bool>)((EaseFloat a) => ((NamedVariable)a.floatVariable).Name == "Tween Y"));
((EaseFsmAction)val32).time = FsmFloat.op_Implicit(0.2f);
FsmState state21 = __instance.Fsm.GetState("Dash");
if (state21 == null)
{
Log.LogWarning((object)"No state named Dash");
return;
}
SetVelocityByScale val33 = state21.Actions.OfType<SetVelocityByScale>().FirstOrDefault();
val33.speed = FsmFloat.op_Implicit(-40f);
FsmState state22 = __instance.Fsm.GetState("Clamp L");
if (state22 == null)
{
Log.LogWarning((object)"No state named Clamp L");
return;
}
FloatClamp val34 = state22.Actions.OfType<FloatClamp>().FirstOrDefault((Func<FloatClamp, bool>)((FloatClamp a) => ((NamedVariable)a.floatVariable).Name == "X Distance"));
val34.minValue = FsmFloat.op_Implicit(-24f);
val34.maxValue = FsmFloat.op_Implicit(-8f);
FsmState state23 = __instance.Fsm.GetState("Clamp R");
if (state23 == null)
{
Log.LogWarning((object)"No state named Clamp R");
return;
}
FloatClamp val35 = state23.Actions.OfType<FloatClamp>().FirstOrDefault((Func<FloatClamp, bool>)((FloatClamp a) => ((NamedVariable)a.floatVariable).Name == "X Distance"));
val35.minValue = FsmFloat.op_Implicit(8f);
val35.maxValue = FsmFloat.op_Implicit(24f);
FsmState state24 = __instance.Fsm.GetState("Throw Rise");
if (state24 == null)
{
Log.LogWarning((object)"No state named Throw Rise");
return;
}
EaseFloat val36 = state24.Actions.OfType<EaseFloat>().FirstOrDefault((Func<EaseFloat, bool>)((EaseFloat a) => ((NamedVariable)a.floatVariable).Name == "Tween X"));
((EaseFsmAction)val36).time = FsmFloat.op_Implicit(0.1f);
EaseFloat val37 = state24.Actions.OfType<EaseFloat>().FirstOrDefault((Func<EaseFloat, bool>)((EaseFloat a) => ((NamedVariable)a.floatVariable).Name == "Tween Y"));
((EaseFsmAction)val37).time = FsmFloat.op_Implicit(0.1f);
Wait val38 = state24.Actions.OfType<Wait>().FirstOrDefault();
val38.time = FsmFloat.op_Implicit(0f);
FsmState state25 = __instance.Fsm.GetState("Throw Fall");
if (state25 == null)
{
Log.LogWarning((object)"No state named Throw Fall");
return;
}
EaseFloat val39 = state25.Actions.OfType<EaseFloat>().FirstOrDefault((Func<EaseFloat, bool>)((EaseFloat a) => ((NamedVariable)a.floatVariable).Name == "Tween X"));
((EaseFsmAction)val39).time = FsmFloat.op_Implicit(0.1f);
EaseFloat val40 = state25.Actions.OfType<EaseFloat>().FirstOrDefault((Func<EaseFloat, bool>)((EaseFloat a) => ((NamedVariable)a.floatVariable).Name == "Tween Y"));
((EaseFsmAction)val40).time = FsmFloat.op_Implicit(0.1f);
FsmState state26 = __instance.Fsm.GetState("Slam Type");
if (state26 == null)
{
Log.LogWarning((object)"No state named Slam Type");
return;
}
ConvertBoolToFloat val41 = state26.Actions.OfType<ConvertBoolToFloat>().FirstOrDefault();
val41.falseValue = FsmFloat.op_Implicit(0f);
FsmState state27 = __instance.Fsm.GetState("Stun Start");
if (state27 == null)
{
Log.LogWarning((object)"No state named Stun Start");
return;
}
SetFloatValue val42 = state27.Actions.OfType<SetFloatValue>().FirstOrDefault((Func<SetFloatValue, bool>)((SetFloatValue a) => ((NamedVariable)a.floatVariable).Name == "Stun Timer"));
val42.floatValue = FsmFloat.op_Implicit(1f);
FsmState state28 = __instance.Fsm.GetState("Close Range");
if (state28 == null)
{
Log.LogWarning((object)"No state named Close Range");
return;
}
SendRandomEventV4 val43 = state28.Actions.OfType<SendRandomEventV4>().FirstOrDefault();
val43.weights = (FsmFloat[])(object)new FsmFloat[3]
{
FsmFloat.op_Implicit(0.25f),
FsmFloat.op_Implicit(0.4f),
FsmFloat.op_Implicit(0.35f)
};
val43.eventMax = (FsmInt[])(object)new FsmInt[3]
{
FsmInt.op_Implicit(2),
FsmInt.op_Implicit(2),
FsmInt.op_Implicit(2)
};
val43.missedMax = (FsmInt[])(object)new FsmInt[3]
{
FsmInt.op_Implicit(4),
FsmInt.op_Implicit(3),
FsmInt.op_Implicit(3)
};
FsmState state29 = __instance.Fsm.GetState("Far Range");
if (state29 == null)
{
Log.LogWarning((object)"No state named Far Range");
return;
}
SendRandomEventV4 val44 = state29.Actions.OfType<SendRandomEventV4>().FirstOrDefault();
val44.weights = (FsmFloat[])(object)new FsmFloat[4]
{
FsmFloat.op_Implicit(0.3f),
FsmFloat.op_Implicit(0.3f),
FsmFloat.op_Implicit(0.2f),
FsmFloat.op_Implicit(0.2f)
};
val44.eventMax = (FsmInt[])(object)new FsmInt[4]
{
FsmInt.op_Implicit(1),
FsmInt.op_Implicit(1),
FsmInt.op_Implicit(2),
FsmInt.op_Implicit(2)
};
val44.missedMax = (FsmInt[])(object)new FsmInt[4]
{
FsmInt.op_Implicit(2),
FsmInt.op_Implicit(2),
FsmInt.op_Implicit(3),
FsmInt.op_Implicit(2)
};
FsmState state30 = __instance.Fsm.GetState("Close Range F");
if (state30 == null)
{
Log.LogWarning((object)"No state named Close Range F");
return;
}
SendRandomEventV3 val45 = state30.Actions.OfType<SendRandomEventV3>().FirstOrDefault();
val45.weights = (FsmFloat[])(object)new FsmFloat[5]
{
FsmFloat.op_Implicit(0.15f),
FsmFloat.op_Implicit(0.25f),
FsmFloat.op_Implicit(0.1f),
FsmFloat.op_Implicit(0.25f),
FsmFloat.op_Implicit(0.25f)
};
val45.eventMax = (FsmInt[])(object)new FsmInt[5]
{
FsmInt.op_Implicit(1),
FsmInt.op_Implicit(3),
FsmInt.op_Implicit(1),
FsmInt.op_Implicit(3),
FsmInt.op_Implicit(1)
};
val45.missedMax = (FsmInt[])(object)new FsmInt[5]
{
FsmInt.op_Implicit(4),
FsmInt.op_Implicit(2),
FsmInt.op_Implicit(999),
FsmInt.op_Implicit(4),
FsmInt.op_Implicit(4)
};
FsmState state31 = __instance.Fsm.GetState("Far Range F");
if (state31 == null)
{
Log.LogWarning((object)"No state named Far Range F");
return;
}
SendRandomEventV3 val46 = state31.Actions.OfType<SendRandomEventV3>().FirstOrDefault();
val46.weights = (FsmFloat[])(object)new FsmFloat[5]
{
FsmFloat.op_Implicit(0.2f),
FsmFloat.op_Implicit(0.2f),
FsmFloat.op_Implicit(0.2f),
FsmFloat.op_Implicit(0.1f),
FsmFloat.op_Implicit(0.3f)
};
val46.eventMax = (FsmInt[])(object)new FsmInt[5]
{
FsmInt.op_Implicit(1),
FsmInt.op_Implicit(2),
FsmInt.op_Implicit(1),
FsmInt.op_Implicit(1),
FsmInt.op_Implicit(3)
};
val46.missedMax = (FsmInt[])(object)new FsmInt[5]
{
FsmInt.op_Implicit(2),
FsmInt.op_Implicit(3),
FsmInt.op_Implicit(999),
FsmInt.op_Implicit(4),
FsmInt.op_Implicit(2)
};
healthManager = ((Component)__instance).gameObject.GetComponent<HealthManager>();
healthManager.hp = 1440;
}
}