FatedGates is a server-side V Rising mod for creating and managing custom waygates, public waygates, reveal zones, portals, and map icons.
This mod is an extended fork of KindredPortals. It includes the original functionality of KindredPortals, while adding public waygate support, persistent reveal zones, save-scoped configuration, and command shorthands for faster admin workflows.
Install FatedGates as a server-side BepInEx plugin.
- Install BepInEx for V Rising Dedicated Server.
- Place
FatedGates.dllinBepInEx/plugins/FatedGates/. - Restart the server.
- Check
BepInEx/LogOutput.logforFatedGates initialized.
FatedGates allows server admins to:
- Create custom discoverable waygates.
- Create public waygates that are automatically unlocked for all connected and future players.
- Persist public waygates across server restarts.
- Reveal areas of the map for all players.
- Persist reveal zones across server restarts.
- Scope public waygate and reveal-zone config by save name.
- Spawn and manage portals from the original KindredPortals functionality.
- Spawn and manage map icons from the original KindredPortals functionality.
- Use short command aliases for faster administration.
V Rising treats waypoint unlocking and map exploration as related but separate systems.
When a waygate is unlocked for a player, that waygate can become available on the respawn map. However, that does not necessarily make it visible or usable from the standard teleport map when interacting with another waygate.
For a waygate to appear on the normal teleport map, the area around that waygate must also be considered explored/revealed for that player.
That is why reveal-zone functionality was added: it allows public waygates to appear on the standard teleport map before players have naturally explored that area.
Note: reveal zones are applied immediately for future logins. Players who are already online may need to relog before newly revealed areas appear on their client.
.wg cp "Market"
.rv closest 2This creates a public waygate, then reveals a small area around the closest waygate so players can see and use it on the normal teleport map.
FatedGates reveals map areas by writing to V Rising's packed map reveal buffer. The reveal buffer uses bitmap-style coordinates, while player and waygate positions use world coordinates.
To make commands like .rv here and .rv closest work, world coordinates are converted into reveal bitmap coordinates using an approximate mapping equation.
This mapping is functional and has been tested across many locations, but it is not perfectly exact everywhere on the map. In practice, the accuracy of a reveal is good enough for a radius of 1 centered on a waygate to contain the waygate, revealing it to all users.
Expected accuracy:
- Radius
1: A very tight reveal. Small conversion errors may make it slightly off-center, but the target will still remain inside the revealed area. - Radius
3+: useful if you want a larger visible patch. - Radius
50-100: can reveal whole regions - Radius
200-400: large enough to reveal most of the entire map
The remaining inaccuracy appears to come from the map projection/reveal bitmap mapping rather than from player or waygate positioning. If someone finds a better conversion equation or a more direct way to translate world coordinates to reveal bitmap coordinates, pull requests are welcome.
You can also reach out to me on the V Rising Modding Community Discord.
FatedGates stores persistent public waygate and reveal-zone data in save-scoped config folders.
Example:
BepInEx/config/FatedGates/<SaveName>/PublicWaygates.json
BepInEx/config/FatedGates/<SaveName>/PublicRevealZones.jsonThis means multiple world saves can share the same server install without mixing public waygate or reveal-zone data.
For example:
BepInEx/config/FatedGates/world1/PublicWaygates.json
BepInEx/config/FatedGates/world2/PublicWaygates.jsonStand where you want the waygate and run:
.wg cp "Market"Then reveal the area around the closest waygate:
.rv closest 2Players should now be able to see and use the waygate from the normal teleport map once the reveal zone has been applied.
.wg cThis creates a custom waygate that behaves like a normal discoverable waygate.
.wg lp.wg d 1.wg dWhen used without an index, the destroy command targets the closest spawned waygate near the admin.
FatedGates uses command groups. Each command has a long form and, where useful, a shorthand.
Command group:
.waygateShorthand:
.wgThese commands manage spawned waygates and public waygates.
Shorthand:
.wg cUsage:
.waygate create [waygatePrefab]
.wg c [waygatePrefab]Creates a normal discoverable waygate at the admin's current location.
If no prefab is provided, the default waygate prefab is used.
Examples:
.wg cCreates a normal discoverable waygate.
Shorthand:
.wg cpUsage:
.waygate createpublic [name] [waygatePrefab]
.wg cp [name] [waygatePrefab]Creates a public waygate at the admin's current location.
Public waygates are:
- Saved to
PublicWaygates.json. - Automatically unlocked for connected players.
- Automatically unlocked for future players when they connect.
- Resolved again after server restart.
Defaults:
name = "Public Waygate"
waygatePrefab = default waygate prefabExamples:
.wg cp
.wg cp "Market"
.wg cp "Dungeon Entrance"Recommended follow-up:
.rv closest 2Public waygate unlock alone makes the waygate usable from the respawn map, but the surrounding map area must be revealed for it to reliably appear on the standard teleport map.
Shorthand:
.wg tcUsage:
.waygate teleportclosest
.wg tcTeleports the admin to the closest spawned waygate.
Example:
.wg tcShorthand:
.wg dUsage:
.waygate destroy [publicWaygateIndex]
.wg d [publicWaygateIndex]Destroys a spawned waygate.
If no index is provided, this destroys the closest spawned waygate near the admin.
If an index is provided, it destroys the saved public waygate with that index from .waygate listpublic.
Examples:
.wg dDestroys the closest spawned waygate.
.wg d 2Destroys public waygate #2 from the public waygate list.
If the destroyed waygate is a saved public waygate, it is also removed from PublicWaygates.json.
Shorthand:
.wg lpUsage:
.waygate listpublic
.wg lpLists saved public waygates.
Example output:
Saved public waygates (2):
1. Market at X=-1783.07, Y=0.00, Z=-1226.30
2. Arena at X=-1436.18, Y=5.00, Z=-708.79Use these indexes with:
.wg d <index>Command group:
.revealRecommended shorthand:
.rvReveal commands manage public reveal zones. These zones mark small areas of the map as explored for players.
Reveal zones are saved to:
BepInEx/config/FatedGates/<SaveName>/PublicRevealZones.jsonShorthand:
.rv zUsage:
.reveal zone <x> <y> [radius]
.rv z <x> <y> [radius]Adds a persistent public reveal zone by reveal bitmap coordinates.
Defaults:
radius = 1Examples:
.rv z 92 98
.rv z 92 98 2This command expects reveal bitmap coordinates, not world coordinates.
Shorthand:
.rv hUsage:
.reveal here [radius]
.rv h [radius]Adds a persistent public reveal zone centered on the admin's current world position.
FatedGates converts the admin's world position into reveal bitmap coordinates.
Defaults:
radius = 1Examples:
.rv h
.rv h 2Shorthand:
.rv cUsage:
.reveal closest [radius]
.rv c [radius]Adds a persistent public reveal zone centered on the closest spawned waygate.
This is the recommended reveal command to use after creating a public waygate.
Defaults:
radius = 1Examples:
.wg cp "Market"
.rv c 2If this command fails, check:
BepInEx/LogOutput.logShorthand:
.rv lUsage:
.reveal list
.rv lLists saved public reveal zones.
Example output:
Saved public reveal zones (2):
1. Reveal Zone 92,98 at bitmap (92, 98), radius 1
2. Reveal Zone 129,136 at bitmap (129, 136), radius 2Shorthand:
.rv rmUsage:
.reveal remove [index]
.rv rm [index]Removes a saved public reveal zone.
If an index is provided, removes that reveal zone from the list.
If no index is provided, removes the closest reveal zone to the admin's current position.
Examples:
.rv rm 1Removes reveal zone #1.
.rv rmRemoves the closest reveal zone, if one is close enough.
Removing a reveal zone does not hide the map again for players who already had the area revealed. FatedGates does not attempt to re-fog the map because it cannot safely distinguish areas revealed by this mod from areas a player explored normally.
Shorthand:
.rv aUsage:
.reveal apply
.rv aApplies all saved public reveal zones to currently connected users.
This is mainly useful after manually editing PublicRevealZones.json.
Shorthand:
.rv pUsage:
.reveal pos
.rv pShows the admin's current world position and reveal bitmap position.
Example:
World position: X=-1783.07, Y=0.00, Z=-1226.30
Reveal bitmap position: X=92, Y=98
Use: .rv zone 92 98 1World coordinates and reveal bitmap coordinates are not the same. Use .rv here or .rv closest for normal admin workflows.
Command group:
.portalShorthand:
.portPortal commands are inherited from the original KindredPortals functionality. They let admins create linked portal pairs, teleport to spawned portals, and destroy portal connections.
Shorthand:
.port sUsage:
.portal start [mapIcon]
.port s [mapIcon]Starts creating a portal connection at the admin's current location.
This creates the first end of a portal pair. After running this command, move to the location where the other end should be placed and run .portal end.
Defaults:
mapIcon = no map iconExamples:
.port s
.port s SomeMapIconNameShorthand:
.port eUsage:
.portal end [mapIcon]
.port e [mapIcon]Creates the second end of the portal connection and links it to the portal started with .portal start.
Defaults:
mapIcon = no map iconExamples:
.port s
# move to the destination
.port eWith map icons:
.port s SomeMapIconName
# move to the destination
.port e SomeMapIconNameShorthand:
.port tcUsage:
.portal teleportclosest
.port tcTeleports the admin to the closest spawned portal.
Example:
.port tcShorthand:
.port dUsage:
.portal destroy
.port dDestroys the spawned portal the admin is standing near, along with its linked connection.
After destroying a portal, reconnect to the server to no longer see it.
Example:
.port dCommand group:
.mapiconShorthand:
.miMap icon commands are inherited from the original KindredPortals functionality. They let admins create, destroy, and list available map icons.
Shorthand:
.mi cUsage:
.mapicon create <mapIcon>
.mi c <mapIcon>Creates a map icon at the admin's current location.
This command requires a map icon prefab name. Use .mapicon list / .mi l to see available map icons.
Examples:
.mi c Waypoint
.mi c CastleThe exact icon names depend on the available map icon prefabs listed by .mi l.
Shorthand:
.mi dUsage:
.mapicon destroy
.mi dDestroys the map icon the admin is standing on.
Example:
.mi dShorthand:
.mi lUsage:
.mapicon list
.mi lLists available map icon prefabs that can be used with .mapicon create.
The output includes the trimmed icon prefab name and, when available, its localized in-game label.
Example workflow:
.mi l
.mi c SomeIconNameNormal waygates must be discovered normally by players.
Public waygates are automatically unlocked for players, but map reveal still matters for the standard teleport map.
For public hubs, markets, dungeons, arenas, or event areas, use:
.wg cp "Name"
.rv c 2Use:
.rv c 1for a very tight reveal.
Use:
.rv c 2for a safer public-server reveal.
Use larger values only if you intentionally want a larger patch of the map revealed.
FatedGates writes logs to:
BepInEx/LogOutput.logCheck this file if a command says to check the log file.
FatedGates is an extended fork of KindredPortals.
Thanks to the original KindredPortals author, Odjit, for the base functionality this mod builds on, and to the V Rising Modding Community for documentation, examples, and tooling around V Rising server modding.
Pull requests are welcome.
I am especially interested in improvements to the world-coordinate-to-reveal-bitmap conversion. The current formula is accurate enough for normal use, even with reveal radius of 1, but it is not perfect everywhere on the map.
If you find a better equation, a direct mapping method, or a more reliable way to reveal the exact map area around a waygate, feel free to open a pull request or contact me through the V Rising Modding Community Discord.