Mario+Rabbits: Sparks of Hope attempted to address some of the shortcomings of its predecessor by ditching more linear design sensibilities that limited deployability in favor of level design and movement tools that gave players more freedom of play.
That's according to Ubisoft Paris level designer Frédéric Giraud, who took to the stage at GDC 2023 to break down how the team generated multiple qualitative tactical battles for Sparks of Hope by leveraging procedural generation tools with specific intentions in mind.
With the aim of giving more strategic freedom and increased mobility to players, the Ubisoft Paris team built its battle system–known internally as "layered levels," using four different categories: topography, navigation, cover layers, and volumes/zoning.
Sparks of proc-gen
"We needed to build our levels and tag the different layers that comprised them. This way we could create a library of assets to generate battles from. Our levels are composed first by typography.
"We created one level per environment in the game. We have around 10 environments in the game, so it resulted in 10 levels. All of those levels are structured in six different 'grounds' that can either be shown or hidden, which is equal to up to 63 ground combinations. All of those combinations are composed into a library, and for each of them, we tagged them with keywords in terms of shape and elevation."
The team created three different navigation layers for each topography, with one layer leaning on natural connectors such as bridges and slopes, another using navigations tools that extent movements such as pipes and trampolines, and the final layer mixing both. "For each of the different layers of navigation, we tagged them with keywords in order to explain how they help the player to move through the map," continues Giraud.
The dev team then created nine different cover layers for each map, with all of those different cover layers having different intentions. "They were built with values, densities, distribution, and the use of the different props that are in the game. They are divided by ground for the generation purposes, and each layer is obviously tagged with keywords corresponding to the different intention," he says.
"So, in terms of density, are we elevated or low density? What kind of cover type are we using? What kind of distribution can we offer? Is it something that should appear throughout the entire map, or do we have more densities on the side and less in the centre?"
For each level, the team also created one single layer of volumes, which are helpful for spawning. Those volumes were allocated by level designers by hand and all tagged independently to give some information in terms of positioning regarding location (central or off-centre) and elevation (high and low).
With those, Ubisoft was able to generate levels, but ran into some issues. Enemies were being placed in nonsensical ways, and characters would be dropped into battles in a "weird way." Overall, the procedural tools were creating levels that were "very chaotic," leading the French studio to focus on step two: improving hero and enemy spawning.
To do that, it created rules to spawn heroes using three different spawning routines that were location specific and did the same for enemies, creating rules for specific enemy archetypes such as whether they prefer to use cover or not, their overall preferred location and typography, and their preferred distance to heroes when spawning. "This way, the enemy spawning would remain consistent no matter the generation," notes Giraud.
Although those problems were solved, the team still felt that battles lacked a random element that would make them interesting to players and less repetitive. Giraud notes they lacked objectives and depth, leading the team to develop a list of six battle objectives such as "defeat a set number of enemies" or "survive a certain number of terms."
"For all of those six objectives, we had to rationalize, deconstruct, and understand how they work in terms of design. We had to extract their requirements and how they need to be set in order to work correctly." After doing so, the team were able to create and generate more consistent and diverse objectives alongside procedurally generated levels that had adapted to their purposes. According to Giraud, however, something still felt off. There was a lack of cohesion between the battles and the story itself, and he also says they lacked a strong "level design flavor."
This resulted in Ubisoft building its "intention system," which allowed it to impact battle generation in such a way that it would never produce generic result. In order to do that, it created "intentions," which is simply a list of keywords.
"By listing those keywords, we could narrow down the generation possibilities to aim for a specific result. This would have an impact on the typography, on the cover, on the navigation, on the enemies, and the spawning. Every field in those intentions can either be set or left random by a level designer. This way we can have more or less freedom as we see fit, and the generation will then follow a scheme."
For instance, if the team wanted to create a "Michael Bay very explosive battle," it would use intentions to tell its procedural generation system to build a small level with condensed typography, with a high density of destructible covers, snappier navigation that's fast-paced, and area-of-effect attack enemies.
It's a level of control that allowed Ubisoft to create "climbing" levels, "sniping" levels, and even more variations. In-game, Ubisoft leaned on the system heavily, creating 50 layered battle instances (compared with 30 handcrafted levels) while also delivering side content such as roaming enemies and repayable portals.
Indeed, the company said that one of the advantages of layered battles is that they facilitate "virtually endless content," although it emphasized the need for a system like 'intentions' that allows designers to maintain control and exert their influence on the myriad of potential outcomes.