
ROLE
Technical Designer
ROLE
Technical Designer
ROLE
Technical Designer
TOOL
Unity (C#), Perforce
TOOL
Unity (C#), Perforce
TOOL
Unity (C#), Perforce
TEAM
Team of 5
TEAM
Team of 5
TEAM
Team of 5
TIMELINE
3 Weeks
TIMELINE
3 Weeks
TIMELINE
3 Weeks
PLAY
PLAY
PLAY
OVERVIEW
OVERVIEW
Capybara vs. Granny is an asymmetric 1v3 party game that started from two separate sparks: the team wanted to build a fun couch game using two separate monitors; and the team happened to really like capybaras, specifically they like stacking on top of each other into a wobbly stack. This combination naturally led to an asymmetric multiplayer format in the vein of Dead by Daylight, one evil granny versus a team of capybaras, one fighting to catch all capybaras, the other stalling for as long as possible until the extraction helicopter arrives.
Capybara vs. Granny is an asymmetric 1v3 party game that started from two separate sparks: the team wanted to build a fun couch game using two separate monitors; and the team happened to really like capybaras, specifically they like stacking on top of each other into a wobbly stack. This combination naturally led to an asymmetric multiplayer format in the vein of Dead by Daylight, one evil granny versus a team of capybaras, one fighting to catch all capybaras, the other stalling for as long as possible until the extraction helicopter arrives.
Capybara vs. Granny is an asymmetric 1v3 party game that started from two separate sparks: the team wanted to build a fun couch game using two separate monitors; and the team happened to really like capybaras, specifically they like stacking on top of each other into a wobbly stack. This combination naturally led to an asymmetric multiplayer format in the vein of Dead by Daylight, one evil granny versus a team of capybaras, one fighting to catch all capybaras, the other stalling for as long as possible until the extraction helicopter arrives.
STRENGTH IN COLLABORATION
STRENGTH IN COLLABORATION
We encourage the players to trust their teammates and work with one another to gain an advantage. However, it is not through numbers they gain their strength, but through how they coordinate as a single unit.
We encourage the players to trust their teammates and work with one another to gain an advantage. However, it is not through numbers they gain their strength, but through how they coordinate as a single unit.
ACCESSIBLE AND REPLAYABLE
ACCESSIBLE AND REPLAYABLE
Players should be able to pick up a controller and have fun within the first minute. Controls should be very straightforward, rules should be kept minimal, and rounds should be short so the players don't feel overwhelmed to start again.
Players should be able to pick up a controller and have fun within the first minute. Controls should be very straightforward, rules should be kept minimal, and rounds should be short so the players don't feel overwhelmed to start again.
RELIEVE TENSION THROUGH CHAOS
RELIEVE TENSION THROUGH CHAOS
Chaos shouldn't always make the level more stressful. Instead, through physics simulation we want to allow the players to have fun and enjoy the squishy characters and arbitrary wall collapses.
Chaos shouldn't always make the level more stressful. Instead, through physics simulation we want to allow the players to have fun and enjoy the squishy characters and arbitrary wall collapses.
DESIGN DEEP DIVE
DESIGN DEEP DIVE
#1: STACKING
#1: STACKING
#1: STACKING
OVERVIEW
Design Intent
Design Intent
Design Intent
Stacking is the clearest expression of Strength in Collaboration: it only creates an advantage when capybaras act together, and the risk scales with how much they commit to stacking, reinforcing that coordination, not raw numbers, is the multiplier. It also touches Relieve Tension Through Chaos, since taking a hit while stacked visibly and physically breaks formation rather than just draining a shared health bar.
Stacking is the clearest expression of Strength in Collaboration: it only creates an advantage when capybaras act together, and the risk scales with how much they commit to stacking, reinforcing that coordination, not raw numbers, is the multiplier. It also touches Relieve Tension Through Chaos, since taking a hit while stacked visibly and physically breaks formation rather than just draining a shared health bar.
Stacking is the clearest expression of Strength in Collaboration: it only creates an advantage when capybaras act together, and the risk scales with how much they commit to stacking, reinforcing that coordination, not raw numbers, is the multiplier. It also touches Relieve Tension Through Chaos, since taking a hit while stacked visibly and physically breaks formation rather than just draining a shared health bar.
Rules
Rules
Rules
Any living, unstacked capybara may join by colliding into the stack, no role restriction
Movement is driven by the combined directional input of all stacked members
Damage per stacked member: 100% at 1 (unstacked), 90% at 2, 80% at 3, meaning total group damage taken is higher than a single capybara's
Every hit ejects the top capybara from the stack automatically, regardless of stack size
Each ability defines independent stacked/unstacked values (speed, range, duration) rather than sharing one universal modifier
Any living, unstacked capybara may join by colliding into the stack, no role restriction
Movement is driven by the combined directional input of all stacked members
Damage per stacked member: 100% at 1 (unstacked), 90% at 2, 80% at 3, meaning total group damage taken is higher than a single capybara's
Every hit ejects the top capybara from the stack automatically, regardless of stack size
Each ability defines independent stacked/unstacked values (speed, range, duration) rather than sharing one universal modifier
Any living, unstacked capybara may join by colliding into the stack, no role restriction
Movement is driven by the combined directional input of all stacked members
Damage per stacked member: 100% at 1 (unstacked), 90% at 2, 80% at 3, meaning total group damage taken is higher than a single capybara's
Every hit ejects the top capybara from the stack automatically, regardless of stack size
Each ability defines independent stacked/unstacked values (speed, range, duration) rather than sharing one universal modifier
DESIGN DECISION 1: COLLABORATION SHOULDN'T REQUIRE A "RIGHT LINEUP"
DESIGN DECISION 1: COLLABORATION SHOULDN'T REQUIRE A "RIGHT LINEUP"
Problem
Problem
Problem
An early version locked stack position to role, dash on the bottom, shield in the middle, cast on top, with no exceptions. If the specific capybara needed to fill a slot wasn't present, the remaining players simply couldn't stack, punishing players for wanting to collaborate.
An early version locked stack position to role, dash on the bottom, shield in the middle, cast on top, with no exceptions. If the specific capybara needed to fill a slot wasn't present, the remaining players simply couldn't stack, punishing players for wanting to collaborate.
An early version locked stack position to role, dash on the bottom, shield in the middle, cast on top, with no exceptions. If the specific capybara needed to fill a slot wasn't present, the remaining players simply couldn't stack, punishing players for wanting to collaborate.
Decision
Decision
Decision
Any living, unstacked capybara can join a stack regardless of role, with one fixed rule: whichever capybara has the movement ability drives the stack's direction. This matters because a mechanic built around Strength in Collaboration shouldn't gatekeep collaboration behind team composition, removing the role requirement meant any group of players, regardless of who's present, could still stack and gain its benefits.
Any living, unstacked capybara can join a stack regardless of role, with one fixed rule: whichever capybara has the movement ability drives the stack's direction. This matters because a mechanic built around Strength in Collaboration shouldn't gatekeep collaboration behind team composition, removing the role requirement meant any group of players, regardless of who's present, could still stack and gain its benefits.
Any living, unstacked capybara can join a stack regardless of role, with one fixed rule: whichever capybara has the movement ability drives the stack's direction. This matters because a mechanic built around Strength in Collaboration shouldn't gatekeep collaboration behind team composition, removing the role requirement meant any group of players, regardless of who's present, could still stack and gain its benefits.
void OnCollisionEnter(Collision collision) {
if (collision.transform.root.TryGetComponent(out CapybaraController capybaraController)) {
if (!capybarasStack.Contains(capybaraController)
&& capybaraController.hp > 0f
&& GetComponent<CapybaraController>().hp > 0f) {
AddCapybara(capybaraController
void OnCollisionEnter(Collision collision) {
if (collision.transform.root.TryGetComponent(out CapybaraController capybaraController)) {
if (!capybarasStack.Contains(capybaraController)
&& capybaraController.hp > 0f
&& GetComponent<CapybaraController>().hp > 0f) {
AddCapybara(capybaraController
Iteration
Iteration
Iteration
Playtesting surfaced players hitting the wrong lineup and simply being unable to stack, directly contradicting the pillar the mechanic was meant to serve. So, we iterated on the idea and ensured that the players do not have to stack on top of one another in a fixed order.
Playtesting surfaced players hitting the wrong lineup and simply being unable to stack, directly contradicting the pillar the mechanic was meant to serve. So, we iterated on the idea and ensured that the players do not have to stack on top of one another in a fixed order.
Playtesting surfaced players hitting the wrong lineup and simply being unable to stack, directly contradicting the pillar the mechanic was meant to serve. So, we iterated on the idea and ensured that the players do not have to stack on top of one another in a fixed order.
Outcome
Outcome
Outcome
Stacking now accommodates whatever combination of players is actually present, rather than gatekeeping collaboration behind a specific team composition, while movement control stays clear and predictable.
Stacking now accommodates whatever combination of players is actually present, rather than gatekeeping collaboration behind a specific team composition, while movement control stays clear and predictable.
Stacking now accommodates whatever combination of players is actually present, rather than gatekeeping collaboration behind a specific team composition, while movement control stays clear and predictable.
DESIGN DECISION 2: GETTING HIT WHILE STACKED SHOULD COST BOTH HEALTH AND FORMATION
DESIGN DECISION 2: GETTING HIT WHILE STACKED SHOULD COST BOTH HEALTH AND FORMATION
Problem
Problem
Problem
Stacking needed a real cost, not a free power multiplier. A flat "split the damage evenly" rule or "only top capybara takes the damage" felt too small a risk to pay considering all the buffs each capybara gets.
Stacking needed a real cost, not a free power multiplier. A flat "split the damage evenly" rule or "only top capybara takes the damage" felt too small a risk to pay considering all the buffs each capybara gets.
Stacking needed a real cost, not a free power multiplier. A flat "split the damage evenly" rule or "only top capybara takes the damage" felt too small a risk to pay considering all the buffs each capybara gets.
Decision
Decision
Decision
Each additional capybara takes a fraction of incoming damage (90% at two stacked, 80% at three), so the group takes more total damage than a single capybara would. Every hit also knocks the top capybara off the stack entirely, regardless of the mitigation. This makes stacking a genuine risk rather than a numbers play, and watching a capybara go flying off a stack is funny rather than punishing, serving Relieve Tension Through Chaos directly.
Each additional capybara takes a fraction of incoming damage (90% at two stacked, 80% at three), so the group takes more total damage than a single capybara would. Every hit also knocks the top capybara off the stack entirely, regardless of the mitigation. This makes stacking a genuine risk rather than a numbers play, and watching a capybara go flying off a stack is funny rather than punishing, serving Relieve Tension Through Chaos directly.
Each additional capybara takes a fraction of incoming damage (90% at two stacked, 80% at three), so the group takes more total damage than a single capybara would. Every hit also knocks the top capybara off the stack entirely, regardless of the mitigation. This makes stacking a genuine risk rather than a numbers play, and watching a capybara go flying off a stack is funny rather than punishing, serving Relieve Tension Through Chaos directly.
public void TakeDamage(float damage, bool splitDamageAmongStack = true) {
if (splitDamageAmongStack) {
if (capybarasStack.Count == 2) damage *= 0.9f;
else if (capybarasStack.Count == 3) damage *= 0.8f;
foreach (CapybaraController capybara in capybarasStack)
capybara.TakeDamage(damage);
}
...
RemoveCapybara(transform.forward + transform.up); // top member always ejected on hit
public void TakeDamage(float damage, bool splitDamageAmongStack = true) {
if (splitDamageAmongStack) {
if (capybarasStack.Count == 2) damage *= 0.9f;
else if (capybarasStack.Count == 3) damage *= 0.8f;
foreach (CapybaraController capybara in capybarasStack)
capybara.TakeDamage(damage);
}
...
RemoveCapybara(transform.forward + transform.up); // top member always ejected on hit
Outcome
Outcome
Outcome
Getting hit while stacked is genuinely costly in aggregate, but the ejection mechanic turns the moment into something chaotic and funny rather than purely punishing.
Getting hit while stacked is genuinely costly in aggregate, but the ejection mechanic turns the moment into something chaotic and funny rather than purely punishing.
Getting hit while stacked is genuinely costly in aggregate, but the ejection mechanic turns the moment into something chaotic and funny rather than purely punishing.
DESIGN DECISION 3: STACKING SHOULD BRING MEANINGFUL "POWER-UP"
DESIGN DECISION 3: STACKING SHOULD BRING MEANINGFUL "POWER-UP"
Problem
Problem
Problem
If stacking only scaled numbers, it would feel like a stat buff rather than genuine empowerment through teamwork.
If stacking only scaled numbers, it would feel like a stat buff rather than genuine empowerment through teamwork.
If stacking only scaled numbers, it would feel like a stat buff rather than genuine empowerment through teamwork.
Decision
Decision
Decision
Stacking unlocks real behavioral changes per role. For example, a stacked dash breaks through walls, a stacked shield protects all capybaras on the stack, and a stacked spell freezes Granny outright instead of slowing her. All of these are additional behaviors on top of the expected numeric tuning per role. This gives each role a genuinely new capability while stacked, the strongest proof that Strength in Collaboration is a real mechanical philosophy.
Stacking unlocks real behavioral changes per role. For example, a stacked dash breaks through walls, a stacked shield protects all capybaras on the stack, and a stacked spell freezes Granny outright instead of slowing her. All of these are additional behaviors on top of the expected numeric tuning per role. This gives each role a genuinely new capability while stacked, the strongest proof that Strength in Collaboration is a real mechanical philosophy.
Stacking unlocks real behavioral changes per role. For example, a stacked dash breaks through walls, a stacked shield protects all capybaras on the stack, and a stacked spell freezes Granny outright instead of slowing her. All of these are additional behaviors on top of the expected numeric tuning per role. This gives each role a genuinely new capability while stacked, the strongest proof that Strength in Collaboration is a real mechanical philosophy.
public virtual void SetOnStack(bool onStack) {
currentCD = onStack ? stackedCD : regularCD;
}
// CapybaraDash: stacked dash gains wall-breaking capability, distinct from regular dash's speed-only change
// CapybaraShield: currentParryRange = onStack ? stackedParryRange : regularParryRange;
// CapybaraSpell: stacked cast applies a freeze effect on Granny instead of a slow, in addition to lifetime scalingpublic virtual void SetOnStack(bool onStack) {
currentCD = onStack ? stackedCD : regularCD;
}
// CapybaraDash: stacked dash gains wall-breaking capability, distinct from regular dash's speed-only change
// CapybaraShield: currentParryRange = onStack ? stackedParryRange : regularParryRange;
// CapybaraSpell: stacked cast applies a freeze effect on Granny instead of a slow, in addition to lifetime scalingOutcome
Outcome
Outcome
Stacking now unlocks genuinely different capabilities per role rather than just bigger numbers, making committing to a stack feel like real empowerment through coordination.
Stacking now unlocks genuinely different capabilities per role rather than just bigger numbers, making committing to a stack feel like real empowerment through coordination.
Stacking now unlocks genuinely different capabilities per role rather than just bigger numbers, making committing to a stack feel like real empowerment through coordination.
#2: DESTRUCTIBLE ENVIRONMENT
#2: DESTRUCTIBLE ENVIRONMENT
#2: DESTRUCTIBLE ENVIRONMENT
OVERVIEW
OVERVIEW
Design Intent
Design Intent
Design Intent
Destructible environments are the physical embodiment of "Relieve Tension Through Chaos": walls breaking apart should read as satisfying and funny rather than just a hazard, with debris scattering and chain-reacting like a real physics event rather than a scripted "wall disappears" trigger. It also touches "Strength in Collaboration", since destruction is deliberately gated behind stacking, a solo capybara's dash can't break walls, only a stacked one can, giving coordinated players a form of environmental power a lone capybara doesn't have.
Destructible environments are the physical embodiment of "Relieve Tension Through Chaos": walls breaking apart should read as satisfying and funny rather than just a hazard, with debris scattering and chain-reacting like a real physics event rather than a scripted "wall disappears" trigger. It also touches "Strength in Collaboration", since destruction is deliberately gated behind stacking, a solo capybara's dash can't break walls, only a stacked one can, giving coordinated players a form of environmental power a lone capybara doesn't have.
Destructible environments are the physical embodiment of "Relieve Tension Through Chaos": walls breaking apart should read as satisfying and funny rather than just a hazard, with debris scattering and chain-reacting like a real physics event rather than a scripted "wall disappears" trigger. It also touches "Strength in Collaboration", since destruction is deliberately gated behind stacking, a solo capybara's dash can't break walls, only a stacked one can, giving coordinated players a form of environmental power a lone capybara doesn't have.
Rules
Rules
Rules
Only intact (kinematic) destructibles respond to a triggering collision
A capybara's dash only triggers destruction if that capybara is stacked and is the movement-anchor member; a solo dash cannot break walls
Granny's dash always triggers destruction
Missiles pass through broken walls and continue toward their target; the capybara's own spell is destroyed on wall impact instead
On trigger, all destructibles within a 4-unit radius are released and given an outward impulse force
Broken destructibles remain physical for several seconds, then sink into the ground over 12 seconds before removal
Only intact (kinematic) destructibles respond to a triggering collision
A capybara's dash only triggers destruction if that capybara is stacked and is the movement-anchor member; a solo dash cannot break walls
Granny's dash always triggers destruction
Missiles pass through broken walls and continue toward their target; the capybara's own spell is destroyed on wall impact instead
On trigger, all destructibles within a 4-unit radius are released and given an outward impulse force
Broken destructibles remain physical for several seconds, then sink into the ground over 12 seconds before removal
Only intact (kinematic) destructibles respond to a triggering collision
A capybara's dash only triggers destruction if that capybara is stacked and is the movement-anchor member; a solo dash cannot break walls
Granny's dash always triggers destruction
Missiles pass through broken walls and continue toward their target; the capybara's own spell is destroyed on wall impact instead
On trigger, all destructibles within a 4-unit radius are released and given an outward impulse force
Broken destructibles remain physical for several seconds, then sink into the ground over 12 seconds before removal
DESIGN DECISION 1: PRE-SLICED CHUNKS OVER REAL-TIME FRACTURING OR VOXELS
DESIGN DECISION 1: PRE-SLICED CHUNKS OVER REAL-TIME FRACTURING OR VOXELS
Problem
Problem
Problem
Convincing destruction has three real approaches, voxel-based destruction, real-time procedural fracturing, or pre-authored breakable chunks, and getting this choice wrong would be costly to unwind given a short development timeline.
Convincing destruction has three real approaches, voxel-based destruction, real-time procedural fracturing, or pre-authored breakable chunks, and getting this choice wrong would be costly to unwind given a short development timeline.
Convincing destruction has three real approaches, voxel-based destruction, real-time procedural fracturing, or pre-authored breakable chunks, and getting this choice wrong would be costly to unwind given a short development timeline.
Decision
Decision
Decision
The team prototyped both alternatives before settling on pre-sliced chunks. Real-time fracturing was ruled out first, the fracture calculations caused sudden freezes, and the computational cost wasn't justified for a party game where physical realism was never the priority to begin with. Voxel-based destruction was tried next, but individual voxels read as too small and granular, walls broke into fine debris rather than substantial chunks, undermining the idea that broken fragments should act as meaningful, chaotic obstacles a player has to navigate around, not just decorative dust.
The team prototyped both alternatives before settling on pre-sliced chunks. Real-time fracturing was ruled out first, the fracture calculations caused sudden freezes, and the computational cost wasn't justified for a party game where physical realism was never the priority to begin with. Voxel-based destruction was tried next, but individual voxels read as too small and granular, walls broke into fine debris rather than substantial chunks, undermining the idea that broken fragments should act as meaningful, chaotic obstacles a player has to navigate around, not just decorative dust.
The team prototyped both alternatives before settling on pre-sliced chunks. Real-time fracturing was ruled out first, the fracture calculations caused sudden freezes, and the computational cost wasn't justified for a party game where physical realism was never the priority to begin with. Voxel-based destruction was tried next, but individual voxels read as too small and granular, walls broke into fine debris rather than substantial chunks, undermining the idea that broken fragments should act as meaningful, chaotic obstacles a player has to navigate around, not just decorative dust.
Outcome
Outcome
Outcome
Pre-sliced chunks gave the team full authorial control over chunk size and shape, ensuring debris reads as substantial and obstructive rather than fine dust, while avoiding the freeze-inducing cost of real-time fracturing entirely, better serving both performance and Relieve Tension Through Chaos, since chaos needs to feel chunky and physical, not fine and computational.
Pre-sliced chunks gave the team full authorial control over chunk size and shape, ensuring debris reads as substantial and obstructive rather than fine dust, while avoiding the freeze-inducing cost of real-time fracturing entirely, better serving both performance and Relieve Tension Through Chaos, since chaos needs to feel chunky and physical, not fine and computational.
Pre-sliced chunks gave the team full authorial control over chunk size and shape, ensuring debris reads as substantial and obstructive rather than fine dust, while avoiding the freeze-inducing cost of real-time fracturing entirely, better serving both performance and Relieve Tension Through Chaos, since chaos needs to feel chunky and physical, not fine and computational.
DESIGN DECISION 2: DEBRIS NEEDS TO LINGER LONG ENOUGH TO MATTER, WITHOUT PILING UP FOREVER
DESIGN DECISION 2: DEBRIS NEEDS TO LINGER LONG ENOUGH TO MATTER, WITHOUT PILING UP FOREVER
Problem
Problem
Problem
Three constraints pulled against each other. Debris needed to stay tactically relevant for a while (a broken wall still affects pathing and line of sight), it needed to feel satisfying rather than vanishing cheaply the instant it broke, and it couldn't be allowed to accumulate indefinitely without hurting performance over a long session.
Three constraints pulled against each other. Debris needed to stay tactically relevant for a while (a broken wall still affects pathing and line of sight), it needed to feel satisfying rather than vanishing cheaply the instant it broke, and it couldn't be allowed to accumulate indefinitely without hurting performance over a long session.
Three constraints pulled against each other. Debris needed to stay tactically relevant for a while (a broken wall still affects pathing and line of sight), it needed to feel satisfying rather than vanishing cheaply the instant it broke, and it couldn't be allowed to accumulate indefinitely without hurting performance over a long session.
Decision
Decision
Decision
The team's first version simply left broken debris in the world permanently, which surfaced real performance problems as pieces piled up over a match. The fix was a staged lifecycle: debris stays fully visible and physical for a meaningful window (so it still matters tactically and reads as a real event, not a disappearing act), then sinks gradually into the ground rather than popping out of existence, giving it a graceful exit instead of an abrupt one, before finally being cleaned up.
The team's first version simply left broken debris in the world permanently, which surfaced real performance problems as pieces piled up over a match. The fix was a staged lifecycle: debris stays fully visible and physical for a meaningful window (so it still matters tactically and reads as a real event, not a disappearing act), then sinks gradually into the ground rather than popping out of existence, giving it a graceful exit instead of an abrupt one, before finally being cleaned up.
The team's first version simply left broken debris in the world permanently, which surfaced real performance problems as pieces piled up over a match. The fix was a staged lifecycle: debris stays fully visible and physical for a meaningful window (so it still matters tactically and reads as a real event, not a disappearing act), then sinks gradually into the ground rather than popping out of existence, giving it a graceful exit instead of an abrupt one, before finally being cleaned up.
IEnumerator DestroyWall(GameObject target)
{
yield return new WaitForSeconds(0.1f);
target.layer = LayerMask.NameToLayer("Destroyed");
yield return new WaitForSeconds(5f);
target.GetComponent<Collider>().enabled = false;
target.GetComponent<Rigidbody>().isKinematic = true;
// Slowly sink into the ground
float elapsed = 0f;
float duration = 12f;
Vector3 initialPosition = target.transform.position;
Vector3 targetPosition = initialPosition + Vector3.down * 12f;
while (elapsed < duration)
{
target.transform.position = Vector3.Lerp(
initialPosition,
targetPosition,
elapsed / duration
);
elapsed += Time.deltaTime;
yield return null;
}
Destroy(target
IEnumerator DestroyWall(GameObject target)
{
yield return new WaitForSeconds(0.1f);
target.layer = LayerMask.NameToLayer("Destroyed");
yield return new WaitForSeconds(5f);
target.GetComponent<Collider>().enabled = false;
target.GetComponent<Rigidbody>().isKinematic = true;
// Slowly sink into the ground
float elapsed = 0f;
float duration = 12f;
Vector3 initialPosition = target.transform.position;
Vector3 targetPosition = initialPosition + Vector3.down * 12f;
while (elapsed < duration)
{
target.transform.position = Vector3.Lerp(
initialPosition,
targetPosition,
elapsed / duration
);
elapsed += Time.deltaTime;
yield return null;
}
Destroy(target
Iteration
Iteration
Iteration
The original approach (never removing debris) worked fine early in a match but degraded performance as destruction accumulated, since hundreds of fragments would have accumulated already, each with their own NavMesh Obstacle and Colliders and Rigidbodies, which is what forced the staged cleanup design, both for performance and a cleaner scene.
The original approach (never removing debris) worked fine early in a match but degraded performance as destruction accumulated, since hundreds of fragments would have accumulated already, each with their own NavMesh Obstacle and Colliders and Rigidbodies, which is what forced the staged cleanup design, both for performance and a cleaner scene.
The original approach (never removing debris) worked fine early in a match but degraded performance as destruction accumulated, since hundreds of fragments would have accumulated already, each with their own NavMesh Obstacle and Colliders and Rigidbodies, which is what forced the staged cleanup design, both for performance and a cleaner scene.
Outcome
Outcome
Outcome
Debris now stays around long enough to matter both tactically and tonally, contributing to Relieve Tension Through Chaos by giving destruction real physical presence, while the gradual sink-and-cleanup keeps the game performant over a full session rather than accumulating debris indefinitely.
Debris now stays around long enough to matter both tactically and tonally, contributing to Relieve Tension Through Chaos by giving destruction real physical presence, while the gradual sink-and-cleanup keeps the game performant over a full session rather than accumulating debris indefinitely.
Debris now stays around long enough to matter both tactically and tonally, contributing to Relieve Tension Through Chaos by giving destruction real physical presence, while the gradual sink-and-cleanup keeps the game performant over a full session rather than accumulating debris indefinitely.
#3: ABILITIES
#3: ABILITIES
#3: ABILITIES
OVERVIEW
OVERVIEW
Design Intent
Design Intent
Design Intent
Debris now stays around long enough to matter both tactically and tonally, contributing to Relieve Tension Through Chaos by giving destruction real physical presence, while the gradual sink-and-cleanup keeps the game performant over a full session rather than accumulating debris indefinitely.
Debris now stays around long enough to matter both tactically and tonally, contributing to Relieve Tension Through Chaos by giving destruction real physical presence, while the gradual sink-and-cleanup keeps the game performant over a full session rather than accumulating debris indefinitely.
Debris now stays around long enough to matter both tactically and tonally, contributing to Relieve Tension Through Chaos by giving destruction real physical presence, while the gradual sink-and-cleanup keeps the game performant over a full session rather than accumulating debris indefinitely.
Rules
Rules
Rules
Dash: grants movement-based traversal/offense; gains wall-breaking capability specifically when the user is stacked (see Stacking Decision 3)
Shield: opens a timed parry window; destroys Granny's missile on contact; knocks Granny back only if she is actively dashing when the parry connects, idle or non-dashing Granny is not affected by parry
Spell: casts a projectile with crowd-control effect on Granny; applies a freeze effect instead of a slow specifically when the user is stacked
Each ability defines independent stacked/unstacked values (speed, range, duration)
Using any ability locks movement input for its duration until the ability completes
Dash: grants movement-based traversal/offense; gains wall-breaking capability specifically when the user is stacked (see Stacking Decision 3)
Shield: opens a timed parry window; destroys Granny's missile on contact; knocks Granny back only if she is actively dashing when the parry connects, idle or non-dashing Granny is not affected by parry
Spell: casts a projectile with crowd-control effect on Granny; applies a freeze effect instead of a slow specifically when the user is stacked
Each ability defines independent stacked/unstacked values (speed, range, duration)
Using any ability locks movement input for its duration until the ability completes
Dash: grants movement-based traversal/offense; gains wall-breaking capability specifically when the user is stacked (see Stacking Decision 3)
Shield: opens a timed parry window; destroys Granny's missile on contact; knocks Granny back only if she is actively dashing when the parry connects, idle or non-dashing Granny is not affected by parry
Spell: casts a projectile with crowd-control effect on Granny; applies a freeze effect instead of a slow specifically when the user is stacked
Each ability defines independent stacked/unstacked values (speed, range, duration)
Using any ability locks movement input for its duration until the ability completes
DESIGN DECISION 1: ABILITIES MIRROR GRANNY'S KIT
DESIGN DECISION 1: ABILITIES MIRROR GRANNY'S KIT
Problem
Problem
Problem
Three abilities as different as a dash, a defensive parry, and an offensive spell risk one becoming the obvious best pick, undermining any sense of real choice or team composition strategy.
Three abilities as different as a dash, a defensive parry, and an offensive spell risk one becoming the obvious best pick, undermining any sense of real choice or team composition strategy.
Three abilities as different as a dash, a defensive parry, and an offensive spell risk one becoming the obvious best pick, undermining any sense of real choice or team composition strategy.
Decision
Decision
Decision
Rather than balancing three unrelated abilities against each other in the abstract, each capybara ability was designed to answer a specific piece of Granny's own kit, movement counters movement, Shield counters Granny's missile and dash specifically, and Spell provides the capybaras' own crowd control to match Granny's. This gives each ability a clear, distinct job tied to what the opposing side can do, rather than needing to be independently "balanced" against sibling abilities in a vacuum.
Rather than balancing three unrelated abilities against each other in the abstract, each capybara ability was designed to answer a specific piece of Granny's own kit, movement counters movement, Shield counters Granny's missile and dash specifically, and Spell provides the capybaras' own crowd control to match Granny's. This gives each ability a clear, distinct job tied to what the opposing side can do, rather than needing to be independently "balanced" against sibling abilities in a vacuum.
Rather than balancing three unrelated abilities against each other in the abstract, each capybara ability was designed to answer a specific piece of Granny's own kit, movement counters movement, Shield counters Granny's missile and dash specifically, and Spell provides the capybaras' own crowd control to match Granny's. This gives each ability a clear, distinct job tied to what the opposing side can do, rather than needing to be independently "balanced" against sibling abilities in a vacuum.
Outcome
Outcome
Outcome
Each ability has an unambiguous purpose defined by what it answers on Granny's side, rather than competing directly with the other two capybara abilities for "best pick" status, supporting Strength in Collaboration by making different roles genuinely necessary rather than interchangeable.
Each ability has an unambiguous purpose defined by what it answers on Granny's side, rather than competing directly with the other two capybara abilities for "best pick" status, supporting Strength in Collaboration by making different roles genuinely necessary rather than interchangeable.
Each ability has an unambiguous purpose defined by what it answers on Granny's side, rather than competing directly with the other two capybara abilities for "best pick" status, supporting Strength in Collaboration by making different roles genuinely necessary rather than interchangeable.
DESIGN DECISION 2: SHIELDS SHOULD ONLY REACT TO CERTAIN GRANNY ACTIONS
DESIGN DECISION 2: SHIELDS SHOULD ONLY REACT TO CERTAIN GRANNY ACTIONS
Problem
Problem
Problem
A parry-based Shield needed a clear, specific window it rewards, if it could counter Granny regardless of what she was doing, it would become a passive, always-safe answer rather than a skill-based read. But narrowing it too far risked making Shield feel situational to the point of uselessness.
A parry-based Shield needed a clear, specific window it rewards, if it could counter Granny regardless of what she was doing, it would become a passive, always-safe answer rather than a skill-based read. But narrowing it too far risked making Shield feel situational to the point of uselessness.
A parry-based Shield needed a clear, specific window it rewards, if it could counter Granny regardless of what she was doing, it would become a passive, always-safe answer rather than a skill-based read. But narrowing it too far risked making Shield feel situational to the point of uselessness.
Decision
Decision
Decision
Shield's parry already handles Granny's missile (destroying it on a successful block). Dashing was identified as the other genuinely punishable Granny action worth rewarding, it's a committed, telegraphed move, similar to how missiles are a committed, telegraphed threat. Anything outside those two (idle movement, other attacks) intentionally isn't parryable, keeping the ability's power tied to specific, readable moments rather than blanket protection.
Shield's parry already handles Granny's missile (destroying it on a successful block). Dashing was identified as the other genuinely punishable Granny action worth rewarding, it's a committed, telegraphed move, similar to how missiles are a committed, telegraphed threat. Anything outside those two (idle movement, other attacks) intentionally isn't parryable, keeping the ability's power tied to specific, readable moments rather than blanket protection.
Shield's parry already handles Granny's missile (destroying it on a successful block). Dashing was identified as the other genuinely punishable Granny action worth rewarding, it's a committed, telegraphed move, similar to how missiles are a committed, telegraphed threat. Anything outside those two (idle movement, other attacks) intentionally isn't parryable, keeping the ability's power tied to specific, readable moments rather than blanket protection.
if (root != null && root.CompareTag("Granny")) {
if (root.TryGetComponent(out GrannyController grannyController) && grannyController.GetIsDashing()) {
// apply knockback force
if (root != null && root.CompareTag("Granny")) {
if (root.TryGetComponent(out GrannyController grannyController) && grannyController.GetIsDashing()) {
// apply knockback force