No description
  • GDScript 88.6%
  • Python 6%
  • GDShader 2.8%
  • Shell 2.6%
Find a file
2026-11-07 11:37:24 +01:00
.vibe added random level generation to map selection 2026-11-07 11:37:24 +01:00
actors Optimized ai setup with split-up md files 2026-11-03 20:35:01 +01:00
addons Optimized ai setup with split-up md files 2026-11-03 20:35:01 +01:00
assets major refactoring of the level editor; first level generator 2026-11-06 19:31:36 +01:00
audio added pistol and buy system 2026-11-05 09:15:06 +01:00
autoload added random level generation to map selection 2026-11-07 11:37:24 +01:00
build added new logo and web export 2026-10-31 11:50:33 +01:00
docs added random level generation to map selection 2026-11-07 11:37:24 +01:00
levels added stairs block and merged level 7 with layout; addons for level selection 2026-11-03 07:35:50 +01:00
match added pistol and buy system 2026-11-05 09:15:06 +01:00
test added random level generation to map selection 2026-11-07 11:37:24 +01:00
tmp added level editor first milestones 2026-11-05 16:47:51 +01:00
tools level editor changes and AGENTS changes 2026-11-05 19:58:03 +01:00
ui added random level generation to map selection 2026-11-07 11:37:24 +01:00
weapons added pistol and buy system 2026-11-05 09:15:06 +01:00
world added level editor first milestones 2026-11-05 16:47:51 +01:00
.editorconfig Initial commit 2026-10-30 19:22:22 +01:00
.gitattributes Initial commit 2026-10-30 19:22:22 +01:00
.gitignore added level editor first milestones 2026-11-05 16:47:51 +01:00
AGENTS.md added random level generation to map selection 2026-11-07 11:37:24 +01:00
export_presets.cfg added stairs block and merged level 7 with layout; addons for level selection 2026-11-03 07:35:50 +01:00
LICENSE Initial commit 2026-10-30 19:21:06 +01:00
project.godot added pistol and buy system 2026-11-05 09:15:06 +01:00
README.md added props 2026-10-31 19:12:20 +01:00

Defuse

One bomb. Three sites. A short fuse. Only one team knows where it is.

A small, single-player tactical shooter built in Godot 4.7. You join a squad of bots, either as a Defuser hunting for a hidden bomb or as a Guard holding it, and every round is decided by scouting, positioning and one well-placed shot.

Status: playable on Yard, Halls, Valley and Office, on desktop and in the browser. Full matches run against bots that search for the bomb, hold the site from cover while decoys guard the other sites, send a runner to defuse and fall back when hit; you can watch your teammates after you die. Footsteps, gunshots, the ticking bomb and an announcer let you play by ear, and the music carries you from a brooding menu theme through the countdown into the bomb's last 30 seconds. Each gun has its own model, buildings are roofed and lit, the HUD shows who is still alive on both sides, and hits flash red and shake the view. The bots and guns are tuned. Characters are now humanoids that walk, hold their guns and fall when killed (placeholder animations); shots now hit body parts (headshots deal 4×), leave bullet holes, and T shows shot traces. See the roadmap for what's playable today.


The idea

Most defuse games start with someone carrying the bomb. Here the bomb is already planted when the round begins, at one of three sites picked at random, and the two teams start out knowing different things:

  • Guards know exactly where it is. They have until the bomb goes off (35 seconds on Yard, 55 on Halls) to dig in around one site and hold it.
  • Defusers don't. They have to split up, sweep the sites and call it out the moment someone spots it. Then the whole team turns toward that site.

So every round has two halves: a tense search where the Defusers spread thin and the Guards wait, then a firefight over one bomb that takes five uninterrupted seconds to defuse. Lose sight of the bomb, take a step back or catch a bullet, and the defuse starts from zero.

How a round plays

  1. Countdown. Everyone is frozen on their spawn. Pick your gun while the timer runs.
  2. Live. The bomb starts ticking. Guards set up, Defusers search.
  3. Round end. The round is won when:
    • the bomb is defused (Defusers win),
    • the bomb timer runs out (Guards win),
    • or one team is wiped out.
  4. Fresh spawns, full health, next round. After the last round, the team with more wins takes the match.

Dead is dead until the next round, but you're not out of the action: you watch the fight through your surviving teammates' eyes and cycle between them with the arrow keys.

Pick your gun

One gun per round, chosen during the countdown. No ammo, no reloading, no economy. The guns differ only in how they fire.

Shotgun Machine pistol Sniper
Style Close-range brawler Fully automatic spray One shot, one kill
Damage 8 pellets × 13 16 per bullet 100
Range 25 m 50 m 150 m
Zoom — Yes Yes (and it needs it: hip fire is wild)

Bots that play the objective

Your teammates and opponents are bots with a job to do, not targets that wander toward you:

  • Guards spread over cover spots around the bomb's site, scan the doors and hallways around them, hear footsteps nearby and move between posts, while one or two decoys hold the other sites so the Defusers can't tell from contact where the bomb is. When someone starts defusing, the site's guards come for the defuser.
  • Defuser bots split up to search different sites, and the first one to spot the bomb tells the team.
  • One Defuser becomes the runner and goes for the bomb while the others escort, taking cover around the site. Once the runner starts the defuse, it commits and trusts the escorts to cover it.
  • Every bot sees in a view cone, can't see through walls, reacts when shot, falls back to cover under fire and misses sometimes.

Make it your match

Before each match you choose:

Setting Range Default
Level Yard, Halls, Valley, Office Yard
Your team Defusers or Guards Defusers
Team size 1–10 per side 5
Rounds 1–10 5
Countdown 10–60 s 10 s

Play a quick 1v1 duel against a single bot, or a 10v10 brawl. Your call.

The levels:

  • Yard is a 60 × 40 m compound: an office block whose central hall hides one site, two walled courtyards with the other two, and a street between them. Doors and corners decide every fight; nobody can see a site from spawn.
  • Valley is a 140 × 100 m rocky valley: three rock ridges cut by narrow gorges and culvert tubes, plateaus with ramps for sniper perches, a stone circle, a dry riverbed and a mine office. It's the biggest map, and the rounds there last the longest.
  • Halls is a 100 × 80 m industrial block with three very different sites: a tiled hall at the end of three corridors, a warehouse full of racks and crates, and an open loading yard with shipping containers. The Guards start in a walled depot near the middle, the Defusers in a lane in the far corner, so the search takes real time.
  • Office is a 100 × 80 m office floor with thin corridors: an open-plan office full of cubicles, a server room between rack rows and a cafeteria hold the sites, linked by a lobby, an open-air garden, meeting rooms and a loading dock. The Defusers arrive from the parking lot, the Guards start in the security office.

Controls

Action Key
Move W A S D
Look Mouse
Shoot Left mouse
Zoom (Sniper, Machine pistol) Right mouse
Defuse Hold E at the bomb
Choose gun (countdown) 1 / 2 / 3
Spectate previous / next (while dead) ← / →
Back to main menu Esc

Mouse and keyboard only.

Run it

You need Godot 4.7 (standard build, not .NET). No plugins, no extra dependencies.

git clone <this-repo-url> defuse
cd defuse
godot --path .

Or open the folder in the Godot editor and press F5.

Play in the browser

The Web export preset builds a browser version that runs on itch.io without any special server settings:

  1. Install the Godot 4.7.2 export templates (Editor → Manage Export Templates).

  2. In the editor, go to Project → Export → Web → Export Project. Or run this from the command line:

    godot --headless --path . --export-release "Web" build/defuse-web/index.html
    
  3. Zip the contents of build/defuse-web/, so that index.html is at the zip root. From the repository root: (cd build/defuse-web && zip -r ../defuse-web.zip .).

  4. On itch.io, create a project with Kind of project HTML and upload the zip. Tick "This file will be played in the browser", set the viewport to 1280 × 720 and enable the fullscreen button.

In the browser, the mouse is captured when you press Start and stays captured for the whole match, so choose your gun with 1 / 2 / 3 during the countdown. If the browser releases it (Esc), click to capture it again.

Roadmap

The game is built in milestones, each playable on its own. The full design lives in docs/plan.md.

# Milestone Status
1 Project setup ✅ Done
2 Main menu and level select ✅ Done
3 Level 1 "Yard" blockout ✅ Done
4 Player controller and the three guns ✅ Done
5 Rounds, countdown, score and HUD ✅ Done
6 Bomb, defusing and win conditions ✅ Done
7 Bots: movement, sight and shooting ✅ Done
8 Bots: roles, teamwork and cover ✅ Done
8a Audio: footsteps, gunshots, bomb and announcer ✅ Done
9 Level 2 "Halls", procedural textures, smarter guards ✅ Done
9a Gun models, UI theme, roofs, alive counter ✅ Done
9b Hit feedback: red vignette and screen shake ✅ Done
9c Web export for itch.io, Defuse name and logo ✅ Done
10 Tuning and bug pass ✅ Done
10a Level previews in the level select ✅ Done
11 Level 3 "Valley" ✅ Done
11a Gun clipping, bot collisions, varied bot routes ✅ Done
11b Music for countdown, last 30 seconds and round end ✅ Done
11c Menu music ✅ Done
11d UI restyle with icons ✅ Done
12 Humanoid characters and animations ✅ Done
12a Damage zones, bullet holes and shot traces ✅ Done
13 Level 4 "Office" with office props 🔍 Play check

What it deliberately isn't

To keep it tight and finishable, the game doesn't have, and won't get, multiplayer, a buy menu, grenades, armor, reloading, jumping or crouching. The art stays blockout geometry with procedural surface textures (concrete, brick, planks, corrugated metal), roofed buildings and simple primitive gun models; sound covers footsteps, gunshots, the bomb and an announcer, nothing more. It's all about the objective.

Built with

  • Godot Engine 4.7, using statically typed GDScript and the Forward+ renderer
  • Only built-in nodes: navigation meshes for bot pathfinding, CSG shapes for the levels

License

MIT © 2026 Luca Junge