Populate a world from templates, and let NPCs play the game themselves.

NPC Generator & Adventurers

Hand-placing every villager doesn't scale. The NPC Generator (Database → NPCs → Generator) turns a handful of archetypes into a populated world, and Adventurer NPCs turn a subset of them into agents that actually play your game.

Templates

A template is an archetype, not a character:

FieldWhat it does
Appearance sourceCharacter-creator parts, or a fixed sprite
Stat rangesRolled per spawn, so no two NPCs are identical
Weighted loadoutsEquipment pools with weights — a guard's gear is drawn, not fixed
Role & factionVendor, banker, trainer, guard, enchanter, adventurer, and who they side with
Dialogue modeAuthored lines, persona-driven barks, or AI chat where enabled
Daily scheduleWhere they should be, and when
LevelingOptional: earn XP from their own activity, up to a cap you set

Name pools and persona pools give each spawn an identity (one click seeds sensible defaults). Press Roll a sample to preview the exact NPC the server would spawn — the roll is deterministic, so what you see is what appears.

Spawn Rules & Movement Regions

Per-zone spawn rules pick weighted templates and control how many NPCs live where. Movement regions are painted straight onto the map as keep-in or keep-out areas, filtered by entity kind and faction — so town guards stay in town, wildlife stays out of it, and nobody wanders into the ocean.

All of it hot-reloads: saving in the editor syncs to the running game server.

Adventurer NPCs

Switch a template (or a single NPC) to Adventurer — plays the game and it starts running a utility goal loop on top of the normal NPC stack:

  • Hunt mobs in a level band for XP and loot, leveling up as they go
  • Pick up drops, including silver coin piles — their own kills reserve loot to them, exactly like a player's kills reserve loot to the player, so passers-by can't snipe it inside the reservation window
  • Equip upgrades — per-slot stat comparison, with live visual and stat resync
  • Harvest resource nodes
  • Sell junk to shop NPCs and buy affordable gear upgrades — with real browsing time at the counter, not a blink-and-leave
  • Bank surplus gold with a banker (banked gold survives death; a player who kills them loots a cut of what they carried)
  • List surplus loot on the real player market
  • Rest at low HP, and bark persona lines in local chat
Kill rewards follow damage contribution, not the killing blow — for players and adventurers alike. Whoever did the most damage owns the drops; XP splits proportionally among everyone who fought. Stealing a kill someone else did the work for no longer pays.

Goal choice runs on desire scoring (the approach Dota 2's bots use): every activity continuously bids for the adventurer's attention, the strongest bid wins, and the current activity gets a commitment bonus so NPCs don't dither between near-equal options. A wounded adventurer's urge to retreat scales with how dangerous its surroundings actually are — hurt in a quiet meadow it keeps working; the same wounds beside three mobs send it to the safest nearby spot before it sits down to rest. With the Tactical Combat AI flag on, ranged fighters (mobs and NPCs alike) also kite: when something closes inside their preferred range, they fall back to a scored position that restores their spacing instead of standing still.

Schedules still win at sleep blocks, and movement regions confine adventurers like any other NPC. Everything is opt-in at three levels — a global feature flag, a per-NPC toggle with per-goal checkboxes, and a behavior mode on generator templates — all defaulting to ordinary NPC behavior.

Situational barks

Adventurers pick chatter to match what they are doing, not at random. A persona idle line may target a situation with a [tag] prefix — untagged lines stay general-purpose:

TagSpoken when
[combat]Engaging a hunt target
[kill]It earned credit for a kill
[lowhp]Resting or retreating at low health
[levelup]It gains a level (supports {level})
[loot]Picking up or equipping a drop (supports {item})
[gather]Harvesting a node (supports {item})
[trade]Selling, buying, banking or listing on the market
[greet]A player walks up while it's off duty
[idle]Wandering downtime

Example line: [combat] The {target} picked the wrong day. — placeholders {name}, {level}, {target} and {item} fill in live values. A line tagged for the current situation always beats an untagged one; an adventurer with no authored lines at all falls back to a small set of neutral built-ins, and no line ever repeats twice in a row.

Presence & Presentation

  • NPCs move with the same continuous motion players do — no waypoint teleporting
  • Armed NPCs swing their equipped weapon, and equipment overlays follow the body's real animation
  • Any NPC with an authored greeting occasionally speaks it as an overhead speech bubble when a player is nearby; empty zones stay quiet
  • NPCs in combat refuse dialogue with their authored "busy" line
  • Generated NPCs show their level on the nameplate and persist it across restarts
> Practice bots in arena matches are these same player-like NPCs, carrying a per-team allegiance — they wear real gear, score on the board, and count toward win conditions.