Skip to content

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:

cfg
restart vorp_character

Nothing 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 group

Access ​

KeyDefault
ConfigCreator.EnabledtrueMaster switch. false removes the command and all its server handlers
ConfigCreator.Command"scenecreator"The chat command that opens the editor
ConfigCreator.EscapeKeyRawKeys.F9Force-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 ​

KeyDefault
ConfigCreator.ApplyToSelectortrueEnabled database scenes join the selector's rotation. false means scenes only take effect once exported to config.lua
ConfigCreator.ReplaceConfigScenesfalseLIVE 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 ​

KeyDefault
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 ​

KeyDefault
speed8.0Metres per second at normal speed
fastMultiplier4.0While holding Shift
slowMultiplier0.25While holding Alt
lookSensitivity6.0Degrees of rotation per unit of mouse movement
fov60.0Fallback field of view, used only when the current view's FOV cannot be read
minHeightAboveGround0.35Metres 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.

KeyDefault
distance3.0Metres in front of the camera a new object appears before it is placed
rotateStep5.0Degrees per rotate key press
heightStep0.05Metres per height key press
walkStep0.05Metres per frame when moving a character mark in Walk mode. Shift multiplies it
snapToGroundtrueDrop 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.

KeyDefault
maxTravel3.0Maximum metres a mark may be dragged from where it started
armLength0.45Length of the axis arms, in metres
planeSize0.17Size of the ground square, in metres
ringRadius0.75Radius of the rotation ring, in metres
ringSegments28Segments the ring is drawn from
dragScale1.0Metres per pixel of mouse movement, before the modifiers
fast4.0Drag multiplier while holding Shift
slow0.25Drag multiplier while holding Ctrl
turnStep1.5Degrees per tick while turning the mark
scrubStep0.01Fraction of the clip the [ and ] keys scrub per tick. 0.01 is 1%
nudgeStep0.02Metres per tick when nudging with the movement keys. Shift and Ctrl scale it
movePairTogethertrueDragging one half of a duo pose moves the other too
lockPhasetrueKeep both halves of a duo clip pose in step
phaseInterval400Milliseconds between re-syncs when lockPhase is on
refreshInterval33Milliseconds 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.

KeyDefault
slotsCharacter marks8
propsProps60
vehiclesWagons and carts12
npcsNPCs, horses included20
waypointsCamera travel waypoints20

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.

KeyDefault
introTime7Seconds the establishing shot holds before the selector takes over
fov60.0Field 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
scenariothree MP_LOBBY_* namesWhat 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.

KeyDefault
searchRadius3.5Metres to look for a seat when snapping a mark to one
styles19 entriesWhat the character does once seated
models28 entriesThe objects the editor recognises as seats

Each model row carries three measurements:

Field
seatZHeight of the seat surface above the object's origin
forwardMetres from the origin towards the object's facing. 0 is the middle of a bench
headingDegrees 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.

KeyDefaultRange
speed12.0Seconds for the whole path, split between legs by length
fov55.0Field of view during the travel
curve0.30 – 0.9Corner rounding. 0 turns at the last moment
easing0.60 – 1Eases the whole path in and out. 0 is a constant speed
lookMode"ahead"Where the camera looks — see below
shakefalseCamera shake
shakeAmount1.0Strength of the shake
blackBarstrueCinematic bars during the travel
looptrueRun 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.

ListEntries
props10Campfires, bedrolls, chairs, a table, a crate, a barrel, a lamp
vehicles5Cart, buggy, bounty wagon, army supply wagon, canoe
npcs4Townsfolk from Valentine, Rhodes and Armadillo
scenarios13Standing idles that work anywhere, for marks and NPCs
postfx11Screen effects for a camera travel, None first
weather17The 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 ​

FieldDefault
enabledfalseOff until a raw clip pose is picked, or you fill this in by hand
dict""Animation dictionary
name""Clip inside that dictionary
blendIn8.0Blend-in rate
blendOut-8.0Blend-out rate
flag1TaskPlayAnim flag. RDR3's flag values differ from GTA V's
freezefalseHold the clip at one frame instead of playing it
phase0.0Which 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 ​

FieldDefault
enabledfalseOff until a pose with its own prop is picked, or you fill this in
model""Object model name
bone0Bone to attach to. A name or an index
ox oy oz0.0Offset from the bone, in metres
rx ry rz0.0Rotation 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 ​

CommandDoes
/scenecreatorOpen the editor. Name comes from ConfigCreator.Command
/scenedebugValidate the open scene and list its problems. Prints name, mark, prop, wagon and NPC counts, weather, hour and intro time
/scenedumpPrint 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
/scenekeysWatch for 10 seconds and print which read path — control, disabled or raw — sees each editor key
/scenegizmoProbe the world-to-screen native on this build, to check whether the drag handle can be drawn
scenecreatorcloseClose 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 ​

CommandDoes
/selectordebugToggle selector logging. Also takes on / off
/selectordumpPrint the selection screen's full state
/selectornativesReport which synchronised scene natives this build has, and which API the resource chose
/selectoroverlayDraw the partner height readings on screen every frame. Also takes on / off
/selectorposePlay one pose on the highlighted character
/selectorposenextStep to the next pose
/selectorkitPlay one kit emote. Takes an emote name, and upper for upper body only
/selectoranimPlay 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.

Still stuck? Discord.

Documentation for RedMorrow. Scripts are licensed per server — redistribution is not permitted.