PLL Library
[DirectX 11] Map layout mod and custom segment library.
PLL Library -> PEAK 


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 Propsis 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
- Install
PLL_Librarythrough a PEAK and Thunderstore compatible mod manager. - Ensure
BepInEx-BepInExPack_PEAK-5.4.75301is installed. - Start PEAK once to generate the configuration file.
Manual
- Install BepInExPack PEAK.
- Place
PLL_Library.dlldirectly inPEAK/BepInEx/plugins/. - 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 / LayoutOrderandMap / DoOrdervalues. With ordering off and neither Generative Map nor InfiniteMap active, PLL keeps PEAK's current authored base layout and active variant choices. Registered modifications targetingLayoutId.Defaultapply to this selection. - Library Base appears whenever the effective Default selection differs from PLL's compiled
LayoutOrderdefault. This includes a disabledDoOrdervalue 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
CustomSegmentRuntimeandPllBiomePrefabAnchorson its root - zero or one direct
PllBiomeRootlink to the owning definition - valid Entry, Exit, and Start ports with compatible connector tokens
- one
DayNightProfileowned by the project - one
PllFogAuthoringowner 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.
- Wait for Unity to import and compile the package.
- Run PLL > Configure and select the PEAK installation root.
- Run PLL > Create Biome to create an inactive source prefab, definition, ports, anchors, fog and progress owners, and the required
DayNightProfileowned by the project. - Use the focused PLL > helpers for supported authoring components.
- Select one or more
PllBiomeDefinitionorPllBiomeRegistryassets. - Run PLL > Validate Selected Biome.
- 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 PEAKPlayer.logBepInEx/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. |


