Skip to content

Commit 15c1a57

Browse files
committed
Draw the 'crystal hearts' stamp on the GMHS when the player beats the old version of the GMHS
The save data flag should be set by a Lua cutscene to be developed, so we don't need to set this flag.
1 parent 910500c commit 15c1a57

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

SpringCollab2020Module.cs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public override void Load() {
5252
Everest.Events.Level.OnLoadBackdrop += onLoadBackdrop;
5353

5454
IL.Celeste.Level.Reload += resetFlagsOnTimerResets;
55+
IL.Celeste.OuiChapterPanel.Render += renderOldGMHSCompletionStamp;
5556

5657
DecalRegistry.AddPropertyHandler("scale", (decal, attrs) => {
5758
Vector2 scale = decal.Scale;
@@ -100,6 +101,7 @@ public override void Unload() {
100101
Everest.Events.Level.OnLoadBackdrop -= onLoadBackdrop;
101102

102103
IL.Celeste.Level.Reload -= resetFlagsOnTimerResets;
104+
IL.Celeste.OuiChapterPanel.Render -= renderOldGMHSCompletionStamp;
103105
}
104106

105107
private Backdrop onLoadBackdrop(MapData map, BinaryPacker.Element child, BinaryPacker.Element above) {
@@ -139,5 +141,24 @@ private void resetFlagsOnTimerResets(ILContext il) {
139141
});
140142
}
141143
}
144+
145+
private void renderOldGMHSCompletionStamp(ILContext il) {
146+
ILCursor cursor = new ILCursor(il);
147+
148+
// draw the stamp just after the chapter card.
149+
if (cursor.TryGotoNext(instr => instr.MatchStfld<OuiChapterPanel>("card"))
150+
&& cursor.TryGotoNext(MoveType.After, instr => instr.MatchCallvirt<MTexture>("Draw"))) {
151+
152+
Logger.Log("SpringCollab2020", $"Injecting GMHS stamp rendering at {cursor.Index} in IL for OuiChapterPanel.Render");
153+
154+
cursor.Emit(OpCodes.Ldarg_0);
155+
cursor.EmitDelegate<Action<OuiChapterPanel>>(self => {
156+
// draw it only if the player beat old grandmaster heart side, and we're actually looking at it.
157+
if (self.Area.GetSID() == "SpringCollab2020/5-Grandmaster/ZZ-HeartSide" && SaveData.BeatOldGrandmasterHeartSide) {
158+
MTN.FileSelect["heart"].Draw(self.Position + new Vector2(-580f, 130f));
159+
}
160+
});
161+
}
162+
}
142163
}
143-
}
164+
}

SpringCollab2020SaveData.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,7 @@
44
namespace Celeste.Mod.SpringCollab2020 {
55
public class SpringCollab2020SaveData : EverestModuleSaveData {
66
public HashSet<string> ModifiedThemeMaps = new HashSet<string>() { };
7+
8+
public bool BeatOldGrandmasterHeartSide { get; set; } = false;
79
}
810
}

0 commit comments

Comments
 (0)