PEAK
Install with App

Details

Latest version
3.1.0
Last Updated
First Uploaded
Downloads
1.3K
Likes
4
Size
893KB
Dependants
Use DirectX 11  

WAVE_top

PLL Library -> PEAK Thunderstore VersionThunderstore VersionThunderstore Version

logo

Discord

 

PLL Library is a PEAK map layout mod and automatic custom biome library. It selects, reorders, repeats, and regenerates PEAK's live WilIsland segments. PLL also discovers custom content built with PLL Creator.

Update  •  Features  •  Install  •  Configuration  •  Layouts  •  Custom Biomes  •  Creator  •  Build  •  Support

 


Update

Current package information.

Version 3.1.0 → click to collapse

 

  • No Sky Props is enabled by default for newly generated configuration files. Existing configuration files retain their stored value.

 


Features

Runtime behavior.

Feature list → click to expand

 

  • I will write this later... I guess Layout Order and Custom Biomes.

 



 


Install

Mod manager and manual installation.

Install instructions → click to expand

 

Mod manager recommended

Mod manager

  1. Install PLL_Library through a PEAK and Thunderstore compatible mod manager.
  2. Ensure BepInEx-BepInExPack_PEAK-5.4.75301 is installed.
  3. Start PEAK once to generate the configuration file.

Manual

  1. Install BepInExPack PEAK.
  2. Place PLL_Library.dll directly in PEAK/BepInEx/plugins/.
  3. Start PEAK once to generate the configuration file.

Custom content

Place custom .pll files built with PLL Creator directly in:

PEAK/BepInEx/plugins/PLL_Biomes/

Only files with the exact lowercase .pll extension are discovered.

 


Configuration

Generated BepInEx configuration.

Configuration reference → click to expand

 

Configuration file:

BepInEx/config/AF/PLL_Library/config.cfg

Client configuration files may differ. The host's resolved gameplay values are the flight authority. PLL / Advertise Layout remains each client's local display preference. An empty Map / Seed creates a fresh random seed on world entry. Any nonempty text produces the same deterministic numeric seed.

Section / key Default Meaning
Version / SchemaRevision 21 Current configuration schema marker. Exact predecessors 17 and 20 migrate forward.
PLL / Advertise Layout false When enabled, shows at most one resolved mode label beneath PEAK's ascent name. Mode resolution prioritizes Modified, then Generative, then Infinite. Base mode with Replace Generated is Randomized. false leaves PEAK's ascent text untouched.
Map / Seed empty Random when empty. Any nonempty text produces a deterministic seed.
Map / Replace Generated true Rebuilds already generated native props with the selected seed. false reuses eligible unique authored native output. Repeated or forced clones still generate their own output.
Map / LayoutOrder Beach > Tropics > Roots > Alpine > Mesa > Volcano > Citadel > Nadir Defines an ordered list of public native or custom ordinary layout segments. Volcano and Citadel each include their native lower half. The visible Swamp is internal Gloom, not a separate root. Caldera, Gloom, Peak, and their structural aliases are invalid tokens. Nadir is movable and repeatable.
Map / DoOrder true Initial state of the boarding pass Layout Order toggle.
Map / Generative Map false Builds one seeded layout from registered public native choices and eligible custom biomes when Layout Order is off.
Map / InfiniteMap false Builds a deterministic weighted expansion.
Fields / InfiniteMap: Repeatable empty Accepts up to 255 public segment names separated by >. Nadir is eligible.
Fields / InfiniteMap: Chances empty Accepts position matched nonnegative weights. Invalid lists use equal weights.
Fields / InfiniteMap: Scale 8 Requested total public segment count. Configuration accepts 1 through 255. Current PEAK navigation resolves at most 254 ordinary internal slots, and native composites consume two. Online shared room ViewID capacity is separate and depends on content.
Fields / InfiniteMap: Begin Index -1 -1 inserts at the final eligible public boundary before a terminal Nadir. Other values are clamped zero-based public insertion boundaries.
Fields / InfiniteMap: Remove Old false Replaces the base layout with repeatable choices.
Behaviors / Winnable true Enables final zone win behavior.
Behaviors / Peak at end false Attaches full Peak at the final layout boundary. It appears immediately before terminal Nadir or after another final ordinary segment. Terminal Volcano and Citadel retain contextual Peak.
Behaviors / Gemless Nadir false Allows every Nadir occurrence to load without Scout's Honor.
Behaviors / Water follows Beach true Activates the shared water floor when Beach is reached.
Behaviors / Void Water follows Nadir true Activates each local Void Water surface and WaterZone only while its Nadir occurrence is current. false enables it from run start. Beach water is independent.
Prerequisites / Relocate Plane true Moves PEAK's plane to the first segment start.
Prerequisites / Relocate Start true Moves the active four player spawn formation to the first segment start.
Prerequisites / Valid Nadir true Allows Nadir to require Scout's Honor only after Shore, Tropics or Roots, Alpine or Mesa, and Volcano or Citadel have appeared. Otherwise Nadir is gemless.
Optimizations / No Rising Ghosts false Disables Nadir's rising lost soul fog and Citadel's rising Gloom.
Optimizations / No Sleep Fog false Disables Gloom's stationary sleep fog field.
Optimizations / Lazy Generation true Defers procedural generation until its prerequisite zone is reached. Future cloned feature roots remain inactive until their occurrence activates. Every clone remains inactive until its exact synchronized batch roots are reserved even when eager generation is selected.
Optimizations / Fogless false Disables fog sphere behavior.
Optimizations / No Water false Disables Beach water and relocation.
Optimizations / No Void Water false Disables every local Nadir Void Water surface and WaterZone.
Optimizations / No Plane false Removes the crashed plane and affiliates except spawn points.
Optimizations / No Sky Props true Restricts raycast prop generation to static Terrain/Map support in the active occurrence plus exact registered external biome support. This retains prop generation on Citadel's Temple_Model and TheKiln's VolcanoModel walls. Moving bodies, generated output, luggage, Scout Statues, amulet statue spawners, and unregistered proxy mirrors remain excluded. Existing configuration files retain their stored value.
Optimizations / Remove Old true Destroys zones older than the immediately previous zone.

Each registered custom biome receives a separate file beneath:

BepInEx/config/AF/PLL_Library/Custom Segments/

Its Favorites, Overwrites, Before, After, and Spawn Chance values begin with the bundle defaults and remain editable by the user. Spawn Chance is an inclusive 0 through 100 percentage used by Generative Map. The host resolves these values for the flight.

 



 


Layouts

Deterministic layout selection and resolution.

Layout behavior → click to expand

 

  • Default uses the configured Map / LayoutOrder and Map / DoOrder values. With ordering off and neither Generative Map nor InfiniteMap active, PLL keeps PEAK's current authored base layout and active variant choices. Registered modifications targeting LayoutId.Default apply to this selection.
  • Library Base appears whenever the effective Default selection differs from PLL's compiled LayoutOrder default. This includes a disabled DoOrder value or a registered modification targeting Default. Library Base is not a named layout and does not rewrite configuration. It selects the compiled default order, enables ordering for the selected flight, and ignores modifications targeting Default. The terminal override clears after the flight configuration is captured.
  • Named layouts supply their own ordered tokens and always enable ordering for the selected flight.

Each layout sequence contains public ordinary choices only. Exact public native names and exact custom segment IDs select a source. Qualified biome tokens such as peak/beach select from registered owners and declared overwriters. Caldera, Gloom, and Peak are internal structure (for the time being). Those names and their structural aliases are rejected as layout tokens. The solver maximizes valid overwrite substitutions, then Before and After, then Favorites, and finally ordinal stable ID order. Metadata never inserts a biome by itself.

 


Peer plugin layout API → click to expand

 

PLLLibrary exposes two startup registration methods. It does not expose raw registry mutation or active flight mutation.

API Contract
PLLLibrary.DeployLayout(LayoutDefinition) Registers one named boarding pass layout. Registration does not select it or rewrite configuration.
PLLLibrary.ModifyLayout(LayoutModification) Registers one deterministic modification for Default or one named layout. Every registered modification for the selected target applies automatically.
Input Contract
LayoutDefinition Requires a valid nondefault LayoutId, a trimmed unique display name, a content revision, and at least one public segment token.
LayoutModification Requires a canonical lowercase qualified ID, a content revision, a valid target LayoutId, and at least one nonnull edit. The target may be LayoutId.Default or a registered named layout.
LayoutEdit Uses InsertBefore, InsertAfter, or Remove. Occurrence is counted from zero among matching ordinary occurrences in the original target sequence. Insert operations require at least one segment token.
using BepInEx;
using PLL.Library;

namespace Example.PLL;

[BepInPlugin("example.pll.layout", "Example PLL Layout", "1.0.0")]
[BepInDependency(PLLLibrary.PluginGuid, BepInDependency.DependencyFlags.HardDependency)]
public sealed class ExampleLayoutPlugin : BaseUnityPlugin
{
    void Awake()
    {
        var Layout = new LayoutDefinition(
            new LayoutId("example/extended-ascent"),
            "Extended Ascent",
            "1",
            new[]
            {
                "Beach", "Tropics", "Roots", "Alpine",
                "Mesa", "Volcano", "Citadel", "Nadir"
            });
        PLLLibrary.DeployLayout(Layout);
    }
}

 


ModifyLayout example → click to expand

 

This example targets the named Extended Ascent layout registered above.

using BepInEx;
using PLL.Library;

namespace Example.PLL;

[BepInPlugin("example.pll.modification", "Example PLL Modification", "1.0.0")]
[BepInDependency(PLLLibrary.PluginGuid, BepInDependency.DependencyFlags.HardDependency)]
public sealed class ExampleLayoutModificationPlugin : BaseUnityPlugin
{
    void Awake()
    {
        var Modification = new LayoutModification(
            "example/move-mesa",
            "1",
            new LayoutId("example/extended-ascent"),
            new[]
            {
                LayoutEdit.InsertAfter("Roots", 0, new[] { "Mesa" }),
                LayoutEdit.Remove("Mesa", 0)
            });
        PLLLibrary.ModifyLayout(Modification);
    }
}

Both edits resolve against the original Extended Ascent sequence. Remove("Mesa", 0) removes the original Mesa, not the inserted Mesa. The result is Beach > Tropics > Roots > Mesa > Alpine > Volcano > Citadel > Nadir.

 


Custom Biomes

Runtime bundle, authoring, and generation contract.

Authoring reference → click to expand

 

A .pll is a Windows AssetBundle built by PLL Creator. It contains validated data and Unity assets, not executable plugin code. Runtime discovery loads the bundle, validates its registered definitions and reachable prefab graph, registers all accepted content in one transaction, and keeps a successful bundle loaded for the process lifetime.

Every custom biome requires:

  • one canonical lowercase qualified biome ID and one content revision
  • one inactive segment prefab with CustomSegmentRuntime and PllBiomePrefabAnchors on its root
  • zero or one direct PllBiomeRoot link to the owning definition
  • valid Entry, Exit, and Start ports with compatible connector tokens
  • one DayNightProfile owned by the project
  • one PllFogAuthoring owner on the exact runtime fog origin
  • complete fixture, item, generation, visual, sound, and native resolver ownership for every authored capability

The Creator package contains the complete component tables, enum values, ownership rules, native resolver shapes, validation steps, and .pll build workflow. A separately installed peer plugin is required for executable layout registration, runtime hook handling, or other code.

 


Creator

Unity authoring and .pll packaging.

Creator package → click to expand

 

Install com.aeralis.pll.creator-3.1.0.tgz through Unity Package Manager with Add package from tarball. Use a Unity project with Standalone Windows 64 support installed.

  1. Wait for Unity to import and compile the package.
  2. Run PLL > Configure and select the PEAK installation root.
  3. Run PLL > Create Biome to create an inactive source prefab, definition, ports, anchors, fog and progress owners, and the required DayNightProfile owned by the project.
  4. Use the focused PLL > helpers for supported authoring components.
  5. Select one or more PllBiomeDefinition or PllBiomeRegistry assets.
  6. Run PLL > Validate Selected Biome.
  7. Run PLL > Build .pll and choose a destination outside the Unity project.

PLL > Create Biome creates this top-level source topology:

<BiomeName> [CustomSegmentRuntime, PllBiomePrefabAnchors, PllBiomeRoot]
|- FloorRoot
|- CampfireRoot
|- RuntimeMarkers
`- Presentation

 



 


Build from source

Conventional Release artifacts.

Building → click to expand

 

Copy Config.Build.user.props.template to Config.Build.user.props. Set PEAKManagedDir in the copied file to the installed PEAK_Data\Managed directory, then run:

dotnet build .\PLL_Library.slnx -c Release
Output Conventional path
Runtime DLL artifacts/bin/PLL_Library/release/PLL_Library.dll
NuGet package artifacts/nuget/PLL_Library.3.1.0.nupkg
Thunderstore package artifacts/thunderstore/release/PLL_Library-3.1.0.zip
Creator package artifacts/Editor/com.aeralis.pll.creator-3.1.0.tgz

Release solution builds compile and package all four outputs. Debug and design time builds compile without packaging.

 


Support

Diagnostics and validation boundaries.

Support and troubleshooting → click to expand

 

Include the following with a report:

  • PLL Library, PEAK, and BepInExPack versions
  • complete mod list
  • BepInEx/LogOutput.log, and PEAK Player.log
  • BepInEx/config/AF/PLL_Library/config.cfg
  • selected terminal layout and text seed
  • custom bundle filename, stable IDs, and revisions when custom content is involved
  • whether the failure occurs offline, as host, as client, during late join, or during quicksave continuation
Symptom Check
I am too lazy You need to get less lazy... In all seriousness I have no idea why I still include this, if there will be an in-game wiki soon.

 



WAVE_bottom

Thunderstore development is made possible with ads. Please consider making an exception to your adblock.