Lost Signal - custom Iris shaderpack
====================================

WHAT THIS IS
An original VHS-style post-processing shader -- YIQ color-space chroma
compression, luminance/chroma noise, post-sharpening, interlacing, tape
wobble, a warm tint, vignette, and a head-switching artifact at the
bottom of frame.

This does NOT contain any of MC VHS's original code (it's ARR licensed).
Clean-room re-implementation targeting GLSL 120.

VISUALS (latest pass)
  - Removed tracking glitch bands entirely (no more sudden noise burst
    or horizontal jump) -- wasn't wanted anymore.
  - Flashlight brightness is now fixed at the old "Intense" level on
    every profile, instead of being dimmer on Default/Light -- so you
    get the good beam without needing to switch profiles for it.
  - Flashlight reach bumped from 4 to 6 blocks (4 felt too short).
  - Rain Blur now shows actual droplets sliding down the glass at
    different speeds -- the screen is split into vertical columns, each
    scrolling downward at its own random rate, with a slight refraction
    bend and a small glint on each droplet's body -- instead of one
    uniform blur. A light overall softening is layered underneath for
    the "damp lens" feel.
  - Removed the whole-frame vertical roll (it read as the screen
    splitting apart rather than authentic VHS tracking loss) and the
    red/blue channel split during glitch bands (too much like generic
    glitch-art chromatic aberration, not what MC VHS actually does).
    Replaced both with a burst of extra grain during glitch bands
    instead, consistent with the noise/YIQ-based approach the rest of
    this shader already uses.
  - Flashlight now falls off more like a real light (proper
    inverse-square-style curve) instead of a somewhat arbitrary mix.
  - Fog now includes ground-hugging mist near your feet (relative to
    your own eye height, so it works everywhere without needing to
    know the actual floor height) with a slow drift so it doesn't feel
    static, on top of the existing distance fog.
  - Flashlight beam now has a real hotspot-and-corona shape instead of a
    flat uniform disc -- bright crisp-white center fading to a warmer,
    softer edge, like an actual flashlight instead of a glowing blob.
    There's also a small dark dot right at dead-center now, surrounded
    by the bright ring, plus a second wider dark ring further out
    between the hotspot and the edge -- the layered, faceted-reflector
    look real flashlights have instead of one smooth fade.
  - The VHS interlace/scanline flicker is now dampened specifically
    inside the beam, so the flashlight reads as a steady light source
    instead of flickering along with the tape artifacts.
  - Distance fog -- things get swallowed by dark/mist as they get
    farther away instead of a bright hazy overlay, fitting the horror
    tone. Shifts from near-black at night to a dim grey-blue mist by
    day. Not exposed as a setting.
  - Cheap bloom on bright highlights (torches, lava, the flashlight
    beam) -- reuses samples already being fetched elsewhere, so it
    costs nothing extra.
  - Grain is now heavier in shadows and lighter in bright areas, like
    real film stock, instead of a flat amount everywhere.
  - A cool-shadow/warm-highlight color grade for a more filmic look.

FLASHLIGHT (real dynamic lighting)
Hold a torch, lantern, or any light-emitting item in either hand. It
relights raw block texture color directly (not just brightening the
already-lit image), so it reveals detail in pitch-black areas. Reach is
fixed at 6 blocks for both torch and lantern. Brightness is fixed too --
same beam strength no matter which profile you're on, so you're not
stuck putting it on Intense just to get a decent flashlight.

Dialed back for horror: the beam is dimmer and narrower than the very
first version (tighter cone) instead of feeling like a floodlight -- it
should feel less reassuring and more like a weak light source barely
holding back the dark. Auto-Dim now cuts to a true hard zero once
you're somewhere lit, rather than a faint reduction that got lost once
the image was already bright.

Flicker on Hit: if it seemed to trigger randomly with nothing hitting
you, check the "Flicker Test Chance" slider (Flashlight screen) -- it's
meant for testing and defaults to 0%, but if you'd previously turned it
up to test, it stays at that value until changed back (switching
profiles now resets it to 0 automatically as of this version).

DARKNESS
Nights and unlit areas can be true pitch black (no ambient light at
all) or just dim but visible -- controlled by the "Pure Darkness"
toggle in Visuals. It's automatically ON for Medium/Intense profiles
and OFF for Default/Light, but you can override it by hand regardless
of which profile you're on. This now also steepens how quickly light
falls off around torches/lanterns, so it actually makes a visible
difference in caves and indoors, not just outdoor nights (which is all
it affected before). This is a visual approximation of the "True
Darkness" mod's look -- can't literally hook into that mod since
shaders and mods are separate systems.

PANIC (optional)
When your health is low, or you're sprinting through the dark with no
torch/lantern in hand, the screen shakes and blurs a bit to sell the
panic. Fully optional. Settings: master on/off, screen shake on/off,
motion blur on/off, and blur intensity.

RAIN BLUR (optional)
Briefly blurs the camera like water hitting a lens when it starts
raining -- and only while you're actually under open sky. It now
automatically turns off once you go indoors or underground, and the
blur is guaranteed to fade out on its own (8-15s) even if it keeps
raining the whole time, instead of staying on indefinitely.

FEAR PULSE (optional)
At low health, the corners of the screen pulse red in rhythm with a
heartbeat. Minecraft already plays its own heartbeat sound at low
health -- a shader can't add new sounds, so this just adds a matching
visual alongside it. Settings: on/off and intensity.

SETTINGS
1. Select LostSignal in Video Settings -> Shader Packs.
2. Tap the gear/wrench icon next to the shaderpack name.
3. Top screen: Profile[Default/Light/Medium/Intense] plus five buttons:
   "Flashlight", "Visuals", "Advanced", "Panic", "Rain", "Fear".
4. Profile scales every OTHER effect together -- Default is the normal
   look, and each step up (Light -> Medium -> Intense) turns vignette,
   grain, scanlines, interlacing, sharpening, color bleed, warm tint,
   tape wobble, panic blur, rain blur, and fear pulse all up a notch.
   Flashlight brightness/reach stay fixed regardless of profile. Fine-
   tune individual settings below if you want something in between.
5. Flashlight screen: Flicker on Hit (on/off, disable for
   photosensitivity), Flicker Duration, Flicker Strength, Flicker Test
   Chance (0% = normal, crank it up to test the effect), Auto-Dim in
   Light.
6. Visuals screen: Vignette, Grain, Scanlines, Interlacing, Pure
   Darkness (on/off, overrides the per-profile default).
7. Advanced screen: Sharpening, Color Bleed, Warm Tint, Tape Wobble.
8. Panic screen: Panic (master on/off), Screen Shake, Motion Blur,
   Panic Blur Intensity.
9. Rain screen: Rain Blur (on/off), Rain Blur Duration, Rain Blur
   Strength.
10. Fear screen: Fear Pulse (on/off), Fear Pulse Intensity.

After changing anything, back all the way out of the options screen so
it actually recompiles -- staying on the same screen can make it look
like nothing changed.

INSTALL
1. Do NOT extract this zip.
2. Drop LostSignal.zip directly into: .minecraft/shaderpacks/
3. In-game: Video Settings -> Shader Packs -> select "LostSignal"

If it doesn't show up in the list at all, the issue is Iris/Sodium not
loading -- check your mods folder for iris-fabric-*.jar and
sodium-fabric-*.jar matching your MC version.

PERFORMANCE NOTE
Trimmed the per-pixel cost this update, ahead of you updating to a new
version:
  - Chroma blur went from 9 texture taps to 5, reusing the center
    sample instead of computing it twice (this loop was the single
    biggest cost per pixel).
  - Flashlight math (view-space reconstruction + cone calculation) now
    only runs at all when you're actually holding a light source,
    instead of running every frame and being discarded.
  - Panic motion blur and Rain Blur both went from 4 extra samples down
    to 2 each.
  - Added a cheap color-grade pass (cool shadows/warm highlights) that
    costs nothing extra, since it's pure math with no new texture reads.
  - Found and fixed a small bug: Rain Blur was doing an extra texture
    fetch every single frame to check sky exposure, even on completely
    clear days when it was never going to trigger anything. It now only
    does that check when it's actually raining.

Panic and Rain Blur still sample the scene a couple of extra times when
actively triggered, on top of the relighting pass added for the
flashlight -- if FPS still isn't where you want it, disable Panic/Rain
Blur individually to see which costs more, and let me know.

Heads up: adding fog meant the view-space reconstruction (the thing the
flashlight-skip optimization above avoided) now has to run every frame
again regardless of whether you're holding a light, since fog needs
distance too. It's one matrix multiply + one depth read per pixel, so
it's a small, known cost -- if you'd rather drop fog for a bit more
headroom, say so and I'll make it conditional or remove it.

REMAINING TUNABLES (edit shaders/composite.fsh directly)
  nightSkyMul / nightFloor / blockLightCurve (darkness look, set
  automatically by PURE_DARKNESS but editable directly),
  FLASHLIGHT_RANGE / INNER_CONE / OUTER_CONE / MASK_CAP / INTENSITY
  (beam shape and brightness -- fixed at 6 blocks / same on every
  profile, not exposed as settings)

Hit the in-game shader reload key (default R) after editing to see
changes live.

IF IT CRASHES OR LOOKS WRONG ON YOUR LTW RENDERER
I can't compile-test this on your actual device. If you get a black
screen or crash, check the Iris log for a compile error and send me the
exact line/file it names -- that pinpoints the fix fast.
