Skip to content
On this page

Applying the Harmony Patch

In order to have your effects run, you will need to use a HarmonyPatch to loop through your queued effects.

Base.cs

Navigate to Base.cs in your effect pack and check out the EffectProcessing class.

    //[HarmonyPatch(typeof(PlayerController), "Update")] 
class EffectProcessing {
    public static void Prefix() {
        if (CrowdControl.ActionQueue.Count == 0)
            return;

        Queue<Action> recycledActions = new Queue<Action>();

        while (CrowdControl.ActionQueue.Count > 0) {
            Action action = CrowdControl.ActionQueue.Dequeue();

            try {
                action.Invoke();
            }
            catch (Exception e) {
                recycledActions.Enqueue(action);
            }
        }

		if (recycledActions.Count > 0)
            CrowdControl.ActionQueue = recycledActions;
    }
}

Attaching to a Component

Open dnSpy and load Cuphead's Assembly-CSharp.dll, as directed in the previous step. Search for a frequently-used game component. Here, let's explore the LevelPlayerAnimationController and its functions.

Alt

Looks like a good fit! Modify the HarmonyPatch to align with the class and function:

    [HarmonyPatch(typeof(LevelPlayerAnimationController), "Update")] 

Now, after implementing them, our effects should run after we implement them. We'll cover how to do that in the next step.