Brawl your way to the top. — An open-source 3D Arena Brawler with platform fighter movement.
SlopArena fuses platform fighter movement with character kits from hero brawlers. Built with Godot 4.6 (.NET C#), it features a data-driven character system with a tick-based simulation shared between client and server.
Status: Playable prototype — movement, combat, custom FSM, and Manki (mad bomber monkey) are functional in sandbox mode.
git clone https://github.com/Binoui/SlopArena.git
cd SlopArena- Install Godot 4.6+ (.NET version) from godotengine.org
- Install .NET SDK 8.0+ (
sudo pacman -S dotnet-sdkon Arch) - Open
project.godotin Godot and press F5
No server required — the sandbox runs everything locally with training dummies.
| Input | Action |
|---|---|
| ZQSD / WASD | Movement (camera-relative) |
| Space | Jump (double jump available) |
| LMB | Light attack (3-hit combo) |
| RMB | Heavy attack (hold to charge) |
| Q / E / R | Abilities |
| F | Ultimate |
| Shift | Dash / Air dodge |
| Tab | Cycle target |
| Scroll Wheel | Zoom |
| Escape | Pause menu |
┌─ Godot Client ──────────────────────────────┐
│ PlayerController (orchestrator) │
│ ├─ InputController (centralized polling) │
│ ├─ MovementComponent (wraps Simulation) │
│ ├─ Custom C# FSM (StateMachine.cs) │
│ │ ├─ IdleState / RunState │
│ │ ├─ AirState (BlendSpace1D jump↔fall) │
│ │ ├─ LandingState / AttackState │
│ │ └─ AnimTree (flat StateMachine root) │
│ └─ CombatComponent (statuses, hit routing)│
├─ Shared/ (pure C#, zero Godot deps) ────────┤
│ CharacterDefinition → AbilityData → Stages │
│ Simulation.SimulateTick() │
│ SpellResolver (cone/circle/beam hits) │
│ CharacterState (pos, vel, cooldowns...) │
├─ Server/ (headless, WIP) ────────────────── │
│ UDP loop at 60Hz │
└─────────────────────────────────────────────┘
Key design decisions:
- Data-driven characters — all stats, abilities, and animations live in
CharacterDefinition.cs. Adding a new character = writing a factory function. - Tick-based everything — durations are
ushortticks (1/60s). Netcode-ready. - Queue-based input buffer (max 2) for responsive LMB combos, like souls-like FSM.
- InputController centralizes input polling — states never call
Input.Get*()directly. - All animation states wrapped in BlendTree+TimeScale for runtime speed control.
SlopArena/
├── project.godot / global.json
├── main.tscn
├── Scripts/
│ ├── Animation/ # Custom FSM (State.cs, StateMachine.cs, States/)
│ ├── Entities/ # PlayerController, AnimationController, DummyManager
│ ├── Combat/ # MovementComponent, CombatComponent, LocalSimulation
│ ├── InputController.cs # Centralized input (Jump, Dash)
│ ├── Camera/ # CameraMount (h/v SpringArm orbit)
│ ├── UI/ # ActionBarHUD, UnitFrames, Settings, EscapeMenu
│ └── World/ # Main.cs entry point, ArenaManager
├── Shared/ # Pure C# library (no Godot)
│ ├── CharacterDefinition # Stats, abilities, character registry
│ ├── Simulation.cs # SimulateTick() — movement + combat
│ ├── SpellResolver.cs # Hit detection math
│ └── CharacterState.cs # Per-tick entity state
├── Server/ # Headless server (WIP)
├── assets/ # 3D models, animations
└── docs/ # Design docs, research, conventions
| Character | Style | Abilities |
|---|---|---|
| Manki | Agile rushdown / mad bomber | 3-hit melee combo, aerosol flamethrower, round bomb, dynamite jump, dive bomb, big boom ult |
See docs/characters/manki.md for the full kit.
- Add
CharacterClassenum value inShared/CharacterDefinition.cs - Write a
BuildXxx()factory withMovementStats+ 8AbilityDataslots - Register it in
BuildRegistry() - If it needs special effects, add to
AbilityRegistry.cs
No changes to gameplay code needed — everything is data-driven.
Full guide: docs/adding-a-new-character.md
| Doc | What it covers |
|---|---|
docs/characters/manki.md |
Manki kit, concept, design notes |
docs/animation-system.md |
FSM lifecycle, AnimationTree structure |
docs/combat-systems.md |
Universal combat mechanics |
docs/character-kit-design-principles.md |
Design rules for abilities |
docs/conventions.md |
Art direction, animation naming, bone naming |
docs/adding-a-new-character.md |
Full pipeline guide |
docs/research/dko-mechanics.md |
DKO systems reference |
The name SlopArena is obviously ironic, but I don't intend for this to be a low quality project.
Code. I've been a software developer for years. I wrote code before AI assistants existed, and I still do. At work, ~90% of my output is agent-written, reviewed, and shipped, and it's quality code. I don't think I'm an exception — this is the state of the industry as of today. Agentic coding is a powerful tool, especially when you know what you're doing. SlopArena is built exactly the way I work: using agents to think, plan, document, and write code. That's how I've been able to build a scalable game architecture while actively learning game development at the same time.
Assets. I used a few platforms to generate art assets. I'm busy with code, I've never had any artistic talent, and although I've tried, it's really not my thing. I don't think AI-generated assets are better — they're often unoptimized, generic, and soulless. But they're a quick and cheap way to get something on screen, and I don't have a problem with that tradeoff.
SlopArena is a community-driven project — everyone is welcome!
- 🐛 Found a bug? Open an issue
- 💡 Have an idea? Submit a feature request
- 🛠️ Want to code? Check the docs above, then open a PR
- 🎨 Designer / artist / writer? Non-code contributions are just as valuable
We use Roslynator analyzers for C# linting — dotnet build will show warnings.
By participating, you agree to abide by the Code of Conduct.
MIT — see LICENSE.