Igao-BossGate icon

BossGate

Control your server's boss progression: unlock bosses by game day, force the boss order, let ores and metals through portals after their boss dies. World or per-player progress. Server-synced, live-editable, 15 languages.

Last updated a day ago
Total downloads 45
Total rating 1 
Categories Mods Tweaks Misc Tools Server-side Client-side Utility Deep North Update
Dependency string Igao-BossGate-1.1.1
Dependants 0 other packages depend on this package

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2351 icon
denikson-BepInExPack_Valheim

BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.

Preferred version: 5.4.2351
Igao-Ultimate_Server_Configuration_Manager-1.0.0 icon
Igao-Ultimate_Server_Configuration_Manager

⚡ The LAST config mod you'll ever need. Edit ANY mod in-game with F1 — changes hit every player instantly. Admin-only controls, auto-translated descriptions, 15 languages, one-click undo. No more .cfg hell.

Preferred version: 1.0.0

README

BossGate

Control the pace of your Valheim server. Decide when each boss can be summoned, force the boss order, and let ores and metals through portals only after the right boss is dead. All set by the server, changed live in-game.

  • 📅 Unlock bosses by game day: "Bonemass from day 20". One setting per boss, from Eikthyr to Kall Fimbulbringer.
  • 🏆 Mandatory boss order: The Elder only after Eikthyr, Bonemass only after The Elder... no skipping ahead.
  • 🌀 Ores through portals after the boss: kill Bonemass and iron can travel by portal at once. Copper, tin, iron, silver, black metal, flametal, dragon eggs and even Hildir's chests, each released by its own boss.
  • 👤 World or personal progress: a kill counts for the whole server, or only for the players who took part in it, in this world.
  • 🔒 Master lock: close every boss altar with one switch.
  • ⚡ Live and server-controlled: the server's settings apply to every player, and changes in the F1 panel reach everyone instantly. No restart, no relog.
  • 🌍 15 languages, clear on-screen messages, and the offering is never consumed when a summon is blocked.

Every rule is off by default: install it and turn on only what you want.

💬 Join the Discord

💡 Suggestions, bugs and questions: https://discord.gg/aMkN89Cuas — when reporting a bug, attach your BepInEx LogOutput.log and say what you expected to happen.

⭐ The settings panel is already included. When you download BossGate with a mod manager (Thunderstore / r2modman), Ultimate Server Configuration Manager is installed together with it. Press F1 in the game to open it. Every change is synchronized to the whole server instantly. 👉 Open it on Thunderstore

Features

Per-boss unlock day One setting per boss. 0 = disabled (default), up to 9999. The boss can be summoned from that day onwards.
Master lock LockAllBosses (default false). When true, no boss can be summoned, on any day.
Boss progression RequirePreviousBossDefeated (default false). When true, a boss can only be summoned if all the bosses before it in the progression order are already dead. See Boss progression.
Portal items PortalItemsRequireBossKill (default false). When true, the items the game blocks from portals (ores, metals, dragon eggs, Hildir's chests) can go through a portal once the boss of their biome has been defeated. The inventory hides the "cannot teleport" mark on released items. See Portal items.
Personal progress PerPlayerProgress (default false). When true, the two rules above only count the bosses each player took part in killing, in this world. See Personal progress.
On-screen message A short message in the middle of the player's screen: "Boss unlocks on day X / Current day: Y", "Defeat the previous bosses first." or "Boss summoning is not possible right now." Nothing is written to the text chat.
15 languages The message follows each player's own game language.
Server-controlled The server's config is the only one that counts.
Live changes Open the included panel with F1, change a setting, and every connected player gets it instantly while the server keeps running.

Bosses: Eikthyr, The Elder, Bonemass, Moder, Yagluth, The Queen, Fader and Kall Fimbulbringer (Deep North, Valheim 1.0).

⭐ Change it in-game: the panel is included

BossGate comes with Ultimate Server Configuration Manager (Ultimate SCM), a panel that shows the settings of all your BepInEx mods in one place. It is a dependency of BossGate, so a mod manager (Thunderstore / r2modman) downloads and installs it for you, there is nothing extra to set up.

Everything is synchronized in real time, inside the game. When the admin applies a change in the panel, the server updates BossGate right away and BossGate sends the new rule to every connected player. The next offering placed on any altar already uses the new rule. Nobody has to relog, and the server does not restart.

How to use it:

  1. Press F1 to open the panel (or ESC → Mod Settings). As an admin, type devcommands in the console (F5) first. If F1 is already used by ConfigurationManager, change the key of one of the two.
  2. Pick BossGate in the mod list.
  3. Set 1 - Eikthyr, 2 - The Elder... 8 - Kall Fimbulbringer, or turn LockAllBosses on.
  4. Apply. Every connected player gets the new rule instantly.

Why it fits well:

  • Every BossGate setting is tagged scm:live, so the panel shows the LIVE badge: the change really takes effect immediately.
  • Undo (Ctrl+Z), draft mode (change several bosses, apply them all at once), admin notes and a "who changed what, and when" history come with the panel.
  • You choose what players see: Hidden (default), View only (they can see the unlock days, but not change them) or Can edit. For BossGate the server's value is enforced for everyone in all three cases; Can edit does not let a player change their own rule.
  • With a mod manager it is installed automatically, on the server and on every client. If you install mods by hand, copy Ultimate SCM to both as well.

If you install BossGate by hand and leave the panel out, BossGate still works: the server uses its BepInEx/config/Igao.BossGate.cfg and sends the values to every player when they join. See Known limitations about editing that file by hand.

Configuration

File: BepInEx/config/Igao.BossGate.cfg — edit it on the server. The values on a player's own .cfg are ignored (and never overwritten) when the player is connected to a server running BossGate.

[1 - General]

Setting Default Values What it does
LockAllBosses false true / false Blocks every boss on every day, ignoring the unlock days below. Players see "Boss summoning is not possible right now."
KickClientsWithoutMod false true / false Disconnects players who join without BossGate (or with an incompatible BossGate version) about 20 seconds after joining. Without it, a client that does not have the mod can still summon bosses.

[2 - Boss Unlock Day]

All eight settings work the same way: default 0, range 0–9999. 0 means no restriction. Any other value means the boss can be summoned only when the current game day (the day number shown by the game) is equal to or greater than the value. Example: 3 - Bonemass = 20 blocks Bonemass until the game shows day 20.

Setting Boss
1 - Eikthyr Eikthyr
2 - The Elder The Elder
3 - Bonemass Bonemass
4 - Moder Moder
5 - Yagluth Yagluth
6 - The Queen The Queen
7 - Fader Fader
8 - Kall Fimbulbringer Kall Fimbulbringer

[3 - Progression]

Setting Default Values What it does
RequirePreviousBossDefeated false true / false A boss can be summoned only after all the bosses before it (Eikthyr, The Elder, Bonemass, Moder, Yagluth, The Queen, Fader, Kall Fimbulbringer, in this order) have been defeated in the world. Players see "Defeat the previous bosses first.". Eikthyr is never affected.
PerPlayerProgress false true / false Whose kills count for RequirePreviousBossDefeated and PortalItemsRequireBossKill. false = world progress: a boss killed by anyone counts for everybody. true = personal progress: each player only counts the bosses (and Hildir minibosses) they took part in killing in this world. See Personal progress.

[4 - Portals]

Setting Default Values What it does
PortalItemsRequireBossKill false true / false Portal rule (see Portal items). false = vanilla: ores and metals can never go through portals. true = the blocked items of a biome can go through portals once the boss of that biome has been defeated in the world (Hildir's chests: once the miniboss that guards the chest and the boss of its biome are defeated).

Boss progression

Off by default. When RequirePreviousBossDefeated is true, the game's progression order is mandatory: a boss can be summoned only if every boss before it is dead in the world (the world's own boss-kill record, which the game already shares with every player).

Boss Must already be dead
Eikthyr nothing (never affected)
The Elder Eikthyr
Bonemass Eikthyr, The Elder
Moder Eikthyr, The Elder, Bonemass
Yagluth Eikthyr, The Elder, Bonemass, Moder
The Queen Eikthyr, The Elder, Bonemass, Moder, Yagluth
Fader Eikthyr, The Elder, Bonemass, Moder, Yagluth, The Queen
Kall Fimbulbringer all the other seven
  • It works together with the unlock days: the boss must be unlocked by the day and the previous bosses must be dead. If both conditions fail, the unlock-day message is shown first. It also applies to bosses whose unlock day is 0.
  • LockAllBosses still wins over everything.
  • The Queen's Sealbreaker door and the hive seat follow the rule too.
  • The offering is not consumed when the summoning is blocked.
  • Server-controlled like everything else, and live-editable in Ultimate SCM.

Portal items

Off by default (vanilla behaviour). When PortalItemsRequireBossKill is true, a player can step into a portal carrying items the game normally blocks, as long as every blocked item they carry has been released. An item is released when the boss of its biome is dead (the world's own boss-kill record, which the game already shares with every player):

Boss defeated Items released
The Elder copper, tin, bronze (ore, scrap and bars)
Bonemass iron (ore, scrap, bars, ironpit)
Moder silver (ore and bars), dragon eggs
Yagluth black metal (scrap and bars)
The Queen mechanical spring, Dvergr extractor
Fader flametal (ore and bars), charred cogwheel
Kall Fimbulbringer (whole fight, last phase) gold (ore and bars)
Brenna (Smouldering Tomb) and The Elder Hildir's Brass Chest
Geirrhafa (Howling Cavern) and Moder Hildir's Silver Chest
Zil & Thungr (Sealed Tower) and Yagluth Hildir's Bronze Chest
  • It only ever releases items the game already blocks and that are on the list above. Anything else the game blocks keeps being blocked, and the rule never blocks anything the game allows.
  • Items of a biome whose boss is still alive stay blocked. One blocked item is enough to stop the whole trip.
  • Items the game never lets through any portal (not even with the world setting that allows every item) stay blocked.
  • The inventory follows the rule: the "cannot teleport" mark disappears from items the player can already take through a portal.
  • Released at once: the check runs every time a player steps into a portal, so items are released the moment the boss dies.
  • Server-controlled like everything else: the server's value is sent to every player and applies to everyone. It can be changed live in Ultimate SCM.
  • It does not depend on the boss unlock days: the question is whether the boss is dead in the world, not which day it is.

Personal progress

Off by default. PerPlayerProgress decides whose kills count for RequirePreviousBossDefeated and PortalItemsRequireBossKill:

PerPlayerProgress A boss counts as defeated for a player when...
false (default) anyone has killed it in the world (the world's own boss-kill record).
true that player took part in killing it in this world.
  • Who takes part: every player who hit the boss (the game's own attacker record) and every player within 40 m of it when it died. Healers and tanks in the fight are counted too.
  • Per world: the record is stored on the character but tied to this world. A boss killed in singleplayer or on another server does not count here.
  • Recorded all the time: kills are recorded even while the setting is off, so it can be turned on later without punishing players who already fought (as long as they ran BossGate 1.1.1 or newer at the time).
  • Applies to the boss progression rule, to the portal items and to Hildir's chests (the miniboss and the biome boss must both be personal kills).
  • A player who joins later or missed a fight has to take part in killing that boss to progress.

Multiplayer

  • Install the mod on the server and on every client.
  • When a player joins, the server sends its config; the player's own .cfg is ignored.
  • If the server does not run BossGate, the client does nothing.
  • Versions 1.1.x and 1.0.0 can be mixed: a 1.0.0 client simply ignores the new rules (progression, portal items, personal progress), and a 1.1.x client on a 1.0.0 server treats them as off.
  • Singleplayer and the host of a listen server use their own .cfg.

Known limitations

  • The rule is checked on the player's own game, not by the server. A client without BossGate can still summon bosses unless KickClientsWithoutMod is on, and a player running a modified client can get around any client-side check. KickClientsWithoutMod cannot stop modified clients.
  • BossGate does not watch its .cfg file. If you edit Igao.BossGate.cfg by hand while the server is running, restart the server for the change to apply, or make the change in Ultimate SCM instead. (Ultimate SCM can also reload edited .cfg files on its own: it checks every 60 seconds.)
  • A player removed by KickClientsWithoutMod gets a plain disconnect; no explanation is sent.
  • The rule applies to every player, admins included. Bosses spawned with console commands are not affected, and bosses that are already alive are not touched: only placing the offering is blocked.
  • The Queen has no offering on her first fight, so BossGate gates the Sealbreaker instead: while The Queen is locked (6 - The Queen day, or LockAllBosses), the Infested Citadel door cannot be opened with the Sealbreaker and the player gets the on-screen message. Summoning her again with Seeker soldier trophies on the hive seat is gated by the same setting. The Sealbreaker is detected by the key item of the door (item id DvergrKey), so any door that uses that key follows The Queen's setting. Each door used is written once to LogOutput.log (Door used). The door is also blocked from being closed again while the lock is active.
  • Fader is summoned with 3 Bells on the coliseum's item stands: placing the bells is allowed, activating the altar is what gets blocked.
  • Personal progress is recorded by the game of the player who controls the boss when it dies (usually one of the players in the fight). That player must run BossGate 1.1.1 or newer; use KickClientsWithoutMod to make sure everyone does. Kills made before BossGate 1.1.1 was installed are not recorded.
  • The portal rule is also checked on the player's own game, like the summoning rule: a client without BossGate (or a 1.0.0 client) keeps vanilla portals, and a modified client can get around it. KickClientsWithoutMod does not change that.
  • The portal rule only knows the items listed in Portal items. If a game update adds new blocked items, they stay blocked until BossGate is updated.
  • The progression rule only counts kills the world has recorded. Bosses killed before the rule was turned on are counted (the record is already in the world). In a world where an earlier boss was never defeated, that boss must be killed before the next ones can be summoned.
  • Bosses are recognized by the names of the altar's boss and offering item. If a game update renames them, that boss stops being gated until BossGate is updated.

Languages

English, Portuguese (Brazil), Portuguese (Portugal), Spanish, French, German, Italian, Dutch, Polish, Swedish, Turkish, Russian, Japanese, Korean, Chinese. The files are in plugins/Translations/ and can be edited; keys are msg_locked_day ({boss}, {day}, {current}), msg_locked and msg_previous_boss.

Installation

Install with a mod manager (Thunderstore / r2modman): BossGate and the F1 settings panel are installed together. For a manual install, copy BossGate.dll and the Translations folder to BepInEx/plugins/, and also install Ultimate SCM if you want the panel.

AI tools were used to help review the code and hunt down bugs. All features were designed by the author.


Found a bug? Got an idea for BossGate?
💬 https://discord.gg/aMkN89Cuas