Feature Shaders Menu - bh679/dungeon-train-mc GitHub Wiki
A Shaders page reachable from the title screen (between Mods and Options) and from the Esc
menu (beside Mods). It lists the nine officially supported Iris shader packs, shows each as a
screenshot of the same scene, and downloads + applies one in a click.
The nine packs are the ones measured to load and to render Dungeon Train's bands and dimensional
carriages correctly โ see Compatibility and docs/shaders/compat-matrix.md in the
repo. Before this page a player had no way to learn that: running a pack meant knowing Iris exists,
finding a pack site, guessing at a build, and locating the game directory โ on top of a modpack that
already ships Iris and Sodium.
| Element | Behaviour |
|---|---|
| Pack list | "Shaders off" pinned first, then the nine packs. The running pack has a green edge and wash; one already downloaded has a fainter blue one. A download in flight shows a percentage. |
| Preview | One screenshot per pack โ plus a vanilla control frame for "Shaders off". |
| Details | A scrolling window: version ยท author ยท size, the performance tier, what that tier needs, and the download status. |
| Action button |
Download & Activate when the zip is absent, Activate when it is already in shaderpacks/, Shader Settings once the pack is running (opens Iris' own options for it). Plus Turn Shaders Off. |
| Sort | Cycles Author Rec (the default view) โ Default (AโZ) โ Performance โ Most vanilla โ Mood. |
Without Iris installed the page still lists and previews everything, with the actions disabled and a line saying Iris and Sodium are required.
Nothing is mirrored or bundled. Most of these packs are all-rights-reserved or custom-licensed,
so the shipped manifest (assets/dungeontrain/shader_menu/packs.json) carries the author's own
Modrinth CDN link, fetched only on an explicit click โ the way a launcher does it โ with the pack's
project page one button away.
Three guards, because the result is a file the game will later load:
-
Host allowlist โ https and
cdn.modrinth.comonly, checked at manifest load and at download time, including across redirects. - Size cap โ anything materially larger than the manifest says is abandoned rather than written.
- SHA-512 โ computed while streaming and compared to the manifest; a mismatch deletes the file.
The zip lands as <name>.part and is moved into place only once it verifies, so an interrupted
download can never leave Iris a half-written pack.
The manifest is generated, not hand-typed โ scripts/shaders/fetch-packs.py resolves each
pinned build against the Modrinth API. It is read off the classpath rather than through the resource
manager, because a resource pack able to override it could point the download button anywhere.
Ten frames โ nine packs and the vanilla control โ all of the same carriage at the same coordinates,
the same camera angle and the same hour, so the column compares shader packs rather than comparing
screenshots. They are captured by a -PshaderPreview mode on the existing shader-compat sweep
harness; the pipeline and its traps are written up in docs/shaders/menu-previews.md.
The performance tier shown for each pack, and the Most-vanilla / Mood / Author-Rec orderings, are
editorial judgements, not benchmarks. Measuring performance from the capture run does not work:
that client is frame-capped, so all nine packs render within ten frames of each other. A real figure
needs an uncapped frame-time harness, which does not exist yet. All four rankings live in one table
in scripts/shaders/fetch-packs.py.
- Compatibility โ the Sodium/Iris version triangle
- Main menu buttons โ the title-screen row this joined
- Pause menu buttons โ the Esc-menu row this joined