Aller au contenu

Cet article n'est disponible qu'en anglais.

Back to Blog
BlogDev Diary8 min read

How We Build Abilities in MISFITZ

Inside Combat Actions, the system our designers use to make abilities without writing new code.

By Joan, Engineer at Antihero Studios

Every character ability in MISFITZ, the social extraction game for mobile we make at Antihero Studios, is assembled from Combat Actions instead of being written by hand. That single decision shapes how fast we can try ideas, how a small team builds a whole cast of characters, and who gets to change an ability once it exists. I'm one of the engineers on the game. This is how the system works, with Ray's main attack as the example.

In short

MISFITZ by Antihero Studios builds its character abilities from Combat Actions: reusable pieces such as shoot, repeat, delay and apply-on-self, nearly all of which can hold other Combat Actions inside them. Designers combine them in an editor, set costs, control types and combat effects, and get a working ability from parts that already exist. Character abilities, passives, power-ups and Trashbots all run on the same system.

Why not hard-code every ability?

Hard-coding turns every idea into an engineering ticket. Plenty of games write custom code for every ability, for characters and enemies alike, and with a handful of abilities that's quick and easy. Over time it becomes the bottleneck. Each time a designer wants to try something new, an engineer has to stop and build it, and the idea waits in line behind everything else. We're a small team with a very long list, so we designed for efficiency from the start. We didn't want each new character to be a project. We wanted it to be an arrangement.

What is a Combat Action?

A Combat Action is one small, reusable thing an ability can do. Shoot a projectile. Charge. Wait. Repeat something. Apply an effect to yourself. Drop an area of effect on the ground. Spawn something. Teleport. When a designer starts a new ability, they see a blank canvas and a list of these to pick from.

An empty Combat Action slot in the MISFITZ editor with the list of combat action types open: apply on self, charge, circular area on ground, conditional, delay, multiple, play repeated, shoot, spawn, teleport and more.
Where every ability starts: an empty slot and the list of Combat Actions a designer can drop into it.

The property that makes the whole thing work is nesting: nearly every Combat Action can trigger other Combat Actions inside it. A shot can carry what happens when it lands. A repeat can wrap a shot. One block can run several actions side by side. Abilities stop being code and become small trees of decisions that a designer can read, change and reuse. That's what makes Combat Actions a data-driven ability system: an ability is data a designer edits, not code an engineer writes.

How do costs and control types work?

Before any action runs, an ability defines what it costs and how you trigger it. Each ability can have several costs, such as bullets or a plain cooldown. It also has a control type: some abilities fire when you let go of the button, others while you hold it down. Ray's main attack fires when you let go.

The MISFITZ Combat Actions editor showing the settings for 'Lazer', Ray's main ability: ability type Main, control type Release, a 0.55 second forget-action timer, and Cost, Aim and Action tabs.
The top of Ray's main attack: ability type, control type and costs, all set before a single Combat Action runs.

How is Ray's main attack built?

Ray's main attack is a Shoot action wrapped in a Play Repeated action: four shots, a tenth of a second apart, each one carrying its own damage. The character guide describes it as four pure energy blasts in quick succession. Here is what that looks like from the inside, and how you would rebuild it from an empty slot.

The Action tab for Ray's main ability: a Play Repeated combat action set to 4 repeats with a 0.1 second delay, wrapping a Shoot combat action with projectile speed 22, range 7 and an instant-damage combat effect on impact.
Ray's main attack, fully assembled in the Action Panel. It looks like a lot until you build it one step at a time.

Step 1: shoot one bullet

Start simple, with a single Shoot action. The bullet itself defines the visuals and the collider, and the action sets its speed, its range and whether it pierces through targets. The fields worth staring at are near the bottom: an impact action and an end-of-range action. Each one fires a new Combat Action when the bullet hits something or runs out of distance. That could be an area of damage, a spawned Trashbot, or the player teleporting to where the bullet landed. It's up to the designer.

A Shoot combat action before it is set up: projectile prototype, spawn offset, speed, range and piercing, plus On Impact effects, an On Impact action and an On End Of Range action.
A bare Shoot action. The impact and end-of-range slots let a bullet trigger another Combat Action when it lands or runs out of distance.

Step 2: decide what a hit does

What a bullet does when it connects lives in its combat effects. That's where every status in the game sits: damage, poison, weakness, speed changes and the rest. The list in the picker runs from cooldown changes all the way to vampirism. Each effect has filters that decide who it touches: enemies, yourself, your allies, and more. On Ray's damage effect, "affects own team" and "affects self" are both switched off, which is why his blasts never hurt Ray or his own team.

The list of combat effects in the MISFITZ editor, including cooldown modifier, critical chance, damage over time, dodge, healing over time, instant damage, invincibility, push back, root, speed modifier and vampirism.
The combat effect picker: every status in the game, from damage and healing over time to roots, knockback and vampirism.

Step 3: repeat it

Play Repeated does exactly what its name says: it repeats another Combat Action. You set the delay between repetitions, the number of repetitions, and whether each one nudges the angle slightly. It's perfect for bullets, but it repeats anything, a poison pool included. For Ray it's four repetitions, 0.1 seconds apart, with the angle modified on each one.

A Play Repeated combat action set to a 0.1 second delay and 4 repetitions, with Modify Angle on and an empty Action slot for the action it repeats.
Play Repeated, set the way Ray uses it: four repetitions, 0.1 seconds apart, angle modified each time.

Step 4: just shoot

Inside the repeat goes the Shoot action from step one, now dressed as Ray's: his bullet with a little offset, a speed, and a damage effect of 220 per bullet. Four of those, a tenth of a second apart, is the attack. That's the whole ability, made entirely from parts that already existed.

The finished chain for Ray's main ability: Play Repeated wrapping a Shoot combat action whose bullet applies an instant-damage combat effect of 220 on impact.
Ray's Shoot action: his bullet, its speed and range, and a damage effect of 220 per shot when this was captured.

The numbers in these screenshots come from a development build, and balance numbers move all the time. That's exactly why they live in data and not in code.

Beat's main attack uses the same parts in a different arrangement. A Multiple Combat Actions block runs two branches side by side: one fires three projectiles at once, each at a slightly different angle, and the other waits a tenth of a second and fires three more. Same pieces, a completely different feel. That's the point.

Beat's main ability in the editor: a Multiple combat action that runs two Play Repeated actions of 3 shots each, the second one after a 0.1 second delay.
Beat's main attack: two volleys of three, a tenth of a second apart, built from the same parts as Ray's.

What else runs on Combat Actions?

Nearly everything that does something in a fight. We kept improving the system after those screenshots, and it spread. Character abilities, passives, the power-ups you pick up during a run and Trashbots all run on Combat Actions now. It has proven flexible enough for everything we wanted from it, and it also gave me a place to play.

How far does the system stretch? Four demos

To test how far the system stretches, I built some new effects that plug into the existing library. The clearest is orbiting projectiles. Everything in this section is a demo of the system, and none of it is an ability in MISFITZ.

In one demo, bullets orbit the player and hit whatever they touch, carrying any effect we already had: damage, healing, paralysis. A second demo uses the same orbit with different bullets, and those bullets stop enemy projectiles instead, which is a shield made out of a bullet swap. A third demo attaches the orbit to a projectile, so effects stack, mix and match: a shot that carries its own ring of shots. The fourth demo is a different kind of effect, a Combat Action that spawns items, so a hit could drop a power-up or a piece of gear.

Demo of the system, not an ability in MISFITZ: projectiles orbiting a character and blocking enemy shots, built from existing Combat Actions.

Why build a node-based editor for designers?

Because a nested list gets hard to read fast. Ray's attack is simple, and its panel already scrolls. Abilities with conditions, branches and chained effects turn into long vertical stacks where it's hard to see what triggers what, and a system people struggle to read is a system they hesitate to touch.

Over a Christmas break I built a side project: the Combat Action Editor, a node-based tool that draws an ability as a graph. Each Combat Action is a node, and wires show what triggers what. Designers can leave notes on the canvas, collapse what they don't need, and see a whole ability on one screen instead of scrolling through it. It's finished, and the team already uses it to understand and iterate on existing Combat Actions and to build new ones.

The node-based Combat Action Editor showing Ray's main attack as a graph of connected nodes: a Play Repeated node set to 4, a Shoot node and a damage node, with conditional branches, designer notes and an inspector panel.
Ray's main attack again, drawn as a graph in the Combat Action Editor. The repeat, the shot and the damage are the same steps as above, now on one screen. Open the image to see it full size.
Close-up of the Combat Action Editor: a PlayRepeated node set to repeat 4 times, wired into a Shoot node whose on-impact effect is InstantDamage.
Up close: Play Repeated set to four, wired into a Shoot action whose impact effect is instant damage.

It matters because so much runs through this system: power-ups, passives and every character's abilities. A tool that makes the system faster to read makes all of those faster to change. One detail in that screenshot makes the case better than I can. The damage node reads 250, not 220. Somewhere between the two screenshots Ray was rebalanced, and rebalancing him meant changing a number in a field.

What this lets a small team do

The point was never elegance. It's speed and ownership. When an ability is an arrangement of parts, a designer can try an idea without waiting for an engineer, engineers spend their time building new kinds of parts instead of one-off code, and the people who decide how MISFITZ feels are the ones holding the controls. We believe that's how a small studio builds a game that plays bigger than its headcount: not by working more hours, but by making ideas cheap to try. For the design reasons behind all this, read why abilities carry so much of the depth in MISFITZ, or go meet the characters these systems built.

Ray still fires four blasts. Now you know how.

Adapted from Joan's dev updates in the MISFITZ Discord.

Frequently Asked Questions

How are abilities made in MISFITZ?

Designers build them from Combat Actions, small reusable pieces such as shoot, repeat, delay and apply-on-self that can hold other actions inside them. An ability is an arrangement of parts that already exist, not new code.

What is a data-driven ability system?

An ability system where each ability is data, an arrangement of reusable actions and effects, instead of its own piece of code. In MISFITZ that system is Combat Actions: designers combine pieces like shoot, repeat and delay, and when Ray was rebalanced, it meant changing a number in a field.

How does Ray's main attack work?

It's a Shoot action wrapped in a Play Repeated action: four shots, a tenth of a second apart, each with a slight change of angle and its own damage effect. The damage filters are set so the shots never hurt Ray or his own team.

What else runs on Combat Actions?

In MISFITZ, Combat Actions run character abilities, passives, the power-ups you pick up during a run, and the Trashbots, Zero's bots: nearly everything that does something in a fight.

Are orbiting projectiles an ability in MISFITZ?

No. Orbiting projectiles, projectile-blocking orbits and item spawns were demos built to test the system. None of them are abilities in the game.

What is the Combat Action Editor?

The Combat Action Editor is a node-based tool for MISFITZ designers, built over a Christmas break. It draws each ability as a graph, so designers can see a whole ability on one screen and change it quickly. The team uses it to work on existing and new Combat Actions.

Can designers make abilities without an engineer?

Yes, as long as the ability is made from Combat Actions and effects that already exist. Engineers build new kinds of pieces, like the orbiting effect in the demos, and designers combine them.

Last updated:

MISFITZ

See What These Parts Built.

Characters made from Combat Actions, in runs where trust is optional.