Monster Generator for Video Games: Enemy Stat Blocks
Pick a habitat, a combat role and a threat level, add traits if you like, and get a video game monster card: a name, a description, HP, damage and speed, an attack pattern, behavior states for its AI (idle, patrol, chase, attack and one more), a weakness and drops. Reroll any part, copy it as text or download it as JSON, and optionally draw it with AI on your Ziva account.
How to use it
- Choose a habitat, such as Forest, Crypt and ruins or Sci-fi station, and press Next.
- Choose a role (Swarm, Tank, Ranged, Ambusher, Support or Boss) and a threat level, then press Next.
- Pick up to two traits, such as Venomous or Armored, or leave Surprise me on, and press Generate monster.
- Press the reroll button on any section to change just that part, then press Copy as text or Download JSON.
- Optionally, under Draw this monster with AI, sign in, pick Pixel art or Smooth and a size, and press Draw monster.
- Press Copy Ziva prompt to have Ziva build it as an enemy with its behavior states.
Design enemies by combat role
A monster's role decides how it changes a fight, and a mix of roles makes an encounter interesting. A swarm overwhelms with numbers, a tank blocks the path and soaks hits, a ranged enemy pushes the player to move, an ambusher punishes rushing ahead, and a support enemy makes every other monster stronger until the player deals with it first. A boss combines several of these in one fight with phases.
Every attack needs a tell: a wind-up animation, a flash or a sound just before it lands, so a player who pays attention can dodge. Each card includes one, such as a tank that scrapes the ground twice before it charges.
The stats are starting numbers to tune, not rules. Speed is given as a percentage of the player's speed so it works in any game, and ranges are in tiles. A simple check is hits to kill: if the player's sword deals 10 damage, a 60 HP enemy takes 6 hits.
Turn the behavior states into enemy AI in Godot
The behavior states map straight onto a state machine. In GDScript, declare an enum with IDLE, PATROL, CHASE and ATTACK plus the card's extra state, keep the current state in a variable, and use a match statement in _physics_process to run the code for that state.
An Area2D child with a circle shape the size of the detection range can switch the enemy from Idle or Patrol to Chase when its body_entered signal fires for the player, and back when body_exited fires. Once the level has navigation data, a NavigationAgent2D handles chasing around walls: set its target_position to the player and move toward get_next_path_position() each physics frame. A one-shot Timer whose wait_time is the attack cooldown keeps attacks spaced out; start it after each attack and only attack again when it times out.
Put the stats in data rather than in the script, for example a custom Resource with @export variables, so you can make an Elite version by changing numbers instead of code.
Weaknesses and drops
A weakness is a promise to the player: learn this and the fight gets easier. Show it in the world, such as an armored back that glints or a monster that steps out of the water to attack, so players can discover it without a menu.
Drops come with a suggested chance per kill. Common habitat materials drop often, trait materials less often, and the threat level's reward least often, while a boss drops everything. Use the loot table calculator to check how many kills a player needs before a rare drop shows up.
Frequently asked questions
Is this a D&D monster generator?
What are behavior states?
Is the monster generator free?
Can I use the JSON in my game?
How do I make a monster harder without changing its design?
More free game dev tools
- Boss Name Generator: Boss names with a title, an arena and a fight mechanic.
- Boss Fight Idea Generator: Phase-by-phase boss attacks with telegraphs, counterplay, a hazard and a weak point.
- Game Character Generator: AI character sprites in pixel art or smooth style, on a transparent background.