
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,含旧存档与联机修复。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
- 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
EnableLightMapBakingenabled in the plugin config. - Press Play — the map data syncs to all players and the custom map loads.
Editor Mode
- Hold right-click for FreeCam (WASD to move, scroll wheel for FOV).
- Use Swap to pick a biome for the area, then C to pick a variant template to work from.
- 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,PropSpawnersubclasses,LightVolumeinLightVolume.Runtime.dll, Unity 6). Resource bundles ship as embedded.bundlefiles. - Custom maps initialize fully: spawn tracking, respawn statue, segment disabling,
wallNextandhasFinishedStartRoutineall 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
RespawnChestfalls 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 lobbyRunIdis guarded. - Lightmaps: baking goes through the official
LightVolumepipeline with compression skipped, eliminating the HDR-compression log spam; one bake after generation while all segments are still active. - TerrainRandomiser coexistence: the unused
visibilitycomputebundle 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 separateTerrainCustomiser_ZHpatch instead. UBImGui 1.0.0is 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] Rebuildwarnings 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-TerrainCustomiser0.3.2) - Rebuild and fixes: AiAeT
- Chinese UI patch:
TerrainCustomiser_ZH, translation tables ported fromWUYACHIYU-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(编辑) 两种模式(编辑器仅限离线模式)。
游玩模式
- 选择要用的地图存档,然后设置种子以及是否为房间烘焙光照图。只有当所有玩家都在插件配置里开启
EnableLightMapBaking时,光照图选项才可用。 - 按 Play——地图数据同步给所有玩家后开始加载自定义地图。
编辑模式
- 按住右键进入 FreeCam(WASD 移动,滚轮调 FOV)。
- 用 Swap 为该区域选择群系,再按 C 选择要基于哪个变体模板制作。
- 点选创建好的图段,通过 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 等本地视图收集完成后才绑定,提前或不匹配的批次可重试;防御空 lobbyRunId崩溃。 - 光照图:走官方
LightVolume管线并跳过压缩,消除 HDR 压缩日志刷屏;在生成完成后、图段仍激活时统一烘焙一次。 - 与 TerrainRandomiser 共存:启动时不再加载闲置的
visibilitycomputebundle,消除了导致 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-TerrainCustomiser0.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。