World Settings
TL;DR: CVR.WorldSettings is a static class a world script can use to toggle prop and player visibility for the local user — without touching individual components. Prop visibility controls spawning and rendering of remote props; player visibility disables remote rendering and voice. Host bindings are live in the CCK source (WorldSettingsBindings.cs) but have not yet landed in the shipped decompile, so older client builds fall through to the no-op stub.
Source: CVR.CCK.Wasm/Scripting/Links/APIs/CCKStubs/WorldSettingsCCK.cs.
namespace CVR{ public static class WorldSettings { public static void SetPropVisibility(bool visible); public static void SetPlayerVisibility(bool visible);
// Reserved (commented in shim, not yet exposed): // public static void SetPropUsability(bool usable); // public static void SetPenVisibility(bool visible); // public static void SetPenUsability(bool usable); }}Prop visibility
Section titled “Prop visibility”WorldSettings.SetPropVisibility(false); // hide remote props + block local spawningWorldSettings.SetPropVisibility(true); // restoreFrom the shim documentation:
While prop visibility is disabled the local user is prevented from spawning props and will not see other users spawned props. All currently spawned props are disabled but kept loaded in scene. Prop download & instantiation is paused while in this state.
Use cases:
- Performance-critical areas — a world scripts hides props when the user enters a dense area to protect frame rate.
- Cutscenes — a world temporarily hides everything that isn’t part of the scripted moment.
The toggle is local only. Remote users still see each other’s props — you’re not hiding them globally.
Player visibility
Section titled “Player visibility”WorldSettings.SetPlayerVisibility(false); // hide everyone + mute voice for local userFrom the shim documentation:
While player visibility is disabled the local user will not see other users or be able to communicate through voice. Other users can still see the local user over the network. Props & Pens remain unaffected as they exist separately.
Useful for:
- Solo-mode moments within a shared instance (a scripted story beat where other players shouldn’t visually distract).
- Photo / capture modes where the world wants a clean stage.
Again, local-only. Other users aren’t aware the caller has hidden them.
Context
Section titled “Context”The shim is callable from any VM, but the semantics are world-oriented and the commented-out methods make clear the intent is for worlds to manage. In practice:
- A world script: calls make sense — the world decides what the local user sees.
- An avatar / prop script: calls would set local visibility from the avatar’s perspective, which is weird (your avatar shouldn’t dictate whether you see other players). If host bindings arrive they are likely to be
(World, Any, —).
Current implementation status
Section titled “Current implementation status”[Partially wired] The CCK source at CVR.CCK.Wasm/Scripting/Links/APIs/Bindings/WorldSettingsBindings.cs binds CVR_WorldSettings_SetPropVisibility and CVR_WorldSettings_SetPlayerVisibility. Both call CheckAccess(CVRScriptObjectContext.World, CVRScriptOwnerContext.Any) and forward to SpawnableManager.SetSpawnableVisibility / CVRPlayerManager.Instance.SetRemotePlayerVisibility respectively.
The bindings are not yet in the shipped decompile at CVR-GameFiles/WasmScripting/. On a client that doesn’t carry them, BindingManager.FillNonLinkedWithEmptyStubs supplies an empty stub and calls silently do nothing. Gate world-only use of these toggles behind a build-time flag until you know the client version.
There is no OnWorldSettingsChanged event today — other scripts on the same client observe the effect indirectly (prop renderers disabled, voice silenced).
Pen visibility / usability (future)
Section titled “Pen visibility / usability (future)”The commented-out methods (SetPenVisibility, SetPenUsability, SetPropUsability) hint at the eventual shape. Pens are CVR’s drawing-tool primitive. Until they’re uncommented and wired, treat pens the same as props from a visibility perspective.
Alternatives today
Section titled “Alternatives today”If you need prop-hiding behaviour right now, enumerate props yourself and toggle their root GameObjects:
foreach (var prop in Prop.GetAllProps()){ GameObject go = prop.GetRootObject(); if (go != null) go.SetActive(visible);}Caveats: this runs only locally on whichever client is executing the script, but so does the intended WorldSettings API. The difference is that the future API will also block new prop downloads — this manual loop won’t.
Source
Section titled “Source”CVR.CCK.Wasm/Scripting/Links/APIs/CCKStubs/WorldSettingsCCK.cs— guest-facing shim.CVR.CCK.Wasm/Scripting/Links/APIs/Bindings/WorldSettingsBindings.cs— host binding registration (CCK source; not yet in the shipped decompile).
Related
Section titled “Related”- Permissions —
CheckAccess(World, Any)on both setters. - CVR Host Functions — the
CVR_WorldSettings_*table row. - Not Exposed — for features that remain unreachable.