@@ -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+ }
0 commit comments