Skip to content

14. Scene

Every ped and camera position. Nothing here is derived — what you put in is exactly what the game does.

Field Meaning
ped vector4(x, y, z, heading) — where the character’s feet go and which way they face
camera vector3(x, y, z) — where the lens sits
aim vector3(x, y, z) — the point the lens looks at
fov Zoom. Lower is tighter: 30 is tight, 50 is wide

Stand where you want it, look where you want the camera to look, then run /ccpos in F8 — it prints ped, camera and aim lines ready to paste.

interp is how long a camera move takes in ms.

A still image behind the characters instead of the world. It cannot be done in CSS: the NUI is drawn over the game, so a background image in html/css/style.css would sit in front of the ped. The image is a flat, camera-facing panel parked just behind the furthest character and sized to fill the lens.

Option Notes
enabled false leaves the real world showing behind the peds
selection Image behind the line-up, relative to the resource
creator Image behind the character being built
distance Metres the panel sits behind the furthest character. Too small and it clips through them; too large and more of the real scene shows underneath
minDistance Floor for the above, for tight head/feet shots
brightness 0–255. Drawn unlit at full strength by default — turn it down to sit an image into a night scene
overscan Panel size as a fraction of the lens. 1.0 is an exact fit; a little over hides rounding at the frame edge
fade ms the panel takes to fade in once its texture is ready
aspect Image shape, width/height. false reads it from the PNG and falls back to 16:9. Only worth setting if a replacement is a different shape and comes out stretched

Both shipped images are 1672×941 (16:9) and are cropped to fill, centred, on any other screen shape. Any PNG or JPG in html/images works. /ccbackdrop toggles it in game.

The camera never moves on this screen. Both shots are fixed points, and highlighting a character slides the whole row sideways until that one stands on ped. Nothing here changes with the number of slots.

Option Notes
ped Where the highlighted character stands, and the spot the line-up slides through. Leave the row room to travel — characters either side run off both edges of frame
spacing Metres between neighbouring characters. Also how far the row travels for one step, so it is how far apart they read on screen
wide Establishing shot, used only when no character is highlighted. Shipped identical to focus; give it a real pull-back if you want one
focus The shot every character is seen in. Set it up against a single character standing on ped

To move the whole rig without changing the framing, add the same offset to every vector in the table — both scenes are written against one floor.

One camera per step group, set by camera in Config.Creator. The TATTOOS step picks its shot per body zone instead, from camera in Config.Tattoos. Any control may also name a shot with camera = "..."; clicking anything else on the step goes back to the step’s own.

Shot Framing
full Whole body. IDENTITY, CLOTHING, FINISH
feet Shins down. The SHOES spinners on CLOTHING
torso Chest up. APPEARANCE and DETAILS
head Head and shoulders. HERITAGE, HAIR, FACE
arm_left arm_right leg_left leg_right Limbs, for the TATTOOS step
wrist Left wrist, for WATCH and BRACELET — a watch is prop slot 6 and the game always puts it on the left wrist

The limb and wrist shots are the only ones off the centre line and are set up against the character’s default heading, so rotating the character moves the framing with the world — the FACE CAMERA button puts it back. “Left” and “right” are the character’s, so arm_left is on the right-hand side of the screen.

Config.Animations — one entry per character slot, so no two cards stand the same way and a character keeps its stance every login. There are Config.MaxSlots of them and the list wraps if that ceiling is raised.

Field Notes
m Clip for male characters — { dict = ..., name = ... }
f Clip for female characters (falls back to m)
active Optional { m = ..., f = ... }, played only while the camera is pushed in on this character
label Documentation only

idle and active at the top of the table are the fallback for slots past the end of the list, and for any pose whose dict the game does not have. A missing dict costs a pose, not a hang — check one with /ccpose, or print(DoesAnimDictExist("your@dict@here")).

Allow /relog. Only enable it if every resource on your server resets its state correctly on logout.