You are viewing a potentially older version of this package. View all versions.
Nyn-ScorchedVoxels-0.20.67 icon

ScorchedVoxels

Destructible voxel terrain: every explosion carves real craters and tunnels, synced in multiplayer. Loading-screen player cards with run stats, lifetime dig ranks and a cosmetic title lottery.

By Nyn
Date uploaded 21 hours ago
Version 0.20.67
Download link Nyn-ScorchedVoxels-0.20.67.zip
Downloads 39
Dependency string Nyn-ScorchedVoxels-0.20.67

This mod requires the following mods to function

bbepis-BepInExPack-5.4.2121 icon
bbepis-BepInExPack

Unified BepInEx all-in-one modding pack - plugin framework, detour library

Preferred version: 5.4.2121
RiskofThunder-R2API_Core-5.3.0 icon
RiskofThunder-R2API_Core

Core R2API module

Preferred version: 5.3.0
RiskofThunder-R2API_Networking-1.0.4 icon
RiskofThunder-R2API_Networking

Networking API around the Unity UNet Low Level API (LLAPI)

Preferred version: 1.0.4
Rune580-Risk_Of_Options-2.8.5 icon
Rune580-Risk_Of_Options

A convenient API for adding BepInEx ConfigEntry's to a option menu

Preferred version: 2.8.5

README

A rocket carving a real crater into Titanic Plains

ScorchedVoxels

Space-Engineers-style destructible terrain for Risk of Rain 2. Every explosion carves the world for real: at stage load the static terrain converts into voxel density fields, and from then on craters and tunnels are real geometry, permanent until the stage ends. Dig wide, dig deep. Deep rock materializes as you reach it. Works in multiplayer: the whole lobby sees the same holes.

Current release: 0.20.67 "Glory(ious) Holes".

What it costs

Real geometry is not free. Know the price before you install:

  • RAM, a lot of it. Expect the game to use 8 to 10 GB with converted terrain loaded.
  • A second loading screen, every stage. The voxels are built when a level loads, and on big maps that takes a while. This is the mod's real downside, and it's why the Call-of-Duty-style player cards exist: something worth looking at while the terrain builds.

Destruction

  • Craters are carved from the terrain itself, not drawn on top. The cost per blast is constant: the 100th rocket deforms as cheaply as the first.
  • Materials have hardness. Metal and concrete resist, crystal and ice shatter into slightly smaller craters, dirt and snow blow out wide. The hardness table is built in, tuned against every stage's material list (base game plus DLC), and identical on every machine.
  • Carves throw out rock debris, visual-only chunks textured with the ground they broke from.
  • Colliders never cheat. Distant terrain renders at reduced detail to save frames, but what you stand on and shoot is always exact.

The loading screen

While a stage converts, the mod replaces the wait with a player-card wall:

  • One card per player: portrait, live loading progress, and run stats (kills, damage, gold, and carved ground in m³).
  • Crowns for the stage's top three, ranked by kills, then damage, then rock carved.
  • Your portrait rim tracks lifetime digging through five tiers: wood, bronze (1M m³), silver (10M), gold (100M), and platinum (1B), saved per user profile.
  • Rotating tips explain how the mod works while you wait.

Titles & calling cards

  • Every cleared stage rolls a chance at a cosmetic title and, separately, a card background pattern. Wins play out as a slot-machine reel under the winner's card while everyone loads.
  • Your first cleared stage on a fresh profile always unlocks something.
  • All 199 country flags and every pride flag are free from the start. Only the patterns come from the lottery.
  • Pick what your card wears under Settings > Mod Options > ScorchedVoxels, with the Choose Title and Choose Card Background buttons.
  • Cosmetics show only on the loading screen. Nothing follows you into the run.

Multiplayer

  • Everyone needs the mod, on the same version. A mismatched player stays on vanilla terrain with a chat warning instead of desyncing.
  • Host-authoritative: the host's terrain settings apply to the whole lobby, and everyone sees the same craters.
  • The host waits for the slowest loader as long as their game keeps reporting progress. Leavers and players without the mod never hold the lobby hostage.
  • Risk of Options installs automatically as a dependency. It provides the settings menu and the cosmetic pickers.

Installation

Install with a mod manager (r2modman, Thunderstore Mod Manager, or Gale) and the dependencies come along automatically.

Manual install: drop ScorchedVoxels.dll into BepInEx/plugins and install the dependencies listed on this page.

Configuration

BepInEx/config/com.Xerdi.ScorchedVoxels.cfg, or Settings > Mod Options in-game. Highlights:

Setting What it does
VoxelSize (0.5 m) Crater fidelity vs. memory and conversion time. Maps too large auto-coarsen.
RadiusMultiplier / MaxCarveRadius How big blasts carve.
LodDistance (90 m) Distant terrain renders at reduced detail. Colliders never LOD.
ExcludedNames Name fragments that keep specific meshes vanilla.
Effects section Rock debris toggle and cap.
Titles section Lottery toggle, reveal sounds.

In multiplayer, all geometry-affecting settings are the host's.

Lifetime stats and cosmetic unlocks persist in BepInEx/config/com.Xerdi.ScorchedVoxels.UserStats.cfg per user profile.

Known limits

  • Maps that ship their terrain meshes without CPU-readable data mostly stay vanilla; you'll see a log line and nothing breaks. A built-in whitelist converts specific meshes anyway by reading them from the game's own asset files: Siphoned Forest's terrain converts this way.
  • Converted terrain loses baked lightmaps in carved areas, and the AI node graph is not adjusted, so monsters may path oddly around deep tunnels.
  • Half-open decorative meshes voxelize as thin hollow shells (they have no defined "inside").
  • A few spots grow phantom rock where a mesh converted imperfectly (bleedout). Sorry about that. Screenshot anything you find and report it; these get hunted down one by one.

Credits

Made by Nyn.

Rock and Stone!

CHANGELOG

Changelog

0.20.69 "Lite Rock"

As with every version, the whole lobby must run the same one. A mismatched player stays on vanilla terrain with a chat warning.

  • MEMORY OVERHAUL: RAM use on large maps dropped by roughly half. A stage that used to push the game past 10 GB now sits around 6 GB. Terrain conversion no longer floods the managed heap, render meshes stop keeping a spare CPU-side copy, and undisturbed terrain rests on far fewer, lighter physics colliders.
  • Collision detail is unchanged where it matters. Floors and slopes collide exactly where they render, craters keep full-resolution collision (the first blast in a region restores it there), and thin walkways and walls keep it automatically. Undisturbed decorative rock is a few centimeters smoother to walk on than it looks; that is the whole trade.
  • ENEMIES FOLLOW YOU INTO CRATERS: after a dig, ground pathfinding nodes drop onto the new surface (up to 4 m down). Deeper pits are marked unwalkable so enemies route around them instead of pacing at the rim.
  • Stage loading finishes a little quicker: the collider bake phase has far fewer meshes to cook. The "uploading to GPU" progress phase merged into "building meshes".

0.20.67 "Glory(ious) Holes"

First Thunderstore release.

As with every version, the whole lobby must run the same one. A mismatched player stays on vanilla terrain with a chat warning.

  • LOADING TEXT PASS: the rotating tips now explain how the mod actually works. They cover how terrain, syncing and the loading wait behave, how titles and card backgrounds unlock (including the first-clear guarantee), and where to adjust your player card (Settings > Mod Options, with Risk of Options installed).
  • The bottom status label no longer wears fake percentages while waiting. "waiting for host 0%" looked stuck, and clients parked on "waiting for players 100%" made no sense. The host's wait now shows a live headcount instead: "waiting for players (1/3)".
  • SIPHONED FOREST NOW CONVERTS. Its large terrain meshes ship without CPU-readable data, which used to leave them vanilla. A built-in whitelist now reads specific meshes from the game's own asset files instead: the floor, cave, walls, aqueduct, giant trees, tree stumps and the frozen lake all convert.
  • Clearer conversion phase names: "building meshes", "uploading to GPU", "revealing unlocks".
  • 8 new lottery titles. Players on older versions see a blank title line for the new ones instead of an error.

0.17.0

Network protocol changed. All players must update.

  • PHANTOM DEEP ROCK BOUNDED: terrain whose underside was never modeled (Sky Meadow plateaus, several Titanic Plains pieces) used to fill solid rock endlessly far below the world. Deep fill is now sanity-checked against the actual shape of the source mesh (its winding number): clearly-outside regions stay air, honest interiors and big ground sheets keep their full digging depth, and walkable ground can never come out thinner than before. The near-surface fill is untouched. Verified offline across four maps (Titanic Plains, Scorched Acres, Sky Meadow, Verdant Falls): every floating plateau's endless under-fill is gone, closed terrain byte-identical.
  • INSIDE-OUT SAFETY NET: a collider mesh wound fully inside-out would put all the fill on the wrong side of its surfaces (physics ignores winding, so maps can ship one). Every mesh now gets an orientation vote at conversion and is flipped when clearly inverted. No shipped map triggers it today; this guards the ones we haven't met yet.
  • The OpenMeshShellRatio config option is gone: measured across four maps, real ground sheets sit at 0-8% open edges and honest open decks at 9-22%, so the 8% threshold is baked in (the new shape check also catches anything near the line). One less thing to sync in multiplayer.
  • ONE LOADING BAR: the loading screen used to fill a bar per conversion phase (voxelize, mesh, upload, bake), four bars back to back, which read as the load being stuck in a loop. It's now a single 0-100% bar for the whole conversion with the phase text changing along the way. The percent on everyone's player cards follows the same scale, so remote progress no longer jumps backwards mid-load.

0.16.0

Network protocol changed. All players must update.

  • MATERIALS NOW HAVE BUILT-IN HARDNESS: what a surface is made of decides how big the crater gets. Metal, pipes and concrete resist blasts (roughly half radius), crystal and ice are brittle-hard, stonework and bare rock take modestly smaller craters, while dirt, sand and snow blow out wider than before. The table is baked into the mod, tuned against the complete material list of every stage (base game plus DLC), and is identical on every machine, so multiplayer craters keep matching with nothing to sync or misconfigure.
  • The MaterialHardness config option is gone (this replaces it).
  • SCORCH DARKENING REMOVED: craters no longer render with darkened clones of the terrain material; carved surfaces keep the stage's normal look. The whole scorch system is gone (per-voxel burn tracking, darkness bands, material swaps), which also makes carves slightly cheaper. The ScorchedSurfaces config option is gone with it.
  • FIX: the Scorched Acres bridge spillout. Three compounding causes, found by pulling the actual scene meshes from the game files and voxelizing them offline:
    1. Triangles longer than 96m on any axis were silently DROPPED from voxelization (a guard against skybox-scale backdrop sheets). The great stone arch bridges are low-poly: a fifth of their triangles, including whole 157m deck faces, never reached the voxelizer, tearing holes in closed meshes and letting the interior fill bleed out as phantom rock. The guard now measures what it actually protects against (the chunk count a triangle would bin into), so long thin structural triangles are kept and true backdrop sheets are still skipped. Bridges now voxelize to their exact shape, and their insides are genuinely solid, so they carve properly too. Big ground meshes also got fuller interiors out of this (their longest triangles were being dropped as well).
    2. The inside/outside decision now uses the closest FEATURE's normal (angle-weighted pseudonormals) instead of the nearest triangle's infinite plane, which misclassified whole regions around huge low-poly triangles.
    3. The two longest elevated walkway sections (122m/124m) crossed the "meshes over 100m are never hollow-shelled" rule, so their 11.7%-open decks were voxelized solid and filled phantom rock up to 58m below. That size exemption is removed; honestly-open meshes shell at any size (real ground can't read as open: openness is perimeter-over-area, and the vertex weld already prevents false positives). The OpenMeshShellMaxSize config option is gone with it.
  • FIX: thin walkways also no longer sprout voxel fins when viewed from afar. Distant (LOD) terrain meshes hide seams by extending 10m "skirts" down into the ground, and on a thin shell those punched straight through and hung in the open air. Shell meshes now use skirts no deeper than one LOD cell.
  • SHALLOW GROUND FIX: huge walkable surfaces that map authors ship as OPEN, underside-less meshes (Verdant Falls' giant leaves, dunes and track pieces, optimized low-poly geometry) voxelized as a paper-thin crust: half a meter of world, where one shot opened a hole into the void. Open meshes are now reconstructed as BOUNDED SOLIDS: like a cube with deleted faces, the remaining surface plus the mesh's own bounding volume define the full solid, and that volume is filled with diggable material (with a 4m minimum slab for perfectly flat pieces). The mesh's own box is the digging budget, so nothing can ever fill beyond the size of the thing itself: dunes fill to their own bottom, floating decks stay deck-thin, and runaway phantom rock stays geometrically impossible. Verified offline against the real Verdant Falls and Scorched Acres meshes: 8-10x more diggable material on walkable ground, zero fill below any mesh's bounds, edge lips capped at slab thickness. Thick real ground digs forever, as before.
  • FIX: the HOST's own lottery reveal now reliably shows on everyone's loading screen. It was broadcast only once, at the host's stage start, while the other players were usually still loading the scene, so the message was lost. Queued reels now re-send with the once-per-second loading sync (harmless repeats; other players' reveals already dodged the race by reporting later).

0.15.2

  • LOADING: the host now waits for slow-loading players as long as their machine keeps sending progress heartbeats (every 2s while converting). A big stage on a slow PC is no longer cut off by the old flat 30-second limit: everyone spawns in together, and the loading cards show whose bar is crawling. The 30s timeout still exists, but it now measures silence. Only a machine that stops heartbeating entirely (game hung, dead connection) is started without.
  • Waiting clients follow the same rule: the host's once-per-second roster broadcast is their "host is alive" signal, so a fast loader no longer bails out of the loading screen while the host is legitimately still waiting on a third, slower machine. A client only releases itself if the host goes silent for 35 seconds.

0.15.1

Network protocol changed. All players must update.

  • MULTIPLAYER ROBUSTNESS PASS:
    • A player who disconnects during the loading screen no longer stalls the lobby into the 30s timeout; the host recounts who it is waiting on live, every frame.
    • Players without the mod can no longer hold the stage hostage every stage: the host waits only for machines that have shown mod traffic (with a 15s first-stage grace window for slow loaders).
    • Remote players' cards now show a real loading percentage (clients report progress every 2 seconds) instead of an indeterminate sweep.
    • The "player X runs an old version" chat warning fires once per run instead of once per stage.
    • A lottery win reported by a fast-loading client before the host finished loading is no longer lost; reveals are stage-tagged and survive the stage handover.
    • Fixed a stale host-config edge case across runs, and vanilla-staying machines no longer queue up carve messages they will never use.
  • OPEN-MESH FIX: half-open decorative meshes (non-watertight, the "giant solid cube" family of bugs) are now detected at conversion and voxelized as thin hollow shells instead of guessing an interior that isn't there. Seam-split vertices are welded before the openness check, and meshes above OpenMeshShellMaxSize (default 100 m) are never shelled; large ground always keeps its solid fill below, so tunnels keep digging into rock. Tunable via OpenMeshShellRatio / OpenMeshShellMaxSize (host-synced; 0 disables).
  • New icon. Internal slimming: dead code removed, three unused assembly references dropped.

0.14.0

  • LOOT REVEAL REWORKED: the prize reel spins DURING loading under each winner's card (up to one per player, all in sync), so the show costs no extra time. Only if loading finishes mid-spin does the release wait for the landing.
  • Reel sound effects from the game's own UI soundbank, one shared sound source, so four simultaneous winners are exactly as loud as one. Toggle: RevealSounds.
  • Reel polish: anticipation beat, fade-in, breathing gold payline, landing flash, scale punch, prize name in gold.
  • No more spoilers: the card's "NEW!" title line and freshly won background stay hidden until the reel lands.
  • Carve dust puff removed (rocks plus crater are feedback enough).

0.13.0

  • LOOT REVEAL: lottery wins play a CS:GO-style reel on the loading screen for everyone; the host scripts the identical reel for every machine.
  • FIRST TREASURE GUARANTEED: a profile with zero unlocks wins exactly one prize on its first cleared level.

0.12.0

  • All 199 country flags in the card-background picker, painted procedurally.
  • Pickers render inside the Risk of Options description panel; RoR2-themed UI (game font, chamfered panels); card layout fixes.

0.11.0

  • CARD BACKGROUNDS: country flags and pride flags always available; pattern backgrounds unlock via the level lottery.

0.10.0

  • Portrait rims tiered by LIFETIME carved m³ (wood through platinum), persisted per profile.
  • TITLE LOTTERY: 5% per cleared level to unlock one of 52 cosmetic titles, shown only on the loading-screen cards.
  • Default VoxelSize is now 0.5 m.

0.8.x

  • Scorched surfaces as darkened material clones (three darkness bands).
  • Dedicated carve worker thread; the main thread only uploads meshes.
  • Multiplayer version handshake plus host config sync.
  • MaterialHardness config; ScorchedEarth conflict self-disable; Risk of Options integration.

0.5.0 - 0.7.0

  • Loading-screen player cards with run stats and carved-m³ tracking.
  • Visual rock debris with one-bounce physics.
  • Three-tier render LOD with seam-free junctions; big performance pass.

0.1.0 - 0.4.x

  • Core prototype: per-mesh voxel volumes, Surface Nets meshing, deterministic carves, multiplayer carve broadcast, teleporter/prop exclusion rules.