Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
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.
| Date uploaded | 2 weeks ago |
| Version | 1.1.2 |
| Download link | Igao-BossGate-1.1.2.zip |
| Downloads | 101 |
| Dependency string | Igao-BossGate-1.1.2 |
This mod requires the following mods to function
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.2351Igao-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 problems.
Preferred version: 1.0.4README
BossGate
Control the pace of your Valheim server.
Unlock bosses by game day, force the boss order and let ores through portals only after the right boss is dead.
All set by the server, changed live in-game.
๐ฌ Discord ยท โ๏ธ Ultimate SCM
โจ Features
- ๐ 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.
- ๐ ๏ธ Its own in-game panel (
bossgate_config): every setting explained, live examples and tables for admins; the bosses' status and the portal items for every player. - โก Live and server-controlled: the server's settings apply to every player and changes 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.
๐ก Suggestions, bugs and questions: https://discord.gg/aMkN89Cuas โ when reporting a bug, attach your BepInEx
LogOutput.logand say what you expected to happen.
๐ ๏ธ The in-game panel: bossgate_config
Open the console (F5) and type bossgate_config (or open it from Ultimate SCM).
| Who | What they see |
|---|---|
๐ Admin with devcommands on |
Every page and every setting. In single player / on a hosted game: the host. On a dedicated server: a player in the server's admin list, checked again by the server on every request. |
| ๐ง Every other player | Overview and Portal items, read only: the bosses' status today and which items can travel through portals. No settings, no save buttons. |
Click an image to see it full size.
โ๏ธ Ultimate SCM is included
BossGate comes with Ultimate Server Configuration Manager (Ultimate SCM), a panel for the settings of all your BepInEx mods. It is a dependency, so a mod manager (Thunderstore / r2modman) installs it for you.
- BossGate's own panel is listed there, for players (Overview and Portal items) and admins.
- Its generic panel (F1, or ESC โ Mod Settings) also shows every BossGate setting with the LIVE badge (
scm:live): as an admin withdevcommandson, pick BossGate, change a value and apply. Every connected player gets the new rule instantly. - Undo (Ctrl+Z), draft mode, admin notes and a "who changed what, and when" history come with it. If F1 is already used by ConfigurationManager, change the key of one of the two.
- You choose what players see there: Hidden (default), View only or Can edit. For BossGate the server's value is enforced for everyone in all three cases.
Without Ultimate SCM BossGate still works, and bossgate_config too: the server uses its BepInEx/config/Igao.BossGate.cfg and sends the values to every player when they join.
๐ 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 |
true |
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. LockAllBossesstill 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
bossgate_configor 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
bossgate_configor 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
.cfgis 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. - The settings pages of
bossgate_configneed BossGate 1.1.2 or newer on the server; on an older server, players and admins still get the read-only Overview and Portal items.
โ ๏ธ 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
KickClientsWithoutModis on, and a player running a modified client can get around any client-side check.KickClientsWithoutModcannot stop modified clients. - BossGate does not watch its
.cfgfile. If you editIgao.BossGate.cfgby hand while the server is running, restart the server for the change to apply, press Reload .cfg in thebossgate_configpanel, or make the change in Ultimate SCM instead. (Ultimate SCM can also reload edited.cfgfiles on its own: it checks every 60 seconds.) - A player removed by
KickClientsWithoutModgets 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 Queenday, orLockAllBosses), 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 idDvergrKey), so any door that uses that key follows The Queen's setting. Each door used is written once toLogOutput.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
KickClientsWithoutModto 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.
KickClientsWithoutModdoes 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; the other keys are the texts of the bossgate_config panel.
๐ฆ Installation
Install with a mod manager (Thunderstore / r2modman): BossGate and Ultimate SCM are installed together. For a manual install, copy BossGate.dll and the Translations folder to BepInEx/plugins/ on the server and every client, and also install Ultimate SCM if you want its F1 panel (bossgate_config works without it).
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
CHANGELOG
Changelog
1.1.2 โ In-game settings panel and safer default
- New in-game panel, opened with the console command
bossgate_config. Everybody can open it and see the Overview: how every boss stands today (unlock day, defeated or not, can be summoned or not). The settings are shown only to an admin withdevcommandson: in single player and on a hosted game, the host; on a dedicated server, a player in the server's admin list (checked again by the server on every request). Players also see the Portal items table, counted with the server's progress mode (world, or their own kills with personal progress). Players see no settings and no save buttons. - Same look as the OdinBet panel: pages on the left (Overview, Unlock days, Progression, Portal items, Server), one card per setting with its explanation, default and range, an ON/OFF button or a slider + number field, and "In practice" lines that say what the value does in the game today (e.g. "Today is day 12: Bonemass unlocks in 8 day(s). Until then players see: ...").
- Smart checks: grey "no effect now" notes, orange warnings (e.g. a boss that unlocks before an earlier one while the order is not forced, the master lock being on, kicking off) and red errors that block saving.
- Overview table: every boss with its trophy icon, unlock day, whether it is defeated (world, and you with personal progress on) and whether it can be summoned today. Portal items table: each group of items with its icon, the bosses that release it and whether it is released today. Both follow the values being edited, before saving.
- Quick plan on the Unlock days page: fills the days every 5 / 10 / 20 / 30 days (Eikthyr on day 0) or sets them all back to 0, as a draft.
- Changes are a draft until Save and apply, which shows a summary first. Then they take effect at once for every player (no restart): the server writes its
.cfgand sends the new values to everyone. Also: Undo / Default per setting, Page defaults, Discard changes and Reload.cfg. Every change is written to the server's log with the admin's name. - Boss trophies and item icons come from the game itself; names follow the player's language. A boss or item without an icon in the game shows a "?" (the trophies found in the game are written once to the log, to find the missing one).
- Ultimate SCM integration: the panel is registered in Ultimate Server Configuration Manager for players and admins (
SCMPanel.Register("bossgate_config", false)): players get the Overview and Portal items, admins with devcommands every setting. Without Ultimate SCM the command works on its own. - Every text of the panel is translated in the 15 languages (
plugins/Translations/<Language>.json, newUi_,Page_,S_,D_,Ex_,W_,Tb_,St_andE_keys). - The server's config message now ends with the panel protocol number (appended last, same protocol): older clients and servers keep working together; a client on an older server is told to update the server to use the panel.
KickClientsWithoutModis nowtrueby default (it wasfalse). Servers that already have aBossGateconfig file keep the value saved in it.
1.1.1 โ Boss progression, portal items and personal progress
- New optional setting
RequirePreviousBossDefeated(section3 - Progression, defaultfalse): a boss can only be summoned after all the bosses before it in the progression order (Eikthyr, The Elder, Bonemass, Moder, Yagluth, The Queen, Fader, Kall Fimbulbringer) have been defeated in the world. Example: Kall cannot be summoned while any of the other seven is alive; The Queen cannot be summoned while Eikthyr, The Elder, Bonemass, Moder or Yagluth is alive. Eikthyr is never affected. - It works together with the unlock days: the boss must be unlocked by the day and the previous bosses must be dead (also when the boss has no unlock day). The Queen's Sealbreaker door and hive seat follow the rule too.
LockAllBossesstill wins over everything. - Uses the same boss-kill records as the portal rule (world global keys, already synced by the game to every client).
- New on-screen message "Defeat the previous bosses first." (center of the screen); the offering is not consumed. New translation key
msg_previous_bossin the 15 languages. - New optional setting
PortalItemsRequireBossKill(section4 - Portals, defaultfalse): ores, metals and other items the game blocks from portals can go through once the boss of their biome has been defeated in the world (The Elder: copper/tin/bronze, Bonemass: iron, Moder: silver and dragon eggs, Yagluth: black metal, The Queen: mechanical spring and Dvergr extractor, Fader: flametal and charred cogwheel, Kall Fimbulbringer: gold). Hildir's quest chests are released once the miniboss that guards the chest and the boss of its biome have been defeated (Brass: Brenna + The Elder, Silver: Geirrhafa + Moder, Bronze: Zil & Thungr + Yagluth). The full table is in the README. - With the setting off nothing changes: portals behave exactly like vanilla.
- The rule only releases items the game already blocks and that are on the list; every other item keeps the vanilla behaviour, and one still-blocked item keeps the whole inventory from teleporting.
- Items the game never lets through any portal (not even with the world setting that allows every item) stay blocked: the rule never overrides that.
- The inventory follows the rule: the "cannot teleport" mark is hidden on items the player can already take through a portal.
- New optional setting
PerPlayerProgress(section3 - Progression, defaultfalse): personal progress. Whentrue, a boss only counts for the players who took part in killing it in this world (hit it, or were within 40 m when it died); kills in other worlds never count. Applies to the progression rule, the portal items and Hildir's chests. Kills are recorded even while the setting is off. New Harmony patches onCharacter.OnDeath,Game.StartandInventoryGrid.UpdateGui, each applied on its own. - Kall Fimbulbringer counts as defeated only when the whole fight is won (
defeated_frozenking_p3). - Server-controlled and synced like the other settings (tagged
scm:live, so it can be changed in-game with Ultimate Server Configuration Manager). The new values (portal rule, progression rule, personal progress) are appended to the existing sync message with the same protocol number, so 1.0.0 and 1.1.x clients and servers keep working together (an older side treats the new rules as off). - New Harmony patch on
Inventory.IsTeleportable, applied on its own like the others: if it fails, only a warning is logged and the rest of the mod keeps working. Errors in the rule keep the vanilla portal behaviour. - Settings saved by earlier 1.1 test builds under another section are moved to their new section automatically (the value is kept).
- The config is grouped by topic:
1 - Generaland2 - Boss Unlock Dayare unchanged from 1.0.0 (existing values are kept), the new settings are in3 - Progressionand4 - Portals. - README: new Boss progression, Portal items and Personal progress sections, new settings in the tables and new known limitations.
- Small optimizations: boss/item name hints are prepared once at startup instead of on every check, the Sealbreaker check no longer searches the boss list on every door, and the dungeon-entrance diagnostic log (and its Harmony patch on
Teleport) was removed.
1.0.0 โ First release
- Per-boss unlock day (
0= disabled, up to9999), entries numbered in progression order (1 - Eikthyr...8 - Kall Fimbulbringer), for Eikthyr, The Elder, Bonemass, Moder, Yagluth, The Queen, Fader and Kall Fimbulbringer (Deep North final boss). - Master lock
LockAllBosses(defaultfalse) that blocks every boss on every day. - Translated on-screen message (center of the screen, not the text chat) when an offering is blocked, in 15 languages. The master-lock message is generic ("Boss summoning is not possible right now."). The offering is not consumed.
- Config defined by the server: clients ignore their own
.cfgand use the server's values. The server sends them when a player joins and again whenever a setting changes while the server is running. - Optional
KickClientsWithoutMod(off by default). - Settings are tagged
scm:live, so Ultimate Server Configuration Manager shows them as LIVE: an admin can change them in-game and every connected player gets the new rule instantly, without relogging or restarting the server. - Known limitations are listed in the README (client-side check,
.cfgedited by hand is not watched, recognition by altar names). - No external dependencies.
- The Queen: the Infested Citadel's Sealbreaker door and the hive seat offering (3 Seeker soldier trophies) follow her unlock day. Fader: bells can be placed, activating the altar is blocked.
- Each Harmony patch is applied on its own; a failing patch only logs a warning.




