Trying to make my RTS battlefield feel like a world instead of a board
I've been spending a slightly unreasonable amount of development time lately on something that started with: "The ground needs grass."
This is Icon: Voidfall, the RTS I've been building for about three months now, and one of the things I've really wanted to improve is how much the battlefield itself reacts to what's happening on it.
So naturally, adding grass escalated.
The grass is procedurally generated across the playable NavMesh and GPU instanced rather than being placed as authored objects. It reacts to units moving through it, clears underneath structures, dies around the spreading Malignance used by the Arafel faction, responds to wind and lighting, and eventually regrows when temporary damage to the environment disappears.
Then I added Twisters.
They're neutral environmental actors that wander the NavMesh and physically affect the match. They'll tear paths through the grass, damage structures, pick up smaller units, throw larger ones around, uproot resource trees, scatter their logs, and leave temporary scars through Malignance.
Wildlife and neutral Kobolds will actually recognize one approaching and attempt to get the hell out of its way.
There's also a match mutator called Tempest that turns these things loose during normal games.
And because apparently none of this had become complicated enough yet, I added fire.
Fire spreads through the grass with an intentionally irregular front, chars the ground behind it, produces smoke, can ignite units caught in its path, temporarily sets structures and trees visually ablaze, and eventually burns itself out. The grass then slowly grows back into the scar.
The fun part for me has been trying to do all of this without turning environmental simulation into the most expensive system in an RTS that's already expected to handle hundreds of units.
A lot of what you're seeing here is shader driven, bounded, pooled, or represented through compact world-space data rather than trying to simulate every individual blade of grass or particle as an object.
There are still plenty of rough edges, and fire in particular is currently offline-only while I work out the host-authoritative world-event path it needs for multiplayer.
But this is getting much closer to what I want the world of Voidfall to feel like.
The battlefield isn't just scenery underneath the RTS anymore. It's slowly becoming another participant in the match.
Anyway, here's roughly four minutes of me abusing the environment in the name of game development.
Happy to get into the technical weeds on any of it if anyone is interested.