Follow this video to learn how to use this template effectively: https://www.youtube.com/watch?v=ws7Lq8tRWlI&t
Makes your custom location spawn during world generation in Valheim.
Copy the asset bundle into your project and make sure to set it as an EmbeddedResource in the properties of the asset bundle.
Default path for the asset bundle is an assets
directory, but you can override this.
This way, you don't have to distribute your assets with your mod. They will be embedded into your mods DLL.
Add the following three lines to the bottom of the first PropertyGroup in your .csproj file, to enable C# V10.0 features and to allow the use of publicized DLLs.
<LangVersion>10</LangVersion>
<Nullable>enable</Nullable>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
Download the LocationManager.dll from the release section to the right. Including the dll is best done via ILRepack (https://github.com/ravibpatel/ILRepack.Lib.MSBuild.Task). You can load this package (ILRepack.Lib.MSBuild.Task) from NuGet.
If you have installed ILRepack via NuGet, simply create a file named ILRepack.targets
in your project and copy the following content into the file
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="ILRepacker" AfterTargets="Build">
<ItemGroup>
<InputAssemblies Include="$(TargetPath)" />
<InputAssemblies Include="$(OutputPath)\LocationManager.dll" />
</ItemGroup>
<ILRepack Parallel="true" DebugInfo="true" Internalize="true" InputAssemblies="@(InputAssemblies)" OutputFile="$(TargetPath)" TargetKind="SameAsPrimaryAssembly" LibraryPath="$(OutputPath)" />
</Target>
</Project>
Make sure to set the LocationManager.dll in your project to "Copy to output directory" in the properties of the DLL and to add a reference to it.
After that, simply add using LocationManager;
to your mod and use the Location
class, to add your locations.
using BepInEx;
using LocationManager;
namespace CustomLocation;
[BepInPlugin(ModGUID, ModName, ModVersion)]
public class CustomLocation : BaseUnityPlugin
{
private const string ModName = "CustomLocation";
private const string ModVersion = "1.0.0";
private const string ModGUID = "org.bepinex.plugins.customlocation";
public void Awake()
{
_ = new LocationManager.Location("guildfabs", "GuildAltarSceneFab")
{
MapIcon = "portalicon.png",
ShowMapIcon = ShowIcon.Explored,
Biome = Heightmap.Biome.Meadows,
SpawnDistance = new Range(500, 1500),
SpawnAltitude = new Range(10, 100),
MinimumDistanceFromGroup = 100,
Count = 15,
Unique = true
};
LocationManager.Location location = new("krumpaclocations", "WaterPit1")
{
MapIcon = "K_Church_Ruin01.png",
ShowMapIcon = ShowIcon.Always,
Biome = Heightmap.Biome.Meadows,
SpawnDistance = new Range(100, 1500),
SpawnAltitude = new Range(5, 150),
MinimumDistanceFromGroup = 100,
Count = 15
};
// If your location has creature spawners, you can configure the creature they spawn like this.
location.CreatureSpawner.Add("Spawner_1", "Neck");
location.CreatureSpawner.Add("Spawner_2", "Troll");
location.CreatureSpawner.Add("Spawner_3", "Greydwarf");
location.CreatureSpawner.Add("Spawner_4", "Neck");
location.CreatureSpawner.Add("Spawner_5", "Troll");
location.CreatureSpawner.Add("Spawner_6", "Greydwarf");
}
}
// Location Configurable Properties
// MapIcon Sets the map icon for the location.
// ShowMapIcon When to show the map icon of the location. Requires an icon to be set. Use "Never" to not show a map icon for the location. Use "Always" to always show a map icon for the location. Use "Explored" to start showing a map icon for the location as soon as a player has explored the area.
// MapIconSprite Sets the map icon for the location.
// CanSpawn Can the location spawn at all.
// SpawnArea If the location should spawn more towards the edge of the biome or towards the center. Use "Edge" to make it spawn towards the edge. Use "Median" to make it spawn towards the center. Use "Everything" if it doesn't matter.</para>
// Prioritize If set to true, this location will be prioritized over other locations, if they would spawn in the same area.
// PreferCenter If set to true, Valheim will try to spawn your location as close to the center of the map as possible.
// Rotation How to rotate the location. Use "Fixed" to use the rotation of the prefab. Use "Random" to randomize the rotation. Use "Slope" to rotate the location along a possible slope.
// HeightDelta The minimum and maximum height difference of the terrain below the location.
// SnapToWater If the location should spawn near water.
// ForestThreshold If the location should spawn in a forest. Everything above 1.15 is considered a forest by Valheim. 2.19 is considered a thick forest by Valheim.
// Biome
// SpawnDistance Minimum and maximum range from the center of the map for the location.
// SpawnAltitude Minimum and maximum altitude for the location.
// MinimumDistanceFromGroup Locations in the same group will keep at least this much distance between each other.
// GroupName The name of the group of the location, used by the minimum distance from group setting.
// Count Maximum number of locations to spawn in. Does not mean that this many locations will spawn. But Valheim will try its best to spawn this many, if there is space.
// Unique If set to true, all other locations will be deleted, once the first one has been discovered by a player.