Crate IDs — the serial printed on every box
Every hauling box, pallet and cargo box should be identifiable at a glance: crates live their own
life and are never destroyed, so each one carries a unique ID printed on its faces
(e.g. ARES-HAUL-8C44B2F9). This page explains where that ID comes from and how to add it to any crate.

The ID is the prop's UUID (it already exists)
Every networked prop — anything carrying a PropSync child node, see
Writing a generic prop — and every Vehicle already has a
UUID: generated on the server, persisted in the ScyllaDB items table, replicated to clients,
and stable forever. That UUID is the crate's unique identity: reload the world and the same crate
keeps the same id.
So the ID system does not invent a parallel identifier — it just makes that UUID visible, with a readable "company / type" prefix.
The serial shown on the crate
The on-crate text is COMPANY-TYPE-UUID, for example ARES-HAUL-8c44b2f9-…:
id_companyandid_typeare two@exportfields on the prop (defaultsARES/HAUL), set per scene in the Inspector — a pallet could beARES/PAL.- The UUID is the real unique key. On a small face it is long, so
id_short_display = trueshows only its first block, uppercased (ARES-HAUL-8C44B2F9); the full UUID stays the identity.
The whole string is computed locally from the UUID, so there is no extra database column, no new
network message and no service change — the crate already carries its UUID. The rule lives in one
small class, PropSerial (scenes/globals/prop_serial.gd): format() builds the serial, fill()
writes it on the frames. GenericProp.serial() and Vehicle.serial() both call it.
GenericProp, the UUID does notThe UUID comes from the PropSync child, so every networked prop has one whatever its body
type. The printed serial — id_company, id_type, id_short_display, serial() and the label
filling below — lives on GenericProp, which only RigidBody3D props extend. A shelf or a
warehouse therefore has a perfectly good UUID and no printed serial: to give one a label, that
short helper has to be inlined the same way its networking facade already is.
Displaying it: the prop_id_label group ("id-frames")
To show the id, drop a Label3D node into the group prop_id_label somewhere in the scene — an
"id-frame". GenericProp fills every node in that group with the serial as soon as the UUID arrives,
so you can put one frame per face and they all show the same id.

Detection is is_in_group("prop_id_label"), not the node's name. Name your frames however you like
(IdFrameFront, …); just make sure each one is in the group prop_id_label, or it will not be filled.
Adding IDs to a new crate
- The prop's root script extends
GenericProp— which requires aRigidBody3Droot, and is where the serial lives. (APropSyncchild gives it a UUID;GenericPropis what prints it.) - Add one or more
Label3Don the faces, each in the groupprop_id_label, positioned and sized on the surface (non-billboard, oriented outward — one per face). - Set
id_company/id_typeon the root (or keep the defaults), optionallyid_short_display.
No code per scene. Two reference examples:
scenes/_universe/props/containers/hauling_box.tscn— 5 id-frames (front / back / left / right / top).scenes/_universe/props/vehicles/engine_t1.tscn— a T1 motor,id_type = "ENG"withid_short_display = trueon 2 faces. Not a crate: anything that is a carriableRigidBody3Dprop can be serialised, and a part you fit into a vehicle benefits as much as a box.


Vehicles: the registration plate
A vehicle carries the same serial, as a registration plate — the truck's reads
ARES-TRUCK-C9FCA1B1. It is the same mechanism, not a second one: a Vehicle is a VehicleBody3D, so it
cannot extend GenericProp, but both hand their uuid to PropSerial.

- The plate is a
Label3Din the groupprop_id_label, in front of a lightQuadMesh(thePlateRearnode oftruck.tscn, on the tailgate). Add another one in the group for a front plate. id_company/id_type/id_short_displaysit on the vehicle's root, in the Inspector group Registration plate (defaultsARES/TRUCK/ short): a full uuid is far wider than a plate.- The plate is written when the uuid arrives — on a client that is before the vehicle enters the
tree, so
Vehiclefills it from itsuuidsetter and from_ready. A vehicle with no uuid (a bench scene) keeps the placeholder textARES-TRUCK-XXXXXXXX.