-
Notifications
You must be signed in to change notification settings - Fork 0
/
Plugin.cs
120 lines (107 loc) · 3.77 KB
/
Plugin.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
using BepInEx;
using UnityEngine;
using MonoMod;
using System;
using HarmonyLib;
using MonoMod.RuntimeDetour;
using UnityEngine.AddressableAssets;
using Unity;
using UnityEditor;
using MonoMod.Cil;
using Mono.Cecil;
using Mono.Cecil.Cil;
using System.Collections.Generic;
using System.Collections;
using UnityEngine.Rendering.PostProcessing;
using UnityEngine.SceneManagement;
using UnityEngine.Rendering;
namespace chaos
{
[BepInPlugin(PluginInfo.PLUGIN_GUID, PluginInfo.PLUGIN_NAME, PluginInfo.PLUGIN_VERSION)]
public class Plugin : BaseUnityPlugin
{
public NewMovement player = null;
public static AssetBundle assets = null;
private void Awake()
{
Logger.LogInfo($"Plugin {PluginInfo.PLUGIN_GUID} is loaded!");
SceneManager.activeSceneChanged += (from, to) => {
player = null;
if (SceneManager.GetActiveScene().name.StartsWith("Level")) {
player = FindObjectOfType<NewMovement>();
}
if (assets == null) {
IEnumerable<AssetBundle> bundles = AssetBundle.GetAllLoadedAssetBundles();
foreach (AssetBundle bundle in bundles) {
if (bundle.name.Contains("common")) {
assets = bundle;
}
}
}
};
On.FleshPrison.Start += (orig, self) => {
orig(self);
self.eid.InstaKill();
};
// faster animations, starts in phase 2
On.MinosPrime.Start += (orig, self) => {
orig(self);
self.anim.speed = 1.6f;
self.enraged = true;
};
// lower cooldowns
On.MinosPrime.FixedUpdate += (orig, self) => {
orig(self);
if (self.cooldown >= 0.5f) {
self.cooldown = 0.5f;
}
self.enraged = true;
};
// faster explosion
IL.MinosPrime.Explosion += (il) => {
ILCursor c = new ILCursor(il);
bool found = c.TryGotoNext(MoveType.After,
x => x.MatchLdloc(3),
x => x.MatchDup(),
x => x.MatchLdfld<Explosion>("speed"),
x => x.MatchLdcR4(0.6f)
);
if (found) {
c.Prev.Operand = 2.4f;
}
else {
Logger.LogError("Could not apply IL hook for minos explosion speed");
}
};
// stronger combo knockback
IL.MinosPrime.Combo += (il) => {
ILCursor c = new ILCursor(il);
bool found = c.TryGotoNext(MoveType.After,
x => x.MatchLdarg(0),
x => x.MatchLdfld<MinosPrime>("sc"),
x => x.MatchLdcR4(50)
);
if (found) {
c.Prev.Operand = 250f;
}
else {
Logger.LogError("Could not apply IL hook for minos combo knockback");
}
};
On.MinosPrime.PickAttack += (orig, self, type) => {
orig(self, type);
self.ProjectileCharge();
};
}
}
public class DeathTimer : MonoBehaviour {
float stopwatch = 0f;
float delay = 5f;
public void FixedUpdate() {
stopwatch += Time.fixedDeltaTime;
if (stopwatch >= delay) {
DestroyImmediate(gameObject);
}
}
}
}