PEAK
You are viewing a potentially older version of this package. View Latest Version
Install with App

Details

Date Uploaded
2 months ago
Downloads
1.4K
Size
391KB

WAVE_top

PLL Library -> PEAK Thunderstore Version

Discord GitHub

 

PLL Library is a PEAK map layout mod and custom content library. It can reorder, repeat, regenerate, and lazily load PEAK's native WilIsland segments, while exposing deterministic layout and inert content preparation APIs to other mods.

Update  •  Features  •  Install  •  Configuration  •  Layouts  •  Content API  •  Custom Biomes  •  Creator  •  Support

 


Update

Current package information.

Version 1.6.0 → click to collapse

 

  • Replaced the generated creator project with an installable, codeless Unity Package Manager package.
  • Automatically discovers PEAK and installs its local editor only reference closure under Packages, never Assets.
  • Added strict final phase PLLFinalGeneration and exact name native prop PLLForceSpawner authoring.
  • Grounds PEAK's complete four player start formation on authored structural segment meshes rather than generated props.
  • Prevents stale fog origins from being applied while a new flight is still preparing.
  • Refined the native boarding pass dropdown, scrollbar, padding, and Order toggle layout.

 


Features

Runtime behavior.

Feature list → click to expand

 

  • ...

 



 


Install

Mod manager and manual installation.

Install instructions → click to expand

 

Mod manager recommended

Mod manager

  1. Install PLL_Library through a Thunderstore and PEAK compatible mod manager.
  2. Ensure BepInEx-BepInExPack_PEAK-5.4.75301 is installed.

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 .pll bundles directly in:

PEAK/BepInEx/plugins/PLL_Biomes/

The loader also accepts the legacy .pllbundle suffix. Discovery is top level only and processes canonical paths in ordinal order. Successful bundles remain loaded for the process lifetime, while a rejected file is unloaded before discovery continues.

 


Configuration

Generated BepInEx configuration.

Configuration reference → click to expand

 

Configuration file:

BepInEx/config/AF/PLL_Library/config.cfg

Online rooms use the host's resolved values. 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 7 Configuration-schema marker.
Map / Seed empty Random when empty deterministic text seed otherwise.
Map / Replace Generated true Rebuilds already-generated native props with the selected seed.
Map / LayoutOrder Beach > Tropics > Roots > Alpine > Mesa > Caldera > Volcano > Peak Default ordered segment-token sequence.
Map / DoOrder true Initial state of the boarding pass Layout Order toggle.
Map / Generative Map false Builds one seeded layout from registered native biomes and eligible custom biomes when Layout Order is off.
Map / InfiniteMap false Enables deterministic weighted layout expansion.
Fields / InfiniteMap: Repeatable empty Eligible ordinary segment tokens separated by >.
Fields / InfiniteMap: Chances empty Position matched non-negative weights. Invalid lists use equal weights.
Fields / InfiniteMap: Scale 8 Requested ordinary segment count from 1 through 255.
Fields / InfiniteMap: Begin Index -1 -1 inserts before the terminal group; otherwise a clamped zero based boundary.
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 Normalizes the end to one native Volcano > Peak group.
Behaviors / Water follows Beach true Activates the shared water floor when Beach is reached.
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 / Guarantee Campfire Loot true Regenerates incomplete required campfire roots and requires PEAK's player scaled Campfire food output.
Patches / Patch bridges true Restores non-damaging native collision callbacks on regenerated Beach bridges.
Optimizations / Lazy Generation true Defers procedural generation until its prerequisite zone is reached.
Optimizations / Lazy Features false Also keeps future cloned feature roots inactive until load.
Optimizations / Fogless false Disables fog sphere behavior.
Optimizations / No Water false Disables Beach water and relocation.
Optimizations / No Plane false Removes the crashed plane and affiliates except spawn points.
Optimizations / Remove Old true Destroys zones older than the immediately previous zone.

LayoutOrder, InfiniteMap: Repeatable, and InfiniteMap: Chances are each bounded to 255 nonempty entries and 32,767 characters. The synchronized room payload is bounded to 32,767 bytes of strict UTF-8.

Each registered custom biome also 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 user editable. Spawn Chance is an inclusive 0 through 100 percentage used by Generative Map. The host synchronizes the resolved values for the flight.

 



 


Layouts

Registered layout selection and modification.

Layout API → click to expand

 

DeployLayout registers a complete named layout. PEAK's boarding pass displays Default plus every registered layout in a native masked dropdown with a scrollbar, ordered by stable LayoutId. The adjacent Layout Order toggle starts from Map / DoOrder for each flight. Only the host can change either control.

When Layout Order is off, Generative Map takes precedence over InfiniteMap. If neither is enabled, PLL uses PEAK's live WilIsland order while still applying the selected seed, replacement, lazy-generation, feature, water, plane, fog, bridge, loot, and removal options.

Register layouts before the registry seals at boarding-pass initialization or world loading.

PLLLibrary.DeployLayout(new LayoutDefinition(
    new LayoutId("example.author/alpine-first"),
    "Alpine First",
    "1",
    new[] { "Alpine", "Tropics", "Mesa", "Caldera", "Volcano", "Peak" }));

ModifyLayout applies deterministic edits to either LayoutId.Default or a named layout. Anchors use zero based occurrence numbers in the unmodified target layout.

PLLLibrary.ModifyLayout(new LayoutModification(
    "example.author/add-roots",
    "1",
    new LayoutId("example.author/alpine-first"),
    new[]
    {
        LayoutEdit.InsertAfter("Tropics", 0, new[] { "Roots" }),
        LayoutEdit.Remove("Mesa", 0)
    }));

Exact native names and exact custom segment IDs lock that source. Qualified biome tokens such as peak/beach select from registered owners and declared overwriters. The solver maximizes valid overwrite substitutions, then Before/After, then Favorites, and finally the ordinal stable ID sequence. Metadata never inserts a biome by itself.

Every edit, InfiniteMap expansion, and metadata choice is resolved once over the completed logical sequence. Invalid connectors, unknown strict tokens, excessive solver bounds, or a nonterminal Peak fail before map mutation.

 


Content API

Stable identities and inert world root preparation.

Forceload and content registries → click to expand

 

PllContentRegistry groups biome definitions and independent bundle elements in one ScriptableObject. PllBundleElementDefinition supplies a stable BundleElementId, ContentRevision, and persistent root prefab. Native segment IDs are reserved and cannot be claimed by custom registrations.

PreparedSegment prepared = PLLLibrary.Forceload(SegmentId.Alpine);
PreparedElement element = PLLLibrary.ForceloadElement(
    new BundleElementId("example.author/cool-luggage"));

Both methods:

  • require Unity's main thread and an active world MapHandler;
  • create an inactive clone directly at the current world scene root;
  • retain the prefab's serialized components and child active states;
  • clear cloned Photon runtime identity;
  • do not add a map slot, invoke PLL generation, activate the clone, allocate views, or synchronize it.

Unity may still invoke ordinary Awake callbacks while a prefab is instantiated beneath the inactive staging parent. The caller owns activation, networking, and lifetime. Dispose the returned handle to destroy its root.

Forceload(string) also accepts the legacy native names Beach, Tropics, Roots, Alpine, Mesa, Caldera, Volcano, and Peak.

Custom biome configuration is retrieved by exact stable identity:

CustomBiomeConfig config = PLLLibrary.GetBiomeConfig(
    new BiomeId("example.author/glacier"));

string path = config.ConfigPath;
int chance = config.SpawnChance.Value;

TryGetBiomeConfig(BiomeId, out CustomBiomeConfig) and its string overload provide non-throwing lookup. The returned object exposes the file path and the five BepInEx configuration entries, while PLL does not assign authority to arbitrary extra fields.

Public registration APIs from 1.3 remain available for compatibility. Automatic .pll discovery is the preferred bundle ingress.

 


Custom Biomes

Runtime bundle and prefab contract.

Authoring reference → click to expand

 

  • PllBiomeDefinition owns the stable BiomeId, ContentRevision, optional strict minimum PLLVersion, metadata, presentation, and prefab references.
  • Empty PLLVersion is accepted as test metadata with a warning. A present value must be valid semantic versioning and cannot require a newer PLL Library.
  • A custom BiomeId is a lowercase qualified ID such as example.author/glacier.
  • The persistent parentless root directly owns one CustomSegmentRuntime and its exact PllBiomePrefabAnchors.
  • Floor and campfire roots match CustomSegmentRuntime.SegmentParent and SegmentCampfire and remain disjoint.
  • The root supplies exact Start, Entry, and Exit ports. Adjacent connector strings and authored rotations must agree; PLL applies translation, not corrective rotation.
  • Player formation, plane, fog begin, fog cutoff, and optional statue references belong to the same root and cannot be generated children of a PropSpawner.
  • A required campfire root must contain PEAK compatible campfire authoring. With the guarantee enabled, the effective Campfire-food PropSpawner must deterministically request one player-scaled output per supported player requirement.
  • Favorites, Overwrites, Before, and After are stable biome ID defaults. Duplicates and self references reject registration; the per biome configuration supplies the effective flight values.

PEAK's native PropGrouper.RunAll(false) owns generation. For each cloned occurrence, PLL clears stale generated output, applies the surviving active IGenConfigStep components under a scoped configuration seed, and then runs active LevelGenStep components once under an independent generation seed. The source scene is never reconfigured. PEAK's build time pruning remains authoritative: a variation removed from WilIsland cannot be reconstructed at runtime. Permanent meshes, ports, markers, and colliders must not be children of a PropSpawner, because PropSpawner.Clear() destroys its direct children.

PLLFinalGeneration holds an authored root inactive until PEAK's finalizer phase. Its supported generation surface is deliberately closed to exact empty-leaf PropSpawner steps with no nested generator, finalizer, spawner, callback, constraint, modifier, or independently owned map role. PLLForceSpawner resolves an exact native prop name from PEAK's live source catalog, preserves the authored socket position and rotation, and rejects item names, ambiguous names, transformed sockets, and native candidates containing ISpawner.

AssetBundles may embed prefab, AudioClip, material, shader, texture, particle, and other serialized Unity references. AssetBundles cannot provide executable C# types. Every serialized custom component must already exist in PEAK, PLL Library, or a required peer plugin DLL.

 


Creator

Unity authoring and .pll packaging.

Creator package → click to expand

 

Install the released com.aeralis.pll.creator-1.6.0.tgz through Unity Package Manager using Add package from tarball. Use an otherwise empty project in PEAK's Unity major.minor stream with Windows Build Support installed. The package discovers PEAK in Steam's registered libraries, creates its owner marked local dependency package under Packages/com.aeralis.pll.creator.generated, and enables the builder only after Unity compiles that exact dependency set. Both packages are hidden from the Project window and create nothing under Assets; use PLL > Configure only when automatic PEAK discovery is ambiguous.

  1. Create and select one or more PllBiomeDefinition or PllBiomeRegistry assets.
  2. Run PLL > Build .pll and choose a destination outside the Unity project.

This tooling packages the runtime's existing pre authored component schema. It rejects unsupported high level source models rather than emitting a bundle that appears valid but cannot register. A successful editor build does not replace live PEAK, multiplayer, late join, progression, or quicksave validation.

 



 


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;
  • for custom content: bundle filename, stable IDs, revisions, and PLLVersion;
  • whether the failure occurs offline, as host, as client, during late join, or during quicksave continuation.
Symptom Check
Layout is absent from the boarding pass Register it before the layout registry seals and ensure its stable ID and display name are unique.
A strict layout token fails Use an exact native name, exact custom segment ID, or registered qualified biome token.
Peak fails Keep it terminal and directly after Volcano, or enable Peak at end.
Infinite expansion fails Supply at least one ordinary repeatable token and a connector compatible chain.
Bundle is rejected Read the first bundle path and content ID error; one failed bundle transaction does not partially register.
Client disconnects during load Ensure every peer has matching PLL code, registered segments, layouts, modifications, and authored revisions.
Quicksave continuation fails Restore the configuration and registered content that created the save. PLL does not silently reinterpret a changed layout.

 



WAVE_bottom

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