@@ -20,7 +20,7 @@ public class DoomAwakening : CustomActionButton
2020 /// <summary>
2121 /// The name displayed on the button.
2222 /// </summary>
23- public override string Name => "Doom Awakening " ;
23+ public override string Name => "" ;
2424
2525 /// <summary>
2626 /// Cooldown time for this ability, as configured in <see cref="RevenantOptions"/>.
@@ -43,9 +43,9 @@ public class DoomAwakening : CustomActionButton
4343 public override float EffectDuration => OptionGroupSingleton < RevenantOptions > . Instance . DoomAwakeningDuration ;
4444
4545 /// <summary>
46- /// The icon or sprite representing this button. Here, set to an empty sprite.
46+ /// The icon or sprite representing this button.
4747 /// </summary>
48- public override LoadableAsset < Sprite > Sprite => MiraAssets . Empty ;
48+ public override LoadableAsset < Sprite > Sprite => NewModAsset . DoomAwakeningButton ;
4949
5050 /// <summary>
5151 /// Specifies whether this button is enabled for the specified role.
@@ -74,6 +74,7 @@ protected override void OnClick()
7474 var player = PlayerControl . LocalPlayer ;
7575 Coroutines . Start ( StartDoomAwakening ( player ) ) ;
7676 }
77+ public static List < PlayerControl > killedPlayers = new ( ) ;
7778
7879 /// <summary>
7980 /// Executes the Doom Awakening effect, increasing speed, fading the screen, and killing nearby players.
@@ -85,6 +86,9 @@ public System.Collections.IEnumerator StartDoomAwakening(PlayerControl player)
8586 float originalSpeed = player . MyPhysics . Speed ;
8687 player . MyPhysics . Speed *= 2f ;
8788
89+ var clip = NewModAsset . DoomAwakeningSound . LoadAsset ( ) ;
90+ SoundManager . Instance . PlaySound ( clip , true , 1f , null ) ;
91+
8892 var fullScreen = HudManager . Instance . FullScreen ;
8993 fullScreen . color = new Color ( 1f , 0f , 0f , 0f ) ;
9094 fullScreen . gameObject . SetActive ( true ) ;
@@ -103,34 +107,33 @@ public System.Collections.IEnumerator StartDoomAwakening(PlayerControl player)
103107 float duration = EffectDuration ;
104108 float timer = 0f ;
105109 int killCount = 0 ;
110+
106111 float ghostInterval = 0.2f ;
107112 float ghostTimer = 0f ;
108113
109114 Queue < GameObject > ghosts = new Queue < GameObject > ( ) ;
110115 SpriteRenderer playerRenderer = player . cosmetics . normalBodySprite . BodySprite ;
111116
112- // Doom Awakening loop
113117 while ( timer < duration )
114118 {
115119 timer += Time . deltaTime ;
116120 ghostTimer += Time . deltaTime ;
117121
118- // Create a trailing ghost sprite
119122 if ( ghostTimer >= ghostInterval && player . MyPhysics . Speed > 0.01f )
120123 {
121124 ghostTimer = 0f ;
122- GameObject ghost = new GameObject ( "Revenant-Ghost" ) ;
125+ GameObject ghost = new ( "Revenant-Ghost" ) ;
123126 var ghostRenderer = ghost . AddComponent < SpriteRenderer > ( ) ;
124127 ghostRenderer . sprite = playerRenderer . sprite ;
125128 ghostRenderer . flipX = playerRenderer . flipX ;
126129 ghostRenderer . flipY = playerRenderer . flipY ;
127- ghostRenderer . material = new Material ( playerRenderer . material ) ;
130+ ghostRenderer . sharedMaterial = playerRenderer . sharedMaterial ;
128131 PlayerMaterial . SetColors ( player . Data . DefaultOutfit . ColorId , ghostRenderer ) ;
129132 ghostRenderer . sortingLayerID = playerRenderer . sortingLayerID ;
130133 ghostRenderer . sortingOrder = playerRenderer . sortingOrder + 1 ;
131134 ghost . transform . position = player . transform . position ;
132135 ghost . transform . rotation = player . transform . rotation ;
133- ghost . transform . localScale = new Vector3 ( 0.7f , 0.7f , 1f ) ;
136+ ghost . transform . localScale = player . transform . lossyScale ;
134137
135138 Coroutines . Start ( Utils . FadeAndDestroy ( ghost , 1f ) ) ;
136139 ghosts . Enqueue ( ghost ) ;
@@ -143,11 +146,10 @@ public System.Collections.IEnumerator StartDoomAwakening(PlayerControl player)
143146 Object . Destroy ( oldGhost ) ;
144147 }
145148 }
146-
147149 // Kill any nearby players
148150 foreach ( var target in PlayerControl . AllPlayerControls )
149151 {
150- if ( target == player || target . Data . IsDead || target . Data . Disconnected || target . inVent )
152+ if ( target == player || target . Data . IsDead || target . Data . Disconnected || target . inVent || target . Data . Role . IsImpostor )
151153 continue ;
152154
153155 if ( Vector2 . Distance ( player . GetTruePosition ( ) , target . GetTruePosition ( ) ) < 1f )
@@ -160,10 +162,19 @@ public System.Collections.IEnumerator StartDoomAwakening(PlayerControl player)
160162 showKillAnim : false ,
161163 playKillSound : true ) ;
162164 killCount ++ ;
165+ killedPlayers . Add ( target ) ;
166+ }
167+ if ( target . AmOwner )
168+ {
169+ SoundManager . Instance . PlaySound ( NewModAsset . DoomAwakeningEndSound . LoadAsset ( ) , false , 1f , null ) ;
163170 }
164171 }
165172 yield return null ;
166173 }
174+ if ( killedPlayers . Count >= 3 )
175+ {
176+ SoundManager . Instance . PlaySound ( NewModAsset . DoomAwakeningEndSound . LoadAsset ( ) , false , 1f , null ) ;
177+ }
167178
168179 // Fade out the red overlay
169180 float fadeOutTime = 0.5f ;
@@ -177,9 +188,11 @@ public System.Collections.IEnumerator StartDoomAwakening(PlayerControl player)
177188
178189 // Restore original speed and conclude
179190 player . MyPhysics . Speed = originalSpeed ;
191+ SoundManager . Instance . StopSound ( clip ) ;
180192 RV . StalkingStates . Remove ( player . PlayerId ) ;
181193 Coroutines . Start ( CoroutinesHelper . CoNotify ( "<color=green>Doom Awakening ended.</color>" ) ) ;
182194 Helpers . CreateAndShowNotification ( $ "Doom Awakening killed { killCount } players", Color . red , null , null ) ;
195+ killedPlayers . Clear ( ) ;
183196 }
184197 }
185198}
0 commit comments