Description
Shards transforms your Hytale experience into an ever-changing network of instanced worlds connected by dynamic rift portals. Rifts and shard worlds continuously spawn, age, and collapse, keeping the network in a constant state of flux as you explore it.
Feedback would be greatly appreciated at the project thread in the Hytale Modding Discord
NOTE: Being in early development breaking changes should be expected
IMPORTANT: v0.4.0 contains breaking changes. Do not update to existing saves using older versions.
Out of the box
Install the plugin and start a new save. You'll spawn on a small island surrounded by void. The default world is intentionally minimal. It serves as your home base and hub for everything else. (in recent versions) shard worlds will be locked behind your memory level so head over to the forgotten temple and get that started.
Once you hit the first milestone of 10 memories, rift portals will soon begin appearing on the island. The will be indicated with yellow portal marker on the map. Head over to one and hold F on a rift block to travel through it into a shard world.
Shard worlds are Hytale's 4 default zones making 11 shard worlds in total (one for each sub zone). Each one is broken out into its own instanced world. The rifts connecting them are configured so that higher-tier zones require multiple jumps to reach, giving exploration a natural sense of progression.
If you are in a shard world when it collapses, the default world's death config behavior will be applied to you. This is what ever you set it to when creating a new save. Hytale's default is 50% of certain items lost and 10% durability loss.
The experience stays close to vanilla Hytale. The plugin is designed to be additive. Nothing you could do in vanilla is locked away.
Don't want the island default world?
If you would prefer to keep the default world as vanilla, it's possible to do so. Just make sure your default world's config.json explicitly sets the world generation to Hytale's default.
{
"WorldGen": {
"Type": "Hytale"
}
}
Configurability
The plugin is built around two configurable asset types, ShardType and RiftType. These are defined through the asset editor and control what worlds exist and how they connect.
ShardType
A ShardType defines a shard world. It points to any Hytale instance asset and controls how that world behaves. Its lifetime, how it's loaded, and what kinds of rifts it hosts can be configured. Any instance asset can be used, though not all instances are guaranteed to be compatible. One shard world instance exists per ShardType at any given time.
RiftType
A RiftType defines how a rift spawns and what it connects to. You can configure a RiftType as a static rift that always originates from a specific ShardType or the default world. This is what drives the network topology. By chaining RiftType configurations across your ShardType assets, you control how players navigate between worlds.
ShardPool
A ShardPool is a group of ShardType that the plugin will auto load if enabled. It contains various settings like a target amount to load up to and a memory level requirement. You can create custom ShardType with static rifts connecting to the default world or base shard worlds and insert them into a ShardPool. Your shard worlds will now be included into the network.
config.json
The config.json file lives in the mods/Codari_Shards folder. Currently it's the only way to hook up your custom assets into the plugin's runtime behavior. Here are the following options…
"DefaultWorldStaticRifts": An array of RiftType asset ids. These are rifts the plugin will spawn in the default world as static rifts. A rift when searching for a world can load a ShardType allowing you to add static rifts to custom shard worlds from your default world.
"ManagedShardGroups" (v0.3.1 and below): An array of objects that tell the plugin which shard worlds to actively keep loaded and how many at a time. The plugin will automatically load a ShardType from each group every 30 seconds up to a set limit. This feature is considered experimental, but is currently an option. Below is an example of how to use it.
"ManagedShardGroups": [
{
"ShardTypes": [ "My_Shard_Type_A", "My_Shard_Type_B", ... ],
"TargetCount": 2
}
]
"ShardPoolOverrides" (v0.4.0 and above): A document mapping of ShardPool asset id to override entries. Through this, server owners can make overriding decisions to how a ShardPool behaves. Below is an example of how to define it and what values it can have.
"ShardPoolOverrides": {
"MyShardPoolAsset": {
"Enabled": true,
"TargetCount": 2,
"Priority": -3,
"RequiredMemoryLevel": 3
}
}
Adding your own shard worlds
v0.3.1 and below
Although experimental, the "ManagedShardGroups" approach is the best way to insert a custom shard type into the out of the box network.
- Create a
ShardTypethat uses your desired instance. - Embed a static
RiftTypeinto yourShardTypeand configure it to connect to one of the shard types in the existing network. - Include your
ShardTypeas a managed shard so it is spawned.
This will result in your shard world being loaded and attempting to connect a rift to your target world once it gets loaded.
v0.4.0 and above
- Create a
ShardTypeand populate it with static rifts that will connect to the default world or the base shard worlds. - Create a
ShardPoolwith yourShardTypeand configure it how you'd like. Make sure "EnabledByDefault" is true.
That's it, your done. Your shard world will now be loaded and included in the network.
Commands (work in progress)
/shards list: List all loaded and loading shard worlds/shards load <shard_type>: Loads the given shard type into a world/shards unload <shard_type>: Unloads the given shard world if loaded/shards tp <shard_type>: Teleports you to the given shard world if loaded/shards lifetime get --type <shard_type>Gets the remaining lifetime of a the shard world your in or a target shard world. Displays to you a time and status./shards lifetime set --type <shard_type> --hours <integer> --minutes <integer> --seconds <integer>Sets the remaining lifetime of the shard world you are in or a target shard world./shards lifetime set <lifetime_status> --type <shard_type> --offset <number>Sets the lifetime status of the shard world you are in or a target shard world. Can offset time from the lifetime status set to./shards lifetime pause --type <shard_type>Toggles the paused state of the shard world you are in or a target shard world./rifts lifetime get --uuid <uuid> --block <x, y, z> --world <world_name>Gets the remaining lifetime of the target rift./rifts lifetime set --uuid <uuid> --block <x, y, z> --world <world_name> --hours <integer> --minutes <integer> --seconds <integer>Sets the remaining lifetime of the target rift./rifts lifetime set <lifetime_status> --uuid --block --world --offset <number>Sets the lifetime status of the target rift./rifts lifetime pause --uuid <uuid> --block <x, y, z> --world <world_name>Toggles the paused state of the target rift.
Future Plans
Near-term focus is to polish the out of the box experience. Longer term the goal is to make Shards a flexible tool for server owners to define and run their own custom shard world setups.
- Little to no lifetime feedback: There is currently no feedback for when a shard world is going to collapse. There is currently feedback for rifts, but only through their visuals.
- Commands: Commands are very much a work in progress and a low priority for me at the moment.
- Shard & Rift control: A more long term feature, the plan is to add the ability to control the lifetime of shard worlds and the rifts that connect them.
- Shard Anchor: A block that can be placed in a shard world to freeze it's lifetime. This can allow you to build a base in your favorite biome or allow players to form towns within the shard network. The built in feature for this will cost some sort of resource to maintain.
- Shard Breaker: The opposite of the shard anchor, a block that allows you to nuke a shard world and force it to collapse after a period of time and a resource cost.
- Rift equivalents to anchor and breaker: The same thing but for rifts.
- Rift Spawner: A block that can be configured to spawn a particular rift type. This can allow you to set up a fixed location static rift.
- Expanded Configurability: The long term goal is to make this plugin a general tool that allows server owners to customize their own shards experience or to use as a dependency for other plugins/mods.
- Open License: Another long term goal is to split the plugin into two. One will eventually be an open source tool
ShardsCorewhile the other will remainAARas my crafted experience using it.
