Scene Creator Reference
Every option the in-game scene editor reads, all of it from config_scenecreator.lua. The file is a shared_script, so the client and the server both read it and a change needs a restart:
restart vorp_characterNothing in this resource is escrowed — the file is plain readable Lua, as is every other file.
For how to actually build a scene, see The Scene Creator. This page is the lookup table.
VORP oxmysql admin groupAccess
| Key | Default | |
|---|---|---|
ConfigCreator.Enabled | true | Master switch. false removes the command and all its server handlers |
ConfigCreator.Command | "scenecreator" | The chat command that opens the editor |
ConfigCreator.EscapeKey | RawKeys.F9 | Force-closes the editor if the panel stops responding. A RawKeys name from shared/redm_keys.lua |
ConfigCreator.AdminGroups | { "admin" } | VORP groups allowed to open the editor and save |
ConfigCreator.Table | "vorp_character_scenes" | Database table for saved scenes |
AdminGroups is checked on every server handler, not once at open time, so narrowing it takes effect on the next save rather than on the next restart.
The table is created with CREATE TABLE IF NOT EXISTS on start. There is no SQL file to import. The name is interpolated into the CREATE, so renaming Table creates the new one on the next start and leaves the old one in place with its scenes still in it.
The editor will not open while the selection screen is up
Spawn a character in first. If the panel stops responding, F9 force-closes it, and scenecreatorclose in the F8 console is the fallback when the key is not reachable either.
Runtime
| Key | Default | |
|---|---|---|
ConfigCreator.ApplyToSelector | true | Enabled database scenes join the selector's rotation. false means scenes only take effect once exported to config.lua |
ConfigCreator.ReplaceConfigScenes | false | LIVE scenes replace the config.lua locations instead of adding to them |
ReplaceConfigScenes needs ApplyToSelector to be true, and is ignored entirely while no scene is switched LIVE — so turning it on does not empty your rotation by accident.
At the default settings the shipped 13 locations stay in the rotation and your LIVE scenes are added to them. Set ReplaceConfigScenes = true when you want only your own scenes on the screen.
A scene that is both LIVE and pasted into config_scenes.lua appears twice
The two paths are independent. The database scene is broadcast to clients and the file scene is appended to Config.SpawnPosition at load, so the rotation holds both copies and the random pick can land on either. Switch one of them off.
Panel
| Key | Default | |
|---|---|---|
ConfigCreator.PanelSide | "right" | Side the panel first opens on — "right" or "left" |
This is the starting side only. Builders switch sides in the panel itself and their own choice is remembered, so changing this setting does not move the panel for anyone who has already picked a side.
Freecam
| Key | Default | |
|---|---|---|
speed | 8.0 | Metres per second at normal speed |
fastMultiplier | 4.0 | While holding Shift |
slowMultiplier | 0.25 | While holding Alt |
lookSensitivity | 6.0 | Degrees of rotation per unit of mouse movement |
fov | 60.0 | Fallback field of view, used only when the current view's FOV cannot be read |
minHeightAboveGround | 0.35 | Metres the camera keeps above the ground |
At the defaults the camera covers 2 metres per second held on Alt and 32 metres per second held on Shift.
Placement
The gizmo for props, wagons and NPCs, and the Walk mode for character marks.
| Key | Default | |
|---|---|---|
distance | 3.0 | Metres in front of the camera a new object appears before it is placed |
rotateStep | 5.0 | Degrees per rotate key press |
heightStep | 0.05 | Metres per height key press |
walkStep | 0.05 | Metres per frame when moving a character mark in Walk mode. Shift multiplies it |
snapToGround | true | Drop the object onto the ground beneath it when confirming |
The adjuster
ConfigCreator.Adjuster is the drag handle that moves and turns a mark that already holds a pose.
| Key | Default | |
|---|---|---|
maxTravel | 3.0 | Maximum metres a mark may be dragged from where it started |
armLength | 0.45 | Length of the axis arms, in metres |
planeSize | 0.17 | Size of the ground square, in metres |
ringRadius | 0.75 | Radius of the rotation ring, in metres |
ringSegments | 28 | Segments the ring is drawn from |
dragScale | 1.0 | Metres per pixel of mouse movement, before the modifiers |
fast | 4.0 | Drag multiplier while holding Shift |
slow | 0.25 | Drag multiplier while holding Ctrl |
turnStep | 1.5 | Degrees per tick while turning the mark |
scrubStep | 0.01 | Fraction of the clip the [ and ] keys scrub per tick. 0.01 is 1% |
nudgeStep | 0.02 | Metres per tick when nudging with the movement keys. Shift and Ctrl scale it |
movePairTogether | true | Dragging one half of a duo pose moves the other too |
lockPhase | true | Keep both halves of a duo clip pose in step |
phaseInterval | 400 | Milliseconds between re-syncs when lockPhase is on |
refreshInterval | 33 | Milliseconds between handle position updates sent to the panel |
lockPhase applies to clips only, not scenarios. RedM on this build has no working synchronised scene natives, so a duo clip pose is two independent TaskPlayAnim calls whose playback phase drifts apart; pushing it back into step every 400 ms is what holds a kiss or a handshake together. A scenario keeps its own timing and needs none of this.
Never set refreshInterval to 0
It is the gap between position updates sent from Lua to the panel. 0 means every frame, and every-frame NUI messages stall the panel — the handle stops responding and the editor looks frozen. If the handle feels heavy, raise this number rather than lowering it. 33 is roughly 30 updates a second.
maxTravel is a safety rail rather than a limit on your scene: a mark can be dragged 3 metres from where it was placed, and to move it further you place it again. It stops a stray drag throwing a character across the map.
Limits
The ceiling for one scene.
| Key | Default | |
|---|---|---|
slots | Character marks | 8 |
props | Props | 60 |
vehicles | Wagons and carts | 12 |
npcs | NPCs, horses included | 20 |
waypoints | Camera travel waypoints | 20 |
Horses are peds in RDR3, so they count against npcs, not vehicles.
Props, wagons, NPCs and camera travel exist in the database only
They are saved with a LIVE scene and are not written out by the Export tab, because Config.SpawnPosition has no fields for them. A scene built around 40 props and a camera travel has to stay LIVE in the database. See Database.
Defaults for a new scene
ConfigCreator.Defaults is what a scene starts with before you change anything.
| Key | Default | |
|---|---|---|
introTime | 7 | Seconds the establishing shot holds before the selector takes over |
fov | 60.0 | Field of view for the establishing shot and each character camera |
weather | { type = "sunny", transition = 10, snow = false } | Same shape as options.weather in config.lua |
time | { hour = 12, transition = 10 } | Same shape as options.time |
music | "" | Empty means the scene plays no music event of its own |
timecycle | { name = "", strength = 1.0 } | Timecycle modifier and its strength |
scenario | three MP_LOBBY_* names | What a new character slot does |
The three starting scenarios are MP_LOBBY_SCENARIO_02, MP_LOBBY_SCENARIO_07 and MP_LOBBY_STANDING_A. All three are standing idles, and all three are scenarios rather than clips, which is why a brand new mark cannot float.
A new mark also carries transition = 2.0 — the seconds the camera takes to glide onto it — and lockPosition = true, which freezes the character so it cannot slide off a seat or a ledge.
Seats
ConfigCreator.Seats is how the editor puts a mark onto furniture instead of leaving it hovering in a sitting pose.
| Key | Default | |
|---|---|---|
searchRadius | 3.5 | Metres to look for a seat when snapping a mark to one |
styles | 19 entries | What the character does once seated |
models | 28 entries | The objects the editor recognises as seats |
Each model row carries three measurements:
| Field | |
|---|---|
seatZ | Height of the seat surface above the object's origin |
forward | Metres from the origin towards the object's facing. 0 is the middle of a bench |
heading | Degrees added to the object's heading so the ped faces out of it |
The 28 models are 11 benches, 10 chairs, 2 stools, 3 couches, a crate and a barrel. seatZ runs from 0.38 on the couches and the sofa to 0.62 on the tall stool and the barrel. Benches, chairs and couches use heading = 180.0 so the character faces away from the backrest; the stools, the crate and the barrel use 0.0, which keeps whatever heading the builder set, because they have no front.
Nine of the 19 sitting styles are marked female = false. Those are male-only scenarios — the whiskey, cigar, fletching, stew, banjo, guitar, knife and rifle-cleaning ones, plus the plain GENERIC_SEAT_CHAIR_SCENARIO. Picking one for a female character leaves it without a pose, so the editor offers the rest.
Adding a seat is one row in models with the three measurements above. A model the table does not know is not found by the snap, even if a character can plainly sit on it.
Picking a seated pose does two things at once
It sets forcePose = true on the mark, so the scene's pose wins over the player's own saved pose, and it snaps the mark to the nearest seat. If nothing is within searchRadius the editor says so rather than leaving a character sitting in mid-air.
Camera travel defaults
ConfigCreator.Travel seeds a scene's establishing shot. Each scene then keeps its own copy.
| Key | Default | Range | |
|---|---|---|---|
speed | 12.0 | Seconds for the whole path, split between legs by length | |
fov | 55.0 | Field of view during the travel | |
curve | 0.3 | 0 – 0.9 | Corner rounding. 0 turns at the last moment |
easing | 0.6 | 0 – 1 | Eases the whole path in and out. 0 is a constant speed |
lookMode | "ahead" | Where the camera looks — see below | |
shake | false | Camera shake | |
shakeAmount | 1.0 | Strength of the shake | |
blackBars | true | Cinematic bars during the travel | |
loop | true | Run the path again when it finishes | |
postfx | "" | Screen effect, from the postfx catalogue |
speed is a duration, not a speed
12.0 means the camera takes 12 seconds to fly the entire path, however long that path is. Adding waypoints does not make the shot longer — it makes the camera move faster to cover the extra distance in the same 12 seconds. Raise this number when you extend a path.
lookMode takes four values:
| Value | |
|---|---|
"ahead" | Look along the path |
"focus" | Hold on a fixed point |
"ground" | Always look down |
"entity" | Follow an entity handle |
The travel runs for at most introTime seconds before the selector takes over, so a 12-second path behind the default introTime of 7 is cut off five seconds early. Match the two, or set loop and accept the cut.
The catalogue
ConfigCreator.Catalogue fills the editor's dropdowns. These are suggestions, not restrictions — any model name can be typed in instead, so a prop from your own stream folder works without appearing here.
| List | Entries | |
|---|---|---|
props | 10 | Campfires, bedrolls, chairs, a table, a crate, a barrel, a lamp |
vehicles | 5 | Cart, buggy, bounty wagon, army supply wagon, canoe |
npcs | 4 | Townsfolk from Valentine, Rhodes and Armadillo |
scenarios | 13 | Standing idles that work anywhere, for marks and NPCs |
postfx | 11 | Screen effects for a camera travel, None first |
weather | 17 | The weather types options.weather.type accepts |
The 17 weather types are sunny, clear, clouds, overcast, rain, thunder, fog, misty, snow, blizzard, snowlight, sleet, drizzle, shower, hurricane, sandstorm and hail.
Animation and prop attach
Every character mark carries two optional tables, both switched off until something turns them on. They are per-mark, not global, and they live in the scene rather than in a config file.
anim — play a raw clip on the mark
| Field | Default | |
|---|---|---|
enabled | false | Off until a raw clip pose is picked, or you fill this in by hand |
dict | "" | Animation dictionary |
name | "" | Clip inside that dictionary |
blendIn | 8.0 | Blend-in rate |
blendOut | -8.0 | Blend-out rate |
flag | 1 | TaskPlayAnim flag. RDR3's flag values differ from GTA V's |
freeze | false | Hold the clip at one frame instead of playing it |
phase | 0.0 | Which frame to hold, 0.0 to 1.0 |
freeze plus phase is how you get a still pose out of a moving clip. Scrub to the frame you want with [ and ], then freeze it. Scenarios have no phase, so this applies to clips only.
An enabled animation wins over the pose list
anim.enabled = true makes the mark's scenario list irrelevant. Staging clears the ped's tasks and starts the clip instead, both in the editor preview and in the live scene, so a leftover dict and name from an earlier experiment will quietly override the scenario pose you thought you had set. Picking a scenario or kit pose in the browser sets enabled = false for you; a raw clip sets it back to true.
A raw clip is not grounded, so this is the likeliest way to end up with a floating character
The engine places and grounds a scenario itself. It does not do that for a clip: a clip played directly on a ped carries the height of the set it was authored on, and brings that height with it. A clip authored two metres above its set's floor puts your character two metres in the air.
Reach for a PROP_HUMAN_* scenario instead. It arrives grounded, it loops, and when it involves an object the object comes with it already aligned to the hand. The seated styles above are all of this shape, which is why they are reliable.
If you need every non-scenario pose gone everywhere at once, ConfigSelector.ScenariosOnly = true hides them across the whole resource. See Three kinds, and why the difference matters.
prop — attach an object to the mark
| Field | Default | |
|---|---|---|
enabled | false | Off until a pose with its own prop is picked, or you fill this in |
model | "" | Object model name |
bone | 0 | Bone to attach to. A name or an index |
ox oy oz | 0.0 | Offset from the bone, in metres |
rx ry rz | 0.0 | Rotation of the attached object, in degrees |
bone accepts either a bone name such as SKEL_R_Finger13, the form vorp_animations uses, or a numeric index. A name the ped does not have falls back to the root bone and prints a line saying so when debug is on — which reads on screen as a prop stuck to the character's middle rather than as an error.
A pose in the library that ships its own prop fills all eight of these fields when you pick it, and switches enabled on. Changing pose clears the previous pose's prop first, except when posing the partner half of a duo.
The order staging applies these in is deliberate
A weapon is given first, because giving one re-tasks the ped and would cut an animation short. The wagon seat comes next, then the animation, then lockPosition freezes the ped — after the pose, since freezing earlier stops it settling in — and the attached prop goes on last. Moving a ped cancels its task, so a mark is always placed before its pose is started, never after.
Every command
Scene Creator
| Command | Does |
|---|---|
/scenecreator | Open the editor. Name comes from ConfigCreator.Command |
/scenedebug | Validate the open scene and list its problems. Prints name, mark, prop, wagon and NPC counts, weather, hour and intro time |
/scenedump | Print the editor's full state: mode, counts, camera position and FOV, handle state and distance travelled, and both stand-in peds with their pose, clip, freeze and frame |
/scenekeys | Watch for 10 seconds and print which read path — control, disabled or raw — sees each editor key |
/scenegizmo | Probe the world-to-screen native on this build, to check whether the drag handle can be drawn |
scenecreatorclose | Close the editor and release focus. Console only, for when F9 is not reachable |
/scenedebug is the one to run before asking for help. A scene the validator rejects is skipped by the selector rather than shown broken, and this prints the reason. It also fails a seated pose with nothing underneath it.
/scenekeys answers "my key does nothing". Under NUI focus IsControlPressed stops reporting while IsDisabledControlPressed and IsRawKeyPressed still do, and this prints all three columns per key — any one of them reporting is enough for the editor to see the press.
Selector debug
| Command | Does |
|---|---|
/selectordebug | Toggle selector logging. Also takes on / off |
/selectordump | Print the selection screen's full state |
/selectornatives | Report which synchronised scene natives this build has, and which API the resource chose |
/selectoroverlay | Draw the partner height readings on screen every frame. Also takes on / off |
/selectorpose | Play one pose on the highlighted character |
/selectorposenext | Step to the next pose |
/selectorkit | Play one kit emote. Takes an emote name, and upper for upper body only |
/selectoranim | Play one raw clip. Takes a dictionary and a clip name |
/selectoranim is written /selectoranim <dict> <clip> and reports whether the clip is actually playing afterwards, which is how you tell a wrong clip name from a wrong dictionary.
/selectordebug needs the admin group for its server half
The command switches client and server logging together. The client half always works. The server half checks the player's VORP group and refuses anything that is not admin, so on a non-admin account the client starts logging and the server stays quiet. Run selectordebug on in the server console instead — the console bypasses the check.
The partner pose editor has its own command, partneredit, with its own permission settings in ConfigSelector.Partner.editor. That one is covered in Pose editor.
Related
- The Scene Creator — how to build a scene with these settings
- The Multicharacter Emote Library — the 305 poses the browser offers
- Configuration — the selection screen's own settings
- Database — the three tables, and what a saved scene holds
- Troubleshooting — when a scene does not appear
- VORP framework
Still stuck? Discord.