The Photon patch

Vortex Dread draws its own storm and needs no shader pack to do it. This patch covers the other case: Iris is running, with a pack loaded, and Iris will not run a mod's own core shader while a pack is active. So the patch teaches a copy of Photon to read the storm state itself, through a texture the mod rewrites every frame, and to march the column inside the pack's own blend pass, after the translucent layer and before fog: a hill that hides a tornado still hides it, and whatever stays on screen picks up the same aerial haze and the same tone mapping as everything around it. It also changes what lightning does, turning a flat exposure bump into a point source planted inside the cloud. Photon itself is never shipped here: the script reads your own copy and writes a second one beside it.

Lightning as a point source

Stock Photon adds its flash factor to every cloud pixel at the same strength, LIGHTNING_FLASH_UNIFORM * lightning_flash_intensity, whether that cloud sits right overhead or out at the horizon. Inside the volume, the patch replaces that with an inverse-square falloff centred on wherever Iris says the channel actually is, 1.0 / (1.0 + (to_bolt * to_bolt) / (reach * reach)), itself capped by vortexdread_lightning_reach. Both formulas equal 1.0 right at the channel and pull apart the moment you step away from it, both finally bounded by a limit worked out with exp(-sky_optical_depth * extinction * 0.4), down to a threshold of 0.004 below which nothing gets added at all.

The old flat factor against the patch's capped falloff · 1.0 everywhere, 1.0 / (1.0 + (to_bolt * to_bolt) / (reach * reach))
Distance to the channel (blocks)Old flat factorPatch falloff
01.01.0
1101.00.8
2201.00.5
4401.00.2
8801.00.06

The term only runs while a Photon flash is actually live, and the optical depth it reads is already the one the pack built for its own clouds: nothing extra gets paid just to add this one term.

One free slot is all this needs to break. MATERIAL_TORNADO = 200. The script checks that the text around this line has not moved, not that 200 is still free: if a future Photon claims that same number for another material, the patch still applies, and the two get drawn as one thing with nothing left to catch it.

Photon stays on your machine. Its licence forbids redistribution on a platform that pays its uploaders, and Vortex Dread sits on two of those. The patch is written against one exact version, v1.3b, and stops rather than guessing at any other (apply.py reads your own copy, writes a second one beside it, and never writes into the mod's own repository if one of its sixteen text anchors does not turn up exactly as expected).

What the patch leaves behind

The concrete pieces the patch drops into the copy
PieceWhat it doesValue
MATERIAL_TORNADOMaterial number that tags a column pixel for the rest of the pipeline, appended to Photon's own list.200
vortexdread_lightning_reachDistance at which the inverse-square falloff has lost half its strength.220.0 blocks
texture.composite.colortex15Channel the patch reads the mod's own storm state from, rewritten every frame for up to four storms, eight fields each.vortexdread:textures/effect/funnel_state.png
program/c1_blend_layers.fshPass where the mod's own column gets marched, after the pack's translucent blend.right before // Blend fog
sampling.glslShare of the old flat term left for the sky's afterglow around the channel.×0.35
sky.glslShare of the same term left at the horizon, in the sky pass rather than the cloud one.×0.3