Skip to content

Commit 0fd1dbf

Browse files
committed
Fix hair blink color when tired + toggling Other Self variant
1 parent 6277026 commit 0fd1dbf

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

Triggers/MadelineSilhouetteTrigger.cs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,20 @@
44
using Monocle;
55
using MonoMod.Cil;
66
using System;
7-
using System.Collections.Generic;
8-
using System.Linq;
9-
using System.Text;
10-
using System.Threading.Tasks;
117

128
namespace Celeste.Mod.SpringCollab2020.Triggers {
139
[CustomEntity("SpringCollab2020/MadelineSilhouetteTrigger")]
1410
class MadelineSilhouetteTrigger : Trigger {
1511
public static void Load() {
1612
On.Celeste.Player.Added += onPlayerAdded;
1713
IL.Celeste.Player.Render += patchPlayerRender;
14+
On.Celeste.Player.ResetSprite += onPlayerResetSprite;
1815
}
1916

2017
public static void Unload() {
2118
On.Celeste.Player.Added -= onPlayerAdded;
2219
IL.Celeste.Player.Render -= patchPlayerRender;
20+
On.Celeste.Player.ResetSprite -= onPlayerResetSprite;
2321
}
2422

2523
private static void onPlayerAdded(On.Celeste.Player.orig_Added orig, Player self, Scene scene) {
@@ -33,9 +31,18 @@ private static void onPlayerAdded(On.Celeste.Player.orig_Added orig, Player self
3331
private static void patchPlayerRender(ILContext il) {
3432
ILCursor cursor = new ILCursor(il);
3533

34+
// jump to the usage of the Red color
35+
if (cursor.TryGotoNext(instr => instr.MatchCall<Color>("get_Red"))) {
36+
Logger.Log("SpringCollab2020/MadelineSilhouetteTrigger", $"Patching silhouette hair color at {cursor.Index} in IL code for Player.Render()");
37+
38+
// when Madeline blinks red, make the hair blink red.
39+
cursor.Emit(OpCodes.Ldarg_0);
40+
cursor.EmitDelegate<Action<Player>>(player => player.Hair.Color = Color.Red);
41+
}
42+
3643
// jump to the usage of the White color
3744
if (cursor.TryGotoNext(instr => instr.MatchCall<Color>("get_White"))) {
38-
Logger.Log("SpringCollab2020/MadelineSilhouetteTrigger", $"Patching player color at {cursor.Index} in IL code for Player.Render()");
45+
Logger.Log("SpringCollab2020/MadelineSilhouetteTrigger", $"Patching silhouette color at {cursor.Index} in IL code for Player.Render()");
3946

4047
// instead of calling Color.White, call getMadelineColor just below.
4148
cursor.Emit(OpCodes.Ldarg_0);
@@ -66,6 +73,14 @@ private static void refreshPlayerSpriteMode(Player player, bool enableSilhouette
6673
}
6774
}
6875

76+
private static void onPlayerResetSprite(On.Celeste.Player.orig_ResetSprite orig, Player self, PlayerSpriteMode mode) {
77+
// filter all calls to ResetSprite when MadelineIsSilhouette is enabled, only the ones with Playback will go through.
78+
// this prevents Madeline from turning back into normal when the Other Self variant is toggled.
79+
if (!SpringCollab2020Module.Instance.Session.MadelineIsSilhouette || mode == PlayerSpriteMode.Playback) {
80+
orig(self, mode);
81+
}
82+
}
83+
6984

7085
private bool enable;
7186

0 commit comments

Comments
 (0)