A hostile is an individual enemy unit that the player fights inside a dungeon room. Hostiles define combat stats and optional loot drops.
Files live in: <pack_root>/data/enemies/hostiles/<group_folder>/<enemy_name>.json
JSON Shape
{
"group": "pirate",
"displayName": "enemies.mypack.pirate.raider_frigate",
"stats": {
"health": 500,
"defense": 20,
"damage": 75,
"critical.chance": 0.05,
"attack.rate": 1.5
},
"loot": [
{
"id": "mypack:ore_iron",
"chance": 0.8,
"min": 1,
"max": 3
}
]
}
Field Reference
| Field | Type | Required | Description |
group | string | β
| Faction/group slug. Used for AI grouping and lore categorization (e.g. "pirate", "drone"). |
displayName | string (lang key) | β
| Registry key for the enemy display name. |
stats | object | β
| Combat statistics. See table below. |
loot | array | No | Items dropped when this enemy is defeated. |
meta | object | No | Arbitrary key-value pairs for engine extensions. |
Stats Fields
| Field | Type | Description |
health | integer | Total hit points. |
defense | integer | Flat damage reduction per hit. |
damage | integer | Base damage per attack. |
critical.chance | float (0β1) | Probability of a critical hit. 0.1 = 10%. |
attack.rate | float | Attacks per second. |
Loot Entry Fields
| Field | Type | Description |
id | string (registry key) | The item that drops. |
chance | float (0β1) | Drop probability. 1.0 = always, 0.0 = never. |
min | integer | Minimum quantity dropped. |
max | integer | Maximum quantity dropped. |
Stat Scaling Guide
| Stat | Weak (swarm) | Standard | Boss-tier |
| health | 10β50 | 100β500 | 500+ |
| defense | 0 | 1β10 | 15+ |
| damage | 1β5 | 5β25 | 30+ |
| critical.chance | 0.0 | 0.05β0.15 | 0.25β0.5 |
| attack.rate | 3.0β5.0 (fast swarm) | 1.0β1.5 | 0.4β0.8 (slow, heavy) |
Example β Standard Enemy with Loot
{
"group": "pirate",
"displayName": "enemies.mypack.pirate.raider_frigate",
"stats": {
"health": 500,
"defense": 20,
"damage": 75,
"critical.chance": 0.05,
"attack.rate": 1.5
},
"loot": [
{ "id": "mypack:ore_iron", "chance": 0.8, "min": 1, "max": 3 },
{ "id": "mypack:ore_coal", "chance": 0.5, "min": 2, "max": 5 }
]
}
Example β Boss
{
"group": "pirate",
"displayName": "enemies.mypack.pirate.warlord_dreadnought",
"stats": {
"health": 3000,
"defense": 50,
"damage": 150,
"critical.chance": 0.2,
"attack.rate": 0.5
},
"loot": [
{ "id": "mypack:ingot_titanium", "chance": 1.0, "min": 2, "max": 5 },
{ "id": "mypack:alloy_titanite", "chance": 0.3, "min": 1, "max": 1 }
]
}