A dungeon is a structured series of rooms that a player enters and progresses through in order. Dungeons reference rooms by ID — they do not define enemies or loot directly.

Files live in: <your_pack_id>/data/dungeons/<group_folder>/<dungeon_name>.json

File Structure

{
  "dungeon": {
    "id": "...",
    "displayName": "...",
    "description": "...",
    "energyCost": 0,
    "repeatable": true,
    "rooms": [
      { "id": "..." },
      { "id": "..." }
    ]
  }
}

Field Reference

FieldTypeRequiredDescription
idstringNamespaced ID. Format: pack_id:group/dungeon_name
displayNamestringTranslation key for the dungeon display name
descriptionstringTranslation key for the dungeon description
energyCostnumberEnergy the player spends to enter. Use 0 for free entry.
repeatablebooleantrue = farmable. false = one-time only (e.g. tutorial).
roomsarrayOrdered list of room IDs. Each entry: { "id": "namespaced_room_id" }

Content Reference Chain

dungeon.json  →  lists room IDs
room.json     →  lists hostile IDs + rewards
hostile.json  →  defines enemy stats

Example — One-Time Tutorial Dungeon

{
  "dungeon": {
    "id": "stellar_forge:training/boot_camp",
    "displayName": "dungeons.stellar_forge.training.boot_camp",
    "description": "dungeons.stellar_forge.training.boot_camp.desc",
    "energyCost": 0,
    "repeatable": false,
    "rooms": [
      { "id": "stellar_forge:training/basic_combat_room" },
      { "id": "stellar_forge:training/loot_intro_room" },
      { "id": "stellar_forge:training/commander_fight" }
    ]
  }
}

Free to enter, plays through three rooms in order, cannot be repeated. Good for introductory content.

Example — Repeatable Farming Dungeon

{
  "dungeon": {
    "id": "stellar_forge:asteroids/mining_belt_raid",
    "displayName": "dungeons.stellar_forge.asteroids.mining_belt_raid",
    "description": "dungeons.stellar_forge.asteroids.mining_belt_raid.desc",
    "energyCost": 15,
    "repeatable": true,
    "rooms": [
      { "id": "stellar_forge:asteroids/patrol_drones_room" },
      { "id": "stellar_forge:asteroids/cargo_bay_room" },
      { "id": "stellar_forge:asteroids/ambush_room" },
      { "id": "stellar_forge:asteroids/excavator_boss_room" }
    ]
  }
}

Example — High-Cost Elite Dungeon (Repeated Room)

{
  "dungeon": {
    "id": "stellar_forge:void/collapsed_star",
    "displayName": "dungeons.stellar_forge.void.collapsed_star",
    "description": "dungeons.stellar_forge.void.collapsed_star.desc",
    "energyCost": 50,
    "repeatable": true,
    "rooms": [
      { "id": "stellar_forge:void/void_sentinels_room" },
      { "id": "stellar_forge:void/void_sentinels_room" },
      { "id": "stellar_forge:void/void_overlord_room" }
    ]
  }
}

The same room ID appears twice — this is valid. Players fight that room twice in sequence before the boss.

Language Keys

"dungeons.stellar_forge.asteroids.mining_belt_raid":      "Mining Belt Raid",
"dungeons.stellar_forge.asteroids.mining_belt_raid.desc": "Bandits have seized a civilian mining operation. Drive them out.",
"dungeons.stellar_forge.void.collapsed_star":      "The Collapsed Star",
"dungeons.stellar_forge.void.collapsed_star.desc": "At the edge of known space, something ancient stirs."