You are viewing a potentially older version of this package. View all versions.
AiAeT-TerrainCustomiser_Fix-1.0.0 icon

TerrainCustomiser Fix

Community rebuild of Snosz-TerrainCustomiser 0.3.2 for PEAK 1.65.a+/v2.4.x. Custom biome maps restored, with old-save and multiplayer fixes. | TerrainCustomiser 0.3.2 社区修复重建版,适配 PEAK 1.65.a+/v2.4.x,含旧存档与联机修复。

By AiAeT
Date uploaded a day ago
Version 1.0.0
Download link AiAeT-TerrainCustomiser_Fix-1.0.0.zip
Downloads 18
Dependency string AiAeT-TerrainCustomiser_Fix-1.0.0

This mod requires the following mods to function

BepInEx-BepInExPack_PEAK-5.4.75301 icon
BepInEx-BepInExPack_PEAK

BepInEx pack for PEAK. Preconfigured and ready to use.

Preferred version: 5.4.75301
Snosz-PhotonCustomPropsUtils-1.1.0 icon
Snosz-PhotonCustomPropsUtils

Helps modders easily synchronize room/player properties across all connected clients through Photon's Custom Properties.

Preferred version: 1.1.0
Snosz-UBImGui-1.0.0 icon
Snosz-UBImGui

A plugin that allows mod developers to use Dear ImGui in Unity.

Preferred version: 1.0.0

README

TerrainCustomiser

English | 中文

Community-fixed rebuild of Snosz-TerrainCustomiser 0.3.2, compatible with PEAK 1.65.a and later (verified baseline v2.4.c).

Create custom variants for each biome with the in-game level editor, then play your creation with friends. The map syncs to everyone in the lobby, so only the host needs the save file — but every player must have this mod installed.

The original mod has been broken since PEAK 1.65.a. This is an unofficial maintenance rebuild that restores it on current game versions, including old map saves.

Requirements

  • BepInExPack_PEAK
  • Snosz-UBImGui
  • Snosz-PhotonCustomPropsUtils
  • The same version installed on every player in the lobby

Usage

Map saves live in AppData\LocalLow\LandCrab\PEAK\TerrainCustomiser\Map Saves.

Opening the airport kiosk menu shows the TerrainCustomiser UI with Play / Editor modes (Editor is offline-only).

Play Mode

  1. Select the map save to use, then set the seed and whether the lobby should bake lightmaps. The LightMap option is only available when every player has EnableLightMapBaking enabled in the plugin config.
  2. Press Play — the map data syncs to all players and the custom map loads.

Editor Mode

  1. Hold right-click for FreeCam (WASD to move, scroll wheel for FOV).
  2. Use Swap to pick a biome for the area, then C to pick a variant template to work from.
  3. Select the created segment to edit it through the Hierarchy / Inspector / Resource windows.

What this rebuild fixes

  • PEAK 1.65.a+ compatibility: adapted to the async terrain pipeline (RunAll/Execute/SpawnNew, PropSpawner subclasses, LightVolume in LightVolume.Runtime.dll, Unity 6). Resource bundles ship as embedded .bundle files.
  • Custom maps initialize fully: spawn tracking, respawn statue, segment disabling, wallNext and hasFinishedStartRoutine all run; generation failures block the run instead of leaving a broken map; empty saves regenerate a vanilla island.
  • Old map saves load again: out-of-range indexes are skipped safely, missing RespawnChest falls back, name-based prop/material/Transform references resolve, saved random-scale values keep explicit entries while missing multipliers default to 1 (props no longer shrink to zero), dead prop references are skipped instead of failing the map, and nested segments such as the volcano pair are discovered.
  • Multiplayer hardened: room properties use TC_-prefixed keys so they no longer fight TerrainRandomiser's keys; prop ViewIDs stay host-allocated; online IDs bind only after the local view collection completes and retry on early or mismatched batches; a crash from an empty lobby RunId is guarded.
  • Lightmaps: baking goes through the official LightVolume pipeline with compression skipped, eliminating the HDR-compression log spam; one bake after generation while all segments are still active.
  • TerrainRandomiser coexistence: the unused visibilitycompute bundle is no longer loaded at startup, removing the CAB identity conflict that broke TerrainRandomiser 1.2.0's startup.
  • Diagnostics: [TC]-tagged logs for skipped save entries, rebuild warnings and segment/prop statistics.

Compatibility & known issues

  • Coexists with TerrainRandomiser, but both hook map generation — disable random-terrain features during custom-map sessions.
  • Do not install together with TerrainCustomiserCN: the GUIDs are declared mutually exclusive. For a Chinese UI, use the separate TerrainCustomiser_ZH patch instead.
  • UBImGui 1.0.0 is an old build; if ImGui rendering itself breaks it needs a separate fix.
  • Baking is asynchronous over a few frames; players spawning during those seconds could briefly see all segments active (same semantics as 0.3.2).
  • The mid-generation bake was dropped; modifiers that sample the lightmap during generation now read the previous scene lightmap.
  • Unity asset references in save fields (e.g. MeshCollider.sharedMesh) may fail to restore; [TC] Rebuild warnings in the log help locate them.
  • The whole map is stored in Photon room properties; very large maps risk a sync timeout (inherited design).
  • Verified with isolated regression tests and static IL checks; full in-game verification of geometry, collision, lighting and multiplayer sync is ongoing — please report issues.

Credits

  • Original mod: Snosz (Snosz-TerrainCustomiser 0.3.2)
  • Rebuild and fixes: AiAeT
  • Chinese UI patch: TerrainCustomiser_ZH, translation tables ported from WUYACHIYU-TerrainCustomiserCN 0.1.2

Development

dotnet build -p:EnableDeployment=false                                      # build only
dotnet run --project 验证\Regression\Regression.csproj -c Release            # isolated regression tests
powershell -NoProfile -File 验证\Verify-Release.ps1                          # release checks

References: Refs\UBImGui.dll, Refs\PhotonCustomPropsUtils.dll (snapshots); game assemblies via $(ManagedDir)*.dll with BepInEx AssemblyPublicizer. A pristine copy of the original 0.3.2 DLL is kept at 备份\TerrainCustomiser_0.3.2_orig.dll.

Startup should log [TC] Save formatters ready; a successful map load logs [TC] Terrain generation completed and [TC] Custom map 'Alien' ready.


TerrainCustomiser

English | 中文

Snosz-TerrainCustomiser 0.3.2 的社区修复重建版,适配 PEAK 1.65.a 及之后的版本(验证基线 v2.4.c)。

用游戏内关卡编辑器为每个群系创建自定义变体,做好之后可以和朋友一起玩。地图会同步给房间内所有玩家,所以只有房主需要存档文件——但每名玩家都必须安装本模组。

原模组自 PEAK 1.65.a 起失效。这是一个非官方的维护重建版,让它在当前游戏版本上恢复可用,旧版地图存档也能正常加载。

前置需求

  • BepInExPack_PEAK
  • Snosz-UBImGui
  • Snosz-PhotonCustomPropsUtils
  • 房间内每名玩家都安装相同版本

使用方法

地图存档位于 AppData\LocalLow\LandCrab\PEAK\TerrainCustomiser\Map Saves。

打开机场的售货亭菜单会出现 TerrainCustomiser 界面,可选 Play(游玩) / Editor(编辑) 两种模式(编辑器仅限离线模式)。

游玩模式

  1. 选择要用的地图存档,然后设置种子以及是否为房间烘焙光照图。只有当所有玩家都在插件配置里开启 EnableLightMapBaking 时,光照图选项才可用。
  2. 按 Play——地图数据同步给所有玩家后开始加载自定义地图。

编辑模式

  1. 按住右键进入 FreeCam(WASD 移动,滚轮调 FOV)。
  2. 用 Swap 为该区域选择群系,再按 C 选择要基于哪个变体模板制作。
  3. 点选创建好的图段,通过 Hierarchy / Inspector / Resource 窗口进行编辑。

本重建版修复了什么

  • 适配 PEAK 1.65.a+:跟进异步地形管线(RunAll/Execute/SpawnNew、PropSpawner 子类化、LightVolume 迁入 LightVolume.Runtime.dll、Unity 6);资源包改为内嵌 .bundle 文件。
  • 自定义地图完整初始化:出生追踪、复活雕像、图段禁用、wallNext、hasFinishedStartRoutine 全部生效;生成失败会阻止开局而不是留下一张坏图;空存档会重新生成原版岛。
  • 旧版地图存档恢复可用:越界索引安全跳过、缺失 RespawnChest 自动兜底、按名保存的 prop/材质/Transform 引用能找回、显式保存的随机缩放值保留而缺失倍率默认回 1(物件不再缩成零)、失效 prop 引用跳过而不是让整张图失败、火山等嵌套图段也能识别。
  • 联机加固:房间属性改用 TC_ 前缀键,不再与 TerrainRandomiser 的键互相覆盖;prop ViewID 仍由主机分配;联机 ID 等本地视图收集完成后才绑定,提前或不匹配的批次可重试;防御空 lobby RunId 崩溃。
  • 光照图:走官方 LightVolume 管线并跳过压缩,消除 HDR 压缩日志刷屏;在生成完成后、图段仍激活时统一烘焙一次。
  • 与 TerrainRandomiser 共存:启动时不再加载闲置的 visibilitycompute bundle,消除了导致 TerrainRandomiser 1.2.0 启动中断的 CAB 标识冲突。
  • 诊断:[TC] 日志记录存档跳过原因、重建警告和图段/物件统计。

兼容性与已知问题

  • 可与 TerrainRandomiser 共存,但双方都挂钩地图生成——自定义图会话建议关掉随机地形生成功能。
  • 不要与 TerrainCustomiserCN 同时安装:双方 GUID 声明互斥。需要中文界面请改用独立的 TerrainCustomiser_ZH 补丁。
  • UBImGui 1.0.0 是旧构建,若 ImGui 本身渲染失效需另行处理。
  • 烘焙是跨帧异步的;玩家在烘焙几秒内出生时理论上会短暂看到全部图段激活(与 0.3.2 语义一致)。
  • 已去掉生成中程烘焙,生成期采样光照图的修改器读到的是场景旧光图。
  • 存档字段里的 Unity 资源引用(如 MeshCollider.sharedMesh)可能恢复失败,日志中的 [TC] Rebuild 警告可协助定位。
  • 整张地图走 Photon 房间属性存储,地图过大有同步超时风险(沿用原设计)。
  • 已通过隔离回归测试与静态 IL 校验;几何、碰撞、光照和联机同步的完整实机验证仍在进行,欢迎反馈问题。

致谢

  • 原模组:Snosz(Snosz-TerrainCustomiser 0.3.2)
  • 重建与修复:AiAeT
  • 中文界面补丁:TerrainCustomiser_ZH,翻译表移植自 WUYACHIYU-TerrainCustomiserCN 0.1.2

开发

dotnet build -p:EnableDeployment=false                                      # 仅编译
dotnet run --project 验证\Regression\Regression.csproj -c Release            # 隔离回归测试
powershell -NoProfile -File 验证\Verify-Release.ps1                          # 发布校验

依赖引用:Refs\UBImGui.dll、Refs\PhotonCustomPropsUtils.dll(快照);游戏程序集走 $(ManagedDir)*.dll + BepInEx AssemblyPublicizer。原版 0.3.2 DLL 备份在 备份\TerrainCustomiser_0.3.2_orig.dll。

启动日志应出现 [TC] Save formatters ready;成功进图应出现 [TC] Terrain generation completed 和 [TC] Custom map 'Alien' ready。

CHANGELOG

v1.0.1

English

  • Clients got no storms: on multiplayer custom maps the host could be caught in an Alpine snowstorm or Roots windstorm while a client saw no storm, not even the event. Fixed two causes of mismatched network IDs: the identity map of generated objects is now published before the ID list (before, a client that finished generating first never actually used hierarchy-path matching), and the game's own scene objects are no longer renumbered (a client that activated one early refused the host's ID). As a safety net, the host also publishes every storm start and stop by hierarchy path, and a client that missed the game's own toggle applies the host's state within a few seconds (new setting Multiplayer/EnableStormSync, on by default).
  • Storm shelter still let wind through: the upwind check now casts three rays instead of one (chest, head, and one tilted slightly up); any hit on terrain counts as shelter. While sheltered, the wind factor and climbing-stamina multiplier left over from being exposed are reset. A bake that failed, or a scene with no light volume, no longer counts as "baked" and no longer switches the raycast fallback off. The log states whether the fallback is active on this machine.
  • Campfire save errors: fixed the NRE when saving at the first campfire on a custom map (the variant had no previous scout statue), and the NRE on every campfire when TerrainRandomiser is installed, which stopped the quicksave from being written.
  • Diagnostics: on map load every storm zone is logged with its path and network ID, and every storm start/stop and every correction is logged as a [TC] Storm line, so host and client logs can be compared directly.

中文

  • 客机没有风暴:联机自定义图里,主机遇到高山暴风雪或森蕈大风时,客机可能一直没有风暴,连事件都不出现。修了两处网络 ID 对不上的原因:生成物的身份表改为先于下标表发出(以前客机先生成完时,按层级路径对号这一步实际上从未生效);游戏自带的场景物件不再被重新编号(客机提前激活了它时,会拒收主机给的 ID)。另外加了一层兜底:主机会把每次风暴开始和停止按层级路径广播,客机没收到游戏自己的切换时,几秒内按主机状态补上(新配置 Multiplayer/EnableStormSync,默认开)。
  • 风暴遮蔽仍漏风:上风射线从一条改为三条(胸口、头部,再加一条略向上抬的),任一命中地形即算挡住。躲避时会清掉露天时留下的风力系数和攀爬耐力倍率。烘焙失败或场景里没有光照体积时,不再被当成「已烘焙」而关掉射线兜底。日志会说明本机的射线兜底是否在工作。
  • 篝火存档报错:修复自定义图第一次点篝火时快速存档报 NRE(变体里找不到上一段的雕像);修复装了 TerrainRandomiser 时每次点篝火都报 NRE、快速存档写不出来的问题。
  • 诊断:进图时列出所有风暴区的路径和网络 ID,风暴每次开始 / 停止和每次纠正都会写一行 [TC] Storm 日志,主客机日志对照即可看出是否同步。

v1.0.0