Configuration
Both loaders use the same keys, with the same defaults and ranges. Only the file format and location differ.
| Loader | File | When changes apply |
|---|---|---|
| NeoForge | config/brecher_hyperspace_rifts/brecher_hyperspace_rifts-common.toml | At server start. Restart to apply edits. |
| Fabric | config/brecher_hyperspace_rifts.json | At server start (the file is read during launch, so edits apply on the next launch with no extra step). |
The file is created with all defaults the first time the mod starts.
NeoForge. The TOML file groups keys into the sections [features], [balance], [spawner],
[remnant] and [convergence], as in the tables below. A file left at the old location
config/brecher_hyperspace_rifts-common.toml is moved into the folder automatically on first launch
of 0.9.7 or newer. If both files exist, the one in the folder wins and the old one is left alone with
a warning. If the move fails, the server refuses to start rather than silently using defaults.
Fabric. The JSON file is flat: every key sits at the top level. Keys missing from the file are added with their defaults at startup, and unknown keys are ignored with a warning. A value of the wrong type (for example text where a number is expected) falls back to that key's default. If the file is not valid JSON, the server logs an error and runs with the built-in defaults for that launch. The broken file is left untouched so you can repair it. Out-of-range numbers are clamped into the allowed range.
Times in the tables are in game ticks (20 ticks = 1 second; 1,200 ticks = 1 minute; 72,000 ticks = 1 hour).
Note: Keys that appear in the file but are not listed on this page are internal. Leave them at their defaults.
Spawning ([spawner])
Ambient rifts appear in the overworld between a minimum and maximum distance from the world spawn. The spawner earns a budget of tokens over time and spends one per rift.
| Key | Default | Range | What it does |
|---|---|---|---|
rift_pool_size | 180 | 0 to 4096 | How many ambient rifts the spawner tries to keep alive. At the default spawn distances this is roughly one rift per 2,400 eligible chunks. |
spawn_exclusion_radius | 512 | 0 to 65536 | Rifts do not spawn within this many blocks of the world spawn. |
spawn_radius_max | 6000 | 1 to 1000000 | Rifts do not spawn farther than this many blocks from the world spawn. It is always raised to at least one block more than spawn_exclusion_radius, and it respects the world border. |
min_rift_separation | 128 | 0 to 8192 | Minimum distance in blocks between two live rifts. |
spawn_tick_interval | 1200 | 1 to 720000 | Ticks between spawner passes. |
tokens_per_period | 15.0 | 0.0 to 4096.0 | Spawn tokens earned per budget period. With the defaults, about 15 new rifts per hour. |
budget_period_ticks | 72000 | 1 to 1728000 | Length of one budget period. |
max_burst | 15.0 | 0.0 to 4096.0 | Most tokens that can be banked at once. This limits how many rifts can appear in a single catch-up pass. |
max_placement_attempts | 32 | 1 to 256 | How many candidate locations the spawner tries per planned rift. |
max_relocate_attempts | 8 | 1 to 64 | How many other spots in the same chunk it tries when a planned rift's position turns out to be unusable once the chunk loads. Planned rifts in unloaded chunks simply wait. |
materialize_scan_interval | 20 | 1 to 1200 | Ticks between checks that turn planned rifts into physical rifts once their chunks are loaded. |
max_resonator_range | 0 | 0 to 1000000 | Maximum range in blocks at which a Resonator tracks rifts. 0 means unlimited. |
onboard_notify_radius | 48 | 1 to 512 | A player who comes within this many blocks of a rift for the first time gets a short notification. |
Set rift_auto_spawner (below) to false to stop ambient spawning entirely. Rifts placed with
/brecherhyperspacerifts rift spawn ignore the budget and do not need the spawner enabled.
Feature toggles ([features])
| Key | Default | What it does |
|---|---|---|
rift_auto_spawner | true | Turns the ambient rift spawner on or off. |
multi_stage_enabled | true | When false, Unstable, Volatile and Chaotic rifts (more than one stage) cannot be joined. |
anomaly_system | true | Master switch for anomalies, the random modifiers that change how a fight plays. When false, none apply. |
facet_system | true | Master switch for Facet effects. When false, Facets are still drafted and recorded but have no effect. |
facet_player_boosts | true | Switch for the player-side battle effects of Facets (stat changes, damage, critical hits, status protection). Healing, planning and reward Facets keep working. Needs facet_system. |
between_stage_timeout_advances | true | When the between-stage vote timer runs out before the vote is decided, the party continues to the next stage. When false, the party retreats instead and keeps its earned rewards. An explicit Retreat vote ends the run under either setting. |
boss_ambient_motion | true | The boss figure turns to face participants and shifts slightly. When false it stays still. |
custom_arenas | true | Uses arena layouts supplied by datapacks. When false, only the built-in platform is used. |
segmented_shields | true | Bosses have shield segments over the shared HP pool; each broken segment boosts one boss stat by one stage. false restores plain HP. |
showdown_origination | true | Allows boss effects (such as several anomalies) to be applied in every party member's battle. If false, anomalies that depend on this are removed from the roll pool instead of being announced without effect. Shield-break boosts are not affected. |
battle_status_sync | true | Copies boss status conditions between the party's parallel battles. |
battle_win_propagation | true | Ends the other parallel battles as soon as the boss is defeated in one of them. |
battle_turn_drift_log | true | Logs a note when the parallel battles drift apart in turn count. Logging only; does not affect play. |
encounter_telemetry | true | Writes local balance statistics (per-stage and whole-run results) to <world>/brecher_hyperspace_rifts/. The data is privacy-safe and never leaves the server. Set false to opt out. |
remnant_attune_per_player | false | Chooses how remnant_attune_uses is counted: false for one shared budget per Remnant, true for a separate budget per player. |
Remnants ([remnant])
| Key | Default | Range | What it does |
|---|---|---|---|
remnant_attune_uses | 1 | 1 to 4096 | How many Crystals one Legendary Remnant can attune. With remnant_attune_per_player set to false this is the total for the whole raid (the default of 1 means one attuned Crystal per raid). With true it is per player (2 lets every raider attune twice). |
Convergence and Seal ([convergence])
| Key | Default | Range | What it does |
|---|---|---|---|
convergence_max_participants | 6 | 0 to 64 | Total number of different players admitted to a Convergence over its lifetime, including the host. 0 means unlimited. Players who were admitted can reconnect even when the Convergence is full, but new players cannot take their place. |
convergence_max_catches | 0 | 0 to 4096 | Total number of Seal attempts allowed against the Weakened Legendary. 0 means no shared cap: each admitted player can still make one Seal attempt of their own. |
convergence_max_cheers | 3 | 0 to 4096 | Cheers each participant can use during a Convergence raid. |
convergence_cooldown_ticks | 0 | 0 to 1728000 | Cooldown on an Altar after a successful summon. 0 means none. |
convergence_weakened_window_ticks | 6000 (5 minutes) | 0 to 1728000 | How long after the victory the Weakened Legendary can be sealed. 0 disables the Seal window and ends the Convergence area right away. |
convergence_seal_grace_ticks | 18000 (15 minutes) | 0 to 1728000 | Extra time the area stays open for a Seal battle that is still running when the window closes. 0 gives no extension. |
Balance profile ([balance])
| Key | Default | What it does |
|---|---|---|
active_balance_profile | brecher_hyperspace_rifts:release_v1_legacy_loadouts | ID of the balance profile used for new incursions. The shipped profile is the recommended setting. |
Change the value and restart to select another profile. Running incursions keep the profile and content they started with; only incursions created afterwards use the new one.
Values that are not configurable
Some gameplay values are fixed in the mod and have no configuration key:
| Value | Built-in setting |
|---|---|
| Party size per tier (Fading, Stable, Unstable, Volatile, Chaotic) | 1, 2, 2, 4, 4 players |
| Stages per tier | 1, 1, 2, 3, 5 |
| Lobby countdown before a fight starts | 30 seconds |
| Between-stage vote window | about 60 seconds, after a short pause |
| "Rift closing" period after the last stage | 5 minutes |
| Boss HP scaling with party size | solo HP multiplied by 1 + 0.85 per additional player |
| Convergence boss HP scaling | same formula as rifts |
Datapack content
Operators can customize some content with ordinary datapacks. After changing a datapack, run
/reload; incursions that are already running keep the content they started with.
-
Bonus loot. Bonus items from rifts use standard loot tables in the
brecher_hyperspace_riftsnamespace. Replace the shipped table at the same path to change them:incursion/stage/<tier>is rolled after every cleared stage.incursion/completion/<tier>is rolled when the whole incursion succeeds.incursion/boss/<namespace>/<species>adds items for the final boss of a specific species. Bosses without their own table useincursion/boss/capstone_fallback.
<tier>isfading,stable,unstable,volatileorchaotic. The guaranteed Rift Dust and Apex Token amounts are not read from these tables, and the Rift Trophy chance cannot be changed with loot tables. -
Arenas. Datapacks can supply arena layouts. The
/brecherhyperspacerifts arenascommands list, validate and preview them; see Commands. Setcustom_arenastofalseto fall back to the built-in platform. -
Balance profiles. A datapack can add profiles for
active_balance_profileto select.
See also Installation for requirements and upgrade notes.