Vespera Bononia is a roguelite third-person shooter with 4 swappable character classes. Players fight waves of enemies that scale in difficulty, take on Idols of Fear across 4 levels, and grow their character through spells and emblems until they reach the final boss. As Game Systems Designer I worked on the combat systems, enemy archetypes, 32 spells, a 4-element reaction system, the progression economy, and a multi-phase final boss encounter.
Responsibilities
- Designed the 4-element reaction system: 4 basic elements, 6 combo effects, and the scaling rules that tie them together.
- Designed 32 spells (4 fast + 4 slow per character) using a shared attribute checklist for tractable balancing.
- Designed the Horror System: a recoverable escalation mechanic driving target prioritization and run-wide risk management.
- Designed multiple enemy archetypes including the Gurgul, with count-based behavior escalation creating combat-puzzle decisions.
- Extended the parry system to integrate with the element system so parried projectiles return their element to the sender.
- Designed the multi-phase final boss encounter, Messia dell'Abisso, across 4 design iterations.
- Reworked the run economy: ability chest rarity tiers, emblem chest pricing, and the legendary chest system.
- Wrote all associated design documentation and balanced values through paper prototyping and spreadsheet models.
Design Goals
The principle behind all of my design work on this game was simple: build a few good systems and let them generate many different gameplay scenarios. That translated into three pillars:
- Emergent combat. Simple individual pieces that combine in interesting ways.
- Combat-as-puzzle. Enemies that force the player to change priorities, deciding who to kill first, which spell to use, and when to swap character.
- Satisfying progression. Reward pacing that stays varied and exciting across an hour-plus run.
The Element System
The game had four playable characters and no reason for anyone to switch between them. Players picked one and stuck with it. Enemies didn't feel distinct in combat, spells felt isolated from each other, and players couldn't tell what effects were active during a fight. We needed a unifying system that made character-switching rewarding, gave enemies variety without new AI, and gave spells some kind of innate synergy.
I put two approaches on the table:
- A reaction system. Four elements that trigger a combo when two of them meet on the same target, producing 10 total effects (4 basic + 6 combos) from one simple rule.
- Standalone elements. More individual statuses, no reactions, more complex effects per status.
The second option offered more raw variety, but it asked the player to learn a lot before they could engage with it. We picked reactions. 4 elements with 6 interactions hit the sweet spot for meaningful buildcrafting while staying learnable in a single play session, and the reaction model gives an automatic reason to swap character (you need two different elements on a target, and each character owns one).
The 4 Basic Elements
Each element is bound to one of the 4 characters. Elements use a stack system: reapplication refreshes duration and increases intensity through a logarithmic formula, f(x) = (x × a) + b.
- Vis (Noah). Increases all damage received. Scales HP-related and intensity effects in combos.
- Somni (Anna). Slows target movement. Scales the area of combo effects.
- Potentia (Iris). Delayed burst damage. Scales combo damage.
- Crosis (Sante). 5-second damage-over-time. Scales combo duration.
The 6 Combo Effects
When two different elements are present on the same target, both elements are consumed and a combo fires. Each combo has two parameters, each scaled by one of the contributing elements. That builds a consistent grammar where every element always contributes the same kind of scaling.
- Fyr (Crosis + Potentia). A heavy DoT that deals damage from Potentia stacks every 0.5 seconds for a duration set by Crosis.
- Vitae (Potentia + Vis). A burst hit combining flat damage from Potentia with %HP damage from Vis.
- Rugis (Crosis + Vis). Duration from Crosis with HP-scaling intensity from Vis.
- Hypno (Somni + Potentia). Somni's area paired with Potentia's damage.
- Gnesis (Somni + Crosis). Somni's area paired with Crosis's duration.
- Pigrum (Somni + Vis). Somni's area paired with Vis's intensity.
Because each element is bound to a character and themed around a consistent scaling parameter (Vis = HP/intensity, Somni = area, Potentia = damage, Crosis = duration), once a player understands one combo they can predict how any other combo behaves. The system reused itself at every layer. Enemies could spawn element-infused, giving us variety without new AI. Spells applied elements, giving us synergy without custom interactions. Parried projectiles returned their element to the sender, so defensive play fed back into offense. One AoE Crosis spell followed by an Iris swap and a Potentia cast triggers Fyr on every enemy in the area: five or more playstyles out of two abilities.
The Horror System
The original Horror mechanic applied a permanent curse when its meter filled. That produced two failure states. Either the curse was so punishing that players abandoned their run, or it was mild enough that they ignored it entirely. Neither created tension. In a roguelike where runs last over an hour, a permanent punishment that invalidates your progress just gives players a reason to quit.
The real problem was that the curse had no recovery path. I redesigned it as a recoverable escalation system with three layers. A threshold meter that builds from Shade attacks and triggers the DAMNED state at 100%. A time-pressure component where debuff stacks accumulate every few seconds while cursed, with spike effects when new stacks land. And a kill-to-cleanse loop where killing enemies drains the meter based on each enemy's Danger value. I also added a per-run counter for how many times the player has been cursed, with cumulative penalties. The third curse hurts noticeably more than the first.
The system pushes a specific emotional arc. Dread as the meter climbs, panic when the curse triggers, controlled aggression during recovery, because the only way to cleanse is to push forward and kill while you're at your weakest. The per-run escalation also turns Horror into a risk management problem across the whole run, not just the current fight. Players now weigh whether to engage Shade enemies (risking Horror buildup) or take them out first (spending resources that could go elsewhere). The mechanic stopped being something players ignored or quit over, and became something they actively planned around.
Designing 32 Spells
32 spells (4 fast + 4 slow per character), and every one has uses beyond its primary function because the element system gives each spell a secondary identity. Bloodrush, for example, is a time-limited attack buff that stores 25% of incoming damage as Thirst, which your basic attacks drain back for healing. It also persists through character switches, so it fits a rotation instead of encouraging players to stay locked on one character. Because every spell interacts with the element system, any random loot chest combination still works.
An attribute checklist made the balancing manageable. Instead of tuning 32 unique mechanics, I was tuning combinations of a smaller set of parameters across a consistent framework. For each spell I asked:
- Single target or AoE?
- Many small hits or one big one?
- Which element does it apply?
- Fast or slow cooldown?
- Does it reward staying on this character or switching to another?
Spells fell into two camps: tools that force scenarios (grouping enemies, applying elements) and tools that solve scenarios (burst, CC). The overlap between the two camps is where buildcrafting lives.
Enemy Design
Enemies are combat puzzles. Each archetype shifts the player's priorities and forces decisions about target order, positioning, and spell usage. Enemies could also spawn infused with any basic element, meaning their attacks would apply that element to the player. That reused the element system as a threat vector and produced visual and tactical variety without any new AI.
The Gurgul
Standard difficulty scaling (more HP, more damage, faster attacks) gets uninteresting quickly. It mostly makes fights longer. The Gurgul's job was to change what the player does, not just how hard the fight is. My first design was a "tough individual" tank that was hard to kill alone, but in paper testing it didn't actually change player behavior. People just shot it more. So I pivoted away from "dangerous alone" and went with dangerous in numbers. The Gurgul starts harmless and escalates when multiple Gurguls are alive at the same time, using a count-based behavior tier system. More active Gurguls means all of them get stronger, and once one reaches a higher tier it stays there permanently, even if its siblings die.
One or two Gurguls feel manageable. Let several survive and the whole group activates, signaled by a group howl that tells the player they waited too long. The mechanic creates target-prioritization decisions without complex AI: the threat comes from a count and a permanent flag, both trivial to implement. In mixed encounters, Gurguls force a constant background calculation. Can I afford to ignore these while I handle the immediate threat, or am I about to cross the escalation line?
The Parry System
Enemies have a small chance of firing a Special Projectile that deals more damage and tracks the player. If parried, the projectile returns to the sender, and if it was element-infused it also applies that element as a status. A parried Crosis projectile starts a DoT, which can then combo with a Potentia spell to trigger Fyr, all from a single parry. Defensive play feeds straight back into the combo system.
Final Boss: Messia dell'Abisso
The final boss had to feel like the payoff for everything the player had learned. Every system (elements, spells, Horror, parry, character switching) had to be tested across an encounter that escalates in both mechanical complexity and spectacle. The fight runs across four phases and went through four major design iterations.
Phase 1: Idol of Terror
A supercharged Idol of Fear with 5× the bar value. The trap rotates every 15 seconds. Only miniboss-tier enemies and Shadow Abominations spawn here, and Shadow Abominations fill the bar 3× faster, which makes them the priority target.
Phase 2: Dark Clones
Four dark clones of the playable characters, each with its own AI and two spells from the player's ability pool:
- Clone Anna. Aggressive melee. Chases the player and dashes on cooldown.
- Clone Noah. Healer who distributes healing across all living clones. Kill him first.
- Clone Sante. Ranged kiter that orbits at distance.
- Clone Iris. Positional sniper that holds 8 spots for 8 seconds each and fires constantly.
Noah is healing, Anna's in your face: this is the exact target-prioritization puzzle the combat system was built for.
Phase 3: His Arrival
The Messia enters. He cycles between Movement and Attack modes on HP-dependent timing, with four abilities:
- Dark Energy Sphere. Charged AoE that also applies Horror.
- Dash. Leaves a fire trail and chains into a Sphere.
- Triple Strike. 3 parryable element-infused projectiles.
- Wave of Darkness. Alternating high and low shockwaves.
Arena hazards include the Hand from the Abyss (half-arena swipe) and the Fist from the Abyss (targeted slam), both on HP-dependent timers.
Phase 4: Final Showdown
The arena shatters into floating platforms. The Messia takes its final form: massive, stationary, at the center of the arena. The fight becomes spatial management across fragmented terrain. New abilities:
- Meteor Swarm. 16 meteors spawn Dark Rifts on impact.
- Menacing Aura. Forces the player to the outer ring.
- Dark Kidnapping. A hand grabs the player and teleports them to the most dangerous platform.
All Phase 3 abilities come back in enhanced "+" versions.
The Evil Mirror
The boss copies half of the player's collected emblems and gains buffs based on rarity. The stronger the player, the stronger the boss, which creates tension throughout the whole run.
- Common. Bonus shield at fight start.
- Rare. Reduces time between enemy wave spawns.
- Epic. Increases the frequency and speed of boss abilities.
- Legendary. Increases all boss damage by a percentage.
Iteration History
The fight went through four major versions:
- V1 to V2. Added the Hand and Fist arena hazards. Replaced "boss copies emblems directly" with the Evil Mirror scaling system.
- V2 to V3. Added the Messia as a direct combatant (Phase 3) and introduced the Phase 4 arena destruction.
- V3 to V4. Swapped Clone and Messia phase ordering for better pacing, added 4 unique Clone AI behaviors, and locked in all timings, damage formulas, and HP-dependent scaling.
Reward Economy
I reworked both the ability reward system and the emblem chest economy to fix pacing, increase run variety, and give players meaningful choices when rewards landed. The original Idol rewards had four problems at once: low variety, too much info per reward screen, weak pacing, and not enough run-to-run variation.
Ability Chests with Rarity
I removed Tuning and Upgrade chests from the Idol pool. All Idol victories now grant an Ability Chest with a rarity tier.
| Chest Rarity | Drop Rate | Choose From | Keep |
|---|---|---|---|
| Common | 47% | 2 abilities | 1 |
| Rare | 35% | 3 abilities | 1 |
| Epic | 13% | 4 abilities | 2 |
| Legendary | 5% | 4 abilities | 4 |
Each ability also has its own rarity roll (Common 55%, Rare 35%, Epic 9%, Legendary 1%). Players can skip abilities for Oboli, the in-run currency, which gives them an out when no spell fits their build.
Emblem Chest Economy
I doubled chest spawn points across the game and introduced 3 chest tiers with visual glow differentiation. Price scales with the formula base × (1 + Level × 2.2%), with ±5% random variance. Legendary chests (1% spawn) guarantee a Legendary emblem at 10× cost.
| Chest Tier | Spawn Rate | Base Price | Top Drop |
|---|---|---|---|
| Common (White) | 85% | 25 Oboli | 75% Common, 19% Rare, 5% Epic, 1% Legendary |
| Rare (Green) | 14% | 75 Oboli | 84% Rare, 10% Epic, 1% Legendary |
| Legendary (Gold) | 1% | 250 Oboli | 100% Legendary |