syntax = "proto3"; // Trimmed subset of Rec Room's persistence schema. Only the messages and // fields we actually populate when handing the client a "default-but-with- // permissions" room blob. Wire-compatible with the full schema in // RR_ProtobufDefinitions.zip because proto3 ignores unknown fields and // uses defaults for missing ones — so the client deserializes the bytes we // emit into its richer types just fine. // // Field numbers MUST match the upstream schema exactly; deviating breaks // the wire format. package rec_room; option csharp_namespace = "RecRoom.Protobuf"; // ── Overridable wrappers (rec_room/persistence/overridable_field_data.proto) message OverridableIntData { bool overrides = 1; int32 inner_value = 2; } message OverridableBoolData { bool overrides = 1; bool inner_value = 2; } message OverridableStringData { bool overrides = 1; string inner_value = 2; } message OverridableListStringData { bool overrides = 1; repeated string inner_value = 2; } // ── Per-role permission grants (rec_room/player_roles/player_room_role_data.proto) // // Field numbers verified against the 2023 WriteTo disassembly in // C:\tmp\recroom-2023-03-21-isil\IsilDump\RecRoom.Protobuf.Runtime. message PlayerRoomRoleData { reserved 15; int32 DEPRECATED_role_id = 1; int32 DEPRECATED_role_rank = 2; bool DEPRECATED_is_role_active = 3; bool DEPRECATED_is_ag_role = 4; string role_name = 5; OverridableStringData name = 6; OverridableBoolData can_assign_roles = 7; OverridableIntData vote_kick_permission = 8; OverridableBoolData can_invite = 9; OverridableBoolData DEPRECATED_can_edit_circuits = 10; OverridableBoolData can_start_games = 11; OverridableBoolData can_talk = 12; OverridableBoolData can_print_photos = 13; OverridableBoolData can_edit_room_roles = 14; OverridableBoolData can_self_revive = 16; OverridableBoolData can_end_games_early = 17; bool is_modified_by_player = 18; OverridableListStringData auto_assigned_game_roles = 19; int32 role_version = 20; OverridableBoolData can_change_game_mode = 21; OverridableBoolData can_use_maker_pen = 22; OverridableBoolData can_use_delete_all_button = 23; OverridableBoolData can_save_inventions = 24; OverridableBoolData disable_mic_auto_mute = 25; OverridableBoolData can_use_share_cam = 26; string role_guid = 27; OverridableBoolData unknown_permission_20 = 28; OverridableBoolData unknown_permission_21 = 29; OverridableBoolData unknown_permission_22 = 30; OverridableBoolData unknown_permission_23 = 31; } // ── Role collection (rec_room/player_roles/room_role_collection_data.proto) message RoomRoleCollectionData { repeated PlayerRoomRoleData room_roles = 1; int32 rec_net_migration_version = 2; } // ── PersistedRoomData top-level (rec_room/persistence/persisted_room_data.proto) // // The full schema has many more fields — we only set the fields the // December 2020 client needs for an editable minimal blob. Its // RoomPersistenceManager checks field 1 against a minimum editable // persistence version of 20, so generated blobs must carry a current // version or room editors see the native "save data is out-of-date" prompt. message PersistedRoomData { int32 DEPRECATED_version = 1; // field 2 (persistence_views) — repeated, default empty list. // fields 3..22 — left at defaults. RoomRoleCollectionData room_role_data = 23; // field 24+ — left at defaults. }