
WKMapLoader
Make White Knuckle maps in Blender (.glb). CUSTOM menu tab, grabbable ledges, handholds, and tag-driven buttons, pads, zones, timers and checkpoints, with your own tag presets.WK Map Loader
Make your own White Knuckle maps in Blender and play them in the game.
- CUSTOM tab in the play menu, one card per map
- Climbing like the real game: top edges are grabbable, handholds anywhere
- Buttons, pads and zones that give items, set checkpoints, teleport, time runs and more. No code
- No rising mass, thin fog, falling sends you back to your checkpoint
Playing: install a map pack, then Play → CUSTOM.
Make a map
- Model it in Blender (1 unit = 1 m).
- Tag objects (below). No tag = solid block with grabbable top edges.
- Add an empty named
spawn. - File → Export → glTF 2.0, format .glb, into
BepInEx/plugins/WKMapLoader/maps/. - Play it from CUSTOM. F8 reloads after each export.
maps/example.glb is a finished example: import it into Blender to see how it's tagged.
Tags
Tags go in Blender and are part of the map. Console commands are typed in game and are only for you while testing.
Put tags in the object's name, separated by ;:
button; clear; give rebar 3; msg Ready!
Or keep the name free: parent empties to the object and name the empties after the tags. Empties on their own are places (spawn, lights, points).
<value> = required, [value] = optional. Text can go in quotes: msg 'Floor 1/2; go'.
Surfaces
| Tag | Does | Example |
|---|---|---|
| (none) | Solid, top edges grabbable | Floor |
smooth |
Solid, nothing grabbable | smooth |
handhold |
Grabbable all over | handhold |
pass |
With handhold: grab it, walk through it |
handhold; pass |
deco |
Visible, no collision | deco |
invisible |
Solid, not drawn | invisible |
enemywall |
Invisible glass: stops you and denizens, shots fly through | enemywall |
Places & settings
| Tag | Does | Example |
|---|---|---|
spawn |
Start point, facing Blender's +Y | spawn |
exit |
End point (optional) | exit |
point <name> |
Target for teleport |
point top |
light [range] [hex] |
Invisible light here (default 12 m) | light 20 ffcc88 |
lamp [range] [hex] |
Light shining from a visible mesh | lamp 8 |
note <name> |
Floor note, text from <map>_<name>.txt |
note intro |
godmode |
Can't die in this map | godmode |
fog <0-1> |
Fog strength (default 0.25) | fog 0 |
Triggers
| Tag | Runs its actions when you... | Example |
|---|---|---|
button |
Press the mesh | button; give flare 2 |
pad |
Stand on top of it | pad; checkpoint |
zone |
Walk into it (invisible; add deco to show it) |
zone; timer start |
start |
Start the map or fall back to spawn | button; clear; give rebar 3; start |
Actions
| Tag | Does | Example |
|---|---|---|
give <item> [n] |
Item or trinket, part of the name is enough | give rebar 3 |
bind <item> [n] |
Give it and keep it through clear |
bind buddy |
unbind <item> |
Stop keeping it, take it away | unbind buddy |
clear |
Empty the inventory (runs first) | clear |
checkpoint |
Respawn here after a fall | pad; checkpoint |
teleport [point] |
To a point, spawn, or last checkpoint |
teleport top |
launch <m> |
Spring: throws you m metres up | pad; launch 10 |
msg <text> |
Big text on screen | msg Time {timer} |
perk <name> [s] |
Perk, no time = until you leave | perk velocity 10 |
effect <name> [s] |
Effect, no time = until you leave | effect sticky_hands 10 |
timer start/stop/reset |
Speedrun timer, stop saves best |
zone; timer stop |
set <var> <value> |
Set a value | set floor 2 |
add <var> [n] |
Add to a counter | add presses |
map <name> |
Load another map | pad; map level_2 |
win |
Fireworks, then the win screen | button; win |
| Effect | Does |
|---|---|
refill |
Full stamina |
infi_stamina [s] |
Stamina stays full |
sticky_hands [s] |
Grab any surface |
temp_jump <n> |
n extra air jumps |
jump_boost [s] |
Higher jumps |
| game buff id | That game buff |
In msg text: {timer} {best} {falls} {map}, or any counter: button; add presses; msg Pressed {presses} times.
Labels
| Tag | Does | Example |
|---|---|---|
name <text> |
Bold name above it when you look at it | name Rebar Station |
description <text> |
Small line under the name | description Gives 3 rebars |
sign <text> |
Text written on a flat mesh | sign Shooting Range |
Presets
Save a tag combo under a short name, then name objects after it. In the console use / between tags (the console uses ; itself):
setpreset rebarbtn button / clear / give rebar 3 / start
An object named rebarbtn now gets all four tags. Saved in BepInEx/config/WKMapLoader.presets.txt. When sharing a map, put its presets in <map>_presets.txt next to it.
Console commands
| Command | Does |
|---|---|
maps |
List map files |
loadmap <name> |
Load a map now |
| F8 | Reload the current map |
F9 / mapspawn |
Back to spawn |
mapinfo |
What loaded, and unknown tags (typos) |
mapfog <0-1> |
Fog, for testing |
dumptextures |
Save game textures, to pick wk_ materials |
presets |
List presets |
setpreset <name> <tag / tag> |
Make or change a preset |
removepreset <name> |
Delete a preset |
Materials & sharing
- A material's Base Color tints the blockout texture. Name it
wk_<game material>to use a game texture. - Share a map as a Thunderstore package: a
mapsfolder with your.glb, plus optional<map>.png(card image),<map>.txt(first linetitle: My Map) and<map>_presets.txt. AddLakisa-WKMapLoader-1.2.0as a dependency. - Map packs can add their own tags with a small plugin through
WKMapLoader.MapApi, like Laki's Play Room.
Notes
- Old
.objmaps still load. - Achievements and leaderboards are off in custom maps.
- Built for White Knuckle 0.61. Report issues and I'll update it.