GitHub | NexusMods | CUCoreLib
A custom map loader for Casualties Unknown, built on top of Custom Structures, Bark and CUCoreLib.
This mod supports Russian (thanks to @Crescia1949 and Mimo AI!)
@Crescia1949 is not a native Russian speaker, and AI translation may not be perfectly accurate. Please report any issues on NexusMods post or GitHub Issues.
- Overview
- Installation
- Quick Start
- Commands
- Map Structure
- Layer
- Command System
- Features
- Settings
- Compatibility
- License
Custom Map allows you to load custom-designed maps in Casualties Unknown.
- Layer-based maps — Multi-layer support with independent settings, structures, and commands per layer
- Feature system — Per-map configuration for mines, turrets, jump pads, spike stabbers, geysers, bear traps, and more
- Custom loading screen — Shows real-time progress during map generation
- Command interface — Full
cmcommand set for managing maps in-game - Multi-language support — English, 简体中文, 繁體中文, Русский
- Built on Custom Structures — Extends Custom Structures with multi-layer support, feature system, and in-game commands
- Install BepInEx 5.x for Casualties Unknown.
- Install CUCoreLib — place
CUCoreLib.dllinBepInEx/plugins/. - Install Bark — place
Bark.dllinBepInEx/plugins/Bark/. - Install Custom Structures — place in
BepInEx/plugins/. - Install Custom Map, place in
BepInEx/plugins/Custom Map. - Place map folders in
Maps/(next to the game executable).
Custom Map includes a built-in template map. Enable Start Game Use Map in mod settings, select the template, then start a new game.
- Create a map folder under
Maps/your-map-name/(see Map Structure). - Launch the game. Maps will appear in
Mod Settings → Custom Map → First Use Mapdropdown. - Type
cm select your-map-namein console, or select from the dropdown before starting.
All commands use the cm prefix.
| Command | Description |
|---|---|
cm help |
Show help |
cm reload |
Reload current map from disk |
cm load |
Reload all maps from Maps folder |
cm savereload |
Save and reload current map |
cm info |
Show current map details |
cm spawn |
Teleport to map spawn point |
cm select <id> |
Select a map by ID, name, or index |
cm list |
List all available maps |
cm feature [name] [val] |
List or set map features |
cm waypoint [list|get] |
Manage waypoints |
cm save |
Save current map to disk |
cm layer [n] |
Show or switch layer |
cm exit <target> |
Exit map — none (vanilla) or tutorial |
A map is a folder under Maps/ with the following structure:
Maps/
└── your-map-name/
├── map.json # Map metadata
├── layers/
│ ├── layer1/ # Layer 1 folder
│ │ ├── layer.json # Layer properties + structures
│ │ └── command.json # Layer commands (optional)
│ └── layer2/ # Layer 2 folder (optional)
│ ├── layer.json
│ └── command.json
├── command.json # Global commands — applied to all layers as fallback (optional)
├── feature/
│ ├── world/
│ │ ├── settings.json # World settings (gravity, full bright, skip flags)
│ │ ├── mine.json # Mine configuration (optional)
│ │ ├── jump_pad.json # Jump pad configuration (optional)
│ │ ├── turret.json # Turret configuration (optional)
│ │ ├── sound_cannon.json # Sound cannon configuration (optional)
│ │ ├── spike_stabber.json # Spike stabber configuration (optional)
│ │ ├── geyser.json # Geyser configuration (optional)
│ │ └── beartrap.json # Bear trap configuration (optional)
│ └── player/
│ └── xp.json # XP configuration (optional)
└── lang/
├── EN.json # English localization
├── zh-CN.json # Simplified Chinese localization
└── zh-TW.json # Traditional Chinese localization
{
"id": "mymap",
"version": "1.0.0",
"author": [
"AuthorName"
]
}| Field | Type | Description |
|---|---|---|
id |
string |
Unique map identifier |
version |
string |
Map version (e.g. 1.0.0) |
author |
string[] |
List of author names |
Each layer is a folder under layers/ (e.g. layers/layer1/).
{
"type": "Debug",
"spawn": [
0,
0
],
"x": -68,
"y": 62,
"skip_terrain": true,
"skip_structures": true,
"skip_background": true,
"waypoints": [],
"items": []
}| Field | Type | Default | Description |
|---|---|---|---|
type |
string |
Debug |
Scene type: Debug, Wasteland, TemperateForest, RockDesert, Tutorial, None |
spawn |
number[] |
[0,0] |
Spawn position [x, y] |
x |
int |
0 |
World X offset of the layer |
y |
int |
0 |
World Y offset of the layer |
skip_terrain |
bool |
true |
Skip vanilla terrain generation |
skip_structures |
bool |
true |
Skip vanilla structure generation |
skip_background |
bool |
true |
Skip vanilla background generation |
waypoints |
array |
[] |
Waypoint list (for cm waypoint) |
items |
array |
[] |
Items to give on spawn |
Structures are defined inline in layer.json via the structures array:
{
"structures": [
{ "structure": "StructureName", "x": 10, "y": 20 }
],
"skip_terrain": false
}| Field | Type | Description |
|---|---|---|
structure |
string |
Structure name (registered via Custom Structures mod) |
x |
int |
World X coordinate |
y |
int |
World Y coordinate |
Applied to all layers as a fallback. If a layer has its own command.json, the layer-level one takes priority.
{
"once_commands": [
"command1",
"command2"
],
"loop_commands": [
"loop_command1"
],
"loop_interval": 10.0
}Override global commands for a specific layer. Same format as above.
| Field | Type | Description |
|---|---|---|
once_commands |
string[] |
Commands executed once on map load |
loop_commands |
string[] |
Commands executed repeatedly |
loop_interval |
float |
Interval in seconds between loop commands |
Each feature file in feature/world/ or feature/player/ configures the corresponding game entity.
| Feature | Description |
|---|---|
settings.json |
World settings: full_bright, gravity, jump_limit, climb_limit, forgiving_level |
mine.json |
Mine: cooldown, undestroy |
jump_pad.json |
Jump pad: cooldown, force, no_light |
turret.json |
Turret: cooldown, shot power, range, undestroy, no_light |
sound_cannon.json |
Sound cannon: cooldown, range, charge time, undestroy |
spike_stabber.json |
Spike stabber: damage, cooldown, undestroy, no_light, sound |
geyser.json |
Geyser: cooldown, duration, range, rumble time, no_liquid |
beartrap.json |
Bear trap: damage, cooldown, undestroy |
xp.json |
XP: strength/resilience/intelligence levels and EXP ranges |
| Setting | Description | Default |
|---|---|---|
More Logs |
Enable verbose logging | false |
Start Game Use Map |
Automatically use selected map when starting | false |
First Use Map |
Map ID to use when starting a new game | template |
Progress Update Interval |
Number of blocks between progress text updates | 333 |
Custom Map supports soft integration with:
| Mod | Required | Description |
|---|---|---|
| Custom Structures | No | Place .txt / .ms.json / .ms2.json files for structure placement |
