Skip to content

Hall Configuration

Location: config/reverie/halls/{hall_id}/hall.conf

Each contest hall is a physical venue in your world where contests take place. Halls define everything about the contest location: stage layout, contestant positions, audience seating, camera angles, effects, and rules.

/hallbuilder create my_arena

This starts an interactive wizard. See Your First Contest.

Create config/reverie/halls/my_arena/hall.conf with the structure below, then run /hallbuilder reload.

id = "standard_hall"
display-name = "Standard Contest Hall"
description = "A basic contest hall suitable for all contest types"
is-public = true
allowed-categories = ["cool", "beauty", "cute", "clever", "tough"]
FieldTypeDescription
idStringUnique identifier — lowercase letters, numbers, underscores only
display-nameStringHuman-readable name shown in GUIs
descriptionStringDescription in the hall browser
is-publicBooleanWhether this hall appears in the public contest browser
allowed-categoriesListWhich contest categories can run here
world = "minecraft:overworld"
hall-origin { x = 0, y = 64, z = 0 }
stage-center-offset { x = 0, y = 0, z = 0 }
bounding-box {
min { x = -50, y = -10, z = -50 }
max { x = 50, y = 30, z = 50 }
}
FieldTypeDescription
worldStringDimension ID (e.g., minecraft:overworld)
hall-originBlockPosOrigin point of the hall in world coordinates
stage-center-offsetBlockPosOffset from origin to the stage center
bounding-boxMin/MaxHall volume (relative to origin). Minimum: 5x3x5 blocks
contestants {
min-contestants = 2
max-contestants = 4
allow-bots = true
autofill-with-bots = true
spawn-distance = 10.0
contestant-positions = [
{
number = 1
intro { x = 3, y = 0, z = 0 }
performance { x = -4, y = 0, z = 2 }
},
{
number = 2
intro { x = 0, y = 0, z = 3 }
performance { x = -4, y = 0, z = 0 }
}
]
pokemon-offset { x = 2, y = 0, z = 0 }
pokemon-facing-direction = "stage_center"
}
FieldTypeDefaultDescription
min-contestantsInt2Minimum players to start
max-contestantsInt4Maximum player slots
allow-botsBooleantrueAllow AI contestants
autofill-with-botsBooleantrueAuto-fill empty slots with bots
spawn-distanceDouble10.0Distance from stage for initial spawn
pokemon-offsetBlockPos{x=2, y=0, z=0}Offset from trainer to Pokemon
pokemon-facing-directionString"stage_center"Direction Pokemon faces: stage_center, trainer, audience

Contestant positions use coordinates relative to stage center.

audience {
npc-audience {
enabled = true
count = 20
min-count = 10
max-count = 50
entity-type = "cobblemon:npc"
skins = []
}
spectator-audience {
enabled = true
max-spectators = 20
allow-voting = true
allow-cheering = true
voting-affects-score = false
voting-weight = 0.1
}
seating-layout {
type = "semicircle"
radius = 10.0
arc = 180.0
rows = 3
seats-per-row = 10
}
}
TypeDescription
semicircleClassic arena layout with configurable radius, arc, and rows
tieredElevated rows with increasing height
tablesGrouped seating at tables
vipPremium seating section
mixed70% regular + VIP + tables
customExplicit position list
cameras {
enabled = true
default-mode = "cinematic"
transitions {
default-duration = 1000
default-easing = "ease_in_out"
smooth-rotation = true
enable-shake = true
shake-intensity = 0.1
}
paths {
intro-paths = []
performance-paths = []
judging-paths = []
presentation-paths = []
}
}

Camera positions can also be added in-game:

/hallbuilder camera my_arena add STAGE_OVERVIEW
/hallbuilder camera my_arena add CONTESTANT
/hallbuilder camera my_arena add AUDIENCE

See Camera System for all focus types and behavior.

phases {
intro { enabled = true, duration = 30000, skippable = false }
presentation { enabled = true, duration = 45000 }
performance { enabled = true, duration = 240000 }
judging { enabled = true, duration = 60000 }
}

Phase durations are in milliseconds.

minigames {
enabled = true
selection-mode = "category_based"
score-weight = 0.2
allow-skip = false
skip-penalty = 0.5
category-mapping {
cool = "rhythm"
beauty = "appeal_timing"
cute = "audience_wave"
clever = "sequence_building"
tough = "balance_precision"
}
}

See Minigames for per-minigame settings.

bots {
enabled = true
fill-empty-slots = true
difficulty = "medium"
bot-names = ["Coordinator Sarah", "Trainer Alex", "Expert Maya"]
}

See Bots for difficulty settings and Pokemon pools.

effects {
particles {
enabled = true
intensity = 1.0
category-themes {
cool = [{ type = "snowflake", density = 10 }]
beauty = [{ type = "rose", density = 15 }]
cute = [{ type = "heart", density = 20 }]
clever = [{ type = "note", density = 12 }]
tough = [{ type = "crit", density = 8 }]
}
}
lighting {
dynamic-lighting = true
spotlights = true
colored-lights = true
}
sounds {
enabled = true
volume = 1.0
}
}
rules {
level-range { min = 1, max = 100 }
species-clause = false
allow-legendaries = true
allow-mythicals = true
banned-species = []
banned-moves = []
entry-fee = 0
performance-rounds = 4
move-selection-time = 20000
allow-move-repeats = true
repeat-penalty = 0.5
}
FieldTypeDefaultDescription
level-rangeMin/Max1 / 100Allowed Pokemon level range
species-clauseBooleanfalsePrevent duplicate species
banned-speciesList[]Species IDs that are banned
banned-movesList[]Move IDs that are banned
entry-feeInt0Economy cost to enter (requires Impactor)
performance-roundsInt4Number of appeal rounds
move-selection-timeInt20000Move selection timeout (ms)
allow-move-repeatsBooleantrueWhether the same move can be used twice
repeat-penaltyDouble0.5Score multiplier for repeated moves
  1. Contest Types — Define custom scoring rules
  2. Contest Config — Global contest defaults
  3. Your First Contest — Use the Hall Builder wizard