Skip to content
All guides

Fighter Builder

Make a 2D fighting game in Godot — frame data, hitboxes, specials, supers, combos — without writing code. Free.

A one-on-one 2D fighting game with rounds, a timer, specials, supers, combos and a CPU opponent. The game already runs at a steady 60 frames per second, reads inputs, checks hitboxes and handles rounds; you decide who fights and how every move works. The sample game, **Clash of Four**, has four fighters and three stages.

The four screens

  • **Game** — title, round length, rounds to win, CPU strength.
  • **Move Lab** — tune every move's frames and hitbox with a live preview.
  • **Database** — fighters, moves and stages.
  • **Art** — fighter sprites and stage backdrops.

Controls in the game

  • **Player 1** — WASD to move, W jump, S crouch. J light, K heavy, L special.
  • **Player 2** — arrow keys. 1 / 2 / 3 on the number pad, or , . /
  • **Gamepads** — first pad is P1, second is P2. X light, Y heavy, B special.
  • **Block** — hold away from your opponent. **F1** during a fight shows the boxes.

Getting it running

  • Install **Godot 4.4 or newer** (the standard build, not .NET) from godotengine.org. Godot doesn't install — unzip it and run it.
  • Unzip the Fighter Builder somewhere you keep projects, for example `Documents\Godot`.
  • In Godot's Project Manager press **Import**, browse into that folder, pick `project.godot`, and press **Import & Edit**.
  • First open takes a few seconds while Godot imports every image and sound.
  • At the top of the editor, next to 2D, 3D, Script and AssetLib, click **Fighter Builder**. That's the Builder.
  • Press **Play from start** at the top right. Pick 1 Player vs CPU, choose a fighter with left/right and J, change stage with Q / E, and fight.

The Game screen, and how fights work

  • **Title**, **Round time** (seconds; whoever has more health wins when it runs out), **Rounds to win** (2 makes it best of three), **CPU strength** (1 is a pushover, 10 blocks and punishes a lot).
  • **Inputs** — every move is a button (L, H, S), optionally with a direction held: down+, forward+ (toward the opponent), back+, or air+ while jumping.
  • **Blocking** — hold back. Standing blocks high, mid and overhead; crouching blocks high, mid and low. So lows must be crouch-blocked and overheads stand-blocked.
  • **Combos** — hits that land while the opponent is still reeling chain together, each doing a little less damage.
  • **Cancels** — a move with **Can cancel on hit** can be cut short by a special or a stronger move the moment it connects. Press the next move just as the first one hits.
  • **Meter** — fills when you hit or get hit. Supers cost 100: a full bar.

The Move Lab

Where your fighters get their feel. Pick a fighter top left, click one of their moves, and its settings appear on the right in **Basics**, **Frames**, **Hitbox** and **Extras**. Drag the slider under the preview to step through frame by frame, or press **Play** to watch it at game speed. Change numbers and the preview and timeline update; press **Save** when you're happy.

**Reading the timeline:** each block is one frame, a 60th of a second. Yellow is **startup**, before the attack can hit. Red is **active**, when the hitbox is live. Blue is **recovery**, when you're stuck finishing the move. Underneath, **On hit** and **On block** say who can act first afterwards — +3 on hit means you recover 3 frames before your opponent and can keep attacking; -8 on block means they recover 8 frames before you, usually enough to hit you back.

What every move setting does

  • **Startup / Active / Recovery** — the three phases, in frames. Fast jabs are around 4 / 3 / 7; big heavy moves 12 / 4 / 22.
  • **Hitstun / Blockstun** — how long the opponent is stuck after being hit or blocking. More hitstun means easier combos.
  • **Damage** — out of the fighter's Health, 1000 by default.
  • **Hits** — high, mid, low or overhead. Decides how it must be blocked.
  • **Hitbox x, y, width, height** — where the attack reaches, measured from the fighter's feet, facing right. Negative y is up.
  • **Knockback / Launch** — push away, and pop up into the air.
  • **Lunge** — move forward during the attack.
  • **Projectile / speed** — fire a projectile instead of a hitbox, like a fireball.
  • **Meter cost** — 100 makes it a super.

New moves: type an id under the list (`kaito_uppercut`) and press **+**, or duplicate the selected move. A new fighter can get a whole set at once with **Copy a moveset from…**, which copies every move of the fighter you pick, ready to tweak.

Working in the Database

Tables on the left, entries in the middle, the selected entry's fields on the right. Pick a table, pick an entry, change the fields, and press **Save** at the top right. **Reload** throws away anything unsaved.

To add something: type a short id in the box under the entry list (lowercase, no spaces — `goblin`, `fire_sword`), then press **+** for a blank entry or the duplicate button for a copy of whatever is selected. Duplicating is the fastest way to make anything: copy the closest thing you already have and change what's different.

Need a field that isn't there? Type its name in **add a custom field** at the bottom of the form and press **+**. It's saved with the entry and your own scripts can read it.

What each table is for

  • **Fighters** — name, health, walk speed, jump power, weight (how fast they fall), two colours, a sprite, and a short bio for the select screen.
  • **Moves** — every attack of every fighter. The Move Lab edits this same table in a friendlier way.
  • **Stages** — name, sky colours top and bottom, floor colour, and an optional backdrop image.

Your first fighter, in ten minutes

  • **Database > Fighters**: select Kaito, type `ryn` in the id box, press duplicate. Name it Ryn, health 900, walk speed 4.0, new colours. Save.
  • **Move Lab**: pick Ryn — the list is empty. Press **Copy a moveset from…** and choose Vex. Ryn now has all of Vex's moves.
  • Select Ryn's **S** move. Rename it Wind Needle, tick **Projectile**, projectile speed 9, startup 14, recovery 18.
  • Make the Jab faster: startup 3. Check **On block** doesn't go too far into plus — that makes a move hard to deal with.
  • **Save**, then **Play from start**. Ryn is on the select screen.
  • A new stage: **Database > Stages**, add `harbour`, pick sky and floor colours, Save. Change stage on the select screen with Q / E.

Your own art

The sample uses plain placeholder art so you can see how the pieces fit. Open **Art** in the sidebar, press **Import from a folder…** for the kind you're adding, and pick the folder your images are in — they're copied into the project. Then pick the new image in the entry's image field in the Database and press Save.

  • **Fighter sprites** — one standing image per fighter, facing right, feet at the bottom edge. It's flipped automatically when facing left. Pick it in Fighters > Sprite.
  • **Stage backdrops** — 1280x720 works best. Pick one in Stages > Backdrop; it replaces the sky colours.

When something doesn't work

  • **F1 in a fight** shows hurtboxes (blue) and live hitboxes (red). The fastest way to see why something whiffed.
  • **A move whiffs up close** — its hitbox starts too far forward. Lower **Hitbox x** or make it wider.
  • **A move never hits crouchers** — its hitbox is too high. Crouching fighters are 96 pixels tall.
  • **The CPU is too good** — lower **CPU strength** on the Game screen.
  • **My change didn't show up** — press Save in the Move Lab or Database, then play again.

Credit, and publishing what you make

The Fighter Builder is free to use, including in games you sell. The one thing it asks is a line somewhere players can see — credits screen, store page, About box:

The full terms are in `LICENSE.md` in the project folder.

If you make something you're proud of, I publish selected games made with the Builders — help with the store page, promotion here, and a revenue split agreed per game. It's optional and you keep your game either way. Send a message to ask.

Where things live in the project

  • `data/` — every table as a JSON file. The Builder reads and writes these; back them up or edit them by hand.
  • `assets/` — images, tiles and sounds.
  • `game/` — the game itself. You never have to touch it, but it's plain commented GDScript if you want to.
  • `addons/` — the Builder.

Made something with it? Publish it here — rough and unfinished is welcome.