Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
ScorchedVoxels
Stages convert to voxel terrain at load: explosions and melee swings carve real craters the whole lobby sees. The loading wait hides a four-game arcade with a pet terrarium. Optional gore (off by default) cuts bodies along real swing geometry.
By Nyn
| Date uploaded | 2 weeks ago |
| Version | 0.20.72 |
| Download link | Nyn-ScorchedVoxels-0.20.72.zip |
| Downloads | 682 |
| Dependency string | Nyn-ScorchedVoxels-0.20.72 |
This mod requires the following mods to function
bbepis-BepInExPack
Unified BepInEx all-in-one modding pack - plugin framework, detour library
Preferred version: 5.4.2121RiskofThunder-R2API_Networking
Networking API around the Unity UNet Low Level API (LLAPI)
Preferred version: 1.0.4Rune580-Risk_Of_Options
A convenient API for adding BepInEx ConfigEntry's to a option menu
Preferred version: 2.8.5README

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. Blasts throw up a rim of displaced rock, and blades cut: a melee swing slices out the rock it sweeps through, and thrown blades like Chef's cleaver carve along their flight. 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.72 "Blood Money".
What it costs
Real geometry is not free. Know the price before you install:
- RAM, a fair amount of it. Expect the game to use 5 to 8 GB with converted terrain loaded, depending on the map. It was worse; 0.20.69 cut it roughly in half.
- 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 loading screen grew player cards and then a whole arcade: something worth looking at, and now something to play, 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.
- Blades cut the ground. A melee swing carves out the slice its arc sweeps through rock, for every survivor and monster with a sword, club or claw. Thrown blades count too: Chef's cleaver slices along its whole flight.
- 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.
- Debris is the rock you broke. What flies out of a crater matches the volume removed, textured with the ground it broke from. Sword cuts drop a slab shaped like the cut, and big chunks shatter into smaller pieces when they land. All of it is visual-only and close to free.
- Colliders never cheat. Distant terrain renders at reduced detail to save frames, but what you stand on and shoot is always exact.
Gore (experimental, off by default)
Kills are comic gore, in the same spirit as the terrain: the bodies really come apart.
Gore is experimental and ships disabled. Flip the Gore switch in the options menu (or GoreEnabled in the config) to opt in. It is stable in normal play; performance in very large fights is still being tuned.
- Every death goes physical. Canned death animations are gone. Bodies ragdoll, and the killing blow shapes the corpse: blades cut it in half along the actual swing, explosions rip it into flying wedges, bullets drop it where it stands. Corpses linger about two minutes and stay cuttable the whole time, and severed pieces can be cut again in the air.
- Blood sticks to the world. Kill splatter, dribbling pieces, drifting droplets and sword-swing sprays all land as decals on the terrain and soak into carved rock. Hits on live enemies leave bleeding wounds, and every survivor's primary marks its target: Huntress arrows stay planted where they land.
- Big hits tear chunks out of living enemies. A heavy enough blow rips a piece off a body that keeps fighting: the hole bleeds, moves with the animation, and stays through death. Rare on ordinary hits, roughly one in ten on heavy ones. Cosmetic only; hitboxes never change, and players are exempt.
- Elements sign their kills. Fire chars the body, ice shatters it, acid eats it down to a husk, lightning arcs across it, void collapses it with rising sparks. Massive overkill stages a bigger show.
- Purely cosmetic. Corpse shapes are local to each machine and never affect gameplay. Everything rides hard caps, so a messy fight cannot run away with your frame rate. The Gore switch and the Blood Amount slider live in the options menu; in multiplayer the host's blood amount applies to everyone.
The loading screen
While a stage converts, the mod replaces the wait with a player-card wall:
- An arcade. A PLAY button opens four minigames while you wait: an endless runner, a Worms-style artillery duel on destructible pixel terrain, a multi-level circuit race with a grappling hook, and a terrarium where a small stone pet eats what you carved during the level and grows across runs. Open tanks show live under their owner's card for the whole lobby. Solo or lobby-wide, and the stage never waits for the game (unless the host locks loading on purpose).
- 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, and the unlock reel
- Every cleared stage rolls a chance at a cosmetic title and, separately, a card background pattern. The terrarium pet digs up name effects as it grows: animated treatments for the name on your card, from calm coats and dripping letters to names whose letters are made of fire.
- Winning queues the prize; the reel unlocks it. On the next loading screen a slot-machine reel spins under your card for each queued prize, one after another, and the moment a reel lands the prize is truly yours. Win three things in one stage and three reels play back to back while everyone watches.
- A prize can never be lost. If the stage starts mid-spin, or the reel never got its turn, the prize stays queued and spins on the next loading screen. The queue survives quitting the game.
- Over thirty of the card backgrounds are animated, from a radar sweep, digital rain and a heart monitor to a lava lamp, a black hole, a campfire and a self-playing game of Snake. Two more (Living Void and Living Flame) play a live shader from the game itself on the card face.
- Your first cleared stage on a fresh profile always queues 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, Choose Card Background and Choose Name Effect 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, the gore switch, the blood amount slider. |
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
- Four maps ship their terrain meshes without CPU-readable data (Siphoned Forest, Sulfur Pools, Sundered Grove, Void Locus). A built-in whitelist reads those meshes from the game's own asset files instead, so every current map converts. If a future game update ships new unreadable meshes, they stay vanilla with a log line until they get whitelisted.
- Converted terrain loses baked lightmaps in carved areas. Ground pathfinding follows craters a few meters down and routes around deeper pits, but monsters may still path oddly around extreme 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.72 "Blood Money"
Network protocol changed. All players must update. A mismatched player stays on vanilla terrain with a chat warning.
- EVERY PRIMARY LEAVES A MARK NOW. Three survivors slipped through the wound system because their attacks are neither bullets, blades nor blasts: Huntress arrows, REX syringes and Railgunner's default fire. All three wound their targets now. Huntress arrows stay planted in the wound, REX's healing syringe visibly drinks a green wisp out of the victim, and Railgunner's smart rounds spark on impact. Wounds from these attacks show for everyone in the lobby.
- BIG HITS TEAR CHUNKS OUT OF LIVING ENEMIES. A heavy blow can rip a piece of the body away while the enemy keeps fighting: the torn chunk drops to the ground and crumbles away, and the hole it left shows flesh, bleeds, moves with the body, and stays through death, where the killing blow finishes the job on the same mangled mesh. Chunk bites are rare on ordinary hits and roughly one in ten on heavy hits (a MUL-T rocket, a fully charged slam). Enemies never lose limbs they still need; the bite is cosmetic and their hitboxes are untouched. Players are exempt.
- THE TANK: A PET LIVES IN THE ARCADE NOW. The loading screen's fourth game is a terrarium with one small stone creature in it, and it eats what you carve. Everything you blast out of the ground during a level collects in a see-through canister, sorted by what it really was (stone, metal, crystal, ice, sand, wood, lava, plain earth); press FEED and it pours in as layered sediment while the pet scurries under the stream and chews. The tank persists per profile and becomes a core sample of your runs. The pet grows through five stages as it eats, from an inert pebble to something openly molten. Every pet is its own creature: a seed rolled on first meeting decides its body among eight shapes, its coat, pattern, eyes, one of over two dozen accessories — hats, halos, snail shells, scarves, a tiny pebble friend — and rarer sparks: shiny coats, animated auras, and foil sheens finer than its own pixels. A CHANGE CANDY rerolls the look whenever the canister holds 50k m³ to pay for it; growth is never touched. A SHRINK PILL (5k m³) winds a grown pet back one stage for owners who miss the pebble days — it keeps eating and simply grows again. Click the dirt and the pet digs there. In a lobby, opening your tank shows it to everyone: a live miniature appears under your player card, pet and all, and closes with the tank.
- THE PET DIGS UP NAME EFFECTS. Evolutions unlock animated treatments for the name on your loading-screen card — calm coats, dripping or crackling letters, glowing gold, and two ceremonial finales for the longest journeys. Unlocks announce on the same reel the lottery spins, a NAMES section joins the picker in settings, and the whole lobby sees what you wear.
- GORE KEEPS UP WITH LATE-GAME SWARMS. The gore system paces itself when dozens of enemies die in the same second: past a budget, the extra kills keep their blood and the plain death instead of full dismemberment, so the kills you can actually watch stay spectacular while a wiped screen of Swarms beetles stops eating the framerate. Corpses dissolving under acid also stop paying for mesh chewing you are too far away to see, and each enemy species' cut data is prepared once when it first spawns instead of on its first death — the hitch the first kill of a big monster used to cause is gone.
- FORTY-THREE NEW CARDS JOIN THE LOTTERY. Ten painted patterns: magma cracks, a topographic survey, a split geode, circuit traces, tally marks scratched into concrete, stained glass, urban and void camo, the shattered moon over Petrichor V, and the cube the teleporter became. THIRTY-ONE animated cards move live on your card while everyone loads — demo-scene fire, plasma, an aurora, a lava lamp, a hyperspace starfield, an oscilloscope, a radar sweep, a heart monitor, digital rain, a seismograph, a spectrum analyzer, ripple interference, underwater caustics, a thunderstorm, snowfall, a tiny solar system, a black hole, a comet, flowing magma, an erupting volcano, a jellyfish, fireflies, city lights, a lighthouse, a campfire, a rushing tunnel, a neon wireframe cube, a rotozoomer, and three arcade throwbacks (Paddles, Snake, Brickwall) that play themselves on the card. Two more wear a LIVE piece of the game itself — Living Void and Living Flame borrow the same void-fog and flame shaders the pet's rarest skins hunt down, playing in real time on the card face. The picker gives animated cards their own section.
- UNLOCKS PLAY OUT ONE REEL AT A TIME. Every prize — lottery titles, card patterns, the pet's name effects — now waits in a queue, and the reveal reel landing on a loading screen is the moment it truly unlocks. Win three things in one stage and three reels spin under your card back to back; a screen that ends mid-spin keeps the prize queued and replays it next time, so nothing is ever lost. The pet's unlocks finally get the same ceremony the lottery always had.
- FIFTEEN NEW TITLES join the lottery pool.
- THE LOTTERY PAYS OUT MORE OFTEN. Every cleared stage now rolls an 8% chance at a title and a separate 8% chance at a card pattern, up from 5%. The card pool tripled this release; the drip keeps pace.
- A PLATINUM PORTRAIT RIM SHIMMERS NOW. The top lifetime-carve tier finally looks the part.
0.20.71
Network protocol changed. All players must update. A mismatched player stays on vanilla terrain with a chat warning.
- KILLS ARE COMIC GORE NOW. Every enemy death goes physical: canned death animations are gone, bodies ragdoll and flop, and the blow that killed decides the rest. A blade cuts the body in half along the actual swing, an explosion rips it into flying wedges, a bullet death drops it where it stands — still cuttable by whatever lands next. Cut surfaces show flesh and bone, stumps bleed, and the pieces are meat too: cut them again in the air. All of it is cosmetic and local; corpse shapes never affect gameplay.
- BLOOD TO MATCH. Kills splash blood decals onto the terrain, flung pieces dribble in flight and splat where they land, droplets mist and soak into the rock, a sword swing flings the victim's blood along its arc, and bullets leave bleeding wounds on live targets. Everything rides hard caps, so a messy fight cannot run away with your frame rate. The new Blood Amount slider scales the mess (the host's value applies to the lobby, so every screen shows the same scene), and the Gore switch turns the whole thing off.
- ELEMENTS SIGN THEIR KILLS. Fire chars the body and exhales smoke, ice frosts it over and shatters, acid eats it down to a husk, lightning arcs across it, void deaths collapse with rising sparks. Massive overkill stages the full show — acid devours the corpse whole, ice grows extra shatter planes, void pulls the body into a singularity. Gilded elites bleed gold; void elites bleed glossy glowing purple.
- CORPSES STICK AROUND. Bodies linger about two minutes and stay cuttable the whole time. A rested corpse freezes its physics until something pokes it awake (a blast, a swing, a carve underneath it), so a battlefield full of bodies costs almost nothing to keep.
- THREE BLOOD CARDS JOIN THE LOTTERY. Blood Splatter, Red Rain and Void Blood are new card backgrounds a cleared level can unlock.
- THE LOADING SCREEN HAS AN ARCADE. While a stage converts, a PLAY button appears under your player card (G works too): an endless runner where your Commando sprints past the creatures from the game's own loading-screen pixel art — Lemurians, Golems, Children on the ground, Drones at head height. Jump with Space or a click, duck with S or Ctrl, score is distance. If someone won an unlock, its reel plays out first; the arcade opens a few seconds after. The game ends the instant the stage is ready — the arcade never delays loading.
- GAME TWO: WORMS. A turn-based artillery duel on its own destructible pixel terrain — five kinds of battlefield plus ancient ruins, painted to match the stage you're headed to. Nine weapons wearing the game's own item art: bazooka, grenade, cluster bomb, meteor strike, molotov, thunderbolt, drill, gravity cube and bunker. Play solo, or the lobby takes turns; every crater you blast stays for the rest of the match.
- GAME THREE: THE CIRCUIT RACE. A seeded grand-prix loop stacked several levels tall — climbs, dives, forks, a summit — painted in the palette of the stage you're about to land on. Tap to jump, hold RIGHT CLICK to throw a grappling hook and swing from anywhere. Solo hunts a best lap; multiplayer runs elimination rounds on a freshly rolled track each round, where falling off the leader's screen puts you out.
- PICK YOUR COMMANDO'S COLORS. Settings > Mod Options > ScorchedVoxels > Choose Arcade Colors opens a grid of your runner in 16 team colors, walking in place. Click up to three in order of preference — your favorite is the one that runs.
- HOSTS CAN LOCK THE LOADING SCREEN. A LOCK LOADING button sits in the bottom-left corner of the loading screen (host only). Locking keeps the stage from starting so the lobby can finish an arcade round; unlocking releases it instantly. Loading is never held unless the host asks.
- DEBRIS IS NOW THE ROCK YOU BROKE. What flies out of a crater adds up to the volume that was actually removed — graze a wall and pebbles skitter, bury a rocket and boulders come out. Sword cuts drop a slab shaped like the cut itself. And big pieces break apart when they land, shattering into smaller chunks that scatter and tumble. All of it stays visual-only, so it costs about as much as the old debris did.
- MORE OF THE WORLD BREAKS. Sundered Grove converts for real now (its whitelist never matched the map's actual mesh names — the terrain, walls, giant roots and shrooms all carve). Void Locus turned out to have been running mostly vanilla too: its terrain, cavern roofs, platforms and walkways now convert. Siphoned Forest's fallen logs, boulders, tree trunks and firepit floors join the list, and so do Sulfur Pools' walkable spheres.
- THE WHOLE MOD GOT A PERFORMANCE PASS. Stages convert faster, sustained rocket volleys rebuild craters with less hitching, the loading screen costs less CPU while your machine is busy converting, and the cosmetics wardrobe opens without a stutter.
- The mod's options menu slimmed down from seventeen entries to nine, same capabilities.
0.20.70 "Cutting Edge"
Network protocol changed. All players must update. A mismatched player stays on vanilla terrain with a chat warning.
- MELEE WEAPONS NOW CUT THE GROUND. A swing carves out the slice its arc actually sweeps through rock, so the cut matches what you see the blade do. This applies to every melee attack in the game: any survivor or monster with a sword, gauntlet, club or claw leaves a mark when a swing lands in rock. Thrown blades count too: Chef's cleaver slices rock along its whole flight. Swings through open air do nothing, and a level swing over flat ground floats above it, so you only cut where the weapon really enters the terrain.
- EXPLOSIONS THROW UP A RIM. Craters now raise a lip of displaced rock around their edge instead of leaving a clean bowl, so a blast looks like ground blown outward rather than scooped away. The lip grows with the rock the blast actually threw out, so a glancing hit that removes almost nothing no longer raises a full ridge.
- LESS MEMORY AND SMOOTHER FRAMES. The previous stage's terrain meshes are now freed the moment the next stage starts instead of lingering through it, and the conversion caches release their memory once their work is done. The terrain level-of-detail pass no longer checks every chunk on the map every few frames, big blasts spend far less time finding what to rebuild, and each blast rebuilds fewer chunks for the same result.
- REFORMED ALTAR FIXED. Several problems stacked on this map. Its main terrain is a cavern shell that encloses the whole playable area, and to the mesh interior test a correct cavern is indistinguishable from an inside-out solid, so the automatic orientation correction flipped it: phantom rock filled the cavern, spawn floors turned inside-out, and players fell straight through on arrival. Orientation is now judged by the map's own AI ground nodes instead of the mesh alone. Nodes sit exactly where things walk, so a mesh only counts as inside-out when the nodes standing on it stand on its back faces; a correct cavern passes untouched and a genuinely inverted mesh is still caught. Separately, overlapping meshes could delete each other's surface in spots where the winning mesh had nothing to draw there, leaving genuine holes in ground and collision; a mesh now only claims a surface it actually renders. The kilometer-scale distant scenery also stays vanilla so the map converts at full resolution, and the map's godray light shafts are no longer treated as terrain (the first entry in a new baked per-map rules table for meshes the general rules cannot judge).
- EFFECT MESHES ARE NO LONGER TERRAIN. Several maps park visual-effect meshes on the world layer with colliders: the Simulacrum stages plant whole-terrain void boundary copies right on their spawn platforms, void areas scatter foam blobs, and arenas raise cloud walls. Converting one turned an effect into phantom rock, which on the Simulacrum variants of Aphelian Sanctuary and Sky Meadow buried the spawn area. Meshes drawn with effect shaders now always stay vanilla. A skipped mesh behaves exactly as it does without the mod, so this can only remove phantom rock, never create new problems.
- COMMENCEMENT SPAWN FIXED, MAP SHARPENED. The moon's island body and temple base are single kilometer-scale meshes that both cover the arrival zone. Their fill bled rock over the spawn, and their sheer surface area forced the whole map to convert at more than double the normal voxel size. Both stay vanilla now; the rest of the moon converts at full detail.
- SULFUR POOLS AND SUNDERED GROVE NOW CONVERT. Both maps ship their terrain meshes without CPU-readable data, so nearly everything stayed vanilla (Sulfur Pools converted nothing at all). Their terrain is now read directly from the game's own bundle files, the same recovery Siphoned Forest already uses.
- EVERY MAP TESTED. Every stage was played on this version, base game and DLC. Everything should be playable. What remains is light incorrectness here and there: a patch of rock sitting slightly proud of the original surface, or a decorative mesh that converted imperfectly. Screenshot and report anything worse than that.
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
OpenMeshShellRatioconfig 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
MaterialHardnessconfig 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
ScorchedSurfacesconfig 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:
- 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).
- 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.
- 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
OpenMeshShellMaxSizeconfig 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 viaOpenMeshShellRatio/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
VoxelSizeis 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.
MaterialHardnessconfig; 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.