5.3 KiB
Avatar item data — what was changed, and how to revert
Everything here is data only. No code change is needed to undo any of it: restore the
named backup over avatar_items.json, restart the server, done.
Backups, newest last
| file | state it holds |
|---|---|
avatar_items.json.bak-malformed-desc |
original. 1108 descriptors had fewer than 4 fields |
avatar_items.json.bak-dupid |
descriptors padded to 4 fields; 3 items still shared id 9503 |
avatar_items.json.bak-before-realids |
duplicate ids fixed; ids still renumbered 1..9505 |
avatar_items.json.bak-shortguids |
real ids restored; descriptors still mixed UUID / short guid |
avatar_items.json |
current: every id written as a full UUID |
Change 1 — descriptors padded to 4 fields
AvatarItemDesc must be guid,combination,combination,combination. The client parses
exactly 4 comma-separated fields; a 2-field entry never lands live and only appears after
a relog. 1108 entries were short and are now padded. The 2023 server documents this in
Campus-2023/Classes/DBs/PlayerDB.cs (see NormalizeItemDesc).
Revert: cp avatar_items.json.bak-malformed-desc avatar_items.json
Change 2 — duplicate AvatarItemId removed
Three hand-added items (Green Cheer Sash, Helmet Hair, Hacker Suit) all carried id 9503
and were the only three missing TagList / CreatedAt / ThumbnailImage. Given unique
ids and the same key set as the other 3058.
NOTE: this turned out NOT to be why items fail to load — the 2023 catalog has 153 duplicate ids and works fine. Kept because it is still correct, not because it fixed anything.
Revert: cp avatar_items.json.bak-dupid avatar_items.json
Change 3 — REAL AvatarItemIds restored ← the one to revert first if things get worse
The 2025 catalog had been renumbered 1..9505. Of 2815 items present in both this catalog
and the known-good 2023 catalog, only 2 had a matching AvatarItemId. The 2023
catalog carries the real Rec Room ids (range -1 .. 1995874561).
Ids are now taken from the 2023 catalog, matched on the normalised AvatarItemDesc
(trailing empty colour slots dropped, so guid,,, and guid, match):
- 2815 items restored to their real id — e.g. White Hat 1462 -> 1604
- 246 items have no 2023 counterpart and were given ids above the real id space so they cannot collide
- 0 duplicate ids
Why: if the client keys its item database or asset lookup on AvatarItemId, renumbered
ids break items in exactly the partial way seen — some hats and shirts load, others do
not, while the GET response contains everything.
Revert: cp avatar_items.json.bak-before-realids avatar_items.json
Then also regenerate ../AlgorithmicLists/customizeitems_5.json, which lists these ids.
Change 4 — every id expanded to a full UUID ← revert this one first
Rec Room writes ids two ways: a full UUID, or a 22-char base64 "short guid". This catalog mixed both, sometimes inside the same descriptor:
Hacker Suit 4308da04-af84-40bb-845a-7a9e1a2726ec,5aa7be74-19a9-4dd8-b525-46c5aef34866,, LOADS
White Hat 76369aef-aeda-46d2-996a-cd00594d0543,8XajS2adOEOqzqnLy6-zcQ,P12CUkIg8EuFihGQsvPlxg, DID NOT LOAD
Kyle reports the same pattern on the 2023 build: items written with full UUIDs loaded, items with short guids did not. Every short guid is now expanded:
- 1664 items rewritten — 369 base guids, 2289 combinations
- 0 short tokens left, all descriptors still 4 fields
- White Hat is now
76369aef-aeda-46d2-996a-cd00594d0543,4ba376f1-9d66-4338-aace-a9cbcbafb371,52825d3f-2042-4bf0-858a-1190b2f3e5c6,
Byte order: .NET new Guid(byte[]) reads the first three fields little-endian, i.e. Python's
uuid.UUID(bytes_le=...). Same conversion as the 2023 server's ItemGuids.NormalizeGuid.
Verified after the rewrite: 157/157 starter items still resolve, all 3061 descriptors written in the OLD spelling still match the new catalog, 3061 keys still unique.
PlayerDB.NormalizeAvatarItemDesc now expands short guids too, so ownership rows,
DefaultAvatarItems.json and the storefronts keep matching whichever spelling they hold.
That code change is safe to leave in place even if this data change is reverted.
Revert: cp avatar_items.json.bak-shortguids avatar_items.json
Related file — AlgorithmicLists/customizeitems_5.json
GET /lists/algorithmiclists/customizeitems?type=5 was returning
{"Type":5,"Entities":[]} because the file did not exist. Generated from this catalog,
one {Id, Context} entry per item, same shape as new_1.json.
The meaning of Id here is INFERRED (the rooms list uses room ids, so this uses avatar
item ids). If it causes trouble, just delete the file — a missing file makes the endpoint
return the empty list it returned before.
It must be regenerated whenever avatar_items.json ids change, or it points at ids
that no longer exist.
Ruled out — do not spend time re-checking these
Each was checked against the 2023 catalog, which works:
AvatarItemType: 0on every item — 2023 is identical, and so is real captured store data inGiftDropStores/*.json. The client takes the type from the item's ASSET.- Missing thumbnails — the 2023 server ships 3 image files total and 404s everything else.
- Mixed UUID / 22-char short-guid combination fields — both catalogs mix them the same way.
- Response truncation — the full 1.03 MB reaches the client, White Hat included.