Skip to content

feat(slender): tear his own screen as the pages go - #253

Open
TheMeinerLP wants to merge 1 commit into
mainfrom
feat/slender-page-glitch
Open

feat(slender): tear his own screen as the pages go#253
TheMeinerLP wants to merge 1 commit into
mainfrom
feat/slender-page-glitch

Conversation

@TheMeinerLP

Copy link
Copy Markdown
Contributor

Proposed changes

Replaces the slender's static from 2.14.0 with what was actually asked for: a VHS effect he sees, not one he hears. #252 read "Rauscheffekt" as sound; the request was the picture coming apart, the way an old tube TV does.

He is the only player in a round without a page counter. The survivors watch theirs climb, he only learns the score when it ends. PageGlitchService (game/.../glitch/) gives him that counter as his own screen tearing:

  • a baseline that climbs a level at a time as the pages disappear, up to the worst of SlenderGaze.LEVELS when the last one goes. Until the first page there is NONE, not the weakest level: an untouched round has nothing to say yet.
  • a pulse on every find, one level above the baseline, held for pageGlitchPulseSeconds before falling back.

Nothing new is needed in the resource pack. The channel, the cygnus:glitch font and the shader that draws the veil are all already there for the gaze glitch; this only feeds them from a second source.

Three things worth a look in review:

GazeSink.attach(player, worldTint) splits the two halves of the signal. The veil says how far the round has got; the DARKEN_SCREEN bit takes the world's lighting with it. That is right for a survivor looking at the slender and wrong for the slender himself — darkening his world takes the sight he hunts with. He gets the veil alone.

The signal instance is shared with SlenderGazeService instead of a second one being built. A player has one carrier, and two boss bars would each expand to a full-screen quad and stack; the diagnostic note about exactly that failure is already in BossBarGazeSignal. Slender and survivors are disjoint, so the two services never address the same player, except across a hand-over, which the service watches for.

A bug fix that fell out of that hand-over case. PlayerQuitListener promotes a living survivor to slender when the old one quits, so neither the death nor the disconnect listener in SlenderGazeService covered him. Left tracked, levelFor measured him against himself: distance zero, which reads as the worst level, for the rest of the round. He is dropped on SlenderReviveEvent now. This one is independent of the feature and applies to 2.14.0 as it stands.

Types of changes

  • Bugfix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation Update (if none of the other choices apply)

Checklist

  • I have read the CONTRIBUTING.md
  • I have added tests that prove my fix is effective or that my feature works
  • I have added necessary documentation (if appropriate)

10 tests in PageGlitchServiceTest cover the clean start, both ends of the baseline, the pulse and how long it holds, the hand-over to a new slender, the missing world tint, the round's end, the off switch and a missing slender. BossBarGazeSignalTest gains the tint-less attach, SlenderGazeServiceTest the promoted survivor, GameConfigReaderTest the two settings. Both settings are documented in config.properties.example.

Further comments

pageGlitchEnabled and pageGlitchPulseSeconds replace the six slenderStatic* settings from 2.14.0. Since 2.14.0 is already released, a server that set any of them will find them gone; none of them has a counterpart here, because the sound they configured no longer exists.

PageFoundEvent stays exactly as 2.14.0 introduced it and now carries the glitch instead of the sound.

The pulse sits one level above the baseline, so at the last page it has nowhere left to go. That is deliberate — the round ends within seconds at that point. The baseline curve is linear across SlenderGaze.LEVELS; if it should stay clean longer and fall apart late, that is one line in level().

The VHS sound built for the old version lives in OneLiteFeatherNET/cygnus-pack#34. Nothing in Cygnus references it after this PR; whether the pack keeps the asset is a separate call.

…g static

2.14.0 shipped this as a sound, which was the wrong reading of what was asked
for: the effect was meant to be seen, not heard. It is a picture now.

PageGlitchService puts the same worn-tape veil the survivors get from seeing the
slender onto his own screen, driven by the round instead of by a line of sight. A
baseline climbs a level at a time as the pages disappear, and each find pulses one
level above it for pageGlitchPulseSeconds. Nothing is needed in the resource pack
that is not already there.

Three things this needed:

GazeSink.attach(player, worldTint) splits the two halves of the signal. The veil
says how far the round has got; the DARKEN_SCREEN bit takes the world's light with
it, which is right for a survivor and wrong for the hunter. The slender gets the
veil alone.

The signal instance is shared with SlenderGazeService rather than a second one
being built. A player has one carrier, and two boss bars would draw two full-screen
quads over each other.

SlenderGazeService now drops a player on SlenderReviveEvent. PlayerQuitListener
promotes a living survivor when the slender leaves, so neither the death nor the
disconnect listener covered him: he stayed tracked and was measured against
himself, distance zero, which reads as the worst level for the rest of the round.

The static's six settings collapse into pageGlitchEnabled and
pageGlitchPulseSeconds. PageFoundEvent, which 2.14.0 introduced for the sound,
stays as it is and now carries the glitch instead.
@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Test results

  360 files    360 suites   2m 25s ⏱️
  597 tests   591 ✅  6 💤 0 ❌
1 794 runs  1 776 ✅ 18 💤 0 ❌

Results for commit fab4982.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant