diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1d7b6ea9b..309b0fa94 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,7 +17,7 @@ jobs: strategy: fail-fast: false matrix: - rust_version: [stable, "1.59.0"] + rust_version: [stable, "1.63.0"] steps: - uses: actions/checkout@v1 diff --git a/README.md b/README.md index 680adab78..9e0c8f6e7 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,7 @@ Roblox Lua implementation of DOM APIs, allowing Instance reflection from inside | BinaryString | `Terrain.MaterialColors` | ✔ | ➖ | ✔ | ✔ | | Bool | `Part.Anchored` | ✔ | ✔ | ✔ | ✔ | | BrickColor | `Part.BrickColor` | ✔ | ✔ | ✔ | ✔ | +| Bytecode | N/A | ❌ | ⛔ | ❌ | ❌ | | CFrame | `Camera.CFrame` | ✔ | ✔ | ✔ | ✔ | | Color3 | `Lighting.Ambient` | ✔ | ✔ | ✔ | ✔ | | Color3uint8 | `Part.BrickColor` | ✔ | ✔ | ✔ | ✔ | @@ -110,7 +111,7 @@ This project has unveiled a handful of interesting bugs and quirks in Roblox! - `ColorSequence`'s XML serialization contains an extra value per keypoint that was intended to be used as an envelope value, but was never implemented. ## Minimum Rust Version -rbx-dom supports Rust 1.59.0 and newer. Updating the minimum supported Rust version will only be done when necessary, but may happen as part of minor version bumps. +rbx-dom supports Rust 1.63.0 and newer. Updating the minimum supported Rust version will only be done when necessary, but may happen as part of minor version bumps. ## License rbx-dom is available under the MIT license. See [LICENSE.txt](LICENSE.txt) for details. diff --git a/docs/binary.md b/docs/binary.md index a11cbc3ca..dbe2ab40d 100644 --- a/docs/binary.md +++ b/docs/binary.md @@ -47,6 +47,7 @@ This document is based on: - [PhysicalProperties](#physicalproperties) - [Color3uint8](#color3uint8) - [Int64](#int64) + - [Bytecode](#bytecode) - [SharedString](#sharedstring) - [OptionalCoordinateFrame](#optionalcoordinateframe) - [UniqueId](#uniqueid) @@ -93,20 +94,30 @@ Every file starts with a 32 byte header. ## Chunks Every chunk starts with a 16 byte header followed by the chunk's data. -| Field Name | Format | Value | -|:--------------------|:--------|:--------------------------------------------------| -| Chunk Name | 4 bytes | The chunk's name, like `META` or `INST` | -| Compressed Length | `u32` | Length of the chunk in bytes, if it is compressed | -| Uncompressed Length | `u32` | Length of the chunk's data after decompression | -| Reserved | 4 bytes | Always `0` | +| Field Name | Format | Value | +|:--------------------|:---------|:--------------------------------------------------| +| Chunk Name | 4 bytes | The chunk's name, like `META` or `INST` | +| Compressed Length | `u32` | Length of the chunk in bytes, if it is compressed | +| Uncompressed Length | `u32` | Length of the chunk's data after decompression | +| Reserved | 4 bytes | Always `0` | +| Chunk Data | Variable | The data contained in the chunk | If **Chunk Name** is less than four bytes, the remainder is filled with zeros. If **Compressed Length** is zero, **Chunk Data** contains **Uncompressed Length** bytes of data for the chunk. -If **Compressed Length** is nonzero, **Chunk Data** contains an LZ4 compressed block. It is **Compressed Length** bytes long and will expand to **Uncompressed Length** bytes when decompressed. +If **Compressed Length** is nonzero, **Chunk Data** will either contain an [LZ4][LZ4] or [ZSTD][ZSTD] compressed block. This compressed body is **Compressed Length** bytes long and will expand to **Uncompressed Length** bytes when decompressed. -When the **chunk data** is compressed, it is done so using the [LZ4](https://github.com/lz4/lz4) compression algorithm. +Which of the compression algorithms is used is indicated by the first several bytes of the compressed chunk body. +- If the first 4 bytes of the block are the literal sequence `28 b5 2f fd`, the block is compressed using the ZSTD algorithm. +- Otherwise, the block is compressed using the LZ4 algorithm. + +When a chunk is compressed using ZSTD, there is also a ZSTD frame present following the magic number that must be read by a decompressor. When it is compressed using LZ4, there is no frame and the compressed data begins immediately after the header. + +The data contained in **Chunk Data** varies in formatting based on the value of **Chunk Name**. Chunks used by Roblox are documented below: + +[ZSTD]: https://github.com/facebook/zstd/ +[LZ4]: https://github.com/lz4/lz4 ### `META` Chunk The `META` chunk has this layout: @@ -614,6 +625,19 @@ When an array of `Int64` values is present, the bytes of the integers are subjec `SharedString` values are stored as an [Interleaved Array](#byte-interleaving) of `u32` values that represent indices in the [`SSTR`](#sstr-chunk) string array. +### Bytecode +**Type ID `0x1d`** + +`Bytecode` values are stored identically to [`String`](#string) properties but contain precompiled [Luau][Luau] bytecode instructions rather than string data. + +This data type is disregarded by Roblox Studio and is only loaded by Roblox clients when cryptographically signed. Given that by design it is impossible to generate these signatures, the signing method is not documented in this spec file. For posterity however, the chunk used by Roblox is named `SIGN`. It is disregarded when loaded by Roblox Studio. + +It is highly recommended that implementations do not modify or interpret `Bytecode` data they encounter and instead simply read and write the data as-is. + +Implementors should be aware that running unsigned `Bytecode` is **incredibly unsafe** and should not be done unless the source can be validated somehow. Doing so is the equivalent to giving the author of the `Bytecode` unrestricted access to the system it is ran on. + +[Luau]: https://github.com/Roblox/luau + ### OptionalCoordinateFrame **Type ID `0x1e`** diff --git a/docs/patching-database.md b/docs/patching-database.md index d1d1ffb51..bbe39b6cc 100644 --- a/docs/patching-database.md +++ b/docs/patching-database.md @@ -1,5 +1,5 @@ # How to Fix a New Property Added by Roblox -When Roblox introduces new properties, usually tools like Rojo can use them without any additional changes. Sometimes, though, properties are added with different names, multiple serialized forms, or aren't listed at all in the reflection dump that Roblox gives us. +When Roblox introduces new properties, usually tools like Rojo can use them without any additional changes. Sometimes, though, properties are added with different names, multiple serialized forms, need to be migrated to a new property, or aren't listed at all in the reflection dump that Roblox gives us. This document describes some common scenarios, and what work needs to happen to fix them. @@ -91,6 +91,32 @@ Change: AliasFor: MaxPlayers ``` +## Roblox added a new property, but it's a migration from an existing property, and the existing property no longer loads +Sometimes Roblox migrates an existing property whose type is too constrained to a new property with a more flexible type. + +Without special handling, this can cause problems for binary files because when old and new models are mixed together, the binary serializer must add the new property to the old models. Without special instruction, it'll just add the default value. This can result in weird behavior like old text UI all having the Arial font, because the default value of a new property took priority. + +To fix this, we need to write a migration (in Rust) and apply it is as a patch (using database patch files). + +First, add your migration to the PropertyMigration enum in [`rbx_reflection/src/migrations`][migrations]. The migration should be named after the properties it's migrating. For example, migrating from `Font` to `FontFace` would be named `FontToFontFace`. + +Next, add code to convert from the old property's type to the new property's type. This code should be a new match arm in the `perform_migration` function in [`rbx_reflection/src/migrations`][migrations]. + +Finally, add a patch in the [patches](patches) folder. This patch should change the old property's serialization type to `Migrate`, specifying the new property name and the migration name. + +For example, the patch for fonts looks like: +```yaml +Change: + TextLabel: + Font: # Property we're migrating *from* + Serialization: + Type: Migrate + Property: FontFace # Property we're migrating *to* + Migration: FontToFontFace # Migration we're using +``` + +If this property is present on multiple classes, you may need to specify the Serialization change for multiple properties on multiple classes. For example, the `Font` property is present on `TextLabel`, `TextButton`, `TextBox` without being derived from a superclass, so the real patch is approximately 3 times as long since it needs to be applied to each class. + ## Roblox added a new property, but modifying it from Lua requires a special API Sometimes a property is added that cannot be assigned directly from Lua. @@ -148,4 +174,5 @@ These pull requests outline how we implemented support for Attributes in rbx-dom [rbx-dom]: https://github.com/rojo-rbx/rbx-dom [patches]: https://github.com/rojo-rbx/rbx-dom/tree/master/patches -[custom-properties]: https://github.com/rojo-rbx/rbx-dom/blob/master/rbx_dom_lua/src/customProperties.lua \ No newline at end of file +[custom-properties]: https://github.com/rojo-rbx/rbx-dom/blob/master/rbx_dom_lua/src/customProperties.lua +[migrations]: https://github.com/rojo-rbx/rbx-dom/blob/master/rbx_reflection/src/migration.rs \ No newline at end of file diff --git a/generate_reflection/src/property_patches.rs b/generate_reflection/src/property_patches.rs index 19853573c..ceeaa404f 100644 --- a/generate_reflection/src/property_patches.rs +++ b/generate_reflection/src/property_patches.rs @@ -9,7 +9,8 @@ use std::path::Path; use anyhow::{anyhow, bail, Context}; use rbx_reflection::{ - DataType, PropertyDescriptor, PropertyKind, ReflectionDatabase, Scriptability, + DataType, PropertyDescriptor, PropertyKind, PropertyMigration, ReflectionDatabase, + Scriptability, }; use serde::Deserialize; @@ -84,6 +85,11 @@ pub enum PropertySerialization { #[serde(rename = "As")] serializes_as: String, }, + #[serde(rename_all = "PascalCase")] + Migrate { + property: String, + migration: PropertyMigration, + }, } impl From for rbx_reflection::PropertySerialization<'_> { @@ -96,6 +102,13 @@ impl From for rbx_reflection::PropertySerialization<'_> { PropertySerialization::SerializesAs { serializes_as } => { rbx_reflection::PropertySerialization::SerializesAs(Cow::Owned(serializes_as)) } + PropertySerialization::Migrate { + property, + migration, + } => rbx_reflection::PropertySerialization::Migrate { + property: Cow::Owned(property), + migration, + }, } } } diff --git a/patches/model.yml b/patches/model.yml new file mode 100644 index 000000000..92ca130a8 --- /dev/null +++ b/patches/model.yml @@ -0,0 +1,15 @@ +Add: + Model: + ScaleFactor: + AliasFor: Scale + DataType: + Value: Float32 + Scriptability: None + +Change: + Model: + Scale: + Serialization: + Type: SerializesAs + As: ScaleFactor + Scriptability: Custom \ No newline at end of file diff --git a/patches/screengui.yml b/patches/screengui.yml new file mode 100644 index 000000000..9ddc5f241 --- /dev/null +++ b/patches/screengui.yml @@ -0,0 +1,7 @@ +Change: + ScreenGui: + IgnoreGuiInset: + Serialization: + Type: Migrate + Property: ScreenInsets + Migration: IgnoreGuiInsetToScreenInsets \ No newline at end of file diff --git a/patches/text-gui.yml b/patches/text-gui.yml new file mode 100644 index 000000000..7e60fd230 --- /dev/null +++ b/patches/text-gui.yml @@ -0,0 +1,19 @@ +Change: + TextLabel: + Font: + Serialization: + Type: Migrate + Property: FontFace + Migration: FontToFontFace + TextButton: + Font: + Serialization: + Type: Migrate + Property: FontFace + Migration: FontToFontFace + TextBox: + Font: + Serialization: + Type: Migrate + Property: FontFace + Migration: FontToFontFace \ No newline at end of file diff --git a/rbx_binary/CHANGELOG.md b/rbx_binary/CHANGELOG.md index f7dedb07f..5be4104b6 100644 --- a/rbx_binary/CHANGELOG.md +++ b/rbx_binary/CHANGELOG.md @@ -2,8 +2,10 @@ ## Unreleased * Added support for `Font` values. ([#248]) +* Fixed the nondeterministic output of SSTR chunk when multiple shared strings are present. ([#254]) [#248]: https://github.com/rojo-rbx/rbx-dom/pull/248 +[#254]: https://github.com/rojo-rbx/rbx-dom/pull/254 ## 0.6.6 (2022-06-29) * Fixed unserialized properties getting deserialized, like `BasePart.MaterialVariant`. ([#230]) diff --git a/rbx_binary/src/core.rs b/rbx_binary/src/core.rs index 201afaa87..b5620dfcc 100644 --- a/rbx_binary/src/core.rs +++ b/rbx_binary/src/core.rs @@ -434,7 +434,9 @@ fn find_serialized_from_canonical<'a>( match serialization { // This property serializes as-is. This is the happiest path: both the // canonical and serialized descriptors are the same! - PropertySerialization::Serializes => Some(canonical), + PropertySerialization::Serializes | PropertySerialization::Migrate { .. } => { + Some(canonical) + } // This property serializes under an alias. That property should have a // corresponding property descriptor within the same class descriptor. diff --git a/rbx_binary/src/deserializer/state.rs b/rbx_binary/src/deserializer/state.rs index ff428cdcb..ce6def397 100644 --- a/rbx_binary/src/deserializer/state.rs +++ b/rbx_binary/src/deserializer/state.rs @@ -14,7 +14,7 @@ use rbx_dom_weak::{ }, InstanceBuilder, WeakDom, }; -use rbx_reflection::{DataType, PropertyKind, PropertySerialization}; +use rbx_reflection::{perform_migration, DataType, PropertyKind, PropertySerialization}; use crate::{ cframe, @@ -258,6 +258,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { let canonical_name; let canonical_type; + let migrated_to; match find_property_descriptors( self.deserializer.database.unwrap(), @@ -302,6 +303,17 @@ impl<'a, R: Read> DeserializerState<'a, R> { } }; + migrated_to = match &descriptors.canonical.kind { + PropertyKind::Canonical { + serialization: + PropertySerialization::Migrate { + property, + migration, + }, + } => Some((migration, property)), + _ => None, + }; + log::trace!( "Known prop, canonical name {} and type {:?}", canonical_name, @@ -320,31 +332,57 @@ impl<'a, R: Read> DeserializerState<'a, R> { } } + migrated_to = None; + log::trace!("Unknown prop, using type {:?}", canonical_type); } } + let add_property: Box ()> = match &migrated_to { + Some(_) => Box::new(|instance: &mut Instance, value| { + let (migration, property) = migrated_to.clone().unwrap(); + if !instance.builder.has_property(property.as_ref()) { + match perform_migration(*migration, &value) { + Ok(value) => { + instance.builder.add_property(property.as_ref(), value); + } + Err(e) => { + log::warn!( + "Failed to migrate property {} to {} because: {}", + canonical_name, + property, + e.to_string() + ); + } + }; + } + }), + None => Box::new(|instance: &mut Instance, value| { + instance.builder.add_property(&canonical_name, value); + }), + }; + match binary_type { Type::String => match canonical_type { VariantType::String => { for referent in &type_info.referents { let instance = self.instances_by_ref.get_mut(referent).unwrap(); let value = chunk.read_string()?; - instance.builder.add_property(&canonical_name, value); + add_property(instance, value.into()); } } VariantType::Content => { for referent in &type_info.referents { let instance = self.instances_by_ref.get_mut(referent).unwrap(); let value: Content = chunk.read_string()?.into(); - instance.builder.add_property(&canonical_name, value); + add_property(instance, value.into()); } } VariantType::BinaryString => { for referent in &type_info.referents { let instance = self.instances_by_ref.get_mut(referent).unwrap(); let value: BinaryString = chunk.read_binary_string()?.into(); - instance.builder.add_property(&canonical_name, value); + add_property(instance, value.into()); } } VariantType::Tags => { @@ -361,7 +399,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { } })?; - instance.builder.add_property(&canonical_name, value); + add_property(instance, value.into()); } } VariantType::Attributes => { @@ -371,7 +409,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { match Attributes::from_reader(buffer.as_slice()) { Ok(value) => { - instance.builder.add_property(&canonical_name, value); + add_property(instance, value.into()); } Err(err) => { log::warn!( @@ -380,9 +418,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { err ); - instance - .builder - .add_property(&canonical_name, BinaryString::from(buffer)); + add_property(instance, BinaryString::from(buffer).into()); } } } @@ -401,7 +437,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { for referent in &type_info.referents { let instance = self.instances_by_ref.get_mut(referent).unwrap(); let value = chunk.read_bool()?; - instance.builder.add_property(&canonical_name, value); + add_property(instance, value.into()); } } invalid_type => { @@ -420,7 +456,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { for (value, referent) in values.into_iter().zip(&type_info.referents) { let instance = self.instances_by_ref.get_mut(referent).unwrap(); - instance.builder.add_property(&canonical_name, value); + add_property(instance, value.into()); } } invalid_type => { @@ -439,7 +475,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { for (value, referent) in values.into_iter().zip(&type_info.referents) { let instance = self.instances_by_ref.get_mut(referent).unwrap(); - instance.builder.add_property(&canonical_name, value); + add_property(instance, value.into()); } } invalid_type => { @@ -456,7 +492,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { for referent in &type_info.referents { let instance = self.instances_by_ref.get_mut(referent).unwrap(); let value = chunk.read_le_f64()?; - instance.builder.add_property(&canonical_name, value); + add_property(instance, value.into()); } } invalid_type => { @@ -483,7 +519,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { for (value, referent) in values.zip(&type_info.referents) { let instance = self.instances_by_ref.get_mut(referent).unwrap(); - instance.builder.add_property(&canonical_name, value); + add_property(instance, value.into()); } } invalid_type => { @@ -522,7 +558,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { for (value, referent) in values.zip(&type_info.referents) { let instance = self.instances_by_ref.get_mut(referent).unwrap(); - instance.builder.add_property(&canonical_name, value); + add_property(instance, value.into()); } } invalid_type => { @@ -546,12 +582,13 @@ impl<'a, R: Read> DeserializerState<'a, R> { let instance = self.instances_by_ref.get_mut(referent).unwrap(); - instance.builder.add_property( - &canonical_name, + add_property( + instance, Ray::new( Vector3::new(origin_x, origin_y, origin_z), Vector3::new(direction_x, direction_y, direction_z), - ), + ) + .into(), ); } } @@ -577,7 +614,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { actual_value: value.to_string(), })?; - instance.builder.add_property(&canonical_name, faces); + add_property(instance, faces.into()); } } invalid_type => { @@ -603,7 +640,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { actual_value: value.to_string(), })?; - instance.builder.add_property(&canonical_name, axes); + add_property(instance, axes.into()); } } invalid_type => { @@ -633,7 +670,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { actual_value: value.to_string(), })?; - instance.builder.add_property(&canonical_name, color); + add_property(instance, color.into()); } } invalid_type => { @@ -663,7 +700,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { for (color, referent) in colors.zip(&type_info.referents) { let instance = self.instances_by_ref.get_mut(referent).unwrap(); - instance.builder.add_property(&canonical_name, color); + add_property(instance, color.into()); } } invalid_type => { @@ -687,7 +724,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { for (value, referent) in values.zip(&type_info.referents) { let instance = self.instances_by_ref.get_mut(referent).unwrap(); - instance.builder.add_property(&canonical_name, value); + add_property(instance, value.into()); } } invalid_type => { @@ -717,7 +754,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { for (value, referent) in values.zip(&type_info.referents) { let instance = self.instances_by_ref.get_mut(referent).unwrap(); - instance.builder.add_property(&canonical_name, value); + add_property(instance, value.into()); } } invalid_type => { @@ -783,7 +820,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { for (cframe, referent) in values.zip(referents) { let instance = self.instances_by_ref.get_mut(referent).unwrap(); - instance.builder.add_property(&canonical_name, cframe); + add_property(instance, cframe.into()); } } invalid_type => { @@ -802,9 +839,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { for (value, referent) in values.into_iter().zip(&type_info.referents) { let instance = self.instances_by_ref.get_mut(referent).unwrap(); - instance - .builder - .add_property(&canonical_name, Enum::from_u32(value)); + add_property(instance, Enum::from_u32(value).into()); } } invalid_type => { @@ -829,7 +864,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { }; let instance = self.instances_by_ref.get_mut(referent).unwrap(); - instance.builder.add_property(&canonical_name, rbx_value); + add_property(instance, rbx_value.into()); } } invalid_type => { @@ -845,13 +880,14 @@ impl<'a, R: Read> DeserializerState<'a, R> { VariantType::Vector3int16 => { for referent in &type_info.referents { let instance = self.instances_by_ref.get_mut(referent).unwrap(); - instance.builder.add_property( - &canonical_name, + add_property( + instance, Vector3int16::new( chunk.read_le_i16()?, chunk.read_le_i16()?, chunk.read_le_i16()?, - ), + ) + .into(), ) } } @@ -870,8 +906,8 @@ impl<'a, R: Read> DeserializerState<'a, R> { let instance = self.instances_by_ref.get_mut(referent).unwrap(); let family = chunk.read_string()?; - let weight = FontWeight::from_u16(chunk.read_le_u16()?); - let style = FontStyle::from_u8(chunk.read_u8()?); + let weight = FontWeight::from_u16(chunk.read_le_u16()?).unwrap_or_default(); + let style = FontStyle::from_u8(chunk.read_u8()?).unwrap_or_default(); let cached_face_id = chunk.read_string()?; let cached_face_id = if cached_face_id.is_empty() { @@ -880,14 +916,15 @@ impl<'a, R: Read> DeserializerState<'a, R> { Some(cached_face_id) }; - instance.builder.add_property( - &canonical_name, + add_property( + instance, Font { family, weight, style, cached_face_id, - }, + } + .into(), ); } } @@ -915,9 +952,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { )) } - instance - .builder - .add_property(&canonical_name, NumberSequence { keypoints }) + add_property(instance, NumberSequence { keypoints }.into()) } } invalid_type => { @@ -950,9 +985,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { chunk.read_le_f32()?; } - instance - .builder - .add_property(&canonical_name, ColorSequence { keypoints }) + add_property(instance, ColorSequence { keypoints }.into()) } } invalid_type => { @@ -968,9 +1001,9 @@ impl<'a, R: Read> DeserializerState<'a, R> { VariantType::NumberRange => { for referent in &type_info.referents { let instance = self.instances_by_ref.get_mut(referent).unwrap(); - instance.builder.add_property( - &canonical_name, - NumberRange::new(chunk.read_le_f32()?, chunk.read_le_f32()?), + add_property( + instance, + NumberRange::new(chunk.read_le_f32()?, chunk.read_le_f32()?).into(), ) } } @@ -1004,7 +1037,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { for (value, referent) in values.zip(&type_info.referents) { let instance = self.instances_by_ref.get_mut(referent).unwrap(); - instance.builder.add_property(&canonical_name, value) + add_property(instance, value.into()) } } invalid_type => { @@ -1034,7 +1067,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { Variant::PhysicalProperties(PhysicalProperties::Default) }; - instance.builder.add_property(&canonical_name, value); + add_property(instance, value.into()); } } invalid_type => { @@ -1065,7 +1098,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { for (color, referent) in colors.into_iter().zip(&type_info.referents) { let instance = self.instances_by_ref.get_mut(referent).unwrap(); - instance.builder.add_property(&canonical_name, color); + add_property(instance, color.into()); } } invalid_type => { @@ -1084,7 +1117,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { for (value, referent) in values.into_iter().zip(&type_info.referents) { let instance = self.instances_by_ref.get_mut(referent).unwrap(); - instance.builder.add_property(&canonical_name, value); + add_property(instance, value.into()); } } invalid_type => { @@ -1114,9 +1147,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { let instance = self.instances_by_ref.get_mut(referent).unwrap(); - instance - .builder - .add_property(&canonical_name, shared_string.clone()); + add_property(instance, shared_string.clone().into()); } } invalid_type => { @@ -1212,7 +1243,7 @@ impl<'a, R: Read> DeserializerState<'a, R> { for (cframe, referent) in values.zip(referents) { let instance = self.instances_by_ref.get_mut(referent).unwrap(); - instance.builder.add_property(&canonical_name, cframe); + add_property(instance, cframe.into()); } } invalid_type => { diff --git a/rbx_binary/src/serializer/state.rs b/rbx_binary/src/serializer/state.rs index 042cdce52..ccccb5473 100644 --- a/rbx_binary/src/serializer/state.rs +++ b/rbx_binary/src/serializer/state.rs @@ -248,6 +248,13 @@ impl<'dom, W: Write> SerializerState<'dom, W> { to_visit.extend(instance.children()); } + // Sort shared_strings by their hash, to ensure they are deterministically added + // into the SSTR chunk, then assign them corresponding ids + self.shared_strings.sort_by_key(SharedString::hash); + for (id, shared_string) in self.shared_strings.iter().cloned().enumerate() { + self.shared_string_ids.insert(shared_string, id as u32); + } + log::debug!("Type info discovered: {:#?}", self.type_infos); Ok(()) @@ -267,8 +274,9 @@ impl<'dom, W: Write> SerializerState<'dom, W> { // Discover and track any shared strings we come across. if let Variant::SharedString(shared_string) = prop_value { if !self.shared_string_ids.contains_key(shared_string) { - let id = self.shared_strings.len() as u32; - self.shared_string_ids.insert(shared_string.clone(), id); + // We insert it with a dummy id of 0 so that we can check for contains_key. + // The actual id is set in `add_instances` + self.shared_string_ids.insert(shared_string.clone(), 0); self.shared_strings.push(shared_string.clone()) } } diff --git a/rbx_binary/src/tests/models.rs b/rbx_binary/src/tests/models.rs index c2e8719e4..967cdd6aa 100644 --- a/rbx_binary/src/tests/models.rs +++ b/rbx_binary/src/tests/models.rs @@ -40,6 +40,7 @@ binary_tests! { ref_adjacent, ref_child, ref_parent, + sharedstring, tags, three_brickcolorvalues, three_color3values, @@ -60,4 +61,5 @@ binary_tests! { weldconstraint, package_link, text_label_with_font, + gui_inset_and_font_migration, } diff --git a/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__gui-inset-and-font-migration__decoded.snap b/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__gui-inset-and-font-migration__decoded.snap new file mode 100644 index 000000000..f87bfdd5b --- /dev/null +++ b/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__gui-inset-and-font-migration__decoded.snap @@ -0,0 +1,484 @@ +--- +source: rbx_binary/src/tests/util.rs +expression: decoded_viewed +--- +- referent: referent-0 + name: Folder + class: Folder + properties: + Attributes: + Attributes: {} + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + children: + - referent: referent-1 + name: "IgnoreGuiInset: true" + class: ScreenGui + properties: + Attributes: + Attributes: {} + AutoLocalize: + Bool: true + ClipToDeviceSafeArea: + Bool: true + DisplayOrder: + Int32: 0 + Enabled: + Bool: true + ResetOnSpawn: + Bool: true + RootLocalizationTable: "null" + SafeAreaCompatibility: + Enum: 1 + ScreenInsets: + Enum: 1 + SelectionBehaviorDown: + Enum: 0 + SelectionBehaviorLeft: + Enum: 0 + SelectionBehaviorRight: + Enum: 0 + SelectionBehaviorUp: + Enum: 0 + SelectionGroup: + Bool: false + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + ZIndexBehavior: + Enum: 1 + children: [] + - referent: referent-2 + name: "IgnoreGuiInset: false" + class: ScreenGui + properties: + Attributes: + Attributes: {} + AutoLocalize: + Bool: true + ClipToDeviceSafeArea: + Bool: true + DisplayOrder: + Int32: 0 + Enabled: + Bool: true + ResetOnSpawn: + Bool: true + RootLocalizationTable: "null" + SafeAreaCompatibility: + Enum: 1 + ScreenInsets: + Enum: 2 + SelectionBehaviorDown: + Enum: 0 + SelectionBehaviorLeft: + Enum: 0 + SelectionBehaviorRight: + Enum: 0 + SelectionBehaviorUp: + Enum: 0 + SelectionGroup: + Bool: false + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + ZIndexBehavior: + Enum: 1 + children: + - referent: referent-3 + name: TextLabel + class: TextLabel + properties: + Active: + Bool: false + AnchorPoint: + Vector2: + - 0 + - 0 + Attributes: + Attributes: {} + AutoLocalize: + Bool: true + AutomaticSize: + Enum: 0 + BackgroundColor3: + Color3: + - 1 + - 1 + - 1 + BackgroundTransparency: + Float32: 0 + BorderColor3: + Color3: + - 0.10588236 + - 0.16470589 + - 0.20784315 + BorderMode: + Enum: 0 + BorderSizePixel: + Int32: 1 + ClipsDescendants: + Bool: false + Draggable: + Bool: false + FontFace: + Font: + family: "rbxasset://fonts/families/Inconsolata.json" + weight: Regular + style: Normal + cachedFaceId: ~ + LayoutOrder: + Int32: 0 + LineHeight: + Float32: 1 + MaxVisibleGraphemes: + Int32: -1 + NextSelectionDown: "null" + NextSelectionLeft: "null" + NextSelectionRight: "null" + NextSelectionUp: "null" + Position: + UDim2: + - - 0 + - 0 + - - 0 + - 0 + RichText: + Bool: false + RootLocalizationTable: "null" + Rotation: + Float32: 0 + Selectable: + Bool: false + SelectionBehaviorDown: + Enum: 0 + SelectionBehaviorLeft: + Enum: 0 + SelectionBehaviorRight: + Enum: 0 + SelectionBehaviorUp: + Enum: 0 + SelectionGroup: + Bool: false + SelectionImageObject: "null" + SelectionOrder: + Int32: 0 + Size: + UDim2: + - - 0 + - 200 + - - 0 + - 50 + SizeConstraint: + Enum: 0 + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + Text: + String: Label + TextColor3: + Color3: + - 0 + - 0 + - 0 + TextScaled: + Bool: false + TextSize: + Float32: 14 + TextStrokeColor3: + Color3: + - 0 + - 0 + - 0 + TextStrokeTransparency: + Float32: 1 + TextTransparency: + Float32: 0 + TextTruncate: + Enum: 0 + TextWrapped: + Bool: false + TextXAlignment: + Enum: 2 + TextYAlignment: + Enum: 1 + Visible: + Bool: true + ZIndex: + Int32: 1 + children: [] + - referent: referent-4 + name: TextButton + class: TextButton + properties: + Active: + Bool: true + AnchorPoint: + Vector2: + - 0 + - 0 + Attributes: + Attributes: {} + AutoButtonColor: + Bool: true + AutoLocalize: + Bool: true + AutomaticSize: + Enum: 0 + BackgroundColor3: + Color3: + - 1 + - 1 + - 1 + BackgroundTransparency: + Float32: 0 + BorderColor3: + Color3: + - 0.10588236 + - 0.16470589 + - 0.20784315 + BorderMode: + Enum: 0 + BorderSizePixel: + Int32: 1 + ClipsDescendants: + Bool: false + Draggable: + Bool: false + FontFace: + Font: + family: "rbxasset://fonts/families/SourceSansPro.json" + weight: Bold + style: Normal + cachedFaceId: ~ + LayoutOrder: + Int32: 0 + LineHeight: + Float32: 1 + MaxVisibleGraphemes: + Int32: -1 + Modal: + Bool: false + NextSelectionDown: "null" + NextSelectionLeft: "null" + NextSelectionRight: "null" + NextSelectionUp: "null" + Position: + UDim2: + - - 0 + - 0 + - - 0 + - 55 + RichText: + Bool: false + RootLocalizationTable: "null" + Rotation: + Float32: 0 + Selectable: + Bool: true + Selected: + Bool: false + SelectionBehaviorDown: + Enum: 0 + SelectionBehaviorLeft: + Enum: 0 + SelectionBehaviorRight: + Enum: 0 + SelectionBehaviorUp: + Enum: 0 + SelectionGroup: + Bool: false + SelectionImageObject: "null" + SelectionOrder: + Int32: 0 + Size: + UDim2: + - - 0 + - 200 + - - 0 + - 50 + SizeConstraint: + Enum: 0 + SourceAssetId: + Int64: -1 + Style: + Enum: 0 + Tags: + Tags: [] + Text: + String: Button + TextColor3: + Color3: + - 0 + - 0 + - 0 + TextScaled: + Bool: false + TextSize: + Float32: 14 + TextStrokeColor3: + Color3: + - 0 + - 0 + - 0 + TextStrokeTransparency: + Float32: 1 + TextTransparency: + Float32: 0 + TextTruncate: + Enum: 0 + TextWrapped: + Bool: false + TextXAlignment: + Enum: 2 + TextYAlignment: + Enum: 1 + Visible: + Bool: true + ZIndex: + Int32: 1 + children: [] + - referent: referent-5 + name: TextBox + class: TextBox + properties: + Active: + Bool: true + AnchorPoint: + Vector2: + - 0 + - 0 + Attributes: + Attributes: {} + AutoLocalize: + Bool: true + AutomaticSize: + Enum: 0 + BackgroundColor3: + Color3: + - 1 + - 1 + - 1 + BackgroundTransparency: + Float32: 0 + BorderColor3: + Color3: + - 0.10588236 + - 0.16470589 + - 0.20784315 + BorderMode: + Enum: 0 + BorderSizePixel: + Int32: 1 + ClearTextOnFocus: + Bool: true + ClipsDescendants: + Bool: false + Draggable: + Bool: false + FontFace: + Font: + family: "rbxasset://fonts/families/SourceSansPro.json" + weight: Regular + style: Italic + cachedFaceId: ~ + LayoutOrder: + Int32: 0 + LineHeight: + Float32: 1 + MaxVisibleGraphemes: + Int32: -1 + MultiLine: + Bool: false + NextSelectionDown: "null" + NextSelectionLeft: "null" + NextSelectionRight: "null" + NextSelectionUp: "null" + PlaceholderColor3: + Color3: + - 0.7 + - 0.7 + - 0.7 + PlaceholderText: + String: "" + Position: + UDim2: + - - 0 + - 0 + - - 0 + - 110 + RichText: + Bool: false + RootLocalizationTable: "null" + Rotation: + Float32: 0 + Selectable: + Bool: true + SelectionBehaviorDown: + Enum: 0 + SelectionBehaviorLeft: + Enum: 0 + SelectionBehaviorRight: + Enum: 0 + SelectionBehaviorUp: + Enum: 0 + SelectionGroup: + Bool: false + SelectionImageObject: "null" + SelectionOrder: + Int32: 0 + ShowNativeInput: + Bool: true + Size: + UDim2: + - - 0 + - 200 + - - 0 + - 50 + SizeConstraint: + Enum: 0 + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + Text: + String: TextBox + TextColor3: + Color3: + - 0 + - 0 + - 0 + TextEditable: + Bool: true + TextScaled: + Bool: false + TextSize: + Float32: 14 + TextStrokeColor3: + Color3: + - 0 + - 0 + - 0 + TextStrokeTransparency: + Float32: 1 + TextTransparency: + Float32: 0 + TextTruncate: + Enum: 0 + TextWrapped: + Bool: false + TextXAlignment: + Enum: 2 + TextYAlignment: + Enum: 1 + Visible: + Bool: true + ZIndex: + Int32: 1 + children: [] + diff --git a/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__gui-inset-and-font-migration__encoded.snap b/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__gui-inset-and-font-migration__encoded.snap new file mode 100644 index 000000000..613c17350 --- /dev/null +++ b/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__gui-inset-and-font-migration__encoded.snap @@ -0,0 +1,1221 @@ +--- +source: rbx_binary/src/tests/util.rs +expression: text_roundtrip +--- +num_types: 5 +num_instances: 6 +chunks: + - Inst: + type_id: 0 + type_name: Folder + object_format: 0 + referents: + - 0 + - Inst: + type_id: 1 + type_name: ScreenGui + object_format: 0 + referents: + - 1 + - 2 + - Inst: + type_id: 4 + type_name: TextBox + object_format: 0 + referents: + - 5 + - Inst: + type_id: 3 + type_name: TextButton + object_format: 0 + referents: + - 4 + - Inst: + type_id: 2 + type_name: TextLabel + object_format: 0 + referents: + - 3 + - Prop: + type_id: 0 + prop_name: AttributesSerialize + prop_type: String + values: + - "" + - Prop: + type_id: 0 + prop_name: Name + prop_type: String + values: + - Folder + - Prop: + type_id: 0 + prop_name: SourceAssetId + prop_type: Int64 + values: + - -1 + - Prop: + type_id: 0 + prop_name: Tags + prop_type: String + values: + - "" + - Prop: + type_id: 1 + prop_name: AttributesSerialize + prop_type: String + values: + - "" + - "" + - Prop: + type_id: 1 + prop_name: AutoLocalize + prop_type: Bool + values: + - true + - true + - Prop: + type_id: 1 + prop_name: ClipToDeviceSafeArea + prop_type: Bool + values: + - true + - true + - Prop: + type_id: 1 + prop_name: DisplayOrder + prop_type: Int32 + values: + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: Enabled + prop_type: Bool + values: + - true + - true + - Prop: + type_id: 1 + prop_name: Name + prop_type: String + values: + - "IgnoreGuiInset: true" + - "IgnoreGuiInset: false" + - Prop: + type_id: 1 + prop_name: ResetOnSpawn + prop_type: Bool + values: + - true + - true + - Prop: + type_id: 1 + prop_name: RootLocalizationTable + prop_type: Ref + values: + - -1 + - -1 + - Prop: + type_id: 1 + prop_name: SafeAreaCompatibility + prop_type: Enum + values: + - 1 + - 1 + - Prop: + type_id: 1 + prop_name: ScreenInsets + prop_type: Enum + values: + - 1 + - 2 + - Prop: + type_id: 1 + prop_name: SelectionBehaviorDown + prop_type: Enum + values: + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: SelectionBehaviorLeft + prop_type: Enum + values: + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: SelectionBehaviorRight + prop_type: Enum + values: + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: SelectionBehaviorUp + prop_type: Enum + values: + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: SelectionGroup + prop_type: Bool + values: + - false + - false + - Prop: + type_id: 1 + prop_name: SourceAssetId + prop_type: Int64 + values: + - -1 + - -1 + - Prop: + type_id: 1 + prop_name: Tags + prop_type: String + values: + - "" + - "" + - Prop: + type_id: 1 + prop_name: ZIndexBehavior + prop_type: Enum + values: + - 1 + - 1 + - Prop: + type_id: 4 + prop_name: Active + prop_type: Bool + values: + - true + - Prop: + type_id: 4 + prop_name: AnchorPoint + prop_type: Vector2 + values: + - - 0 + - 0 + - Prop: + type_id: 4 + prop_name: AttributesSerialize + prop_type: String + values: + - "" + - Prop: + type_id: 4 + prop_name: AutoLocalize + prop_type: Bool + values: + - true + - Prop: + type_id: 4 + prop_name: AutomaticSize + prop_type: Enum + values: + - 0 + - Prop: + type_id: 4 + prop_name: BackgroundColor3 + prop_type: Color3 + values: + - - 1 + - 1 + - 1 + - Prop: + type_id: 4 + prop_name: BackgroundTransparency + prop_type: Float32 + values: + - 0 + - Prop: + type_id: 4 + prop_name: BorderColor3 + prop_type: Color3 + values: + - - 0.10588236 + - 0.16470589 + - 0.20784315 + - Prop: + type_id: 4 + prop_name: BorderMode + prop_type: Enum + values: + - 0 + - Prop: + type_id: 4 + prop_name: BorderSizePixel + prop_type: Int32 + values: + - 1 + - Prop: + type_id: 4 + prop_name: ClearTextOnFocus + prop_type: Bool + values: + - true + - Prop: + type_id: 4 + prop_name: ClipsDescendants + prop_type: Bool + values: + - false + - Prop: + type_id: 4 + prop_name: Draggable + prop_type: Bool + values: + - false + - Prop: + type_id: 4 + prop_name: FontFace + prop_type: Font + values: + - family: "rbxasset://fonts/families/SourceSansPro.json" + weight: Regular + style: Italic + cachedFaceId: ~ + - Prop: + type_id: 4 + prop_name: LayoutOrder + prop_type: Int32 + values: + - 0 + - Prop: + type_id: 4 + prop_name: LineHeight + prop_type: Float32 + values: + - 1 + - Prop: + type_id: 4 + prop_name: MaxVisibleGraphemes + prop_type: Int32 + values: + - -1 + - Prop: + type_id: 4 + prop_name: MultiLine + prop_type: Bool + values: + - false + - Prop: + type_id: 4 + prop_name: Name + prop_type: String + values: + - TextBox + - Prop: + type_id: 4 + prop_name: NextSelectionDown + prop_type: Ref + values: + - -1 + - Prop: + type_id: 4 + prop_name: NextSelectionLeft + prop_type: Ref + values: + - -1 + - Prop: + type_id: 4 + prop_name: NextSelectionRight + prop_type: Ref + values: + - -1 + - Prop: + type_id: 4 + prop_name: NextSelectionUp + prop_type: Ref + values: + - -1 + - Prop: + type_id: 4 + prop_name: PlaceholderColor3 + prop_type: Color3 + values: + - - 0.7 + - 0.7 + - 0.7 + - Prop: + type_id: 4 + prop_name: PlaceholderText + prop_type: String + values: + - "" + - Prop: + type_id: 4 + prop_name: Position + prop_type: UDim2 + values: + - - - 0 + - 0 + - - 0 + - 110 + - Prop: + type_id: 4 + prop_name: RichText + prop_type: Bool + values: + - false + - Prop: + type_id: 4 + prop_name: RootLocalizationTable + prop_type: Ref + values: + - -1 + - Prop: + type_id: 4 + prop_name: Rotation + prop_type: Float32 + values: + - 0 + - Prop: + type_id: 4 + prop_name: Selectable + prop_type: Bool + values: + - true + - Prop: + type_id: 4 + prop_name: SelectionBehaviorDown + prop_type: Enum + values: + - 0 + - Prop: + type_id: 4 + prop_name: SelectionBehaviorLeft + prop_type: Enum + values: + - 0 + - Prop: + type_id: 4 + prop_name: SelectionBehaviorRight + prop_type: Enum + values: + - 0 + - Prop: + type_id: 4 + prop_name: SelectionBehaviorUp + prop_type: Enum + values: + - 0 + - Prop: + type_id: 4 + prop_name: SelectionGroup + prop_type: Bool + values: + - false + - Prop: + type_id: 4 + prop_name: SelectionImageObject + prop_type: Ref + values: + - -1 + - Prop: + type_id: 4 + prop_name: SelectionOrder + prop_type: Int32 + values: + - 0 + - Prop: + type_id: 4 + prop_name: ShowNativeInput + prop_type: Bool + values: + - true + - Prop: + type_id: 4 + prop_name: Size + prop_type: UDim2 + values: + - - - 0 + - 200 + - - 0 + - 50 + - Prop: + type_id: 4 + prop_name: SizeConstraint + prop_type: Enum + values: + - 0 + - Prop: + type_id: 4 + prop_name: SourceAssetId + prop_type: Int64 + values: + - -1 + - Prop: + type_id: 4 + prop_name: Tags + prop_type: String + values: + - "" + - Prop: + type_id: 4 + prop_name: Text + prop_type: String + values: + - TextBox + - Prop: + type_id: 4 + prop_name: TextColor3 + prop_type: Color3 + values: + - - 0 + - 0 + - 0 + - Prop: + type_id: 4 + prop_name: TextEditable + prop_type: Bool + values: + - true + - Prop: + type_id: 4 + prop_name: TextScaled + prop_type: Bool + values: + - false + - Prop: + type_id: 4 + prop_name: TextSize + prop_type: Float32 + values: + - 14 + - Prop: + type_id: 4 + prop_name: TextStrokeColor3 + prop_type: Color3 + values: + - - 0 + - 0 + - 0 + - Prop: + type_id: 4 + prop_name: TextStrokeTransparency + prop_type: Float32 + values: + - 1 + - Prop: + type_id: 4 + prop_name: TextTransparency + prop_type: Float32 + values: + - 0 + - Prop: + type_id: 4 + prop_name: TextTruncate + prop_type: Enum + values: + - 0 + - Prop: + type_id: 4 + prop_name: TextWrapped + prop_type: Bool + values: + - false + - Prop: + type_id: 4 + prop_name: TextXAlignment + prop_type: Enum + values: + - 2 + - Prop: + type_id: 4 + prop_name: TextYAlignment + prop_type: Enum + values: + - 1 + - Prop: + type_id: 4 + prop_name: Visible + prop_type: Bool + values: + - true + - Prop: + type_id: 4 + prop_name: ZIndex + prop_type: Int32 + values: + - 1 + - Prop: + type_id: 3 + prop_name: Active + prop_type: Bool + values: + - true + - Prop: + type_id: 3 + prop_name: AnchorPoint + prop_type: Vector2 + values: + - - 0 + - 0 + - Prop: + type_id: 3 + prop_name: AttributesSerialize + prop_type: String + values: + - "" + - Prop: + type_id: 3 + prop_name: AutoButtonColor + prop_type: Bool + values: + - true + - Prop: + type_id: 3 + prop_name: AutoLocalize + prop_type: Bool + values: + - true + - Prop: + type_id: 3 + prop_name: AutomaticSize + prop_type: Enum + values: + - 0 + - Prop: + type_id: 3 + prop_name: BackgroundColor3 + prop_type: Color3 + values: + - - 1 + - 1 + - 1 + - Prop: + type_id: 3 + prop_name: BackgroundTransparency + prop_type: Float32 + values: + - 0 + - Prop: + type_id: 3 + prop_name: BorderColor3 + prop_type: Color3 + values: + - - 0.10588236 + - 0.16470589 + - 0.20784315 + - Prop: + type_id: 3 + prop_name: BorderMode + prop_type: Enum + values: + - 0 + - Prop: + type_id: 3 + prop_name: BorderSizePixel + prop_type: Int32 + values: + - 1 + - Prop: + type_id: 3 + prop_name: ClipsDescendants + prop_type: Bool + values: + - false + - Prop: + type_id: 3 + prop_name: Draggable + prop_type: Bool + values: + - false + - Prop: + type_id: 3 + prop_name: FontFace + prop_type: Font + values: + - family: "rbxasset://fonts/families/SourceSansPro.json" + weight: Bold + style: Normal + cachedFaceId: ~ + - Prop: + type_id: 3 + prop_name: LayoutOrder + prop_type: Int32 + values: + - 0 + - Prop: + type_id: 3 + prop_name: LineHeight + prop_type: Float32 + values: + - 1 + - Prop: + type_id: 3 + prop_name: MaxVisibleGraphemes + prop_type: Int32 + values: + - -1 + - Prop: + type_id: 3 + prop_name: Modal + prop_type: Bool + values: + - false + - Prop: + type_id: 3 + prop_name: Name + prop_type: String + values: + - TextButton + - Prop: + type_id: 3 + prop_name: NextSelectionDown + prop_type: Ref + values: + - -1 + - Prop: + type_id: 3 + prop_name: NextSelectionLeft + prop_type: Ref + values: + - -1 + - Prop: + type_id: 3 + prop_name: NextSelectionRight + prop_type: Ref + values: + - -1 + - Prop: + type_id: 3 + prop_name: NextSelectionUp + prop_type: Ref + values: + - -1 + - Prop: + type_id: 3 + prop_name: Position + prop_type: UDim2 + values: + - - - 0 + - 0 + - - 0 + - 55 + - Prop: + type_id: 3 + prop_name: RichText + prop_type: Bool + values: + - false + - Prop: + type_id: 3 + prop_name: RootLocalizationTable + prop_type: Ref + values: + - -1 + - Prop: + type_id: 3 + prop_name: Rotation + prop_type: Float32 + values: + - 0 + - Prop: + type_id: 3 + prop_name: Selectable + prop_type: Bool + values: + - true + - Prop: + type_id: 3 + prop_name: Selected + prop_type: Bool + values: + - false + - Prop: + type_id: 3 + prop_name: SelectionBehaviorDown + prop_type: Enum + values: + - 0 + - Prop: + type_id: 3 + prop_name: SelectionBehaviorLeft + prop_type: Enum + values: + - 0 + - Prop: + type_id: 3 + prop_name: SelectionBehaviorRight + prop_type: Enum + values: + - 0 + - Prop: + type_id: 3 + prop_name: SelectionBehaviorUp + prop_type: Enum + values: + - 0 + - Prop: + type_id: 3 + prop_name: SelectionGroup + prop_type: Bool + values: + - false + - Prop: + type_id: 3 + prop_name: SelectionImageObject + prop_type: Ref + values: + - -1 + - Prop: + type_id: 3 + prop_name: SelectionOrder + prop_type: Int32 + values: + - 0 + - Prop: + type_id: 3 + prop_name: Size + prop_type: UDim2 + values: + - - - 0 + - 200 + - - 0 + - 50 + - Prop: + type_id: 3 + prop_name: SizeConstraint + prop_type: Enum + values: + - 0 + - Prop: + type_id: 3 + prop_name: SourceAssetId + prop_type: Int64 + values: + - -1 + - Prop: + type_id: 3 + prop_name: Style + prop_type: Enum + values: + - 0 + - Prop: + type_id: 3 + prop_name: Tags + prop_type: String + values: + - "" + - Prop: + type_id: 3 + prop_name: Text + prop_type: String + values: + - Button + - Prop: + type_id: 3 + prop_name: TextColor3 + prop_type: Color3 + values: + - - 0 + - 0 + - 0 + - Prop: + type_id: 3 + prop_name: TextScaled + prop_type: Bool + values: + - false + - Prop: + type_id: 3 + prop_name: TextSize + prop_type: Float32 + values: + - 14 + - Prop: + type_id: 3 + prop_name: TextStrokeColor3 + prop_type: Color3 + values: + - - 0 + - 0 + - 0 + - Prop: + type_id: 3 + prop_name: TextStrokeTransparency + prop_type: Float32 + values: + - 1 + - Prop: + type_id: 3 + prop_name: TextTransparency + prop_type: Float32 + values: + - 0 + - Prop: + type_id: 3 + prop_name: TextTruncate + prop_type: Enum + values: + - 0 + - Prop: + type_id: 3 + prop_name: TextWrapped + prop_type: Bool + values: + - false + - Prop: + type_id: 3 + prop_name: TextXAlignment + prop_type: Enum + values: + - 2 + - Prop: + type_id: 3 + prop_name: TextYAlignment + prop_type: Enum + values: + - 1 + - Prop: + type_id: 3 + prop_name: Visible + prop_type: Bool + values: + - true + - Prop: + type_id: 3 + prop_name: ZIndex + prop_type: Int32 + values: + - 1 + - Prop: + type_id: 2 + prop_name: Active + prop_type: Bool + values: + - false + - Prop: + type_id: 2 + prop_name: AnchorPoint + prop_type: Vector2 + values: + - - 0 + - 0 + - Prop: + type_id: 2 + prop_name: AttributesSerialize + prop_type: String + values: + - "" + - Prop: + type_id: 2 + prop_name: AutoLocalize + prop_type: Bool + values: + - true + - Prop: + type_id: 2 + prop_name: AutomaticSize + prop_type: Enum + values: + - 0 + - Prop: + type_id: 2 + prop_name: BackgroundColor3 + prop_type: Color3 + values: + - - 1 + - 1 + - 1 + - Prop: + type_id: 2 + prop_name: BackgroundTransparency + prop_type: Float32 + values: + - 0 + - Prop: + type_id: 2 + prop_name: BorderColor3 + prop_type: Color3 + values: + - - 0.10588236 + - 0.16470589 + - 0.20784315 + - Prop: + type_id: 2 + prop_name: BorderMode + prop_type: Enum + values: + - 0 + - Prop: + type_id: 2 + prop_name: BorderSizePixel + prop_type: Int32 + values: + - 1 + - Prop: + type_id: 2 + prop_name: ClipsDescendants + prop_type: Bool + values: + - false + - Prop: + type_id: 2 + prop_name: Draggable + prop_type: Bool + values: + - false + - Prop: + type_id: 2 + prop_name: FontFace + prop_type: Font + values: + - family: "rbxasset://fonts/families/Inconsolata.json" + weight: Regular + style: Normal + cachedFaceId: ~ + - Prop: + type_id: 2 + prop_name: LayoutOrder + prop_type: Int32 + values: + - 0 + - Prop: + type_id: 2 + prop_name: LineHeight + prop_type: Float32 + values: + - 1 + - Prop: + type_id: 2 + prop_name: MaxVisibleGraphemes + prop_type: Int32 + values: + - -1 + - Prop: + type_id: 2 + prop_name: Name + prop_type: String + values: + - TextLabel + - Prop: + type_id: 2 + prop_name: NextSelectionDown + prop_type: Ref + values: + - -1 + - Prop: + type_id: 2 + prop_name: NextSelectionLeft + prop_type: Ref + values: + - -1 + - Prop: + type_id: 2 + prop_name: NextSelectionRight + prop_type: Ref + values: + - -1 + - Prop: + type_id: 2 + prop_name: NextSelectionUp + prop_type: Ref + values: + - -1 + - Prop: + type_id: 2 + prop_name: Position + prop_type: UDim2 + values: + - - - 0 + - 0 + - - 0 + - 0 + - Prop: + type_id: 2 + prop_name: RichText + prop_type: Bool + values: + - false + - Prop: + type_id: 2 + prop_name: RootLocalizationTable + prop_type: Ref + values: + - -1 + - Prop: + type_id: 2 + prop_name: Rotation + prop_type: Float32 + values: + - 0 + - Prop: + type_id: 2 + prop_name: Selectable + prop_type: Bool + values: + - false + - Prop: + type_id: 2 + prop_name: SelectionBehaviorDown + prop_type: Enum + values: + - 0 + - Prop: + type_id: 2 + prop_name: SelectionBehaviorLeft + prop_type: Enum + values: + - 0 + - Prop: + type_id: 2 + prop_name: SelectionBehaviorRight + prop_type: Enum + values: + - 0 + - Prop: + type_id: 2 + prop_name: SelectionBehaviorUp + prop_type: Enum + values: + - 0 + - Prop: + type_id: 2 + prop_name: SelectionGroup + prop_type: Bool + values: + - false + - Prop: + type_id: 2 + prop_name: SelectionImageObject + prop_type: Ref + values: + - -1 + - Prop: + type_id: 2 + prop_name: SelectionOrder + prop_type: Int32 + values: + - 0 + - Prop: + type_id: 2 + prop_name: Size + prop_type: UDim2 + values: + - - - 0 + - 200 + - - 0 + - 50 + - Prop: + type_id: 2 + prop_name: SizeConstraint + prop_type: Enum + values: + - 0 + - Prop: + type_id: 2 + prop_name: SourceAssetId + prop_type: Int64 + values: + - -1 + - Prop: + type_id: 2 + prop_name: Tags + prop_type: String + values: + - "" + - Prop: + type_id: 2 + prop_name: Text + prop_type: String + values: + - Label + - Prop: + type_id: 2 + prop_name: TextColor3 + prop_type: Color3 + values: + - - 0 + - 0 + - 0 + - Prop: + type_id: 2 + prop_name: TextScaled + prop_type: Bool + values: + - false + - Prop: + type_id: 2 + prop_name: TextSize + prop_type: Float32 + values: + - 14 + - Prop: + type_id: 2 + prop_name: TextStrokeColor3 + prop_type: Color3 + values: + - - 0 + - 0 + - 0 + - Prop: + type_id: 2 + prop_name: TextStrokeTransparency + prop_type: Float32 + values: + - 1 + - Prop: + type_id: 2 + prop_name: TextTransparency + prop_type: Float32 + values: + - 0 + - Prop: + type_id: 2 + prop_name: TextTruncate + prop_type: Enum + values: + - 0 + - Prop: + type_id: 2 + prop_name: TextWrapped + prop_type: Bool + values: + - false + - Prop: + type_id: 2 + prop_name: TextXAlignment + prop_type: Enum + values: + - 2 + - Prop: + type_id: 2 + prop_name: TextYAlignment + prop_type: Enum + values: + - 1 + - Prop: + type_id: 2 + prop_name: Visible + prop_type: Bool + values: + - true + - Prop: + type_id: 2 + prop_name: ZIndex + prop_type: Int32 + values: + - 1 + - Prnt: + version: 0 + links: + - - 0 + - -1 + - - 1 + - 0 + - - 2 + - 0 + - - 3 + - 2 + - - 4 + - 2 + - - 5 + - 2 + - End + diff --git a/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__gui-inset-and-font-migration__input.snap b/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__gui-inset-and-font-migration__input.snap new file mode 100644 index 000000000..787e249fc --- /dev/null +++ b/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__gui-inset-and-font-migration__input.snap @@ -0,0 +1,1212 @@ +--- +source: rbx_binary/src/tests/util.rs +expression: text_decoded +--- +num_types: 5 +num_instances: 6 +chunks: + - Inst: + type_id: 0 + type_name: Folder + object_format: 0 + referents: + - 0 + - Inst: + type_id: 1 + type_name: ScreenGui + object_format: 0 + referents: + - 1 + - 2 + - Inst: + type_id: 4 + type_name: TextBox + object_format: 0 + referents: + - 5 + - Inst: + type_id: 3 + type_name: TextButton + object_format: 0 + referents: + - 4 + - Inst: + type_id: 2 + type_name: TextLabel + object_format: 0 + referents: + - 3 + - Prop: + type_id: 0 + prop_name: AttributesSerialize + prop_type: String + values: + - "" + - Prop: + type_id: 0 + prop_name: Name + prop_type: String + values: + - Folder + - Prop: + type_id: 0 + prop_name: SourceAssetId + prop_type: Int64 + values: + - -1 + - Prop: + type_id: 0 + prop_name: Tags + prop_type: String + values: + - "" + - Prop: + type_id: 1 + prop_name: AttributesSerialize + prop_type: String + values: + - "" + - "" + - Prop: + type_id: 1 + prop_name: AutoLocalize + prop_type: Bool + values: + - true + - true + - Prop: + type_id: 1 + prop_name: ClipToDeviceSafeArea + prop_type: Bool + values: + - true + - true + - Prop: + type_id: 1 + prop_name: DisplayOrder + prop_type: Int32 + values: + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: Enabled + prop_type: Bool + values: + - true + - true + - Prop: + type_id: 1 + prop_name: IgnoreGuiInset + prop_type: Bool + values: + - true + - false + - Prop: + type_id: 1 + prop_name: Name + prop_type: String + values: + - "IgnoreGuiInset: true" + - "IgnoreGuiInset: false" + - Prop: + type_id: 1 + prop_name: ResetOnSpawn + prop_type: Bool + values: + - true + - true + - Prop: + type_id: 1 + prop_name: RootLocalizationTable + prop_type: Ref + values: + - -1 + - -1 + - Prop: + type_id: 1 + prop_name: SafeAreaCompatibility + prop_type: Enum + values: + - 1 + - 1 + - Prop: + type_id: 1 + prop_name: SelectionBehaviorDown + prop_type: Enum + values: + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: SelectionBehaviorLeft + prop_type: Enum + values: + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: SelectionBehaviorRight + prop_type: Enum + values: + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: SelectionBehaviorUp + prop_type: Enum + values: + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: SelectionGroup + prop_type: Bool + values: + - false + - false + - Prop: + type_id: 1 + prop_name: SourceAssetId + prop_type: Int64 + values: + - -1 + - -1 + - Prop: + type_id: 1 + prop_name: Tags + prop_type: String + values: + - "" + - "" + - Prop: + type_id: 1 + prop_name: ZIndexBehavior + prop_type: Enum + values: + - 1 + - 1 + - Prop: + type_id: 4 + prop_name: Active + prop_type: Bool + values: + - true + - Prop: + type_id: 4 + prop_name: AnchorPoint + prop_type: Vector2 + values: + - - 0 + - 0 + - Prop: + type_id: 4 + prop_name: AttributesSerialize + prop_type: String + values: + - "" + - Prop: + type_id: 4 + prop_name: AutoLocalize + prop_type: Bool + values: + - true + - Prop: + type_id: 4 + prop_name: AutomaticSize + prop_type: Enum + values: + - 0 + - Prop: + type_id: 4 + prop_name: BackgroundColor3 + prop_type: Color3 + values: + - - 1 + - 1 + - 1 + - Prop: + type_id: 4 + prop_name: BackgroundTransparency + prop_type: Float32 + values: + - 0 + - Prop: + type_id: 4 + prop_name: BorderColor3 + prop_type: Color3 + values: + - - 0.10588236 + - 0.16470589 + - 0.20784315 + - Prop: + type_id: 4 + prop_name: BorderMode + prop_type: Enum + values: + - 0 + - Prop: + type_id: 4 + prop_name: BorderSizePixel + prop_type: Int32 + values: + - 1 + - Prop: + type_id: 4 + prop_name: ClearTextOnFocus + prop_type: Bool + values: + - true + - Prop: + type_id: 4 + prop_name: ClipsDescendants + prop_type: Bool + values: + - false + - Prop: + type_id: 4 + prop_name: Draggable + prop_type: Bool + values: + - false + - Prop: + type_id: 4 + prop_name: Font + prop_type: Enum + values: + - 6 + - Prop: + type_id: 4 + prop_name: LayoutOrder + prop_type: Int32 + values: + - 0 + - Prop: + type_id: 4 + prop_name: LineHeight + prop_type: Float32 + values: + - 1 + - Prop: + type_id: 4 + prop_name: MaxVisibleGraphemes + prop_type: Int32 + values: + - -1 + - Prop: + type_id: 4 + prop_name: MultiLine + prop_type: Bool + values: + - false + - Prop: + type_id: 4 + prop_name: Name + prop_type: String + values: + - TextBox + - Prop: + type_id: 4 + prop_name: NextSelectionDown + prop_type: Ref + values: + - -1 + - Prop: + type_id: 4 + prop_name: NextSelectionLeft + prop_type: Ref + values: + - -1 + - Prop: + type_id: 4 + prop_name: NextSelectionRight + prop_type: Ref + values: + - -1 + - Prop: + type_id: 4 + prop_name: NextSelectionUp + prop_type: Ref + values: + - -1 + - Prop: + type_id: 4 + prop_name: PlaceholderColor3 + prop_type: Color3 + values: + - - 0.7 + - 0.7 + - 0.7 + - Prop: + type_id: 4 + prop_name: PlaceholderText + prop_type: String + values: + - "" + - Prop: + type_id: 4 + prop_name: Position + prop_type: UDim2 + values: + - - - 0 + - 0 + - - 0 + - 110 + - Prop: + type_id: 4 + prop_name: RichText + prop_type: Bool + values: + - false + - Prop: + type_id: 4 + prop_name: RootLocalizationTable + prop_type: Ref + values: + - -1 + - Prop: + type_id: 4 + prop_name: Rotation + prop_type: Float32 + values: + - 0 + - Prop: + type_id: 4 + prop_name: Selectable + prop_type: Bool + values: + - true + - Prop: + type_id: 4 + prop_name: SelectionBehaviorDown + prop_type: Enum + values: + - 0 + - Prop: + type_id: 4 + prop_name: SelectionBehaviorLeft + prop_type: Enum + values: + - 0 + - Prop: + type_id: 4 + prop_name: SelectionBehaviorRight + prop_type: Enum + values: + - 0 + - Prop: + type_id: 4 + prop_name: SelectionBehaviorUp + prop_type: Enum + values: + - 0 + - Prop: + type_id: 4 + prop_name: SelectionGroup + prop_type: Bool + values: + - false + - Prop: + type_id: 4 + prop_name: SelectionImageObject + prop_type: Ref + values: + - -1 + - Prop: + type_id: 4 + prop_name: SelectionOrder + prop_type: Int32 + values: + - 0 + - Prop: + type_id: 4 + prop_name: ShowNativeInput + prop_type: Bool + values: + - true + - Prop: + type_id: 4 + prop_name: Size + prop_type: UDim2 + values: + - - - 0 + - 200 + - - 0 + - 50 + - Prop: + type_id: 4 + prop_name: SizeConstraint + prop_type: Enum + values: + - 0 + - Prop: + type_id: 4 + prop_name: SourceAssetId + prop_type: Int64 + values: + - -1 + - Prop: + type_id: 4 + prop_name: Tags + prop_type: String + values: + - "" + - Prop: + type_id: 4 + prop_name: Text + prop_type: String + values: + - TextBox + - Prop: + type_id: 4 + prop_name: TextColor3 + prop_type: Color3 + values: + - - 0 + - 0 + - 0 + - Prop: + type_id: 4 + prop_name: TextEditable + prop_type: Bool + values: + - true + - Prop: + type_id: 4 + prop_name: TextScaled + prop_type: Bool + values: + - false + - Prop: + type_id: 4 + prop_name: TextSize + prop_type: Float32 + values: + - 14 + - Prop: + type_id: 4 + prop_name: TextStrokeColor3 + prop_type: Color3 + values: + - - 0 + - 0 + - 0 + - Prop: + type_id: 4 + prop_name: TextStrokeTransparency + prop_type: Float32 + values: + - 1 + - Prop: + type_id: 4 + prop_name: TextTransparency + prop_type: Float32 + values: + - 0 + - Prop: + type_id: 4 + prop_name: TextTruncate + prop_type: Enum + values: + - 0 + - Prop: + type_id: 4 + prop_name: TextWrapped + prop_type: Bool + values: + - false + - Prop: + type_id: 4 + prop_name: TextXAlignment + prop_type: Enum + values: + - 2 + - Prop: + type_id: 4 + prop_name: TextYAlignment + prop_type: Enum + values: + - 1 + - Prop: + type_id: 4 + prop_name: Visible + prop_type: Bool + values: + - true + - Prop: + type_id: 4 + prop_name: ZIndex + prop_type: Int32 + values: + - 1 + - Prop: + type_id: 3 + prop_name: Active + prop_type: Bool + values: + - true + - Prop: + type_id: 3 + prop_name: AnchorPoint + prop_type: Vector2 + values: + - - 0 + - 0 + - Prop: + type_id: 3 + prop_name: AttributesSerialize + prop_type: String + values: + - "" + - Prop: + type_id: 3 + prop_name: AutoButtonColor + prop_type: Bool + values: + - true + - Prop: + type_id: 3 + prop_name: AutoLocalize + prop_type: Bool + values: + - true + - Prop: + type_id: 3 + prop_name: AutomaticSize + prop_type: Enum + values: + - 0 + - Prop: + type_id: 3 + prop_name: BackgroundColor3 + prop_type: Color3 + values: + - - 1 + - 1 + - 1 + - Prop: + type_id: 3 + prop_name: BackgroundTransparency + prop_type: Float32 + values: + - 0 + - Prop: + type_id: 3 + prop_name: BorderColor3 + prop_type: Color3 + values: + - - 0.10588236 + - 0.16470589 + - 0.20784315 + - Prop: + type_id: 3 + prop_name: BorderMode + prop_type: Enum + values: + - 0 + - Prop: + type_id: 3 + prop_name: BorderSizePixel + prop_type: Int32 + values: + - 1 + - Prop: + type_id: 3 + prop_name: ClipsDescendants + prop_type: Bool + values: + - false + - Prop: + type_id: 3 + prop_name: Draggable + prop_type: Bool + values: + - false + - Prop: + type_id: 3 + prop_name: Font + prop_type: Enum + values: + - 4 + - Prop: + type_id: 3 + prop_name: LayoutOrder + prop_type: Int32 + values: + - 0 + - Prop: + type_id: 3 + prop_name: LineHeight + prop_type: Float32 + values: + - 1 + - Prop: + type_id: 3 + prop_name: MaxVisibleGraphemes + prop_type: Int32 + values: + - -1 + - Prop: + type_id: 3 + prop_name: Modal + prop_type: Bool + values: + - false + - Prop: + type_id: 3 + prop_name: Name + prop_type: String + values: + - TextButton + - Prop: + type_id: 3 + prop_name: NextSelectionDown + prop_type: Ref + values: + - -1 + - Prop: + type_id: 3 + prop_name: NextSelectionLeft + prop_type: Ref + values: + - -1 + - Prop: + type_id: 3 + prop_name: NextSelectionRight + prop_type: Ref + values: + - -1 + - Prop: + type_id: 3 + prop_name: NextSelectionUp + prop_type: Ref + values: + - -1 + - Prop: + type_id: 3 + prop_name: Position + prop_type: UDim2 + values: + - - - 0 + - 0 + - - 0 + - 55 + - Prop: + type_id: 3 + prop_name: RichText + prop_type: Bool + values: + - false + - Prop: + type_id: 3 + prop_name: RootLocalizationTable + prop_type: Ref + values: + - -1 + - Prop: + type_id: 3 + prop_name: Rotation + prop_type: Float32 + values: + - 0 + - Prop: + type_id: 3 + prop_name: Selectable + prop_type: Bool + values: + - true + - Prop: + type_id: 3 + prop_name: Selected + prop_type: Bool + values: + - false + - Prop: + type_id: 3 + prop_name: SelectionBehaviorDown + prop_type: Enum + values: + - 0 + - Prop: + type_id: 3 + prop_name: SelectionBehaviorLeft + prop_type: Enum + values: + - 0 + - Prop: + type_id: 3 + prop_name: SelectionBehaviorRight + prop_type: Enum + values: + - 0 + - Prop: + type_id: 3 + prop_name: SelectionBehaviorUp + prop_type: Enum + values: + - 0 + - Prop: + type_id: 3 + prop_name: SelectionGroup + prop_type: Bool + values: + - false + - Prop: + type_id: 3 + prop_name: SelectionImageObject + prop_type: Ref + values: + - -1 + - Prop: + type_id: 3 + prop_name: SelectionOrder + prop_type: Int32 + values: + - 0 + - Prop: + type_id: 3 + prop_name: Size + prop_type: UDim2 + values: + - - - 0 + - 200 + - - 0 + - 50 + - Prop: + type_id: 3 + prop_name: SizeConstraint + prop_type: Enum + values: + - 0 + - Prop: + type_id: 3 + prop_name: SourceAssetId + prop_type: Int64 + values: + - -1 + - Prop: + type_id: 3 + prop_name: Style + prop_type: Enum + values: + - 0 + - Prop: + type_id: 3 + prop_name: Tags + prop_type: String + values: + - "" + - Prop: + type_id: 3 + prop_name: Text + prop_type: String + values: + - Button + - Prop: + type_id: 3 + prop_name: TextColor3 + prop_type: Color3 + values: + - - 0 + - 0 + - 0 + - Prop: + type_id: 3 + prop_name: TextScaled + prop_type: Bool + values: + - false + - Prop: + type_id: 3 + prop_name: TextSize + prop_type: Float32 + values: + - 14 + - Prop: + type_id: 3 + prop_name: TextStrokeColor3 + prop_type: Color3 + values: + - - 0 + - 0 + - 0 + - Prop: + type_id: 3 + prop_name: TextStrokeTransparency + prop_type: Float32 + values: + - 1 + - Prop: + type_id: 3 + prop_name: TextTransparency + prop_type: Float32 + values: + - 0 + - Prop: + type_id: 3 + prop_name: TextTruncate + prop_type: Enum + values: + - 0 + - Prop: + type_id: 3 + prop_name: TextWrapped + prop_type: Bool + values: + - false + - Prop: + type_id: 3 + prop_name: TextXAlignment + prop_type: Enum + values: + - 2 + - Prop: + type_id: 3 + prop_name: TextYAlignment + prop_type: Enum + values: + - 1 + - Prop: + type_id: 3 + prop_name: Visible + prop_type: Bool + values: + - true + - Prop: + type_id: 3 + prop_name: ZIndex + prop_type: Int32 + values: + - 1 + - Prop: + type_id: 2 + prop_name: Active + prop_type: Bool + values: + - false + - Prop: + type_id: 2 + prop_name: AnchorPoint + prop_type: Vector2 + values: + - - 0 + - 0 + - Prop: + type_id: 2 + prop_name: AttributesSerialize + prop_type: String + values: + - "" + - Prop: + type_id: 2 + prop_name: AutoLocalize + prop_type: Bool + values: + - true + - Prop: + type_id: 2 + prop_name: AutomaticSize + prop_type: Enum + values: + - 0 + - Prop: + type_id: 2 + prop_name: BackgroundColor3 + prop_type: Color3 + values: + - - 1 + - 1 + - 1 + - Prop: + type_id: 2 + prop_name: BackgroundTransparency + prop_type: Float32 + values: + - 0 + - Prop: + type_id: 2 + prop_name: BorderColor3 + prop_type: Color3 + values: + - - 0.10588236 + - 0.16470589 + - 0.20784315 + - Prop: + type_id: 2 + prop_name: BorderMode + prop_type: Enum + values: + - 0 + - Prop: + type_id: 2 + prop_name: BorderSizePixel + prop_type: Int32 + values: + - 1 + - Prop: + type_id: 2 + prop_name: ClipsDescendants + prop_type: Bool + values: + - false + - Prop: + type_id: 2 + prop_name: Draggable + prop_type: Bool + values: + - false + - Prop: + type_id: 2 + prop_name: Font + prop_type: Enum + values: + - 10 + - Prop: + type_id: 2 + prop_name: LayoutOrder + prop_type: Int32 + values: + - 0 + - Prop: + type_id: 2 + prop_name: LineHeight + prop_type: Float32 + values: + - 1 + - Prop: + type_id: 2 + prop_name: MaxVisibleGraphemes + prop_type: Int32 + values: + - -1 + - Prop: + type_id: 2 + prop_name: Name + prop_type: String + values: + - TextLabel + - Prop: + type_id: 2 + prop_name: NextSelectionDown + prop_type: Ref + values: + - -1 + - Prop: + type_id: 2 + prop_name: NextSelectionLeft + prop_type: Ref + values: + - -1 + - Prop: + type_id: 2 + prop_name: NextSelectionRight + prop_type: Ref + values: + - -1 + - Prop: + type_id: 2 + prop_name: NextSelectionUp + prop_type: Ref + values: + - -1 + - Prop: + type_id: 2 + prop_name: Position + prop_type: UDim2 + values: + - - - 0 + - 0 + - - 0 + - 0 + - Prop: + type_id: 2 + prop_name: RichText + prop_type: Bool + values: + - false + - Prop: + type_id: 2 + prop_name: RootLocalizationTable + prop_type: Ref + values: + - -1 + - Prop: + type_id: 2 + prop_name: Rotation + prop_type: Float32 + values: + - 0 + - Prop: + type_id: 2 + prop_name: Selectable + prop_type: Bool + values: + - false + - Prop: + type_id: 2 + prop_name: SelectionBehaviorDown + prop_type: Enum + values: + - 0 + - Prop: + type_id: 2 + prop_name: SelectionBehaviorLeft + prop_type: Enum + values: + - 0 + - Prop: + type_id: 2 + prop_name: SelectionBehaviorRight + prop_type: Enum + values: + - 0 + - Prop: + type_id: 2 + prop_name: SelectionBehaviorUp + prop_type: Enum + values: + - 0 + - Prop: + type_id: 2 + prop_name: SelectionGroup + prop_type: Bool + values: + - false + - Prop: + type_id: 2 + prop_name: SelectionImageObject + prop_type: Ref + values: + - -1 + - Prop: + type_id: 2 + prop_name: SelectionOrder + prop_type: Int32 + values: + - 0 + - Prop: + type_id: 2 + prop_name: Size + prop_type: UDim2 + values: + - - - 0 + - 200 + - - 0 + - 50 + - Prop: + type_id: 2 + prop_name: SizeConstraint + prop_type: Enum + values: + - 0 + - Prop: + type_id: 2 + prop_name: SourceAssetId + prop_type: Int64 + values: + - -1 + - Prop: + type_id: 2 + prop_name: Tags + prop_type: String + values: + - "" + - Prop: + type_id: 2 + prop_name: Text + prop_type: String + values: + - Label + - Prop: + type_id: 2 + prop_name: TextColor3 + prop_type: Color3 + values: + - - 0 + - 0 + - 0 + - Prop: + type_id: 2 + prop_name: TextScaled + prop_type: Bool + values: + - false + - Prop: + type_id: 2 + prop_name: TextSize + prop_type: Float32 + values: + - 14 + - Prop: + type_id: 2 + prop_name: TextStrokeColor3 + prop_type: Color3 + values: + - - 0 + - 0 + - 0 + - Prop: + type_id: 2 + prop_name: TextStrokeTransparency + prop_type: Float32 + values: + - 1 + - Prop: + type_id: 2 + prop_name: TextTransparency + prop_type: Float32 + values: + - 0 + - Prop: + type_id: 2 + prop_name: TextTruncate + prop_type: Enum + values: + - 0 + - Prop: + type_id: 2 + prop_name: TextWrapped + prop_type: Bool + values: + - false + - Prop: + type_id: 2 + prop_name: TextXAlignment + prop_type: Enum + values: + - 2 + - Prop: + type_id: 2 + prop_name: TextYAlignment + prop_type: Enum + values: + - 1 + - Prop: + type_id: 2 + prop_name: Visible + prop_type: Bool + values: + - true + - Prop: + type_id: 2 + prop_name: ZIndex + prop_type: Int32 + values: + - 1 + - Prnt: + version: 0 + links: + - - 0 + - -1 + - - 1 + - 0 + - - 2 + - 0 + - - 3 + - 2 + - - 4 + - 2 + - - 5 + - 2 + - End + diff --git a/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__sharedstring__decoded.snap b/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__sharedstring__decoded.snap new file mode 100644 index 000000000..87f10d7d0 --- /dev/null +++ b/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__sharedstring__decoded.snap @@ -0,0 +1,1433 @@ +--- +source: rbx_binary/src/tests/util.rs +expression: decoded_viewed +--- +- referent: referent-0 + name: Parts + class: Model + properties: + Attributes: + Attributes: {} + LevelOfDetail: + Enum: 0 + ModelMeshCFrame: + CFrame: + position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + ModelMeshData: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + ModelMeshSize: + Vector3: + - 0 + - 0 + - 0 + ModelStreamingMode: + Enum: 0 + NeedsPivotMigration: + Bool: false + PrimaryPart: "null" + ScaleFactor: + Float32: 1 + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + WorldPivotData: + OptionalCFrame: + position: + - -0.69070053 + - 1.3813775 + - -0.8003998 + orientation: + - - -0.10631021 + - 0.0024746137 + - -0.99433017 + - - -0.021991055 + - -0.99975836 + - -0.00013692312 + - - -0.9940901 + - 0.021851815 + - 0.10633871 + children: + - referent: referent-1 + name: Union + class: UnionOperation + properties: + Anchored: + Bool: false + AssetId: + Content: "https://www.roblox.com//asset/?id=2892119179" + Attributes: + Attributes: {} + BackParamA: + Float32: -0.5 + BackParamB: + Float32: 0.5 + BackSurface: + Enum: 10 + BackSurfaceInput: + Enum: 0 + BottomParamA: + Float32: -0.5 + BottomParamB: + Float32: 0.5 + BottomSurface: + Enum: 10 + BottomSurfaceInput: + Enum: 0 + CFrame: + CFrame: + position: + - -0.09659165 + - 1.517803 + - -0.83597946 + orientation: + - - 0.10630996 + - -0.0024746126 + - -0.9943304 + - - 0.021991052 + - 0.999758 + - -0.0001369233 + - - 0.99409056 + - -0.02185182 + - 0.1063388 + CanCollide: + Bool: false + CanQuery: + Bool: true + CanTouch: + Bool: true + CastShadow: + Bool: true + ChildData: + BinaryString: "" + ChildData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + CollisionGroup: + String: Default + CollisionGroupId: + Int32: 0 + Color: + Color3uint8: + - 159 + - 161 + - 172 + CustomPhysicalProperties: + PhysicalProperties: Default + FormFactor: + Enum: 3 + FrontParamA: + Float32: -0.5 + FrontParamB: + Float32: 0.5 + FrontSurface: + Enum: 10 + FrontSurfaceInput: + Enum: 0 + InitialSize: + Vector3: + - 1.0000002 + - 18 + - 31.000004 + LeftParamA: + Float32: -0.5 + LeftParamB: + Float32: 0.5 + LeftSurface: + Enum: 10 + LeftSurfaceInput: + Enum: 0 + Locked: + Bool: false + Massless: + Bool: false + Material: + Enum: 272 + MaterialVariantSerialized: + BinaryString: "" + MeshData: + BinaryString: "" + MeshData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + PhysicalConfigData: + len: 8350 + hash: fb095154e907fd5daaca93bae5bf68ca6400ee1c213e897c65cbf95c65fb4463 + PhysicsData: + BinaryString: "" + PivotOffset: + CFrame: + position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + Reflectance: + Float32: 0.1 + RenderFidelity: + Enum: 1 + RightParamA: + Float32: -0.5 + RightParamB: + Float32: 0.5 + RightSurface: + Enum: 10 + RightSurfaceInput: + Enum: 0 + RootPriority: + Int32: 0 + RotVelocity: + Vector3: + - 0 + - 0 + - 0 + Size: + Vector3: + - 0.05 + - 0.3600072 + - 0.6200124 + SmoothingAngle: + Float32: 0 + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + TopParamA: + Float32: -0.5 + TopParamB: + Float32: 0.5 + TopSurface: + Enum: 10 + TopSurfaceInput: + Enum: 0 + Transparency: + Float32: 0 + UsePartColor: + Bool: true + Velocity: + Vector3: + - 0 + - 0 + - 0 + children: [] + - referent: referent-2 + name: Union + class: UnionOperation + properties: + Anchored: + Bool: false + AssetId: + Content: "https://www.roblox.com//asset/?id=2892119179" + Attributes: + Attributes: {} + BackParamA: + Float32: -0.5 + BackParamB: + Float32: 0.5 + BackSurface: + Enum: 10 + BackSurfaceInput: + Enum: 0 + BottomParamA: + Float32: -0.5 + BottomParamB: + Float32: 0.5 + BottomSurface: + Enum: 10 + BottomSurfaceInput: + Enum: 0 + CFrame: + CFrame: + position: + - -1.2853186 + - 1.5163233 + - -0.769176 + orientation: + - - -0.106310226 + - -0.0024746126 + - 0.99433064 + - - -0.02199106 + - 0.999758 + - 0.00013691811 + - - -0.9940908 + - -0.02185182 + - -0.10633907 + CanCollide: + Bool: false + CanQuery: + Bool: true + CanTouch: + Bool: true + CastShadow: + Bool: true + ChildData: + BinaryString: "" + ChildData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + CollisionGroup: + String: Default + CollisionGroupId: + Int32: 0 + Color: + Color3uint8: + - 159 + - 161 + - 172 + CustomPhysicalProperties: + PhysicalProperties: Default + FormFactor: + Enum: 3 + FrontParamA: + Float32: -0.5 + FrontParamB: + Float32: 0.5 + FrontSurface: + Enum: 10 + FrontSurfaceInput: + Enum: 0 + InitialSize: + Vector3: + - 1.0000002 + - 18 + - 31.000004 + LeftParamA: + Float32: -0.5 + LeftParamB: + Float32: 0.5 + LeftSurface: + Enum: 10 + LeftSurfaceInput: + Enum: 0 + Locked: + Bool: false + Massless: + Bool: false + Material: + Enum: 272 + MaterialVariantSerialized: + BinaryString: "" + MeshData: + BinaryString: "" + MeshData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + PhysicalConfigData: + len: 8350 + hash: fb095154e907fd5daaca93bae5bf68ca6400ee1c213e897c65cbf95c65fb4463 + PhysicsData: + BinaryString: "" + PivotOffset: + CFrame: + position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + Reflectance: + Float32: 0.1 + RenderFidelity: + Enum: 1 + RightParamA: + Float32: -0.5 + RightParamB: + Float32: 0.5 + RightSurface: + Enum: 10 + RightSurfaceInput: + Enum: 0 + RootPriority: + Int32: 0 + RotVelocity: + Vector3: + - 0 + - 0 + - 0 + Size: + Vector3: + - 0.05 + - 0.36000714 + - 0.62001246 + SmoothingAngle: + Float32: 0 + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + TopParamA: + Float32: -0.5 + TopParamB: + Float32: 0.5 + TopSurface: + Enum: 10 + TopSurfaceInput: + Enum: 0 + Transparency: + Float32: 0 + UsePartColor: + Bool: true + Velocity: + Vector3: + - 0 + - 0 + - 0 + children: [] + - referent: referent-3 + name: Union + class: UnionOperation + properties: + Anchored: + Bool: false + AssetId: + Content: "" + Attributes: + Attributes: {} + BackParamA: + Float32: -0.5 + BackParamB: + Float32: 0.5 + BackSurface: + Enum: 10 + BackSurfaceInput: + Enum: 0 + BottomParamA: + Float32: -0.5 + BottomParamB: + Float32: 0.5 + BottomSurface: + Enum: 10 + BottomSurfaceInput: + Enum: 0 + CFrame: + CFrame: + position: + - 0.16903359 + - 1.3672578 + - -0.89124817 + orientation: + - - 0.10630996 + - 0.002474614 + - 0.99433064 + - - 0.021991052 + - -0.99975836 + - 0.00013691811 + - - 0.99409056 + - 0.02185183 + - -0.10633907 + CanCollide: + Bool: false + CanQuery: + Bool: true + CanTouch: + Bool: true + CastShadow: + Bool: true + ChildData: + BinaryString: "" + ChildData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + CollisionGroup: + String: Default + CollisionGroupId: + Int32: 0 + Color: + Color3uint8: + - 248 + - 248 + - 248 + CustomPhysicalProperties: + PhysicalProperties: Default + FormFactor: + Enum: 3 + FrontParamA: + Float32: -0.5 + FrontParamB: + Float32: 0.5 + FrontSurface: + Enum: 10 + FrontSurfaceInput: + Enum: 0 + InitialSize: + Vector3: + - 4.8 + - 2.0098171 + - 2.0169144 + LeftParamA: + Float32: -0.5 + LeftParamB: + Float32: 0.5 + LeftSurface: + Enum: 10 + LeftSurfaceInput: + Enum: 0 + Locked: + Bool: false + Massless: + Bool: false + Material: + Enum: 1088 + MaterialVariantSerialized: + BinaryString: "" + MeshData: + BinaryString: "" + MeshData2: + len: 36 + hash: a8e881ce93449542139935bd0ec3f0a77725c368b5a699b2b87077d9fd842a64 + PhysicalConfigData: + len: 19694 + hash: c0f5b001cda7f15fa5f109b9872cecc30fcc0ce5d83a101d95a77f4ee7cfb221 + PhysicsData: + BinaryString: "" + PivotOffset: + CFrame: + position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + Reflectance: + Float32: 0 + RenderFidelity: + Enum: 1 + RightParamA: + Float32: -0.5 + RightParamB: + Float32: 0.5 + RightSurface: + Enum: 10 + RightSurfaceInput: + Enum: 0 + RootPriority: + Int32: 0 + RotVelocity: + Vector3: + - 0 + - 0 + - 0 + Size: + Vector3: + - 0.096 + - 0.05 + - 0.05 + SmoothingAngle: + Float32: 0 + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + TopParamA: + Float32: -0.5 + TopParamB: + Float32: 0.5 + TopSurface: + Enum: 10 + TopSurfaceInput: + Enum: 0 + Transparency: + Float32: 0 + UsePartColor: + Bool: false + Velocity: + Vector3: + - 0 + - 0 + - 0 + children: [] + - referent: referent-4 + name: Union + class: UnionOperation + properties: + Anchored: + Bool: false + AssetId: + Content: "https://www.roblox.com//asset/?id=2892119179" + Attributes: + Attributes: {} + BackParamA: + Float32: -0.5 + BackParamB: + Float32: 0.5 + BackSurface: + Enum: 10 + BackSurfaceInput: + Enum: 0 + BottomParamA: + Float32: -0.5 + BottomParamB: + Float32: 0.5 + BottomSurface: + Enum: 10 + BottomSurfaceInput: + Enum: 0 + CFrame: + CFrame: + position: + - -0.102969766 + - 1.5164837 + - -0.8956378 + orientation: + - - 0.10630996 + - -0.0024746126 + - -0.9943304 + - - 0.021991052 + - 0.999758 + - -0.0001369233 + - - 0.99409056 + - -0.02185182 + - 0.1063388 + CanCollide: + Bool: false + CanQuery: + Bool: true + CanTouch: + Bool: true + CastShadow: + Bool: true + ChildData: + BinaryString: "" + ChildData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + CollisionGroup: + String: Default + CollisionGroupId: + Int32: 0 + Color: + Color3uint8: + - 159 + - 161 + - 172 + CustomPhysicalProperties: + PhysicalProperties: Default + FormFactor: + Enum: 3 + FrontParamA: + Float32: -0.5 + FrontParamB: + Float32: 0.5 + FrontSurface: + Enum: 10 + FrontSurfaceInput: + Enum: 0 + InitialSize: + Vector3: + - 1.0000002 + - 18 + - 31.000004 + LeftParamA: + Float32: -0.5 + LeftParamB: + Float32: 0.5 + LeftSurface: + Enum: 10 + LeftSurfaceInput: + Enum: 0 + Locked: + Bool: false + Massless: + Bool: false + Material: + Enum: 272 + MaterialVariantSerialized: + BinaryString: "" + MeshData: + BinaryString: "" + MeshData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + PhysicalConfigData: + len: 8350 + hash: fb095154e907fd5daaca93bae5bf68ca6400ee1c213e897c65cbf95c65fb4463 + PhysicsData: + BinaryString: "" + PivotOffset: + CFrame: + position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + Reflectance: + Float32: 0.1 + RenderFidelity: + Enum: 1 + RightParamA: + Float32: -0.5 + RightParamB: + Float32: 0.5 + RightSurface: + Enum: 10 + RightSurfaceInput: + Enum: 0 + RootPriority: + Int32: 0 + RotVelocity: + Vector3: + - 0 + - 0 + - 0 + Size: + Vector3: + - 0.05 + - 0.3600072 + - 0.6200124 + SmoothingAngle: + Float32: 0 + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + TopParamA: + Float32: -0.5 + TopParamB: + Float32: 0.5 + TopSurface: + Enum: 10 + TopSurfaceInput: + Enum: 0 + Transparency: + Float32: 0 + UsePartColor: + Bool: true + Velocity: + Vector3: + - 0 + - 0 + - 0 + children: [] + - referent: referent-5 + name: Union + class: UnionOperation + properties: + Anchored: + Bool: false + AssetId: + Content: "https://www.roblox.com//asset/?id=2892119179" + Attributes: + Attributes: {} + BackParamA: + Float32: -0.5 + BackParamB: + Float32: 0.5 + BackSurface: + Enum: 10 + BackSurfaceInput: + Enum: 0 + BottomParamA: + Float32: -0.5 + BottomParamB: + Float32: 0.5 + BottomSurface: + Enum: 10 + BottomSurfaceInput: + Enum: 0 + CFrame: + CFrame: + position: + - -1.2789422 + - 1.5176423 + - -0.70953286 + orientation: + - - -0.106310226 + - -0.0024746126 + - 0.99433064 + - - -0.02199106 + - 0.999758 + - 0.00013691811 + - - -0.9940908 + - -0.02185182 + - -0.10633907 + CanCollide: + Bool: false + CanQuery: + Bool: true + CanTouch: + Bool: true + CastShadow: + Bool: true + ChildData: + BinaryString: "" + ChildData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + CollisionGroup: + String: Default + CollisionGroupId: + Int32: 0 + Color: + Color3uint8: + - 159 + - 161 + - 172 + CustomPhysicalProperties: + PhysicalProperties: Default + FormFactor: + Enum: 3 + FrontParamA: + Float32: -0.5 + FrontParamB: + Float32: 0.5 + FrontSurface: + Enum: 10 + FrontSurfaceInput: + Enum: 0 + InitialSize: + Vector3: + - 1.0000002 + - 18 + - 31.000004 + LeftParamA: + Float32: -0.5 + LeftParamB: + Float32: 0.5 + LeftSurface: + Enum: 10 + LeftSurfaceInput: + Enum: 0 + Locked: + Bool: false + Massless: + Bool: false + Material: + Enum: 272 + MaterialVariantSerialized: + BinaryString: "" + MeshData: + BinaryString: "" + MeshData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + PhysicalConfigData: + len: 8350 + hash: fb095154e907fd5daaca93bae5bf68ca6400ee1c213e897c65cbf95c65fb4463 + PhysicsData: + BinaryString: "" + PivotOffset: + CFrame: + position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + Reflectance: + Float32: 0.1 + RenderFidelity: + Enum: 1 + RightParamA: + Float32: -0.5 + RightParamB: + Float32: 0.5 + RightSurface: + Enum: 10 + RightSurfaceInput: + Enum: 0 + RootPriority: + Int32: 0 + RotVelocity: + Vector3: + - 0 + - 0 + - 0 + Size: + Vector3: + - 0.05 + - 0.36000714 + - 0.62001246 + SmoothingAngle: + Float32: 0 + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + TopParamA: + Float32: -0.5 + TopParamB: + Float32: 0.5 + TopSurface: + Enum: 10 + TopSurfaceInput: + Enum: 0 + Transparency: + Float32: 0 + UsePartColor: + Bool: true + Velocity: + Vector3: + - 0 + - 0 + - 0 + children: [] + - referent: referent-6 + name: Union + class: UnionOperation + properties: + Anchored: + Bool: false + AssetId: + Content: "https://www.roblox.com//asset/?id=2892119179" + Attributes: + Attributes: {} + BackParamA: + Float32: -0.5 + BackParamB: + Float32: 0.5 + BackSurface: + Enum: 10 + BackSurfaceInput: + Enum: 0 + BottomParamA: + Float32: -0.5 + BottomParamB: + Float32: 0.5 + BottomSurface: + Enum: 10 + BottomSurfaceInput: + Enum: 0 + CFrame: + CFrame: + position: + - -1.2813833 + - 1.2170323 + - -0.7327989 + orientation: + - - -0.106310226 + - 0.002474614 + - -0.9943304 + - - -0.02199106 + - -0.99975836 + - -0.0001369233 + - - -0.9940908 + - 0.02185183 + - 0.1063388 + CanCollide: + Bool: false + CanQuery: + Bool: true + CanTouch: + Bool: true + CastShadow: + Bool: true + ChildData: + BinaryString: "" + ChildData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + CollisionGroup: + String: Default + CollisionGroupId: + Int32: 0 + Color: + Color3uint8: + - 159 + - 161 + - 172 + CustomPhysicalProperties: + PhysicalProperties: Default + FormFactor: + Enum: 3 + FrontParamA: + Float32: -0.5 + FrontParamB: + Float32: 0.5 + FrontSurface: + Enum: 10 + FrontSurfaceInput: + Enum: 0 + InitialSize: + Vector3: + - 1.0000002 + - 18 + - 31.000004 + LeftParamA: + Float32: -0.5 + LeftParamB: + Float32: 0.5 + LeftSurface: + Enum: 10 + LeftSurfaceInput: + Enum: 0 + Locked: + Bool: false + Massless: + Bool: false + Material: + Enum: 272 + MaterialVariantSerialized: + BinaryString: "" + MeshData: + BinaryString: "" + MeshData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + PhysicalConfigData: + len: 8350 + hash: fb095154e907fd5daaca93bae5bf68ca6400ee1c213e897c65cbf95c65fb4463 + PhysicsData: + BinaryString: "" + PivotOffset: + CFrame: + position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + Reflectance: + Float32: 0.1 + RenderFidelity: + Enum: 1 + RightParamA: + Float32: -0.5 + RightParamB: + Float32: 0.5 + RightSurface: + Enum: 10 + RightSurfaceInput: + Enum: 0 + RootPriority: + Int32: 0 + RotVelocity: + Vector3: + - 0 + - 0 + - 0 + Size: + Vector3: + - 0.05 + - 0.36000717 + - 0.62001246 + SmoothingAngle: + Float32: 0 + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + TopParamA: + Float32: -0.5 + TopParamB: + Float32: 0.5 + TopSurface: + Enum: 10 + TopSurfaceInput: + Enum: 0 + Transparency: + Float32: 0 + UsePartColor: + Bool: true + Velocity: + Vector3: + - 0 + - 0 + - 0 + children: [] + - referent: referent-7 + name: Union + class: UnionOperation + properties: + Anchored: + Bool: false + AssetId: + Content: "" + Attributes: + Attributes: {} + BackParamA: + Float32: -0.5 + BackParamB: + Float32: 0.5 + BackSurface: + Enum: 10 + BackSurfaceInput: + Enum: 0 + BottomParamA: + Float32: -0.5 + BottomParamB: + Float32: 0.5 + BottomSurface: + Enum: 10 + BottomSurfaceInput: + Enum: 0 + CFrame: + CFrame: + position: + - -1.5503206 + - 1.3669466 + - -0.7073545 + orientation: + - - -0.106310226 + - 0.002474614 + - -0.9943304 + - - -0.02199106 + - -0.99975836 + - -0.0001369233 + - - -0.9940908 + - 0.02185183 + - 0.1063388 + CanCollide: + Bool: false + CanQuery: + Bool: true + CanTouch: + Bool: true + CastShadow: + Bool: true + ChildData: + BinaryString: "" + ChildData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + CollisionGroup: + String: Default + CollisionGroupId: + Int32: 0 + Color: + Color3uint8: + - 248 + - 248 + - 248 + CustomPhysicalProperties: + PhysicalProperties: Default + FormFactor: + Enum: 3 + FrontParamA: + Float32: -0.5 + FrontParamB: + Float32: 0.5 + FrontSurface: + Enum: 10 + FrontSurfaceInput: + Enum: 0 + InitialSize: + Vector3: + - 4.800001 + - 2.0047607 + - 2.0113258 + LeftParamA: + Float32: -0.5 + LeftParamB: + Float32: 0.5 + LeftSurface: + Enum: 10 + LeftSurfaceInput: + Enum: 0 + Locked: + Bool: false + Massless: + Bool: false + Material: + Enum: 1088 + MaterialVariantSerialized: + BinaryString: "" + MeshData: + BinaryString: "" + MeshData2: + len: 36 + hash: 9262df03156e7ba931096479dc69773b7674d01299e9a832118c53cc21f388ed + PhysicalConfigData: + len: 16278 + hash: ab812b4f1546543445cb10ee2ae8a71c7993a54932de7b1f7a60612a8a027dfa + PhysicsData: + BinaryString: "" + PivotOffset: + CFrame: + position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + Reflectance: + Float32: 0.2 + RenderFidelity: + Enum: 1 + RightParamA: + Float32: -0.5 + RightParamB: + Float32: 0.5 + RightSurface: + Enum: 10 + RightSurfaceInput: + Enum: 0 + RootPriority: + Int32: 0 + RotVelocity: + Vector3: + - 0 + - 0 + - 0 + Size: + Vector3: + - 0.09600002 + - 0.05 + - 0.05 + SmoothingAngle: + Float32: 0 + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + TopParamA: + Float32: -0.5 + TopParamB: + Float32: 0.5 + TopSurface: + Enum: 10 + TopSurfaceInput: + Enum: 0 + Transparency: + Float32: 0 + UsePartColor: + Bool: false + Velocity: + Vector3: + - 0 + - 0 + - 0 + children: [] + - referent: referent-8 + name: Union + class: UnionOperation + properties: + Anchored: + Bool: false + AssetId: + Content: "https://www.roblox.com//asset/?id=2892119179" + Attributes: + Attributes: {} + BackParamA: + Float32: -0.5 + BackParamB: + Float32: 0.5 + BackSurface: + Enum: 10 + BackSurfaceInput: + Enum: 0 + BottomParamA: + Float32: -0.5 + BottomParamB: + Float32: 0.5 + BottomSurface: + Enum: 10 + BottomSurfaceInput: + Enum: 0 + CFrame: + CFrame: + position: + - -0.099030495 + - 1.2171957 + - -0.85926116 + orientation: + - - 0.10630996 + - 0.002474614 + - 0.99433064 + - - 0.021991052 + - -0.99975836 + - 0.00013691811 + - - 0.99409056 + - 0.02185183 + - -0.10633907 + CanCollide: + Bool: false + CanQuery: + Bool: true + CanTouch: + Bool: true + CastShadow: + Bool: true + ChildData: + BinaryString: "" + ChildData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + CollisionGroup: + String: Default + CollisionGroupId: + Int32: 0 + Color: + Color3uint8: + - 159 + - 161 + - 172 + CustomPhysicalProperties: + PhysicalProperties: Default + FormFactor: + Enum: 3 + FrontParamA: + Float32: -0.5 + FrontParamB: + Float32: 0.5 + FrontSurface: + Enum: 10 + FrontSurfaceInput: + Enum: 0 + InitialSize: + Vector3: + - 1.0000002 + - 18 + - 31.000004 + LeftParamA: + Float32: -0.5 + LeftParamB: + Float32: 0.5 + LeftSurface: + Enum: 10 + LeftSurfaceInput: + Enum: 0 + Locked: + Bool: false + Massless: + Bool: false + Material: + Enum: 272 + MaterialVariantSerialized: + BinaryString: "" + MeshData: + BinaryString: "" + MeshData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + PhysicalConfigData: + len: 8350 + hash: fb095154e907fd5daaca93bae5bf68ca6400ee1c213e897c65cbf95c65fb4463 + PhysicsData: + BinaryString: "" + PivotOffset: + CFrame: + position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + Reflectance: + Float32: 0.1 + RenderFidelity: + Enum: 1 + RightParamA: + Float32: -0.5 + RightParamB: + Float32: 0.5 + RightSurface: + Enum: 10 + RightSurfaceInput: + Enum: 0 + RootPriority: + Int32: 0 + RotVelocity: + Vector3: + - 0 + - 0 + - 0 + Size: + Vector3: + - 0.05 + - 0.36000717 + - 0.62001246 + SmoothingAngle: + Float32: 0 + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + TopParamA: + Float32: -0.5 + TopParamB: + Float32: 0.5 + TopSurface: + Enum: 10 + TopSurfaceInput: + Enum: 0 + Transparency: + Float32: 0 + UsePartColor: + Bool: true + Velocity: + Vector3: + - 0 + - 0 + - 0 + children: [] + diff --git a/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__sharedstring__encoded.snap b/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__sharedstring__encoded.snap new file mode 100644 index 000000000..440582375 --- /dev/null +++ b/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__sharedstring__encoded.snap @@ -0,0 +1,1251 @@ +--- +source: rbx_binary/src/tests/util.rs +expression: text_roundtrip +--- +num_types: 2 +num_instances: 9 +chunks: + - Sstr: + version: 0 + entries: + - len: 36 + hash: 9262df03156e7ba931096479dc69773b7674d01299e9a832118c53cc21f388ed + - len: 36 + hash: a8e881ce93449542139935bd0ec3f0a77725c368b5a699b2b87077d9fd842a64 + - len: 16278 + hash: ab812b4f1546543445cb10ee2ae8a71c7993a54932de7b1f7a60612a8a027dfa + - len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + - len: 19694 + hash: c0f5b001cda7f15fa5f109b9872cecc30fcc0ce5d83a101d95a77f4ee7cfb221 + - len: 8350 + hash: fb095154e907fd5daaca93bae5bf68ca6400ee1c213e897c65cbf95c65fb4463 + - Inst: + type_id: 0 + type_name: Model + object_format: 0 + referents: + - 0 + - Inst: + type_id: 1 + type_name: UnionOperation + object_format: 0 + referents: + - 1 + - 2 + - 3 + - 4 + - 5 + - 6 + - 7 + - 8 + - Prop: + type_id: 0 + prop_name: AttributesSerialize + prop_type: String + values: + - "" + - Prop: + type_id: 0 + prop_name: LevelOfDetail + prop_type: Enum + values: + - 0 + - Prop: + type_id: 0 + prop_name: ModelMeshCFrame + prop_type: CFrame + values: + - position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + - Prop: + type_id: 0 + prop_name: ModelMeshData + prop_type: SharedString + values: + - 3 + - Prop: + type_id: 0 + prop_name: ModelMeshSize + prop_type: Vector3 + values: + - - 0 + - 0 + - 0 + - Prop: + type_id: 0 + prop_name: ModelStreamingMode + prop_type: Enum + values: + - 0 + - Prop: + type_id: 0 + prop_name: Name + prop_type: String + values: + - Parts + - Prop: + type_id: 0 + prop_name: NeedsPivotMigration + prop_type: Bool + values: + - false + - Prop: + type_id: 0 + prop_name: PrimaryPart + prop_type: Ref + values: + - -1 + - Prop: + type_id: 0 + prop_name: ScaleFactor + prop_type: Float32 + values: + - 1 + - Prop: + type_id: 0 + prop_name: SourceAssetId + prop_type: Int64 + values: + - -1 + - Prop: + type_id: 0 + prop_name: Tags + prop_type: String + values: + - "" + - Prop: + type_id: 0 + prop_name: WorldPivotData + prop_type: OptionalCFrame + values: + - position: + - -0.69070053 + - 1.3813775 + - -0.8003998 + orientation: + - - -0.10631021 + - 0.0024746137 + - -0.99433017 + - - -0.021991055 + - -0.99975836 + - -0.00013692312 + - - -0.9940901 + - 0.021851815 + - 0.10633871 + - Prop: + type_id: 1 + prop_name: Anchored + prop_type: Bool + values: + - false + - false + - false + - false + - false + - false + - false + - false + - Prop: + type_id: 1 + prop_name: AssetId + prop_type: String + values: + - "https://www.roblox.com//asset/?id=2892119179" + - "https://www.roblox.com//asset/?id=2892119179" + - "" + - "https://www.roblox.com//asset/?id=2892119179" + - "https://www.roblox.com//asset/?id=2892119179" + - "https://www.roblox.com//asset/?id=2892119179" + - "" + - "https://www.roblox.com//asset/?id=2892119179" + - Prop: + type_id: 1 + prop_name: AttributesSerialize + prop_type: String + values: + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - Prop: + type_id: 1 + prop_name: BackParamA + prop_type: Float32 + values: + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - Prop: + type_id: 1 + prop_name: BackParamB + prop_type: Float32 + values: + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - Prop: + type_id: 1 + prop_name: BackSurface + prop_type: Enum + values: + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - Prop: + type_id: 1 + prop_name: BackSurfaceInput + prop_type: Enum + values: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: BottomParamA + prop_type: Float32 + values: + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - Prop: + type_id: 1 + prop_name: BottomParamB + prop_type: Float32 + values: + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - Prop: + type_id: 1 + prop_name: BottomSurface + prop_type: Enum + values: + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - Prop: + type_id: 1 + prop_name: BottomSurfaceInput + prop_type: Enum + values: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: CFrame + prop_type: CFrame + values: + - position: + - -0.09659165 + - 1.517803 + - -0.83597946 + orientation: + - - 0.10630996 + - -0.0024746126 + - -0.9943304 + - - 0.021991052 + - 0.999758 + - -0.0001369233 + - - 0.99409056 + - -0.02185182 + - 0.1063388 + - position: + - -1.2853186 + - 1.5163233 + - -0.769176 + orientation: + - - -0.106310226 + - -0.0024746126 + - 0.99433064 + - - -0.02199106 + - 0.999758 + - 0.00013691811 + - - -0.9940908 + - -0.02185182 + - -0.10633907 + - position: + - 0.16903359 + - 1.3672578 + - -0.89124817 + orientation: + - - 0.10630996 + - 0.002474614 + - 0.99433064 + - - 0.021991052 + - -0.99975836 + - 0.00013691811 + - - 0.99409056 + - 0.02185183 + - -0.10633907 + - position: + - -0.102969766 + - 1.5164837 + - -0.8956378 + orientation: + - - 0.10630996 + - -0.0024746126 + - -0.9943304 + - - 0.021991052 + - 0.999758 + - -0.0001369233 + - - 0.99409056 + - -0.02185182 + - 0.1063388 + - position: + - -1.2789422 + - 1.5176423 + - -0.70953286 + orientation: + - - -0.106310226 + - -0.0024746126 + - 0.99433064 + - - -0.02199106 + - 0.999758 + - 0.00013691811 + - - -0.9940908 + - -0.02185182 + - -0.10633907 + - position: + - -1.2813833 + - 1.2170323 + - -0.7327989 + orientation: + - - -0.106310226 + - 0.002474614 + - -0.9943304 + - - -0.02199106 + - -0.99975836 + - -0.0001369233 + - - -0.9940908 + - 0.02185183 + - 0.1063388 + - position: + - -1.5503206 + - 1.3669466 + - -0.7073545 + orientation: + - - -0.106310226 + - 0.002474614 + - -0.9943304 + - - -0.02199106 + - -0.99975836 + - -0.0001369233 + - - -0.9940908 + - 0.02185183 + - 0.1063388 + - position: + - -0.099030495 + - 1.2171957 + - -0.85926116 + orientation: + - - 0.10630996 + - 0.002474614 + - 0.99433064 + - - 0.021991052 + - -0.99975836 + - 0.00013691811 + - - 0.99409056 + - 0.02185183 + - -0.10633907 + - Prop: + type_id: 1 + prop_name: CanCollide + prop_type: Bool + values: + - false + - false + - false + - false + - false + - false + - false + - false + - Prop: + type_id: 1 + prop_name: CanQuery + prop_type: Bool + values: + - true + - true + - true + - true + - true + - true + - true + - true + - Prop: + type_id: 1 + prop_name: CanTouch + prop_type: Bool + values: + - true + - true + - true + - true + - true + - true + - true + - true + - Prop: + type_id: 1 + prop_name: CastShadow + prop_type: Bool + values: + - true + - true + - true + - true + - true + - true + - true + - true + - Prop: + type_id: 1 + prop_name: ChildData + prop_type: String + values: + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - Prop: + type_id: 1 + prop_name: ChildData2 + prop_type: SharedString + values: + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - Prop: + type_id: 1 + prop_name: CollisionGroup + prop_type: String + values: + - Default + - Default + - Default + - Default + - Default + - Default + - Default + - Default + - Prop: + type_id: 1 + prop_name: CollisionGroupId + prop_type: Int32 + values: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: Color3uint8 + prop_type: Color3uint8 + values: + - - 159 + - 161 + - 172 + - - 159 + - 161 + - 172 + - - 248 + - 248 + - 248 + - - 159 + - 161 + - 172 + - - 159 + - 161 + - 172 + - - 159 + - 161 + - 172 + - - 248 + - 248 + - 248 + - - 159 + - 161 + - 172 + - Prop: + type_id: 1 + prop_name: CustomPhysicalProperties + prop_type: PhysicalProperties + values: + - Default + - Default + - Default + - Default + - Default + - Default + - Default + - Default + - Prop: + type_id: 1 + prop_name: FormFactor + prop_type: Enum + values: + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - Prop: + type_id: 1 + prop_name: FrontParamA + prop_type: Float32 + values: + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - Prop: + type_id: 1 + prop_name: FrontParamB + prop_type: Float32 + values: + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - Prop: + type_id: 1 + prop_name: FrontSurface + prop_type: Enum + values: + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - Prop: + type_id: 1 + prop_name: FrontSurfaceInput + prop_type: Enum + values: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: InitialSize + prop_type: Vector3 + values: + - - 1.0000002 + - 18 + - 31.000004 + - - 1.0000002 + - 18 + - 31.000004 + - - 4.8 + - 2.0098171 + - 2.0169144 + - - 1.0000002 + - 18 + - 31.000004 + - - 1.0000002 + - 18 + - 31.000004 + - - 1.0000002 + - 18 + - 31.000004 + - - 4.800001 + - 2.0047607 + - 2.0113258 + - - 1.0000002 + - 18 + - 31.000004 + - Prop: + type_id: 1 + prop_name: LeftParamA + prop_type: Float32 + values: + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - Prop: + type_id: 1 + prop_name: LeftParamB + prop_type: Float32 + values: + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - Prop: + type_id: 1 + prop_name: LeftSurface + prop_type: Enum + values: + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - Prop: + type_id: 1 + prop_name: LeftSurfaceInput + prop_type: Enum + values: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: Locked + prop_type: Bool + values: + - false + - false + - false + - false + - false + - false + - false + - false + - Prop: + type_id: 1 + prop_name: Massless + prop_type: Bool + values: + - false + - false + - false + - false + - false + - false + - false + - false + - Prop: + type_id: 1 + prop_name: Material + prop_type: Enum + values: + - 272 + - 272 + - 1088 + - 272 + - 272 + - 272 + - 1088 + - 272 + - Prop: + type_id: 1 + prop_name: MaterialVariantSerialized + prop_type: String + values: + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - Prop: + type_id: 1 + prop_name: MeshData + prop_type: String + values: + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - Prop: + type_id: 1 + prop_name: MeshData2 + prop_type: SharedString + values: + - 3 + - 3 + - 1 + - 3 + - 3 + - 3 + - 0 + - 3 + - Prop: + type_id: 1 + prop_name: Name + prop_type: String + values: + - Union + - Union + - Union + - Union + - Union + - Union + - Union + - Union + - Prop: + type_id: 1 + prop_name: PhysicalConfigData + prop_type: SharedString + values: + - 5 + - 5 + - 4 + - 5 + - 5 + - 5 + - 2 + - 5 + - Prop: + type_id: 1 + prop_name: PhysicsData + prop_type: String + values: + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - Prop: + type_id: 1 + prop_name: PivotOffset + prop_type: CFrame + values: + - position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + - position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + - position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + - position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + - position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + - position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + - position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + - position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + - Prop: + type_id: 1 + prop_name: Reflectance + prop_type: Float32 + values: + - 0.1 + - 0.1 + - 0 + - 0.1 + - 0.1 + - 0.1 + - 0.2 + - 0.1 + - Prop: + type_id: 1 + prop_name: RenderFidelity + prop_type: Enum + values: + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - Prop: + type_id: 1 + prop_name: RightParamA + prop_type: Float32 + values: + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - Prop: + type_id: 1 + prop_name: RightParamB + prop_type: Float32 + values: + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - Prop: + type_id: 1 + prop_name: RightSurface + prop_type: Enum + values: + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - Prop: + type_id: 1 + prop_name: RightSurfaceInput + prop_type: Enum + values: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: RootPriority + prop_type: Int32 + values: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: RotVelocity + prop_type: Vector3 + values: + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: size + prop_type: Vector3 + values: + - - 0.05 + - 0.3600072 + - 0.6200124 + - - 0.05 + - 0.36000714 + - 0.62001246 + - - 0.096 + - 0.05 + - 0.05 + - - 0.05 + - 0.3600072 + - 0.6200124 + - - 0.05 + - 0.36000714 + - 0.62001246 + - - 0.05 + - 0.36000717 + - 0.62001246 + - - 0.09600002 + - 0.05 + - 0.05 + - - 0.05 + - 0.36000717 + - 0.62001246 + - Prop: + type_id: 1 + prop_name: SmoothingAngle + prop_type: Float32 + values: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: SourceAssetId + prop_type: Int64 + values: + - -1 + - -1 + - -1 + - -1 + - -1 + - -1 + - -1 + - -1 + - Prop: + type_id: 1 + prop_name: Tags + prop_type: String + values: + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - Prop: + type_id: 1 + prop_name: TopParamA + prop_type: Float32 + values: + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - Prop: + type_id: 1 + prop_name: TopParamB + prop_type: Float32 + values: + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - Prop: + type_id: 1 + prop_name: TopSurface + prop_type: Enum + values: + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - Prop: + type_id: 1 + prop_name: TopSurfaceInput + prop_type: Enum + values: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: Transparency + prop_type: Float32 + values: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: UsePartColor + prop_type: Bool + values: + - true + - true + - false + - true + - true + - true + - false + - true + - Prop: + type_id: 1 + prop_name: Velocity + prop_type: Vector3 + values: + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - Prnt: + version: 0 + links: + - - 0 + - -1 + - - 1 + - 0 + - - 2 + - 0 + - - 3 + - 0 + - - 4 + - 0 + - - 5 + - 0 + - - 6 + - 0 + - - 7 + - 0 + - - 8 + - 0 + - End + diff --git a/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__sharedstring__input.snap b/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__sharedstring__input.snap new file mode 100644 index 000000000..52eb3c7c3 --- /dev/null +++ b/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__sharedstring__input.snap @@ -0,0 +1,1255 @@ +--- +source: rbx_binary/src/tests/util.rs +expression: text_decoded +--- +num_types: 2 +num_instances: 9 +chunks: + - Meta: + entries: + - - ExplicitAutoJoints + - "true" + - Sstr: + version: 0 + entries: + - len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + - len: 36 + hash: a8e881ce93449542139935bd0ec3f0a77725c368b5a699b2b87077d9fd842a64 + - len: 36 + hash: 9262df03156e7ba931096479dc69773b7674d01299e9a832118c53cc21f388ed + - len: 8350 + hash: fb095154e907fd5daaca93bae5bf68ca6400ee1c213e897c65cbf95c65fb4463 + - len: 19694 + hash: c0f5b001cda7f15fa5f109b9872cecc30fcc0ce5d83a101d95a77f4ee7cfb221 + - len: 16278 + hash: ab812b4f1546543445cb10ee2ae8a71c7993a54932de7b1f7a60612a8a027dfa + - Inst: + type_id: 0 + type_name: Model + object_format: 0 + referents: + - 0 + - Inst: + type_id: 1 + type_name: UnionOperation + object_format: 0 + referents: + - 1 + - 2 + - 3 + - 4 + - 5 + - 6 + - 7 + - 8 + - Prop: + type_id: 0 + prop_name: AttributesSerialize + prop_type: String + values: + - "" + - Prop: + type_id: 0 + prop_name: LevelOfDetail + prop_type: Enum + values: + - 0 + - Prop: + type_id: 0 + prop_name: ModelMeshCFrame + prop_type: CFrame + values: + - position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + - Prop: + type_id: 0 + prop_name: ModelMeshData + prop_type: SharedString + values: + - 0 + - Prop: + type_id: 0 + prop_name: ModelMeshSize + prop_type: Vector3 + values: + - - 0 + - 0 + - 0 + - Prop: + type_id: 0 + prop_name: ModelStreamingMode + prop_type: Enum + values: + - 0 + - Prop: + type_id: 0 + prop_name: Name + prop_type: String + values: + - Parts + - Prop: + type_id: 0 + prop_name: NeedsPivotMigration + prop_type: Bool + values: + - false + - Prop: + type_id: 0 + prop_name: PrimaryPart + prop_type: Ref + values: + - -1 + - Prop: + type_id: 0 + prop_name: ScaleFactor + prop_type: Float32 + values: + - 1 + - Prop: + type_id: 0 + prop_name: SourceAssetId + prop_type: Int64 + values: + - -1 + - Prop: + type_id: 0 + prop_name: Tags + prop_type: String + values: + - "" + - Prop: + type_id: 0 + prop_name: WorldPivotData + prop_type: OptionalCFrame + values: + - position: + - -0.69070053 + - 1.3813775 + - -0.8003998 + orientation: + - - -0.10631021 + - 0.0024746137 + - -0.99433017 + - - -0.021991055 + - -0.99975836 + - -0.00013692312 + - - -0.9940901 + - 0.021851815 + - 0.10633871 + - Prop: + type_id: 1 + prop_name: Anchored + prop_type: Bool + values: + - false + - false + - false + - false + - false + - false + - false + - false + - Prop: + type_id: 1 + prop_name: AssetId + prop_type: String + values: + - "https://www.roblox.com//asset/?id=2892119179" + - "https://www.roblox.com//asset/?id=2892119179" + - "" + - "https://www.roblox.com//asset/?id=2892119179" + - "https://www.roblox.com//asset/?id=2892119179" + - "https://www.roblox.com//asset/?id=2892119179" + - "" + - "https://www.roblox.com//asset/?id=2892119179" + - Prop: + type_id: 1 + prop_name: AttributesSerialize + prop_type: String + values: + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - Prop: + type_id: 1 + prop_name: BackParamA + prop_type: Float32 + values: + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - Prop: + type_id: 1 + prop_name: BackParamB + prop_type: Float32 + values: + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - Prop: + type_id: 1 + prop_name: BackSurface + prop_type: Enum + values: + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - Prop: + type_id: 1 + prop_name: BackSurfaceInput + prop_type: Enum + values: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: BottomParamA + prop_type: Float32 + values: + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - Prop: + type_id: 1 + prop_name: BottomParamB + prop_type: Float32 + values: + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - Prop: + type_id: 1 + prop_name: BottomSurface + prop_type: Enum + values: + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - Prop: + type_id: 1 + prop_name: BottomSurfaceInput + prop_type: Enum + values: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: CFrame + prop_type: CFrame + values: + - position: + - -0.09659165 + - 1.517803 + - -0.83597946 + orientation: + - - 0.10630996 + - -0.0024746126 + - -0.9943304 + - - 0.021991052 + - 0.999758 + - -0.0001369233 + - - 0.99409056 + - -0.02185182 + - 0.1063388 + - position: + - -1.2853186 + - 1.5163233 + - -0.769176 + orientation: + - - -0.106310226 + - -0.0024746126 + - 0.99433064 + - - -0.02199106 + - 0.999758 + - 0.00013691811 + - - -0.9940908 + - -0.02185182 + - -0.10633907 + - position: + - 0.16903359 + - 1.3672578 + - -0.89124817 + orientation: + - - 0.10630996 + - 0.002474614 + - 0.99433064 + - - 0.021991052 + - -0.99975836 + - 0.00013691811 + - - 0.99409056 + - 0.02185183 + - -0.10633907 + - position: + - -0.102969766 + - 1.5164837 + - -0.8956378 + orientation: + - - 0.10630996 + - -0.0024746126 + - -0.9943304 + - - 0.021991052 + - 0.999758 + - -0.0001369233 + - - 0.99409056 + - -0.02185182 + - 0.1063388 + - position: + - -1.2789422 + - 1.5176423 + - -0.70953286 + orientation: + - - -0.106310226 + - -0.0024746126 + - 0.99433064 + - - -0.02199106 + - 0.999758 + - 0.00013691811 + - - -0.9940908 + - -0.02185182 + - -0.10633907 + - position: + - -1.2813833 + - 1.2170323 + - -0.7327989 + orientation: + - - -0.106310226 + - 0.002474614 + - -0.9943304 + - - -0.02199106 + - -0.99975836 + - -0.0001369233 + - - -0.9940908 + - 0.02185183 + - 0.1063388 + - position: + - -1.5503206 + - 1.3669466 + - -0.7073545 + orientation: + - - -0.106310226 + - 0.002474614 + - -0.9943304 + - - -0.02199106 + - -0.99975836 + - -0.0001369233 + - - -0.9940908 + - 0.02185183 + - 0.1063388 + - position: + - -0.099030495 + - 1.2171957 + - -0.85926116 + orientation: + - - 0.10630996 + - 0.002474614 + - 0.99433064 + - - 0.021991052 + - -0.99975836 + - 0.00013691811 + - - 0.99409056 + - 0.02185183 + - -0.10633907 + - Prop: + type_id: 1 + prop_name: CanCollide + prop_type: Bool + values: + - false + - false + - false + - false + - false + - false + - false + - false + - Prop: + type_id: 1 + prop_name: CanQuery + prop_type: Bool + values: + - true + - true + - true + - true + - true + - true + - true + - true + - Prop: + type_id: 1 + prop_name: CanTouch + prop_type: Bool + values: + - true + - true + - true + - true + - true + - true + - true + - true + - Prop: + type_id: 1 + prop_name: CastShadow + prop_type: Bool + values: + - true + - true + - true + - true + - true + - true + - true + - true + - Prop: + type_id: 1 + prop_name: ChildData + prop_type: String + values: + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - Prop: + type_id: 1 + prop_name: ChildData2 + prop_type: SharedString + values: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: CollisionGroup + prop_type: String + values: + - Default + - Default + - Default + - Default + - Default + - Default + - Default + - Default + - Prop: + type_id: 1 + prop_name: CollisionGroupId + prop_type: Int32 + values: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: Color3uint8 + prop_type: Color3uint8 + values: + - - 159 + - 161 + - 172 + - - 159 + - 161 + - 172 + - - 248 + - 248 + - 248 + - - 159 + - 161 + - 172 + - - 159 + - 161 + - 172 + - - 159 + - 161 + - 172 + - - 248 + - 248 + - 248 + - - 159 + - 161 + - 172 + - Prop: + type_id: 1 + prop_name: CustomPhysicalProperties + prop_type: PhysicalProperties + values: + - Default + - Default + - Default + - Default + - Default + - Default + - Default + - Default + - Prop: + type_id: 1 + prop_name: FormFactor + prop_type: Enum + values: + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - 3 + - Prop: + type_id: 1 + prop_name: FrontParamA + prop_type: Float32 + values: + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - Prop: + type_id: 1 + prop_name: FrontParamB + prop_type: Float32 + values: + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - Prop: + type_id: 1 + prop_name: FrontSurface + prop_type: Enum + values: + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - Prop: + type_id: 1 + prop_name: FrontSurfaceInput + prop_type: Enum + values: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: InitialSize + prop_type: Vector3 + values: + - - 1.0000002 + - 18 + - 31.000004 + - - 1.0000002 + - 18 + - 31.000004 + - - 4.8 + - 2.0098171 + - 2.0169144 + - - 1.0000002 + - 18 + - 31.000004 + - - 1.0000002 + - 18 + - 31.000004 + - - 1.0000002 + - 18 + - 31.000004 + - - 4.800001 + - 2.0047607 + - 2.0113258 + - - 1.0000002 + - 18 + - 31.000004 + - Prop: + type_id: 1 + prop_name: LeftParamA + prop_type: Float32 + values: + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - Prop: + type_id: 1 + prop_name: LeftParamB + prop_type: Float32 + values: + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - Prop: + type_id: 1 + prop_name: LeftSurface + prop_type: Enum + values: + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - Prop: + type_id: 1 + prop_name: LeftSurfaceInput + prop_type: Enum + values: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: Locked + prop_type: Bool + values: + - false + - false + - false + - false + - false + - false + - false + - false + - Prop: + type_id: 1 + prop_name: Massless + prop_type: Bool + values: + - false + - false + - false + - false + - false + - false + - false + - false + - Prop: + type_id: 1 + prop_name: Material + prop_type: Enum + values: + - 272 + - 272 + - 1088 + - 272 + - 272 + - 272 + - 1088 + - 272 + - Prop: + type_id: 1 + prop_name: MaterialVariantSerialized + prop_type: String + values: + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - Prop: + type_id: 1 + prop_name: MeshData + prop_type: String + values: + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - Prop: + type_id: 1 + prop_name: MeshData2 + prop_type: SharedString + values: + - 0 + - 0 + - 1 + - 0 + - 0 + - 0 + - 2 + - 0 + - Prop: + type_id: 1 + prop_name: Name + prop_type: String + values: + - Union + - Union + - Union + - Union + - Union + - Union + - Union + - Union + - Prop: + type_id: 1 + prop_name: PhysicalConfigData + prop_type: SharedString + values: + - 3 + - 3 + - 4 + - 3 + - 3 + - 3 + - 5 + - 3 + - Prop: + type_id: 1 + prop_name: PhysicsData + prop_type: String + values: + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - Prop: + type_id: 1 + prop_name: PivotOffset + prop_type: CFrame + values: + - position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + - position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + - position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + - position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + - position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + - position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + - position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + - position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + - Prop: + type_id: 1 + prop_name: Reflectance + prop_type: Float32 + values: + - 0.1 + - 0.1 + - 0 + - 0.1 + - 0.1 + - 0.1 + - 0.2 + - 0.1 + - Prop: + type_id: 1 + prop_name: RenderFidelity + prop_type: Enum + values: + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - Prop: + type_id: 1 + prop_name: RightParamA + prop_type: Float32 + values: + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - Prop: + type_id: 1 + prop_name: RightParamB + prop_type: Float32 + values: + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - Prop: + type_id: 1 + prop_name: RightSurface + prop_type: Enum + values: + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - Prop: + type_id: 1 + prop_name: RightSurfaceInput + prop_type: Enum + values: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: RootPriority + prop_type: Int32 + values: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: RotVelocity + prop_type: Vector3 + values: + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: SmoothingAngle + prop_type: Float32 + values: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: SourceAssetId + prop_type: Int64 + values: + - -1 + - -1 + - -1 + - -1 + - -1 + - -1 + - -1 + - -1 + - Prop: + type_id: 1 + prop_name: Tags + prop_type: String + values: + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - Prop: + type_id: 1 + prop_name: TopParamA + prop_type: Float32 + values: + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - -0.5 + - Prop: + type_id: 1 + prop_name: TopParamB + prop_type: Float32 + values: + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - Prop: + type_id: 1 + prop_name: TopSurface + prop_type: Enum + values: + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - Prop: + type_id: 1 + prop_name: TopSurfaceInput + prop_type: Enum + values: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: Transparency + prop_type: Float32 + values: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: UsePartColor + prop_type: Bool + values: + - true + - true + - false + - true + - true + - true + - false + - true + - Prop: + type_id: 1 + prop_name: Velocity + prop_type: Vector3 + values: + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - - 0 + - 0 + - 0 + - Prop: + type_id: 1 + prop_name: size + prop_type: Vector3 + values: + - - 0.05 + - 0.3600072 + - 0.6200124 + - - 0.05 + - 0.36000714 + - 0.62001246 + - - 0.096 + - 0.05 + - 0.05 + - - 0.05 + - 0.3600072 + - 0.6200124 + - - 0.05 + - 0.36000714 + - 0.62001246 + - - 0.05 + - 0.36000717 + - 0.62001246 + - - 0.09600002 + - 0.05 + - 0.05 + - - 0.05 + - 0.36000717 + - 0.62001246 + - Prnt: + version: 0 + links: + - - 1 + - 0 + - - 2 + - 0 + - - 3 + - 0 + - - 4 + - 0 + - - 5 + - 0 + - - 6 + - 0 + - - 7 + - 0 + - - 8 + - 0 + - - 0 + - -1 + - End + diff --git a/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__three-screengui__decoded.snap b/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__three-screengui__decoded.snap index 7ff46dc05..8ae6e84bc 100644 --- a/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__three-screengui__decoded.snap +++ b/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__three-screengui__decoded.snap @@ -18,6 +18,8 @@ expression: decoded_viewed ResetOnSpawn: Bool: true RootLocalizationTable: "null" + ScreenInsets: + Enum: 2 Tags: Tags: [] ZIndexBehavior: @@ -38,6 +40,8 @@ expression: decoded_viewed ResetOnSpawn: Bool: true RootLocalizationTable: "null" + ScreenInsets: + Enum: 2 Tags: Tags: [] ZIndexBehavior: @@ -58,6 +62,8 @@ expression: decoded_viewed ResetOnSpawn: Bool: true RootLocalizationTable: "null" + ScreenInsets: + Enum: 2 Tags: Tags: [] ZIndexBehavior: diff --git a/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__three-screengui__encoded.snap b/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__three-screengui__encoded.snap index 170be5a56..f13c55915 100644 --- a/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__three-screengui__encoded.snap +++ b/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__three-screengui__encoded.snap @@ -70,6 +70,14 @@ chunks: - -1 - -1 - -1 + - Prop: + type_id: 0 + prop_name: ScreenInsets + prop_type: Enum + values: + - 2 + - 2 + - 2 - Prop: type_id: 0 prop_name: Tags diff --git a/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__unions__encoded.snap b/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__unions__encoded.snap index e5cb01310..4053d725a 100644 --- a/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__unions__encoded.snap +++ b/rbx_binary/src/tests/snapshots/rbx_binary__tests__util__unions__encoded.snap @@ -8,10 +8,10 @@ chunks: - Sstr: version: 0 entries: - - len: 1803 - hash: db0e2bce2a871addfc49da3894a9b0c8ef97b3b83c962717ece20aa97635fee3 - len: 1367 hash: cc62d7045ec238081b7ebbd97ce5ce7dc15166e688168c307247089135718bdb + - len: 1803 + hash: db0e2bce2a871addfc49da3894a9b0c8ef97b3b83c962717ece20aa97635fee3 - Inst: type_id: 0 type_name: UnionOperation @@ -348,9 +348,9 @@ chunks: prop_name: PhysicalConfigData prop_type: SharedString values: - - 0 - - 0 - 1 + - 1 + - 0 - Prop: type_id: 0 prop_name: PhysicsData diff --git a/rbx_binary/src/text_deserializer.rs b/rbx_binary/src/text_deserializer.rs index 0d48beab5..9d3b4cf74 100644 --- a/rbx_binary/src/text_deserializer.rs +++ b/rbx_binary/src/text_deserializer.rs @@ -316,8 +316,9 @@ impl DecodedValues { for _ in 0..prop_count { let family = reader.read_string().unwrap(); - let weight = FontWeight::from_u16(reader.read_le_u16().unwrap()); - let style = FontStyle::from_u8(reader.read_u8().unwrap()); + let weight = + FontWeight::from_u16(reader.read_le_u16().unwrap()).unwrap_or_default(); + let style = FontStyle::from_u8(reader.read_u8().unwrap()).unwrap_or_default(); let cached_face_id = reader.read_string().unwrap(); let cached_face_id = if cached_face_id.is_empty() { diff --git a/rbx_dom_lua/src/customProperties.lua b/rbx_dom_lua/src/customProperties.lua index 6a2b64eb4..3720a0d78 100644 --- a/rbx_dom_lua/src/customProperties.lua +++ b/rbx_dom_lua/src/customProperties.lua @@ -61,4 +61,14 @@ return { end, }, }, + Model = { + Scale = { + read = function(instance, _, _) + return true, instance:GetScale() + end, + write = function(instance, _, value) + return true, instance:ScaleTo(value) + end, + }, + }, } diff --git a/rbx_dom_lua/src/database.json b/rbx_dom_lua/src/database.json index 2b12ca865..6594eb676 100644 --- a/rbx_dom_lua/src/database.json +++ b/rbx_dom_lua/src/database.json @@ -1,9 +1,9 @@ { "Version": [ 0, - 564, - 1, - 5640444 + 575, + 0, + 5750424 ], "Classes": { "Accessory": { @@ -202,6 +202,9 @@ "ModelStreamingMode": { "Enum": 0 }, + "Scale": { + "Float32": 1.0 + }, "SourceAssetId": { "Int64": -1 }, @@ -227,6 +230,35 @@ "Serialization": "Serializes" } } + }, + "FallbackImage": { + "Name": "FallbackImage", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Content" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "Status": { + "Name": "Status", + "Scriptability": "Read", + "DataType": { + "Enum": "AdUnitStatus" + }, + "Tags": [ + "NotReplicated", + "ReadOnly" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } } }, "DefaultProperties": {} @@ -260,6 +292,7 @@ "Enum": "AdPortalStatus" }, "Tags": [ + "Deprecated", "NotReplicated", "ReadOnly" ], @@ -269,27 +302,30 @@ } } }, - "PortalType": { - "Name": "PortalType", - "Scriptability": "ReadWrite", + "PortalVersion": { + "Name": "PortalVersion", + "Scriptability": "None", "DataType": { - "Enum": "AdPortalType" + "Value": "Int64" }, - "Tags": [], + "Tags": [ + "Hidden", + "NotReplicated", + "ReadOnly" + ], "Kind": { "Canonical": { - "Serialization": "Serializes" + "Serialization": "DoesNotSerialize" } } }, - "PortalVersion": { - "Name": "PortalVersion", - "Scriptability": "None", + "Status": { + "Name": "Status", + "Scriptability": "Read", "DataType": { - "Value": "Int64" + "Enum": "AdUnitStatus" }, "Tags": [ - "Hidden", "NotReplicated", "ReadOnly" ], @@ -326,6 +362,58 @@ ], "Superclass": "ControllerBase", "Properties": { + "BalanceMaxTorque": { + "Name": "BalanceMaxTorque", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Float32" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "BalanceRigidityEnabled": { + "Name": "BalanceRigidityEnabled", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "BalanceSpeed": { + "Name": "BalanceSpeed", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Float32" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "LinearImpulse": { + "Name": "LinearImpulse", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Vector3" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "MaintainAngularMomentum": { "Name": "MaintainAngularMomentum", "Scriptability": "ReadWrite", @@ -391,16 +479,46 @@ } } }, + "TurnMaxTorque": { + "Name": "TurnMaxTorque", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Float32" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "TurnSpeedFactor": { + "Name": "TurnSpeedFactor", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Float32" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "VectorForce": { "Name": "VectorForce", "Scriptability": "ReadWrite", "DataType": { "Value": "Vector3" }, - "Tags": [], + "Tags": [ + "Deprecated", + "Hidden", + "NotReplicated" + ], "Kind": { "Canonical": { - "Serialization": "Serializes" + "Serialization": "DoesNotSerialize" } } } @@ -409,6 +527,22 @@ "Attributes": { "BinaryString": "" }, + "BalanceMaxTorque": { + "Float32": 10000.0 + }, + "BalanceRigidityEnabled": { + "Bool": false + }, + "BalanceSpeed": { + "Float32": 100.0 + }, + "LinearImpulse": { + "Vector3": [ + 0.0, + 0.0, + 0.0 + ] + }, "MaintainAngularMomentum": { "Bool": true }, @@ -436,12 +570,11 @@ "Tags": { "BinaryString": "" }, - "VectorForce": { - "Vector3": [ - 0.0, - 0.0, - 0.0 - ] + "TurnMaxTorque": { + "Float32": 10000.0 + }, + "TurnSpeedFactor": { + "Float32": 1.0 } } }, @@ -1012,6 +1145,22 @@ ], "Superclass": "Instance", "Properties": { + "Guid": { + "Name": "Guid", + "Scriptability": "None", + "DataType": { + "Value": "String" + }, + "Tags": [ + "Hidden", + "NotReplicated" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, "Loop": { "Name": "Loop", "Scriptability": "ReadWrite", @@ -1059,6 +1208,19 @@ ], "Superclass": "Constraint", "Properties": { + "IsKinematic": { + "Name": "IsKinematic", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "MaxForce": { "Name": "MaxForce", "Scriptability": "ReadWrite", @@ -1109,6 +1271,9 @@ "Enabled": { "Bool": true }, + "IsKinematic": { + "Bool": false + }, "MaxForce": { "Float32": 10000.0 }, @@ -1200,6 +1365,16 @@ "Properties": {}, "DefaultProperties": {} }, + "AnimationImportData": { + "Name": "AnimationImportData", + "Tags": [ + "NotCreatable", + "NotReplicated" + ], + "Superclass": "BaseImportData", + "Properties": {}, + "DefaultProperties": {} + }, "AnimationRigData": { "Name": "AnimationRigData", "Tags": [], @@ -1464,6 +1639,23 @@ "Tags": [], "Superclass": "Instance", "Properties": { + "EvaluationThrottled": { + "Name": "EvaluationThrottled", + "Scriptability": "Read", + "DataType": { + "Value": "Bool" + }, + "Tags": [ + "NotBrowsable", + "NotReplicated", + "ReadOnly" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, "PreferLodEnabled": { "Name": "PreferLodEnabled", "Scriptability": "ReadWrite", @@ -2108,6 +2300,146 @@ } } }, + "AudioPages": { + "Name": "AudioPages", + "Tags": [ + "NotCreatable", + "NotReplicated" + ], + "Superclass": "Pages", + "Properties": {}, + "DefaultProperties": {} + }, + "AudioSearchParams": { + "Name": "AudioSearchParams", + "Tags": [ + "NotReplicated" + ], + "Superclass": "Instance", + "Properties": { + "Album": { + "Name": "Album", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "String" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "Artist": { + "Name": "Artist", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "String" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "AudioSubType": { + "Name": "AudioSubType", + "Scriptability": "ReadWrite", + "DataType": { + "Enum": "AudioSubType" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "AudioSubtype": { + "Name": "AudioSubtype", + "Scriptability": "ReadWrite", + "DataType": { + "Enum": "AudioSubType" + }, + "Tags": [ + "Deprecated", + "NotReplicated" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, + "MaxDuration": { + "Name": "MaxDuration", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Int32" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "MinDuration": { + "Name": "MinDuration", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Int32" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "SearchKeyword": { + "Name": "SearchKeyword", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "String" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "Tag": { + "Name": "Tag", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "String" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "Title": { + "Name": "Title", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "String" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + } + }, + "DefaultProperties": {} + }, "AvatarEditorService": { "Name": "AvatarEditorService", "Tags": [ @@ -2332,6 +2664,59 @@ } } }, + "BaseImportData": { + "Name": "BaseImportData", + "Tags": [ + "NotCreatable", + "NotReplicated" + ], + "Superclass": "Instance", + "Properties": { + "Id": { + "Name": "Id", + "Scriptability": "Read", + "DataType": { + "Value": "String" + }, + "Tags": [ + "NotReplicated", + "ReadOnly" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, + "ImportName": { + "Name": "ImportName", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "String" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "ShouldImport": { + "Name": "ShouldImport", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + } + }, + "DefaultProperties": {} + }, "BasePart": { "Name": "BasePart", "Tags": [ @@ -2671,6 +3056,7 @@ "Value": "Int32" }, "Tags": [ + "Deprecated", "NotReplicated" ], "Kind": { @@ -6045,6 +6431,61 @@ "Properties": {}, "DefaultProperties": {} }, + "BuoyancySensor": { + "Name": "BuoyancySensor", + "Tags": [ + "NotBrowsable" + ], + "Superclass": "SensorBase", + "Properties": { + "FullySubmerged": { + "Name": "FullySubmerged", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "TouchingSurface": { + "Name": "TouchingSurface", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + } + }, + "DefaultProperties": { + "Attributes": { + "BinaryString": "" + }, + "FullySubmerged": { + "Bool": false + }, + "SourceAssetId": { + "Int64": -1 + }, + "Tags": { + "BinaryString": "" + }, + "TouchingSurface": { + "Bool": false + }, + "UpdateType": { + "Enum": 0 + } + } + }, "CFrameValue": { "Name": "CFrameValue", "Tags": [], @@ -6121,6 +6562,23 @@ } } }, + "CSGOptions": { + "Name": "CSGOptions", + "Tags": [], + "Superclass": "Instance", + "Properties": {}, + "DefaultProperties": { + "Attributes": { + "BinaryString": "" + }, + "SourceAssetId": { + "Int64": -1 + }, + "Tags": { + "BinaryString": "" + } + } + }, "CacheableContentProvider": { "Name": "CacheableContentProvider", "Tags": [ @@ -6916,6 +7374,50 @@ } } }, + "IsFocused": { + "Name": "IsFocused", + "Scriptability": "Read", + "DataType": { + "Value": "Bool" + }, + "Tags": [ + "NotReplicated", + "ReadOnly" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, + "IsFocusedWrite": { + "Name": "IsFocusedWrite", + "Scriptability": "None", + "DataType": { + "Value": "Bool" + }, + "Tags": [ + "Hidden" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, + "KeyboardKeyCode": { + "Name": "KeyboardKeyCode", + "Scriptability": "ReadWrite", + "DataType": { + "Enum": "KeyCode" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "PlaceholderColor3": { "Name": "PlaceholderColor3", "Scriptability": "ReadWrite", @@ -7033,6 +7535,9 @@ "cachedFaceId": "rbxasset://fonts/GothamSSm-Medium.otf" } }, + "KeyboardKeyCode": { + "Enum": 47 + }, "PlaceholderColor3": { "Color3": [ 0.69803923, @@ -7511,6 +8016,45 @@ } } }, + "BalanceMaxTorque": { + "Name": "BalanceMaxTorque", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Float32" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "BalanceRigidityEnabled": { + "Name": "BalanceRigidityEnabled", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "BalanceSpeed": { + "Name": "BalanceSpeed", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Float32" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "MoveMaxForce": { "Name": "MoveMaxForce", "Scriptability": "ReadWrite", @@ -7558,17 +8102,26 @@ "Attributes": { "BinaryString": "" }, + "BalanceMaxTorque": { + "Float32": 10000.0 + }, + "BalanceRigidityEnabled": { + "Bool": false + }, + "BalanceSpeed": { + "Float32": 100.0 + }, "MoveMaxForce": { - "Float32": null + "Float32": 10000.0 }, "MoveSpeedFactor": { "Float32": 1.0 }, "OrientationMaxTorque": { - "Float32": null + "Float32": 10000.0 }, "OrientationSpeedFactor": { - "Float32": 1.0 + "Float32": 100.0 }, "RigidityEnabled": { "Bool": false @@ -8477,17 +9030,14 @@ "Properties": { "ActiveController": { "Name": "ActiveController", - "Scriptability": "Read", + "Scriptability": "ReadWrite", "DataType": { "Value": "Ref" }, - "Tags": [ - "NotReplicated", - "ReadOnly" - ], + "Tags": [], "Kind": { "Canonical": { - "Serialization": "DoesNotSerialize" + "Serialization": "Serializes" } } }, @@ -8517,6 +9067,19 @@ } } }, + "ClimbSensor": { + "Name": "ClimbSensor", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Ref" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "FacingDirection": { "Name": "FacingDirection", "Scriptability": "ReadWrite", @@ -8530,6 +9093,19 @@ } } }, + "GroundSensor": { + "Name": "GroundSensor", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Ref" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "MovingDirection": { "Name": "MovingDirection", "Scriptability": "ReadWrite", @@ -8576,6 +9152,142 @@ } } }, + "ControllerPartSensor": { + "Name": "ControllerPartSensor", + "Tags": [ + "NotBrowsable" + ], + "Superclass": "ControllerSensor", + "Properties": { + "HitFrame": { + "Name": "HitFrame", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "CFrame" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "HitNormal": { + "Name": "HitNormal", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Vector3" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "SearchDistance": { + "Name": "SearchDistance", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Float32" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "SensedPart": { + "Name": "SensedPart", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Ref" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "SensorMode": { + "Name": "SensorMode", + "Scriptability": "ReadWrite", + "DataType": { + "Enum": "SensorMode" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + } + }, + "DefaultProperties": { + "Attributes": { + "BinaryString": "" + }, + "HitFrame": { + "CFrame": { + "position": [ + 0.0, + 0.0, + 0.0 + ], + "orientation": [ + [ + 1.0, + 0.0, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.0, + 0.0, + 1.0 + ] + ] + } + }, + "HitNormal": { + "Vector3": [ + 0.0, + 0.0, + 0.0 + ] + }, + "SearchDistance": { + "Float32": 0.0 + }, + "SensorMode": { + "Enum": 0 + }, + "SourceAssetId": { + "Int64": -1 + }, + "Tags": { + "BinaryString": "" + }, + "UpdateType": { + "Enum": 0 + } + } + }, + "ControllerSensor": { + "Name": "ControllerSensor", + "Tags": [ + "NotCreatable" + ], + "Superclass": "SensorBase", + "Properties": {}, + "DefaultProperties": {} + }, "ControllerService": { "Name": "ControllerService", "Tags": [ @@ -8669,16 +9381,6 @@ "Properties": {}, "DefaultProperties": {} }, - "CoreScriptBuilder": { - "Name": "CoreScriptBuilder", - "Tags": [ - "NotCreatable", - "NotReplicated" - ], - "Superclass": "ScriptBuilder", - "Properties": {}, - "DefaultProperties": {} - }, "CoreScriptDebuggingManagerHelper": { "Name": "CoreScriptDebuggingManagerHelper", "Tags": [ @@ -13240,6 +13942,16 @@ } } }, + "FacialAnimationStreamingServiceStats": { + "Name": "FacialAnimationStreamingServiceStats", + "Tags": [ + "NotCreatable", + "NotReplicated" + ], + "Superclass": "Instance", + "Properties": {}, + "DefaultProperties": {} + }, "FacialAnimationStreamingServiceV2": { "Name": "FacialAnimationStreamingServiceV2", "Tags": [ @@ -13264,20 +13976,17 @@ } } }, - "DefaultProperties": { - "Attributes": { - "BinaryString": "" - }, - "ServiceState": { - "Int32": 0 - }, - "SourceAssetId": { - "Int64": -1 - }, - "Tags": { - "BinaryString": "" - } - } + "DefaultProperties": {} + }, + "FacsImportData": { + "Name": "FacsImportData", + "Tags": [ + "NotCreatable", + "NotReplicated" + ], + "Superclass": "BaseImportData", + "Properties": {}, + "DefaultProperties": {} }, "Feature": { "Name": "Feature", @@ -13681,6 +14390,9 @@ "RequiresHandle": { "Bool": true }, + "Scale": { + "Float32": 1.0 + }, "SourceAssetId": { "Int64": -1 }, @@ -14950,6 +15662,45 @@ } } }, + "BalanceMaxTorque": { + "Name": "BalanceMaxTorque", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Float32" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "BalanceRigidityEnabled": { + "Name": "BalanceRigidityEnabled", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "BalanceSpeed": { + "Name": "BalanceSpeed", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Float32" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "DecelerationTime": { "Name": "DecelerationTime", "Scriptability": "ReadWrite", @@ -15028,6 +15779,19 @@ } } }, + "TurnSpeedFactor": { + "Name": "TurnSpeedFactor", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Float32" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "TurningFactor": { "Name": "TurningFactor", "Scriptability": "ReadWrite", @@ -15058,6 +15822,15 @@ "Attributes": { "BinaryString": "" }, + "BalanceMaxTorque": { + "Float32": 10000.0 + }, + "BalanceRigidityEnabled": { + "Bool": false + }, + "BalanceSpeed": { + "Float32": 100.0 + }, "DecelerationTime": { "Float32": 0.0 }, @@ -15088,11 +15861,64 @@ "Tags": { "BinaryString": "" }, + "TurnSpeedFactor": { + "Float32": 1.0 + }, "TurningFactor": { "Float32": 1.0 } } }, + "GroupImportData": { + "Name": "GroupImportData", + "Tags": [ + "NotCreatable", + "NotReplicated" + ], + "Superclass": "BaseImportData", + "Properties": { + "Anchored": { + "Name": "Anchored", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "ImportAsModelAsset": { + "Name": "ImportAsModelAsset", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "InsertInWorkspace": { + "Name": "InsertInWorkspace", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + } + }, + "DefaultProperties": {} + }, "GroupService": { "Name": "GroupService", "Tags": [ @@ -16885,6 +17711,9 @@ "ModelStreamingMode": { "Enum": 0 }, + "Scale": { + "Float32": 1.0 + }, "SourceAssetId": { "Int64": -1 }, @@ -19375,714 +20204,17 @@ } } }, - "ImporterAnimationSettings": { - "Name": "ImporterAnimationSettings", - "Tags": [ - "NotCreatable", - "NotReplicated" - ], - "Superclass": "ImporterBaseSettings", - "Properties": {}, - "DefaultProperties": {} - }, - "ImporterBaseSettings": { - "Name": "ImporterBaseSettings", + "IncrementalPatchBuilder": { + "Name": "IncrementalPatchBuilder", "Tags": [ "NotCreatable", - "NotReplicated" + "NotReplicated", + "Service" ], "Superclass": "Instance", "Properties": { - "Id": { - "Name": "Id", - "Scriptability": "Read", - "DataType": { - "Value": "String" - }, - "Tags": [ - "NotReplicated", - "ReadOnly" - ], - "Kind": { - "Canonical": { - "Serialization": "DoesNotSerialize" - } - } - }, - "ImportName": { - "Name": "ImportName", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "String" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "ShouldImport": { - "Name": "ShouldImport", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - } - }, - "DefaultProperties": {} - }, - "ImporterFacsSettings": { - "Name": "ImporterFacsSettings", - "Tags": [ - "NotCreatable", - "NotReplicated" - ], - "Superclass": "ImporterBaseSettings", - "Properties": {}, - "DefaultProperties": {} - }, - "ImporterGroupSettings": { - "Name": "ImporterGroupSettings", - "Tags": [ - "NotCreatable", - "NotReplicated" - ], - "Superclass": "ImporterBaseSettings", - "Properties": { - "Anchored": { - "Name": "Anchored", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "ImportAsModelAsset": { - "Name": "ImportAsModelAsset", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "InsertInWorkspace": { - "Name": "InsertInWorkspace", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - } - }, - "DefaultProperties": {} - }, - "ImporterJointSettings": { - "Name": "ImporterJointSettings", - "Tags": [ - "NotCreatable", - "NotReplicated" - ], - "Superclass": "ImporterBaseSettings", - "Properties": {}, - "DefaultProperties": {} - }, - "ImporterMaterialSettings": { - "Name": "ImporterMaterialSettings", - "Tags": [ - "NotCreatable", - "NotReplicated" - ], - "Superclass": "ImporterBaseSettings", - "Properties": { - "DiffuseFilePath": { - "Name": "DiffuseFilePath", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "String" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "IsPbr": { - "Name": "IsPbr", - "Scriptability": "Read", - "DataType": { - "Value": "Bool" - }, - "Tags": [ - "NotReplicated", - "ReadOnly" - ], - "Kind": { - "Canonical": { - "Serialization": "DoesNotSerialize" - } - } - }, - "MetalnessFilePath": { - "Name": "MetalnessFilePath", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "String" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "NormalFilePath": { - "Name": "NormalFilePath", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "String" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "RoughnessFilePath": { - "Name": "RoughnessFilePath", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "String" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - } - }, - "DefaultProperties": {} - }, - "ImporterMeshSettings": { - "Name": "ImporterMeshSettings", - "Tags": [ - "NotCreatable", - "NotReplicated" - ], - "Superclass": "ImporterBaseSettings", - "Properties": { - "Anchored": { - "Name": "Anchored", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "CageManifold": { - "Name": "CageManifold", - "Scriptability": "Read", - "DataType": { - "Value": "Bool" - }, - "Tags": [ - "NotReplicated", - "ReadOnly" - ], - "Kind": { - "Canonical": { - "Serialization": "DoesNotSerialize" - } - } - }, - "CageMeshIntersectedPreview": { - "Name": "CageMeshIntersectedPreview", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "CageMeshNotIntersected": { - "Name": "CageMeshNotIntersected", - "Scriptability": "Read", - "DataType": { - "Value": "Bool" - }, - "Tags": [ - "NotReplicated", - "ReadOnly" - ], - "Kind": { - "Canonical": { - "Serialization": "DoesNotSerialize" - } - } - }, - "CageNoOverlappingVertices": { - "Name": "CageNoOverlappingVertices", - "Scriptability": "Read", - "DataType": { - "Value": "Bool" - }, - "Tags": [ - "NotReplicated", - "ReadOnly" - ], - "Kind": { - "Canonical": { - "Serialization": "DoesNotSerialize" - } - } - }, - "CageNonManifoldPreview": { - "Name": "CageNonManifoldPreview", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "CageOverlappingVerticesPreview": { - "Name": "CageOverlappingVerticesPreview", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "CageUVMatched": { - "Name": "CageUVMatched", - "Scriptability": "Read", - "DataType": { - "Value": "Bool" - }, - "Tags": [ - "NotReplicated", - "ReadOnly" - ], - "Kind": { - "Canonical": { - "Serialization": "DoesNotSerialize" - } - } - }, - "CageUVMisMatchedPreview": { - "Name": "CageUVMisMatchedPreview", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "Dimensions": { - "Name": "Dimensions", - "Scriptability": "Read", - "DataType": { - "Value": "Vector3" - }, - "Tags": [ - "NotReplicated", - "ReadOnly" - ], - "Kind": { - "Canonical": { - "Serialization": "DoesNotSerialize" - } - } - }, - "DoubleSided": { - "Name": "DoubleSided", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "IgnoreVertexColors": { - "Name": "IgnoreVertexColors", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "IrrelevantCageModifiedPreview": { - "Name": "IrrelevantCageModifiedPreview", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "MeshHoleDetectedPreview": { - "Name": "MeshHoleDetectedPreview", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "MeshNoHoleDetected": { - "Name": "MeshNoHoleDetected", - "Scriptability": "Read", - "DataType": { - "Value": "Bool" - }, - "Tags": [ - "NotReplicated", - "ReadOnly" - ], - "Kind": { - "Canonical": { - "Serialization": "DoesNotSerialize" - } - } - }, - "NoIrrelevantCageModified": { - "Name": "NoIrrelevantCageModified", - "Scriptability": "Read", - "DataType": { - "Value": "Bool" - }, - "Tags": [ - "NotReplicated", - "ReadOnly" - ], - "Kind": { - "Canonical": { - "Serialization": "DoesNotSerialize" - } - } - }, - "NoOuterCageFarExtendedFromMesh": { - "Name": "NoOuterCageFarExtendedFromMesh", - "Scriptability": "Read", - "DataType": { - "Value": "Bool" - }, - "Tags": [ - "NotReplicated", - "ReadOnly" - ], - "Kind": { - "Canonical": { - "Serialization": "DoesNotSerialize" - } - } - }, - "OuterCageFarExtendedFromMeshPreview": { - "Name": "OuterCageFarExtendedFromMeshPreview", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "PolygonCount": { - "Name": "PolygonCount", - "Scriptability": "Read", - "DataType": { - "Value": "Float32" - }, - "Tags": [ - "NotReplicated", - "ReadOnly" - ], - "Kind": { - "Canonical": { - "Serialization": "DoesNotSerialize" - } - } - }, - "UseImportedPivot": { - "Name": "UseImportedPivot", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - } - }, - "DefaultProperties": {} - }, - "ImporterRootSettings": { - "Name": "ImporterRootSettings", - "Tags": [ - "NotCreatable", - "NotReplicated" - ], - "Superclass": "ImporterBaseSettings", - "Properties": { - "AddModelToInventory": { - "Name": "AddModelToInventory", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "Anchored": { - "Name": "Anchored", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "FileDimensions": { - "Name": "FileDimensions", - "Scriptability": "Read", - "DataType": { - "Value": "Vector3" - }, - "Tags": [ - "NotReplicated", - "ReadOnly" - ], - "Kind": { - "Canonical": { - "Serialization": "DoesNotSerialize" - } - } - }, - "ImportAsModelAsset": { - "Name": "ImportAsModelAsset", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "InsertInWorkspace": { - "Name": "InsertInWorkspace", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "InsertWithScenePosition": { - "Name": "InsertWithScenePosition", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "InvertNegativeFaces": { - "Name": "InvertNegativeFaces", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "MergeMeshes": { - "Name": "MergeMeshes", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "PolygonCount": { - "Name": "PolygonCount", - "Scriptability": "Read", - "DataType": { - "Value": "Float32" - }, - "Tags": [ - "NotReplicated", - "ReadOnly" - ], - "Kind": { - "Canonical": { - "Serialization": "DoesNotSerialize" - } - } - }, - "RigScale": { - "Name": "RigScale", - "Scriptability": "ReadWrite", - "DataType": { - "Enum": "RigScale" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "RigType": { - "Name": "RigType", - "Scriptability": "ReadWrite", - "DataType": { - "Enum": "RigType" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "ScaleUnit": { - "Name": "ScaleUnit", - "Scriptability": "ReadWrite", - "DataType": { - "Enum": "MeshScaleUnit" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "UseSceneOriginAsCFrame": { - "Name": "UseSceneOriginAsCFrame", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "UseSceneOriginAsPivot": { - "Name": "UseSceneOriginAsPivot", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "UsesCages": { - "Name": "UsesCages", + "AddPathsToBundle": { + "Name": "AddPathsToBundle", "Scriptability": "ReadWrite", "DataType": { "Value": "Bool" @@ -20094,11 +20226,11 @@ } } }, - "WorldForward": { - "Name": "WorldForward", + "BuildDebouncePeriod": { + "Name": "BuildDebouncePeriod", "Scriptability": "ReadWrite", "DataType": { - "Enum": "NormalId" + "Value": "Float64" }, "Tags": [], "Kind": { @@ -20107,33 +20239,8 @@ } } }, - "WorldUp": { - "Name": "WorldUp", - "Scriptability": "ReadWrite", - "DataType": { - "Enum": "NormalId" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - } - }, - "DefaultProperties": {} - }, - "IncrementalPatchBuilder": { - "Name": "IncrementalPatchBuilder", - "Tags": [ - "NotCreatable", - "NotReplicated", - "Service" - ], - "Superclass": "Instance", - "Properties": { - "AddPathsToBundle": { - "Name": "AddPathsToBundle", + "HighCompression": { + "Name": "HighCompression", "Scriptability": "ReadWrite", "DataType": { "Value": "Bool" @@ -20145,8 +20252,8 @@ } } }, - "HighCompression": { - "Name": "HighCompression", + "SerializePatch": { + "Name": "SerializePatch", "Scriptability": "ReadWrite", "DataType": { "Value": "Bool" @@ -20875,6 +20982,16 @@ "Properties": {}, "DefaultProperties": {} }, + "JointImportData": { + "Name": "JointImportData", + "Tags": [ + "NotCreatable", + "NotReplicated" + ], + "Superclass": "BaseImportData", + "Properties": {}, + "DefaultProperties": {} + }, "JointInstance": { "Name": "JointInstance", "Tags": [ @@ -22422,6 +22539,21 @@ "Serialization": "DoesNotSerialize" } } + }, + "RuntimeSource": { + "Name": "RuntimeSource", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "String" + }, + "Tags": [ + "NotReplicated" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } } }, "DefaultProperties": {} @@ -22659,6 +22791,106 @@ "Properties": {}, "DefaultProperties": {} }, + "MaterialGenerationService": { + "Name": "MaterialGenerationService", + "Tags": [ + "NotCreatable", + "NotReplicated", + "Service" + ], + "Superclass": "Instance", + "Properties": {}, + "DefaultProperties": {} + }, + "MaterialGenerationSession": { + "Name": "MaterialGenerationSession", + "Tags": [ + "NotCreatable", + "NotReplicated" + ], + "Superclass": "Instance", + "Properties": {}, + "DefaultProperties": {} + }, + "MaterialImportData": { + "Name": "MaterialImportData", + "Tags": [ + "NotCreatable", + "NotReplicated" + ], + "Superclass": "BaseImportData", + "Properties": { + "DiffuseFilePath": { + "Name": "DiffuseFilePath", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "String" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "IsPbr": { + "Name": "IsPbr", + "Scriptability": "Read", + "DataType": { + "Value": "Bool" + }, + "Tags": [ + "NotReplicated", + "ReadOnly" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, + "MetalnessFilePath": { + "Name": "MetalnessFilePath", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "String" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "NormalFilePath": { + "Name": "NormalFilePath", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "String" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "RoughnessFilePath": { + "Name": "RoughnessFilePath", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "String" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + } + }, + "DefaultProperties": {} + }, "MaterialService": { "Name": "MaterialService", "Tags": [ @@ -23488,6 +23720,330 @@ "Properties": {}, "DefaultProperties": {} }, + "MeshDataExperimental": { + "Name": "MeshDataExperimental", + "Tags": [ + "NotCreatable" + ], + "Superclass": "Instance", + "Properties": { + "Size": { + "Name": "Size", + "Scriptability": "Read", + "DataType": { + "Value": "Vector3" + }, + "Tags": [ + "NotReplicated", + "ReadOnly" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + } + }, + "DefaultProperties": {} + }, + "MeshImportData": { + "Name": "MeshImportData", + "Tags": [ + "NotCreatable", + "NotReplicated" + ], + "Superclass": "BaseImportData", + "Properties": { + "Anchored": { + "Name": "Anchored", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "CageManifold": { + "Name": "CageManifold", + "Scriptability": "Read", + "DataType": { + "Value": "Bool" + }, + "Tags": [ + "NotReplicated", + "ReadOnly" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, + "CageMeshIntersectedPreview": { + "Name": "CageMeshIntersectedPreview", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "CageMeshNotIntersected": { + "Name": "CageMeshNotIntersected", + "Scriptability": "Read", + "DataType": { + "Value": "Bool" + }, + "Tags": [ + "NotReplicated", + "ReadOnly" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, + "CageNoOverlappingVertices": { + "Name": "CageNoOverlappingVertices", + "Scriptability": "Read", + "DataType": { + "Value": "Bool" + }, + "Tags": [ + "NotReplicated", + "ReadOnly" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, + "CageNonManifoldPreview": { + "Name": "CageNonManifoldPreview", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "CageOverlappingVerticesPreview": { + "Name": "CageOverlappingVerticesPreview", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "CageUVMatched": { + "Name": "CageUVMatched", + "Scriptability": "Read", + "DataType": { + "Value": "Bool" + }, + "Tags": [ + "NotReplicated", + "ReadOnly" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, + "CageUVMisMatchedPreview": { + "Name": "CageUVMisMatchedPreview", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "Dimensions": { + "Name": "Dimensions", + "Scriptability": "Read", + "DataType": { + "Value": "Vector3" + }, + "Tags": [ + "NotReplicated", + "ReadOnly" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, + "DoubleSided": { + "Name": "DoubleSided", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "IgnoreVertexColors": { + "Name": "IgnoreVertexColors", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "IrrelevantCageModifiedPreview": { + "Name": "IrrelevantCageModifiedPreview", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "MeshHoleDetectedPreview": { + "Name": "MeshHoleDetectedPreview", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "MeshNoHoleDetected": { + "Name": "MeshNoHoleDetected", + "Scriptability": "Read", + "DataType": { + "Value": "Bool" + }, + "Tags": [ + "NotReplicated", + "ReadOnly" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, + "NoIrrelevantCageModified": { + "Name": "NoIrrelevantCageModified", + "Scriptability": "Read", + "DataType": { + "Value": "Bool" + }, + "Tags": [ + "NotReplicated", + "ReadOnly" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, + "NoOuterCageFarExtendedFromMesh": { + "Name": "NoOuterCageFarExtendedFromMesh", + "Scriptability": "Read", + "DataType": { + "Value": "Bool" + }, + "Tags": [ + "NotReplicated", + "ReadOnly" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, + "OuterCageFarExtendedFromMeshPreview": { + "Name": "OuterCageFarExtendedFromMeshPreview", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "PolygonCount": { + "Name": "PolygonCount", + "Scriptability": "Read", + "DataType": { + "Value": "Float32" + }, + "Tags": [ + "NotReplicated", + "ReadOnly" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, + "UseImportedPivot": { + "Name": "UseImportedPivot", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + } + }, + "DefaultProperties": {} + }, "MeshPart": { "Name": "MeshPart", "Tags": [], @@ -24155,7 +24711,7 @@ }, "Scale": { "Name": "Scale", - "Scriptability": "None", + "Scriptability": "Custom", "DataType": { "Value": "Float32" }, @@ -24165,7 +24721,22 @@ ], "Kind": { "Canonical": { - "Serialization": "DoesNotSerialize" + "Serialization": { + "SerializesAs": "ScaleFactor" + } + } + } + }, + "ScaleFactor": { + "Name": "ScaleFactor", + "Scriptability": "None", + "DataType": { + "Value": "Float32" + }, + "Tags": [], + "Kind": { + "Alias": { + "AliasFor": "Scale" } } }, @@ -24195,6 +24766,9 @@ "ModelStreamingMode": { "Enum": 0 }, + "Scale": { + "Float32": 1.0 + }, "SourceAssetId": { "Int64": -1 }, @@ -27587,6 +28161,45 @@ } } }, + "AreConstraintForcesShownForSelectedOrHoveredInstances": { + "Name": "AreConstraintForcesShownForSelectedOrHoveredInstances", + "Scriptability": "None", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "AreConstraintTorquesShownForSelectedOrHoveredInstances": { + "Name": "AreConstraintTorquesShownForSelectedOrHoveredInstances", + "Scriptability": "None", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "AreContactForcesShownForSelectedOrHoveredAssemblies": { + "Name": "AreContactForcesShownForSelectedOrHoveredAssemblies", + "Scriptability": "None", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "AreContactIslandsShown": { "Name": "AreContactIslandsShown", "Scriptability": "ReadWrite", @@ -27626,6 +28239,19 @@ } } }, + "AreMagnitudesShownForDrawnForcesAndTorques": { + "Name": "AreMagnitudesShownForDrawnForcesAndTorques", + "Scriptability": "None", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "AreMechanismsShown": { "Name": "AreMechanismsShown", "Scriptability": "ReadWrite", @@ -27691,6 +28317,19 @@ } } }, + "AreSolverIslandsShown": { + "Name": "AreSolverIslandsShown", + "Scriptability": "None", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "AreTerrainReplicationRegionsShown": { "Name": "AreTerrainReplicationRegionsShown", "Scriptability": "ReadWrite", @@ -27772,6 +28411,19 @@ } } }, + "ForceDrawScale": { + "Name": "ForceDrawScale", + "Scriptability": "None", + "DataType": { + "Value": "Float32" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "IsInterpolationThrottleShown": { "Name": "IsInterpolationThrottleShown", "Scriptability": "ReadWrite", @@ -27837,6 +28489,19 @@ } } }, + "SolverConvergenceVisualizationMode": { + "Name": "SolverConvergenceVisualizationMode", + "Scriptability": "None", + "DataType": { + "Enum": "SolverConvergenceVisualizationMode" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "ThrottleAdjustTime": { "Name": "ThrottleAdjustTime", "Scriptability": "ReadWrite", @@ -30988,6 +31653,16 @@ } } }, + "RemoteCursorService": { + "Name": "RemoteCursorService", + "Tags": [ + "NotCreatable", + "Service" + ], + "Superclass": "Instance", + "Properties": {}, + "DefaultProperties": {} + }, "RemoteDebuggerServer": { "Name": "RemoteDebuggerServer", "Tags": [ @@ -31316,6 +31991,19 @@ } } }, + "PerfTest": { + "Name": "PerfTest", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "Position": { "Name": "Position", "Scriptability": "ReadWrite", @@ -31417,6 +32105,9 @@ "FieldOfView": { "Float32": 70.0 }, + "PerfTest": { + "Bool": false + }, "QualityLevel": { "Int32": 21 }, @@ -31950,6 +32641,296 @@ } } }, + "RootImportData": { + "Name": "RootImportData", + "Tags": [ + "NotCreatable", + "NotReplicated" + ], + "Superclass": "BaseImportData", + "Properties": { + "AddModelToInventory": { + "Name": "AddModelToInventory", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "Anchored": { + "Name": "Anchored", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "AnimationIdForRestPose": { + "Name": "AnimationIdForRestPose", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Float32" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "ExistingPackageId": { + "Name": "ExistingPackageId", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "String" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "FileDimensions": { + "Name": "FileDimensions", + "Scriptability": "Read", + "DataType": { + "Value": "Vector3" + }, + "Tags": [ + "NotReplicated", + "ReadOnly" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, + "ImportAsModelAsset": { + "Name": "ImportAsModelAsset", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "ImportAsPackage": { + "Name": "ImportAsPackage", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "InsertInWorkspace": { + "Name": "InsertInWorkspace", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "InsertWithScenePosition": { + "Name": "InsertWithScenePosition", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "InvertNegativeFaces": { + "Name": "InvertNegativeFaces", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "MergeMeshes": { + "Name": "MergeMeshes", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "PolygonCount": { + "Name": "PolygonCount", + "Scriptability": "Read", + "DataType": { + "Value": "Float32" + }, + "Tags": [ + "NotReplicated", + "ReadOnly" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, + "RestPose": { + "Name": "RestPose", + "Scriptability": "ReadWrite", + "DataType": { + "Enum": "RestPose" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "RigScale": { + "Name": "RigScale", + "Scriptability": "ReadWrite", + "DataType": { + "Enum": "RigScale" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "RigType": { + "Name": "RigType", + "Scriptability": "ReadWrite", + "DataType": { + "Enum": "RigType" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "ScaleUnit": { + "Name": "ScaleUnit", + "Scriptability": "ReadWrite", + "DataType": { + "Enum": "MeshScaleUnit" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "UseSceneOriginAsCFrame": { + "Name": "UseSceneOriginAsCFrame", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "UseSceneOriginAsPivot": { + "Name": "UseSceneOriginAsPivot", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "UsesCages": { + "Name": "UsesCages", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Bool" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "WorldForward": { + "Name": "WorldForward", + "Scriptability": "ReadWrite", + "DataType": { + "Enum": "NormalId" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, + "WorldUp": { + "Name": "WorldUp", + "Scriptability": "ReadWrite", + "DataType": { + "Enum": "NormalId" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + } + }, + "DefaultProperties": {} + }, "RopeConstraint": { "Name": "RopeConstraint", "Tags": [], @@ -32512,7 +33493,12 @@ "Tags": [], "Kind": { "Canonical": { - "Serialization": "DoesNotSerialize" + "Serialization": { + "Migrate": { + "Property": "ScreenInsets", + "Migration": "IgnoreGuiInsetToScreenInsets" + } + } } } }, @@ -32947,6 +33933,16 @@ "Properties": {}, "DefaultProperties": {} }, + "ScriptRuntime": { + "Name": "ScriptRuntime", + "Tags": [ + "NotCreatable", + "NotReplicated" + ], + "Superclass": "Instance", + "Properties": {}, + "DefaultProperties": {} + }, "ScriptService": { "Name": "ScriptService", "Tags": [ @@ -33719,9 +34715,26 @@ } } }, + "SelectionBoxThickness": { + "Name": "SelectionBoxThickness", + "Scriptability": "None", + "DataType": { + "Value": "Float32" + }, + "Tags": [ + "Hidden", + "NotReplicated", + "ReadOnly" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, "SelectionLineThickness": { "Name": "SelectionLineThickness", - "Scriptability": "Read", + "Scriptability": "None", "DataType": { "Value": "Int32" }, @@ -33751,6 +34764,37 @@ "Serialization": "DoesNotSerialize" } } + }, + "ShowActiveInstanceHighlight": { + "Name": "ShowActiveInstanceHighlight", + "Scriptability": "None", + "DataType": { + "Value": "Bool" + }, + "Tags": [ + "Hidden", + "NotReplicated" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, + "ShowBoundingBox": { + "Name": "ShowBoundingBox", + "Scriptability": "None", + "DataType": { + "Value": "Bool" + }, + "Tags": [ + "Hidden" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } } }, "DefaultProperties": { @@ -33783,6 +34827,21 @@ } } }, + "StudioSelectionBox": { + "Name": "StudioSelectionBox", + "Scriptability": "None", + "DataType": { + "Value": "Bool" + }, + "Tags": [ + "Hidden" + ], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "SurfaceColor": { "Name": "SurfaceColor", "Scriptability": "ReadWrite", @@ -33844,6 +34903,9 @@ "SourceAssetId": { "Int64": -1 }, + "StudioSelectionBox": { + "Bool": false + }, "SurfaceColor3": { "Color3": [ 0.050980397, @@ -34081,6 +35143,29 @@ } } }, + "SensorBase": { + "Name": "SensorBase", + "Tags": [ + "NotCreatable" + ], + "Superclass": "Instance", + "Properties": { + "UpdateType": { + "Name": "UpdateType", + "Scriptability": "ReadWrite", + "DataType": { + "Enum": "SensorUpdateType" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + } + }, + "DefaultProperties": {} + }, "ServerReplicator": { "Name": "ServerReplicator", "Tags": [ @@ -34163,6 +35248,43 @@ "Properties": {}, "DefaultProperties": {} }, + "ServiceVisibilityService": { + "Name": "ServiceVisibilityService", + "Tags": [ + "NotCreatable", + "Service" + ], + "Superclass": "Instance", + "Properties": { + "VisibleServices": { + "Name": "VisibleServices", + "Scriptability": "None", + "DataType": { + "Value": "BinaryString" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + } + }, + "DefaultProperties": { + "Attributes": { + "BinaryString": "" + }, + "SourceAssetId": { + "Int64": -1 + }, + "Tags": { + "BinaryString": "" + }, + "VisibleServices": { + "BinaryString": "AAAAAA==" + } + } + }, "SessionService": { "Name": "SessionService", "Tags": [ @@ -36449,148 +37571,6 @@ "Properties": {}, "DefaultProperties": {} }, - "Speaker": { - "Name": "Speaker", - "Tags": [ - "Deprecated", - "NotCreatable" - ], - "Superclass": "Instance", - "Properties": { - "ChannelCount": { - "Name": "ChannelCount", - "Scriptability": "Read", - "DataType": { - "Value": "Int32" - }, - "Tags": [ - "NotBrowsable", - "NotReplicated", - "ReadOnly" - ], - "Kind": { - "Canonical": { - "Serialization": "DoesNotSerialize" - } - } - }, - "PlaybackLoudness": { - "Name": "PlaybackLoudness", - "Scriptability": "Read", - "DataType": { - "Value": "Float64" - }, - "Tags": [ - "NotReplicated", - "ReadOnly" - ], - "Kind": { - "Canonical": { - "Serialization": "DoesNotSerialize" - } - } - }, - "RollOffMaxDistance": { - "Name": "RollOffMaxDistance", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Float32" - }, - "Tags": [ - "NotReplicated" - ], - "Kind": { - "Canonical": { - "Serialization": "DoesNotSerialize" - } - } - }, - "RollOffMinDistance": { - "Name": "RollOffMinDistance", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Float32" - }, - "Tags": [ - "NotReplicated" - ], - "Kind": { - "Canonical": { - "Serialization": "DoesNotSerialize" - } - } - }, - "RollOffMode": { - "Name": "RollOffMode", - "Scriptability": "ReadWrite", - "DataType": { - "Enum": "RollOffMode" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "SoundGroup": { - "Name": "SoundGroup", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Ref" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "Source": { - "Name": "Source", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Ref" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, - "Volume": { - "Name": "Volume", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Float32" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - } - }, - "DefaultProperties": { - "Attributes": { - "BinaryString": "" - }, - "RollOffMode": { - "Enum": 0 - }, - "SourceAssetId": { - "Int64": -1 - }, - "Tags": { - "BinaryString": "" - }, - "Volume": { - "Float32": 0.0 - } - } - }, "SpecialMesh": { "Name": "SpecialMesh", "Tags": [], @@ -39217,6 +40197,21 @@ } } }, + "HintColor": { + "Name": "HintColor", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Color3" + }, + "Tags": [ + "NotReplicated" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, "Hover Animate Speed": { "Name": "Hover Animate Speed", "Scriptability": "ReadWrite", @@ -39282,6 +40277,21 @@ } } }, + "InformationColor": { + "Name": "InformationColor", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Color3" + }, + "Tags": [ + "NotReplicated" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, "Keyword Color": { "Name": "Keyword Color", "Scriptability": "ReadWrite", @@ -39831,6 +40841,19 @@ } } }, + "Selection Box Thickness": { + "Name": "Selection Box Thickness", + "Scriptability": "None", + "DataType": { + "Value": "Float32" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "Selection Color": { "Name": "Selection Color", "Scriptability": "ReadWrite", @@ -39911,19 +40934,6 @@ } } }, - "Show Deployment Warnings": { - "Name": "Show Deployment Warnings", - "Scriptability": "ReadWrite", - "DataType": { - "Value": "Bool" - }, - "Tags": [], - "Kind": { - "Canonical": { - "Serialization": "Serializes" - } - } - }, "Show Diagnostics Bar": { "Name": "Show Diagnostics Bar", "Scriptability": "ReadWrite", @@ -40368,17 +41378,6 @@ }, "DefaultProperties": {} }, - "StudioHighDpiService": { - "Name": "StudioHighDpiService", - "Tags": [ - "NotCreatable", - "NotReplicated", - "Service" - ], - "Superclass": "Instance", - "Properties": {}, - "DefaultProperties": {} - }, "StudioPublishService": { "Name": "StudioPublishService", "Tags": [ @@ -40454,6 +41453,22 @@ } } }, + "DEPRECATED_ShowActiveInstanceHighlight": { + "Name": "DEPRECATED_ShowActiveInstanceHighlight", + "Scriptability": "None", + "DataType": { + "Value": "Bool" + }, + "Tags": [ + "Hidden", + "NotReplicated" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, "DraggerSolveConstraints": { "Name": "DraggerSolveConstraints", "Scriptability": "Read", @@ -40477,6 +41492,7 @@ "Value": "Bool" }, "Tags": [ + "Deprecated", "NotReplicated", "ReadOnly" ], @@ -40568,22 +41584,6 @@ } } }, - "ShowActiveInstanceHighlight": { - "Name": "ShowActiveInstanceHighlight", - "Scriptability": "None", - "DataType": { - "Value": "Bool" - }, - "Tags": [ - "Hidden", - "NotReplicated" - ], - "Kind": { - "Canonical": { - "Serialization": "DoesNotSerialize" - } - } - }, "ShowConstraintDetails": { "Name": "ShowConstraintDetails", "Scriptability": "Read", @@ -42644,7 +43644,12 @@ ], "Kind": { "Canonical": { - "Serialization": "DoesNotSerialize" + "Serialization": { + "Migrate": { + "Property": "FontFace", + "Migration": "FontToFontFace" + } + } } } }, @@ -43306,7 +44311,12 @@ ], "Kind": { "Canonical": { - "Serialization": "DoesNotSerialize" + "Serialization": { + "Migrate": { + "Property": "FontFace", + "Migration": "FontToFontFace" + } + } } } }, @@ -44140,7 +45150,12 @@ ], "Kind": { "Canonical": { - "Serialization": "DoesNotSerialize" + "Serialization": { + "Migrate": { + "Property": "FontFace", + "Migration": "FontToFontFace" + } + } } } }, @@ -45119,6 +46134,9 @@ "RequiresHandle": { "Bool": true }, + "Scale": { + "Float32": 1.0 + }, "SourceAssetId": { "Int64": -1 }, @@ -48160,6 +49178,22 @@ } } }, + "PlayerHeight": { + "Name": "PlayerHeight", + "Scriptability": "None", + "DataType": { + "Value": "Float32" + }, + "Tags": [ + "Hidden", + "NotReplicated" + ], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "RCCProfilerRecordFrameRate": { "Name": "RCCProfilerRecordFrameRate", "Scriptability": "ReadWrite", @@ -48338,6 +49372,22 @@ } } }, + "VRPlayMode": { + "Name": "VRPlayMode", + "Scriptability": "Read", + "DataType": { + "Enum": "VRPlayMode" + }, + "Tags": [ + "Hidden", + "NotReplicated" + ], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "VRRotationIntensity": { "Name": "VRRotationIntensity", "Scriptability": "None", @@ -48351,6 +49401,22 @@ } } }, + "VRSafetyBubbleMode": { + "Name": "VRSafetyBubbleMode", + "Scriptability": "None", + "DataType": { + "Enum": "VRSafetyBubbleMode" + }, + "Tags": [ + "Hidden", + "NotReplicated" + ], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + }, "VRSmoothRotationEnabled": { "Name": "VRSmoothRotationEnabled", "Scriptability": "Read", @@ -48438,22 +49504,6 @@ } } }, - "GazeSelectionEnabled": { - "Name": "GazeSelectionEnabled", - "Scriptability": "None", - "DataType": { - "Value": "Bool" - }, - "Tags": [ - "Hidden", - "NotReplicated" - ], - "Kind": { - "Canonical": { - "Serialization": "DoesNotSerialize" - } - } - }, "GyroscopeEnabled": { "Name": "GyroscopeEnabled", "Scriptability": "Read", @@ -48807,6 +49857,21 @@ ], "Superclass": "Instance", "Properties": { + "AutomaticScaling": { + "Name": "AutomaticScaling", + "Scriptability": "ReadWrite", + "DataType": { + "Enum": "VRScaling" + }, + "Tags": [ + "NotReplicated" + ], + "Kind": { + "Canonical": { + "Serialization": "DoesNotSerialize" + } + } + }, "DidPointerHit": { "Name": "DidPointerHit", "Scriptability": "None", @@ -50413,43 +51478,6 @@ } } }, - "VoiceSource": { - "Name": "VoiceSource", - "Tags": [ - "Deprecated", - "NotCreatable" - ], - "Superclass": "Instance", - "Properties": { - "UserId": { - "Name": "UserId", - "Scriptability": "Read", - "DataType": { - "Value": "Int64" - }, - "Tags": [ - "NotReplicated", - "ReadOnly" - ], - "Kind": { - "Canonical": { - "Serialization": "DoesNotSerialize" - } - } - } - }, - "DefaultProperties": { - "Attributes": { - "BinaryString": "" - }, - "SourceAssetId": { - "Int64": -1 - }, - "Tags": { - "BinaryString": "" - } - } - }, "WedgePart": { "Name": "WedgePart", "Tags": [], @@ -50849,7 +51877,21 @@ "Name": "WireframeHandleAdornment", "Tags": [], "Superclass": "HandleAdornment", - "Properties": {}, + "Properties": { + "Scale": { + "Name": "Scale", + "Scriptability": "ReadWrite", + "DataType": { + "Value": "Vector3" + }, + "Tags": [], + "Kind": { + "Canonical": { + "Serialization": "Serializes" + } + } + } + }, "DefaultProperties": { "AdornCullingMode": { "Enum": 0 @@ -50893,6 +51935,13 @@ 0.6745098 ] }, + "Scale": { + "Vector3": [ + 1.0, + 1.0, + 1.0 + ] + }, "SizeRelativeOffset": { "Vector3": [ 0.0, @@ -50940,11 +51989,11 @@ } } }, - "AnimationWeightedBlendFix": { - "Name": "AnimationWeightedBlendFix", + "AvatarUnificationMode": { + "Name": "AvatarUnificationMode", "Scriptability": "None", "DataType": { - "Enum": "NewAnimationRuntimeSetting" + "Enum": "AvatarUnificationMode" }, "Tags": [ "NotScriptable" @@ -51192,7 +52241,7 @@ ], "Kind": { "Canonical": { - "Serialization": "Serializes" + "Serialization": "DoesNotSerialize" } } }, @@ -51305,12 +52354,12 @@ "AllowThirdPartySales": { "Bool": false }, - "AnimationWeightedBlendFix": { - "Enum": 0 - }, "Attributes": { "BinaryString": "" }, + "AvatarUnificationMode": { + "Enum": 0 + }, "ClientAnimatorThrottling": { "Enum": 0 }, @@ -51360,8 +52409,8 @@ "Retargeting": { "Enum": 0 }, - "SignalBehavior": { - "Enum": 0 + "Scale": { + "Float32": 1.0 }, "SourceAssetId": { "Int64": -1 @@ -51901,6 +52950,23 @@ "HorizontalRectangle": 1 } }, + "AdTeleportMethod": { + "name": "AdTeleportMethod", + "items": { + "InGameMenuBackButton": 3, + "PortalForward": 1, + "PortalReturn": 2, + "UIBackButton": 4, + "Undefined": 0 + } + }, + "AdUnitStatus": { + "name": "AdUnitStatus", + "items": { + "Active": 1, + "Inactive": 0 + } + }, "AdornCullingMode": { "name": "AdornCullingMode", "items": { @@ -52105,6 +53171,13 @@ "Default": 1 } }, + "AudioSubType": { + "name": "AudioSubType", + "items": { + "Music": 1, + "SoundEffect": 2 + } + }, "AutoIndentRule": { "name": "AutoIndentRule", "items": { @@ -52198,6 +53271,14 @@ "FullBody": 2 } }, + "AvatarUnificationMode": { + "name": "AvatarUnificationMode", + "items": { + "Default": 0, + "Disabled": 1, + "Enabled": 2 + } + }, "Axis": { "name": "Axis", "items": { @@ -52579,6 +53660,8 @@ "DisconnectClientFailure": 284, "DisconnectClientRequest": 285, "DisconnectCloudEditKick": 270, + "DisconnectCollaboratorPermissionRevoked": 294, + "DisconnectCollaboratorUnderage": 295, "DisconnectConnectionLost": 277, "DisconnectDevMaintenance": 274, "DisconnectDuplicatePlayer": 264, @@ -52592,9 +53675,6 @@ "DisconnectModeratedGame": 287, "DisconnectNewSecurityKeyMismatch": 272, "DisconnectOnRemoteSysStats": 268, - "DisconnectOutOfMemory": 286, - "DisconnectOutOfMemoryExitContinue": 288, - "DisconnectOutOfMemoryKeepPlayingExit": 289, "DisconnectOutOfMemoryKeepPlayingLeave": 292, "DisconnectPlayerless": 271, "DisconnectProtocolMismatch": 259, @@ -52603,6 +53683,7 @@ "DisconnectReceivePacketStreamError": 261, "DisconnectRejoin": 276, "DisconnectRobloxMaintenance": 275, + "DisconnectRomarkEndOfTest": 293, "DisconnectSecurityKeyMismatch": 258, "DisconnectSendPacketError": 262, "DisconnectTimeout": 266, @@ -52693,6 +53774,14 @@ "User": 0 } }, + "CreatorTypeFilter": { + "name": "CreatorTypeFilter", + "items": { + "All": 2, + "Group": 1, + "User": 0 + } + }, "CurrencyType": { "name": "CurrencyType", "items": { @@ -53746,14 +54835,6 @@ "Right": 2 } }, - "LevelOfDetailSetting": { - "name": "LevelOfDetailSetting", - "items": { - "High": 2, - "Low": 0, - "Medium": 1 - } - }, "Limb": { "name": "Limb", "items": { @@ -53973,6 +55054,13 @@ "Stopping": 3 } }, + "MuteState": { + "name": "MuteState", + "items": { + "Muted": 1, + "Unmuted": 0 + } + }, "NameOcclusion": { "name": "NameOcclusion", "items": { @@ -53989,14 +55077,6 @@ "OnContact": 2 } }, - "NewAnimationRuntimeSetting": { - "name": "NewAnimationRuntimeSetting", - "items": { - "Default": 0, - "Disabled": 1, - "Enabled": 2 - } - }, "NormalId": { "name": "NormalId", "items": { @@ -54062,7 +55142,9 @@ "items": { "Ball": 0, "Block": 1, - "Cylinder": 2 + "CornerWedge": 4, + "Cylinder": 2, + "Wedge": 3 } }, "ParticleEmitterShape": { @@ -54273,6 +55355,16 @@ "PurchaseGranted": 1 } }, + "PromptPublishAssetResult": { + "name": "PromptPublishAssetResult", + "items": { + "NoUserInput": 5, + "PermissionDenied": 2, + "Success": 1, + "Timeout": 3, + "UploadFailed": 4 + } + }, "PropertyStatus": { "name": "PropertyStatus", "items": { @@ -54402,6 +55494,14 @@ "Standard": 0 } }, + "RestPose": { + "name": "RestPose", + "items": { + "Custom": 2, + "Default": 0, + "RotationsReset": 1 + } + }, "ReturnKeyType": { "name": "ReturnKeyType", "items": { @@ -54468,11 +55568,9 @@ "RigType": { "name": "RigType", "items": { - "Custom": 3, - "None": 4, - "R15": 0, - "Rthro": 1, - "RthroNarrow": 2 + "Custom": 1, + "None": 2, + "R15": 0 } }, "RollOffMode": { @@ -54591,6 +55689,7 @@ "items": { "BackendError": 4, "ConsentAccepted": 0, + "ConsentDenied": 7, "InvalidArgument": 6, "InvalidScopes": 1, "NoUserInput": 3, @@ -54639,6 +55738,20 @@ "Stop": 1 } }, + "SensorMode": { + "name": "SensorMode", + "items": { + "Floor": 0, + "Ladder": 1 + } + }, + "SensorUpdateType": { + "name": "SensorUpdateType", + "items": { + "Manual": 1, + "OnRead": 0 + } + }, "ServerAudioBehavior": { "name": "ServerAudioBehavior", "items": { @@ -54655,6 +55768,15 @@ "WithChildren": 2 } }, + "Severity": { + "name": "Severity", + "items": { + "Error": 1, + "Hint": 4, + "Information": 3, + "Warning": 2 + } + }, "SignalBehavior": { "name": "SignalBehavior", "items": { @@ -54672,6 +55794,14 @@ "RelativeYY": 2 } }, + "SolverConvergenceVisualizationMode": { + "name": "SolverConvergenceVisualizationMode", + "items": { + "Disabled": 0, + "PerEdge": 2, + "PerIsland": 1 + } + }, "SortDirection": { "name": "SortDirection", "items": { @@ -54760,45 +55890,51 @@ "StudioScriptEditorColorCategories": { "name": "StudioScriptEditorColorCategories", "items": { - "ActiveLine": 25, + "AICOOverlayButtonBackground": 42, + "AICOOverlayButtonBackgroundHover": 43, + "AICOOverlayButtonBackgroundPressed": 44, + "AICOOverlayText": 41, + "ActiveLine": 27, "Background": 17, "Bool": 10, - "Bracket": 29, + "Bracket": 31, "Builtin": 6, "Comment": 4, - "DebuggerCurrentLine": 26, - "DebuggerErrorLine": 27, + "DebuggerCurrentLine": 28, + "DebuggerErrorLine": 29, "Default": 0, - "DocViewCodeBackground": 38, + "DocViewCodeBackground": 40, "Error": 23, "FindSelectionBackground": 20, "Function": 11, "FunctionName": 15, + "Hint": 25, + "Info": 24, "Keyword": 5, "Local": 12, "LuauKeyword": 14, "MatchingWordBackground": 21, - "MenuBackground": 33, - "MenuBorder": 37, - "MenuPrimaryText": 30, - "MenuScrollbarBackground": 35, - "MenuScrollbarHandle": 36, - "MenuSecondaryText": 31, - "MenuSelectedBackground": 34, - "MenuSelectedText": 32, + "MenuBackground": 35, + "MenuBorder": 39, + "MenuPrimaryText": 32, + "MenuScrollbarBackground": 37, + "MenuScrollbarHandle": 38, + "MenuSecondaryText": 33, + "MenuSelectedBackground": 36, + "MenuSelectedText": 34, "Method": 7, "Nil": 9, "Number": 2, "Operator": 1, "Property": 8, - "Ruler": 28, + "Ruler": 30, "SelectionBackground": 19, "SelectionText": 18, "Self": 13, "String": 3, "TODO": 16, "Warning": 22, - "Whitespace": 24 + "Whitespace": 26 } }, "StudioScriptEditorColorPresets": { @@ -54813,49 +55949,53 @@ "StudioStyleGuideColor": { "name": "StudioStyleGuideColor", "items": { - "AttributeCog": 117, + "AICOOverlayButtonBackground": 129, + "AICOOverlayButtonBackgroundHover": 130, + "AICOOverlayButtonBackgroundPressed": 131, + "AICOOverlayText": 128, + "AttributeCog": 119, "Border": 31, "BrightText": 40, "Button": 17, - "ButtonBorder": 89, - "ButtonText": 90, + "ButtonBorder": 91, + "ButtonText": 92, "CategoryItem": 24, - "ChatIncomingBgColor": 83, - "ChatIncomingTextColor": 84, - "ChatModeratedMessageColor": 87, - "ChatOutgoingBgColor": 85, - "ChatOutgoingTextColor": 86, - "CheckedFieldBackground": 92, - "CheckedFieldBorder": 93, - "CheckedFieldIndicator": 94, + "ChatIncomingBgColor": 85, + "ChatIncomingTextColor": 86, + "ChatModeratedMessageColor": 89, + "ChatOutgoingBgColor": 87, + "ChatOutgoingTextColor": 88, + "CheckedFieldBackground": 94, + "CheckedFieldBorder": 95, + "CheckedFieldIndicator": 96, "ColorPickerFrame": 29, "CurrentMarker": 30, "Dark": 35, - "DebuggerCurrentLine": 65, - "DebuggerErrorLine": 66, - "DialogButton": 98, - "DialogButtonBorder": 100, - "DialogButtonText": 99, - "DialogMainButton": 101, - "DialogMainButtonText": 102, - "DiffFilePathBackground": 81, - "DiffFilePathBorder": 82, - "DiffFilePathText": 67, - "DiffLineNum": 76, - "DiffLineNumAdditionBackground": 79, - "DiffLineNumDeletionBackground": 80, - "DiffLineNumNoChangeBackground": 78, - "DiffLineNumSeparatorBackground": 77, - "DiffTextAddition": 70, - "DiffTextAdditionBackground": 74, - "DiffTextDeletion": 71, - "DiffTextDeletionBackground": 75, - "DiffTextHunkInfo": 68, - "DiffTextNoChange": 69, - "DiffTextNoChangeBackground": 73, - "DiffTextSeparatorBackground": 72, + "DebuggerCurrentLine": 67, + "DebuggerErrorLine": 68, + "DialogButton": 100, + "DialogButtonBorder": 102, + "DialogButtonText": 101, + "DialogMainButton": 103, + "DialogMainButtonText": 104, + "DiffFilePathBackground": 83, + "DiffFilePathBorder": 84, + "DiffFilePathText": 69, + "DiffLineNum": 78, + "DiffLineNumAdditionBackground": 81, + "DiffLineNumDeletionBackground": 82, + "DiffLineNumNoChangeBackground": 80, + "DiffLineNumSeparatorBackground": 79, + "DiffTextAddition": 72, + "DiffTextAdditionBackground": 76, + "DiffTextDeletion": 73, + "DiffTextDeletionBackground": 77, + "DiffTextHunkInfo": 70, + "DiffTextNoChange": 71, + "DiffTextNoChangeBackground": 75, + "DiffTextSeparatorBackground": 74, "DimmedText": 41, - "DocViewCodeBackground": 64, + "DocViewCodeBackground": 66, "DropShadow": 32, "Dropdown": 2, "EmulatorBar": 27, @@ -54869,12 +56009,12 @@ "FilterButtonHover": 10, "GameSettingsTableItem": 25, "GameSettingsTooltip": 26, - "HeaderSection": 95, - "InfoBarWarningBackground": 103, - "InfoBarWarningText": 104, + "HeaderSection": 97, + "InfoBarWarningBackground": 105, + "InfoBarWarningText": 106, "InfoText": 45, "InputFieldBackground": 21, - "InputFieldBorder": 91, + "InputFieldBorder": 93, "Item": 22, "Light": 34, "LinkText": 42, @@ -54882,46 +56022,48 @@ "MainButton": 18, "MainText": 37, "Mid": 36, - "Midlight": 96, + "Midlight": 98, "Notification": 4, "RibbonButton": 19, "RibbonTab": 15, "RibbonTabTopBar": 16, "ScriptBackground": 48, - "ScriptBool": 109, - "ScriptBracket": 116, + "ScriptBool": 111, + "ScriptBracket": 118, "ScriptBuiltInFunction": 59, "ScriptComment": 57, - "ScriptEditorCurrentLine": 105, + "ScriptEditorCurrentLine": 107, "ScriptError": 61, "ScriptFindSelectionBackground": 52, - "ScriptFunction": 110, - "ScriptFunctionName": 114, + "ScriptFunction": 112, + "ScriptFunctionName": 116, + "ScriptHint": 63, + "ScriptInformation": 62, "ScriptKeyword": 58, - "ScriptLocal": 111, - "ScriptLuauKeyword": 113, + "ScriptLocal": 113, + "ScriptLuauKeyword": 115, "ScriptMatchingWordSelectionBackground": 53, - "ScriptMethod": 106, - "ScriptNil": 108, + "ScriptMethod": 108, + "ScriptNil": 110, "ScriptNumber": 55, "ScriptOperator": 54, - "ScriptProperty": 107, - "ScriptRuler": 63, + "ScriptProperty": 109, + "ScriptRuler": 65, "ScriptSelectionBackground": 51, "ScriptSelectionText": 50, - "ScriptSelf": 112, + "ScriptSelf": 114, "ScriptSideWidget": 47, "ScriptString": 56, "ScriptText": 49, - "ScriptTodo": 115, + "ScriptTodo": 117, "ScriptWarning": 60, - "ScriptWhitespace": 62, + "ScriptWhitespace": 64, "ScrollBar": 5, "ScrollBarBackground": 6, "SensitiveText": 46, - "Separator": 88, + "Separator": 90, "Shadow": 33, - "StatusBar": 97, + "StatusBar": 99, "SubText": 38, "Tab": 8, "TabBar": 7, @@ -55239,15 +56381,16 @@ "TrackerError": { "name": "TrackerError", "items": { - "AudioError": 7, - "AudioNoPermission": 8, + "AudioError": 8, + "AudioNoPermission": 9, "InitFailed": 2, - "NoAudio": 6, + "NoAudio": 7, "NoService": 1, "NoVideo": 3, "Ok": 0, "VideoError": 4, - "VideoNoPermission": 5 + "VideoNoPermission": 5, + "VideoUnsupported": 6 } }, "TrackerExtrapolationFlagMode": { @@ -55284,6 +56427,12 @@ "Video": 2 } }, + "TrackerPromptEvent": { + "name": "TrackerPromptEvent", + "items": { + "LODCameraRecommendDisable": 0 + } + }, "TriStateBoolean": { "name": "TriStateBoolean", "items": { @@ -55323,6 +56472,7 @@ "UserCFrame": { "name": "UserCFrame", "items": { + "Floor": 3, "Head": 0, "LeftHand": 1, "RightHand": 2 @@ -55364,11 +56514,34 @@ "Touch": 7 } }, + "VRPlayMode": { + "name": "VRPlayMode", + "items": { + "Seated": 0, + "Standing": 1 + } + }, + "VRSafetyBubbleMode": { + "name": "VRSafetyBubbleMode", + "items": { + "Anyone": 2, + "NoOne": 0, + "OnlyFriends": 1 + } + }, + "VRScaling": { + "name": "VRScaling", + "items": { + "Off": 1, + "World": 0 + } + }, "VRSessionState": { "name": "VRSessionState", "items": { "Focused": 3, "Idle": 1, + "Stopping": 4, "Undefined": 0, "Visible": 2 } @@ -55479,6 +56652,14 @@ "Strong": 3 } }, + "WeldConstraintPreserve": { + "name": "WeldConstraintPreserve", + "items": { + "All": 0, + "None": 1, + "Touching": 2 + } + }, "WrapLayerAutoSkin": { "name": "WrapLayerAutoSkin", "items": { diff --git a/rbx_dom_weak/src/instance.rs b/rbx_dom_weak/src/instance.rs index 1b75defd1..d359ab51e 100644 --- a/rbx_dom_weak/src/instance.rs +++ b/rbx_dom_weak/src/instance.rs @@ -109,6 +109,11 @@ impl InstanceBuilder { self.properties.insert(key.into(), value.into()); } + /// Check if the `InstanceBuilder` already has a property with the given key. + pub fn has_property>(&self, key: K) -> bool { + self.properties.contains_key(&key.into()) + } + /// Add multiple properties to the `InstanceBuilder` at once. pub fn with_properties(mut self, props: I) -> Self where diff --git a/rbx_reflection/Cargo.toml b/rbx_reflection/Cargo.toml index a2a279786..4e1031251 100644 --- a/rbx_reflection/Cargo.toml +++ b/rbx_reflection/Cargo.toml @@ -14,3 +14,5 @@ edition = "2018" rbx_types = { version = "1.3.0", path = "../rbx_types", features = ["serde"] } serde = { version = "1.0.137", features = ["derive"] } + +thiserror = "1.0.31" \ No newline at end of file diff --git a/rbx_reflection/src/database.rs b/rbx_reflection/src/database.rs index 7df622c5d..afbcfed9f 100644 --- a/rbx_reflection/src/database.rs +++ b/rbx_reflection/src/database.rs @@ -10,7 +10,7 @@ use std::{ use rbx_types::{Variant, VariantType}; use serde::{Deserialize, Serialize}; -use crate::{ClassTag, PropertyTag}; +use crate::{ClassTag, PropertyMigration, PropertyTag}; /// Contains information extracted from Roblox to describe all known Instances /// and enums. @@ -145,6 +145,15 @@ pub enum PropertySerialization<'a> { /// The property aliases a property with the given name and should serialize /// from that property descriptor instead. SerializesAs(Cow<'a, str>), + + /// The property was originally serialized as itself, but should be migrated + /// to a new property on deserialization. If the new property already + /// exists, this property should be ignored. + #[serde(rename_all = "PascalCase")] + Migrate { + property: Cow<'a, str>, + migration: PropertyMigration, + }, } #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/rbx_reflection/src/lib.rs b/rbx_reflection/src/lib.rs index 136f6425e..9a1b54daf 100644 --- a/rbx_reflection/src/lib.rs +++ b/rbx_reflection/src/lib.rs @@ -1,8 +1,10 @@ mod class_tag; mod database; +mod migration; mod property_tag; mod serde_util; pub use class_tag::*; pub use database::*; +pub use migration::*; pub use property_tag::*; diff --git a/rbx_reflection/src/migration.rs b/rbx_reflection/src/migration.rs new file mode 100644 index 000000000..34eddba6b --- /dev/null +++ b/rbx_reflection/src/migration.rs @@ -0,0 +1,150 @@ +use rbx_types::{Enum, Font, FontStyle, FontWeight, Variant}; +use serde::{Deserialize, Serialize}; +use thiserror::Error; + +#[derive(Debug, Error)] +pub enum MigrationError { + #[error( + "Invalid type for migration {migration:?}: expected a type of {expected}, got {actual:?}" + )] + InvalidTypeForMigration { + migration: PropertyMigration, + expected: &'static str, + actual: Variant, + }, + #[error("Invalid value for migration {migration:?}: expected {expected}, got {actual:?}")] + InvalidValueForMigration { + migration: PropertyMigration, + expected: &'static str, + actual: Variant, + }, +} + +#[derive(Debug, Copy, Clone, Serialize, Deserialize)] +#[non_exhaustive] +pub enum PropertyMigration { + IgnoreGuiInsetToScreenInsets, + FontToFontFace, +} + +pub fn perform_migration( + migration: PropertyMigration, + input: &Variant, +) -> Result { + match migration { + PropertyMigration::IgnoreGuiInsetToScreenInsets => { + if let Variant::Bool(value) = input { + if *value { + Ok(Enum::from_u32(1).into()) + } else { + Ok(Enum::from_u32(2).into()) + } + } else { + Err(MigrationError::InvalidTypeForMigration { + migration: PropertyMigration::IgnoreGuiInsetToScreenInsets, + expected: "Enum", + actual: input.clone(), + }) + } + } + PropertyMigration::FontToFontFace => { + if let Variant::Enum(value) = input { + let value = value.to_u32(); + Ok(match value { + 0 => Font::regular(&"rbxasset://fonts/families/LegacyArial.json"), + 1 => Font::regular(&"rbxasset://fonts/families/Arial.json"), + 2 => Font::new( + &"rbxasset://fonts/families/Arial.json", + FontWeight::Bold, + FontStyle::Normal, + ), + 3 => Font::regular(&"rbxasset://fonts/families/SourceSansPro.json"), + 4 => Font::new( + &"rbxasset://fonts/families/SourceSansPro.json", + FontWeight::Bold, + FontStyle::Normal, + ), + 16 => Font::new( + &"rbxasset://fonts/families/SourceSansPro.json", + FontWeight::SemiBold, + FontStyle::Normal, + ), + 5 => Font::new( + &"rbxasset://fonts/families/SourceSansPro.json", + FontWeight::Light, + FontStyle::Normal, + ), + 6 => Font::new( + &"rbxasset://fonts/families/SourceSansPro.json", + FontWeight::Regular, + FontStyle::Italic, + ), + 7 => Font::regular(&"rbxasset://fonts/families/AccanthisADFStd.json"), + 8 => Font::regular(&"rbxasset://fonts/families/Guru.json"), + 9 => Font::regular(&"rbxasset://fonts/families/ComicNeueAngular.json"), + 10 => Font::regular(&"rbxasset://fonts/families/Inconsolata.json"), + 11 => Font::regular(&"rbxasset://fonts/families/HighwayGothic.json"), + 12 => Font::regular(&"rbxasset://fonts/families/Zekton.json"), + 13 => Font::regular(&"rbxasset://fonts/families/PressStart2P.json"), + 14 => Font::regular(&"rbxasset://fonts/families/Balthazar.json"), + 15 => Font::regular(&"rbxasset://fonts/families/RomanAntique.json"), + 17 => Font::regular(&"rbxasset://fonts/families/GothamSSm.json"), + 18 => Font::new( + &"rbxasset://fonts/families/GothamSSm.json", + FontWeight::Medium, + FontStyle::Normal, + ), + 19 => Font::new( + &"rbxasset://fonts/families/GothamSSm.json", + FontWeight::Bold, + FontStyle::Normal, + ), + 20 => Font::new( + &"rbxasset://fonts/families/GothamSSm.json", + FontWeight::Heavy, + FontStyle::Normal, + ), + 21 => Font::regular(&"rbxasset://fonts/families/AmaticSC.json"), + 22 => Font::regular(&"rbxasset://fonts/families/Bangers.json"), + 23 => Font::regular(&"rbxasset://fonts/families/Creepster.json"), + 24 => Font::regular(&"rbxasset://fonts/families/DenkOne.json"), + 25 => Font::regular(&"rbxasset://fonts/families/Fondamento.json"), + 26 => Font::regular(&"rbxasset://fonts/families/FredokaOne.json"), + 27 => Font::regular(&"rbxasset://fonts/families/GrenzeGotisch.json"), + 28 => Font::regular(&"rbxasset://fonts/families/IndieFlower.json"), + 29 => Font::regular(&"rbxasset://fonts/families/JosefinSans.json"), + 30 => Font::regular(&"rbxasset://fonts/families/Jura.json"), + 31 => Font::regular(&"rbxasset://fonts/families/Kalam.json"), + 32 => Font::regular(&"rbxasset://fonts/families/LuckiestGuy.json"), + 33 => Font::regular(&"rbxasset://fonts/families/Merriweather.json"), + 34 => Font::regular(&"rbxasset://fonts/families/Michroma.json"), + 35 => Font::regular(&"rbxasset://fonts/families/Nunito.json"), + 36 => Font::regular(&"rbxasset://fonts/families/Oswald.json"), + 37 => Font::regular(&"rbxasset://fonts/families/PatrickHand.json"), + 38 => Font::regular(&"rbxasset://fonts/families/PermanentMarker.json"), + 39 => Font::regular(&"rbxasset://fonts/families/Roboto.json"), + 40 => Font::regular(&"rbxasset://fonts/families/RobotoCondensed.json"), + 41 => Font::regular(&"rbxasset://fonts/families/RobotoMono.json"), + 42 => Font::regular(&"rbxasset://fonts/families/Sarpanch.json"), + 43 => Font::regular(&"rbxasset://fonts/families/SpecialElite.json"), + 44 => Font::regular(&"rbxasset://fonts/families/TitilliumWeb.json"), + 45 => Font::regular(&"rbxasset://fonts/families/Ubuntu.json"), + _ => { + return Err(MigrationError::InvalidValueForMigration { + migration: PropertyMigration::FontToFontFace, + expected: "a Font enum value between 0 and 45", + actual: input.clone(), + }) + } + } + .into()) + } else { + Err(MigrationError::InvalidTypeForMigration { + migration: PropertyMigration::FontToFontFace, + expected: "Enum", + actual: input.clone(), + }) + } + } + } +} diff --git a/rbx_reflection_database/database.msgpack b/rbx_reflection_database/database.msgpack index d0dd1918a..25c8d81b5 100644 Binary files a/rbx_reflection_database/database.msgpack and b/rbx_reflection_database/database.msgpack differ diff --git a/rbx_types/src/font.rs b/rbx_types/src/font.rs index e7682d89e..f14595ad3 100644 --- a/rbx_types/src/font.rs +++ b/rbx_types/src/font.rs @@ -19,8 +19,8 @@ impl Default for FontWeight { } impl FontWeight { - pub fn from_u16(weight: u16) -> Self { - match weight { + pub fn from_u16(weight: u16) -> Option { + Some(match weight { 100 => FontWeight::Thin, 200 => FontWeight::ExtraLight, 300 => FontWeight::Light, @@ -30,8 +30,8 @@ impl FontWeight { 700 => FontWeight::Bold, 800 => FontWeight::ExtraBold, 900 => FontWeight::Heavy, - _ => FontWeight::Regular, - } + _ => return None, + }) } pub fn as_u16(self) -> u16 { match self { @@ -62,12 +62,12 @@ impl Default for FontStyle { } impl FontStyle { - pub fn from_u8(style: u8) -> Self { - match style { + pub fn from_u8(style: u8) -> Option { + Some(match style { 0 => FontStyle::Normal, 1 => FontStyle::Italic, - _ => FontStyle::Normal, - } + _ => return None, + }) } pub fn as_u8(self) -> u8 { @@ -102,3 +102,20 @@ impl Default for Font { } } } + +impl Font { + pub fn new(family: &str, weight: FontWeight, style: FontStyle) -> Self { + Self { + family: family.to_owned(), + weight, + style, + cached_face_id: None, + } + } + pub fn regular(family: &str) -> Self { + Self { + family: family.to_owned(), + ..Default::default() + } + } +} diff --git a/rbx_xml/src/core.rs b/rbx_xml/src/core.rs index 7bdda754d..8ad647604 100644 --- a/rbx_xml/src/core.rs +++ b/rbx_xml/src/core.rs @@ -77,7 +77,7 @@ fn find_property_descriptors( if let Some(property_descriptor) = current_class_descriptor.properties.get(property_name) { match &property_descriptor.kind { PropertyKind::Canonical { serialization } => match serialization { - PropertySerialization::Serializes => { + PropertySerialization::Serializes | PropertySerialization::Migrate { .. } => { return Some((property_descriptor, property_descriptor)) } PropertySerialization::DoesNotSerialize => { @@ -103,7 +103,8 @@ fn find_property_descriptors( // FIXME: This code is duplicated with above. match &canonical_descriptor.kind { PropertyKind::Canonical { serialization } => match serialization { - PropertySerialization::Serializes => { + PropertySerialization::Serializes + | PropertySerialization::Migrate { .. } => { return Some((canonical_descriptor, canonical_descriptor)) } PropertySerialization::DoesNotSerialize => { diff --git a/rbx_xml/src/deserializer.rs b/rbx_xml/src/deserializer.rs index 61f849a6a..10de84178 100644 --- a/rbx_xml/src/deserializer.rs +++ b/rbx_xml/src/deserializer.rs @@ -8,7 +8,7 @@ use rbx_dom_weak::{ types::{Ref, SharedString, Variant, VariantType}, InstanceBuilder, WeakDom, }; -use rbx_reflection::DataType; +use rbx_reflection::{perform_migration, DataType, PropertyKind, PropertySerialization}; use crate::{ conversion::ConvertVariant, @@ -607,7 +607,29 @@ fn deserialize_properties( } }; - props.insert(descriptor.name.to_string(), value); + match &descriptor.kind { + PropertyKind::Canonical { + serialization: + PropertySerialization::Migrate { + property, + migration, + }, + } => { + if !props.contains_key(property.as_ref()) { + match perform_migration(*migration, &value) { + Ok(migrated_value) => { + props.insert(property.to_string(), migrated_value); + } + Err(error) => { + return Err(reader.error(DecodeErrorKind::MigrationError(error))); + } + } + } + } + _ => { + props.insert(descriptor.name.to_string(), value); + } + }; } else { match state.options.property_behavior { DecodePropertyBehavior::IgnoreUnknown => { diff --git a/rbx_xml/src/error.rs b/rbx_xml/src/error.rs index 9e2838c3e..c929d4cdf 100644 --- a/rbx_xml/src/error.rs +++ b/rbx_xml/src/error.rs @@ -73,6 +73,7 @@ pub(crate) enum DecodeErrorKind { ParseFloat(std::num::ParseFloatError), ParseInt(std::num::ParseIntError), DecodeBase64(base64::DecodeError), + MigrationError(rbx_reflection::MigrationError), // Errors specific to rbx_xml WrongDocVersion(String), @@ -103,6 +104,7 @@ impl fmt::Display for DecodeErrorKind { ParseFloat(err) => write!(output, "{}", err), ParseInt(err) => write!(output, "{}", err), DecodeBase64(err) => write!(output, "{}", err), + MigrationError(err) => write!(output, "{}", err), WrongDocVersion(version) => { write!(output, "Invalid version '{}', expected version 4", version) @@ -151,6 +153,7 @@ impl std::error::Error for DecodeErrorKind { ParseFloat(err) => Some(err), ParseInt(err) => Some(err), DecodeBase64(err) => Some(err), + MigrationError(err) => Some(err), WrongDocVersion(_) | UnexpectedEof diff --git a/rbx_xml/src/types/font.rs b/rbx_xml/src/types/font.rs index ba2f3c35c..c2923f3ec 100644 --- a/rbx_xml/src/types/font.rs +++ b/rbx_xml/src/types/font.rs @@ -107,7 +107,7 @@ impl XmlType for Font { let family = read_content(reader, "Family")?; let weight: u16 = reader.read_value_in_tag("Weight")?; - let weight = FontWeight::from_u16(weight); + let weight = FontWeight::from_u16(weight).unwrap_or_default(); let style = match reader.read_tag_contents("Style")?.as_str() { "Normal" => FontStyle::Normal, diff --git a/rbx_xml/tests/snapshots/test_files__gui_inset_and_font_migration.snap b/rbx_xml/tests/snapshots/test_files__gui_inset_and_font_migration.snap new file mode 100644 index 000000000..5967416da --- /dev/null +++ b/rbx_xml/tests/snapshots/test_files__gui_inset_and_font_migration.snap @@ -0,0 +1,484 @@ +--- +source: rbx_xml/tests/test-files.rs +expression: viewer.view_children(&dom) +--- +- referent: referent-0 + name: Folder + class: Folder + properties: + Attributes: + Attributes: {} + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + children: + - referent: referent-1 + name: "IgnoreGuiInset: true" + class: ScreenGui + properties: + Attributes: + Attributes: {} + AutoLocalize: + Bool: true + ClipToDeviceSafeArea: + Bool: true + DisplayOrder: + Int32: 0 + Enabled: + Bool: true + ResetOnSpawn: + Bool: true + RootLocalizationTable: "null" + SafeAreaCompatibility: + Enum: 1 + ScreenInsets: + Enum: 1 + SelectionBehaviorDown: + Enum: 0 + SelectionBehaviorLeft: + Enum: 0 + SelectionBehaviorRight: + Enum: 0 + SelectionBehaviorUp: + Enum: 0 + SelectionGroup: + Bool: false + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + ZIndexBehavior: + Enum: 1 + children: [] + - referent: referent-2 + name: "IgnoreGuiInset: false" + class: ScreenGui + properties: + Attributes: + Attributes: {} + AutoLocalize: + Bool: true + ClipToDeviceSafeArea: + Bool: true + DisplayOrder: + Int32: 0 + Enabled: + Bool: true + ResetOnSpawn: + Bool: true + RootLocalizationTable: "null" + SafeAreaCompatibility: + Enum: 1 + ScreenInsets: + Enum: 2 + SelectionBehaviorDown: + Enum: 0 + SelectionBehaviorLeft: + Enum: 0 + SelectionBehaviorRight: + Enum: 0 + SelectionBehaviorUp: + Enum: 0 + SelectionGroup: + Bool: false + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + ZIndexBehavior: + Enum: 1 + children: + - referent: referent-3 + name: TextLabel + class: TextLabel + properties: + Active: + Bool: false + AnchorPoint: + Vector2: + - 0 + - 0 + Attributes: + Attributes: {} + AutoLocalize: + Bool: true + AutomaticSize: + Enum: 0 + BackgroundColor3: + Color3: + - 1 + - 1 + - 1 + BackgroundTransparency: + Float32: 0 + BorderColor3: + Color3: + - 0.10588236 + - 0.16470589 + - 0.20784315 + BorderMode: + Enum: 0 + BorderSizePixel: + Int32: 1 + ClipsDescendants: + Bool: false + Draggable: + Bool: false + FontFace: + Font: + family: "rbxasset://fonts/families/Inconsolata.json" + weight: Regular + style: Normal + cachedFaceId: ~ + LayoutOrder: + Int32: 0 + LineHeight: + Float32: 1 + MaxVisibleGraphemes: + Int32: -1 + NextSelectionDown: "null" + NextSelectionLeft: "null" + NextSelectionRight: "null" + NextSelectionUp: "null" + Position: + UDim2: + - - 0 + - 0 + - - 0 + - 0 + RichText: + Bool: false + RootLocalizationTable: "null" + Rotation: + Float32: 0 + Selectable: + Bool: false + SelectionBehaviorDown: + Enum: 0 + SelectionBehaviorLeft: + Enum: 0 + SelectionBehaviorRight: + Enum: 0 + SelectionBehaviorUp: + Enum: 0 + SelectionGroup: + Bool: false + SelectionImageObject: "null" + SelectionOrder: + Int32: 0 + Size: + UDim2: + - - 0 + - 200 + - - 0 + - 50 + SizeConstraint: + Enum: 0 + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + Text: + String: Label + TextColor3: + Color3: + - 0 + - 0 + - 0 + TextScaled: + Bool: false + TextSize: + Float32: 14 + TextStrokeColor3: + Color3: + - 0 + - 0 + - 0 + TextStrokeTransparency: + Float32: 1 + TextTransparency: + Float32: 0 + TextTruncate: + Enum: 0 + TextWrapped: + Bool: false + TextXAlignment: + Enum: 2 + TextYAlignment: + Enum: 1 + Visible: + Bool: true + ZIndex: + Int32: 1 + children: [] + - referent: referent-4 + name: TextButton + class: TextButton + properties: + Active: + Bool: true + AnchorPoint: + Vector2: + - 0 + - 0 + Attributes: + Attributes: {} + AutoButtonColor: + Bool: true + AutoLocalize: + Bool: true + AutomaticSize: + Enum: 0 + BackgroundColor3: + Color3: + - 1 + - 1 + - 1 + BackgroundTransparency: + Float32: 0 + BorderColor3: + Color3: + - 0.10588236 + - 0.16470589 + - 0.20784315 + BorderMode: + Enum: 0 + BorderSizePixel: + Int32: 1 + ClipsDescendants: + Bool: false + Draggable: + Bool: false + FontFace: + Font: + family: "rbxasset://fonts/families/SourceSansPro.json" + weight: Bold + style: Normal + cachedFaceId: ~ + LayoutOrder: + Int32: 0 + LineHeight: + Float32: 1 + MaxVisibleGraphemes: + Int32: -1 + Modal: + Bool: false + NextSelectionDown: "null" + NextSelectionLeft: "null" + NextSelectionRight: "null" + NextSelectionUp: "null" + Position: + UDim2: + - - 0 + - 0 + - - 0 + - 55 + RichText: + Bool: false + RootLocalizationTable: "null" + Rotation: + Float32: 0 + Selectable: + Bool: true + Selected: + Bool: false + SelectionBehaviorDown: + Enum: 0 + SelectionBehaviorLeft: + Enum: 0 + SelectionBehaviorRight: + Enum: 0 + SelectionBehaviorUp: + Enum: 0 + SelectionGroup: + Bool: false + SelectionImageObject: "null" + SelectionOrder: + Int32: 0 + Size: + UDim2: + - - 0 + - 200 + - - 0 + - 50 + SizeConstraint: + Enum: 0 + SourceAssetId: + Int64: -1 + Style: + Enum: 0 + Tags: + Tags: [] + Text: + String: Button + TextColor3: + Color3: + - 0 + - 0 + - 0 + TextScaled: + Bool: false + TextSize: + Float32: 14 + TextStrokeColor3: + Color3: + - 0 + - 0 + - 0 + TextStrokeTransparency: + Float32: 1 + TextTransparency: + Float32: 0 + TextTruncate: + Enum: 0 + TextWrapped: + Bool: false + TextXAlignment: + Enum: 2 + TextYAlignment: + Enum: 1 + Visible: + Bool: true + ZIndex: + Int32: 1 + children: [] + - referent: referent-5 + name: TextBox + class: TextBox + properties: + Active: + Bool: true + AnchorPoint: + Vector2: + - 0 + - 0 + Attributes: + Attributes: {} + AutoLocalize: + Bool: true + AutomaticSize: + Enum: 0 + BackgroundColor3: + Color3: + - 1 + - 1 + - 1 + BackgroundTransparency: + Float32: 0 + BorderColor3: + Color3: + - 0.10588236 + - 0.16470589 + - 0.20784315 + BorderMode: + Enum: 0 + BorderSizePixel: + Int32: 1 + ClearTextOnFocus: + Bool: true + ClipsDescendants: + Bool: false + Draggable: + Bool: false + FontFace: + Font: + family: "rbxasset://fonts/families/SourceSansPro.json" + weight: Regular + style: Italic + cachedFaceId: ~ + LayoutOrder: + Int32: 0 + LineHeight: + Float32: 1 + MaxVisibleGraphemes: + Int32: -1 + MultiLine: + Bool: false + NextSelectionDown: "null" + NextSelectionLeft: "null" + NextSelectionRight: "null" + NextSelectionUp: "null" + PlaceholderColor3: + Color3: + - 0.7 + - 0.7 + - 0.7 + PlaceholderText: + String: "" + Position: + UDim2: + - - 0 + - 0 + - - 0 + - 110 + RichText: + Bool: false + RootLocalizationTable: "null" + Rotation: + Float32: 0 + Selectable: + Bool: true + SelectionBehaviorDown: + Enum: 0 + SelectionBehaviorLeft: + Enum: 0 + SelectionBehaviorRight: + Enum: 0 + SelectionBehaviorUp: + Enum: 0 + SelectionGroup: + Bool: false + SelectionImageObject: "null" + SelectionOrder: + Int32: 0 + ShowNativeInput: + Bool: true + Size: + UDim2: + - - 0 + - 200 + - - 0 + - 50 + SizeConstraint: + Enum: 0 + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + Text: + String: TextBox + TextColor3: + Color3: + - 0 + - 0 + - 0 + TextEditable: + Bool: true + TextScaled: + Bool: false + TextSize: + Float32: 14 + TextStrokeColor3: + Color3: + - 0 + - 0 + - 0 + TextStrokeTransparency: + Float32: 1 + TextTransparency: + Float32: 0 + TextTruncate: + Enum: 0 + TextWrapped: + Bool: false + TextXAlignment: + Enum: 2 + TextYAlignment: + Enum: 1 + Visible: + Bool: true + ZIndex: + Int32: 1 + children: [] + diff --git a/rbx_xml/tests/snapshots/test_files__sharedstring.snap b/rbx_xml/tests/snapshots/test_files__sharedstring.snap new file mode 100644 index 000000000..2ae4f7303 --- /dev/null +++ b/rbx_xml/tests/snapshots/test_files__sharedstring.snap @@ -0,0 +1,1272 @@ +--- +source: rbx_xml/tests/test-files.rs +expression: viewer.view_children(&dom) +--- +- referent: referent-0 + name: Parts + class: Model + properties: + Attributes: + Attributes: {} + LevelOfDetail: + Enum: 0 + ModelMeshData: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + ModelStreamingMode: + Enum: 0 + PrimaryPart: "null" + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + children: + - referent: referent-1 + name: Union + class: UnionOperation + properties: + Anchored: + Bool: false + AssetId: + Content: "https://www.roblox.com//asset/?id=2892119179" + Attributes: + Attributes: {} + BackParamA: + Float32: -0.5 + BackParamB: + Float32: 0.5 + BackSurface: + Enum: 10 + BackSurfaceInput: + Enum: 0 + BottomParamA: + Float32: -0.5 + BottomParamB: + Float32: 0.5 + BottomSurface: + Enum: 10 + BottomSurfaceInput: + Enum: 0 + CFrame: + CFrame: + position: + - -0.09659165 + - 1.517803 + - -0.83597946 + orientation: + - - 0.10630996 + - -0.0024746126 + - -0.9943304 + - - 0.021991052 + - 0.999758 + - -0.0001369233 + - - 0.99409056 + - -0.02185182 + - 0.1063388 + CanCollide: + Bool: false + CanQuery: + Bool: true + CanTouch: + Bool: true + CastShadow: + Bool: true + ChildData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + CollisionGroup: + String: Default + CollisionGroupId: + Int32: 0 + Color: + Color3uint8: + - 159 + - 161 + - 172 + CustomPhysicalProperties: + PhysicalProperties: Default + FrontParamA: + Float32: -0.5 + FrontParamB: + Float32: 0.5 + FrontSurface: + Enum: 10 + FrontSurfaceInput: + Enum: 0 + LeftParamA: + Float32: -0.5 + LeftParamB: + Float32: 0.5 + LeftSurface: + Enum: 10 + LeftSurfaceInput: + Enum: 0 + Locked: + Bool: false + Massless: + Bool: false + Material: + Enum: 272 + MeshData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + PhysicalConfigData: + len: 8350 + hash: fb095154e907fd5daaca93bae5bf68ca6400ee1c213e897c65cbf95c65fb4463 + PivotOffset: + CFrame: + position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + Reflectance: + Float32: 0.1 + RenderFidelity: + Enum: 1 + RightParamA: + Float32: -0.5 + RightParamB: + Float32: 0.5 + RightSurface: + Enum: 10 + RightSurfaceInput: + Enum: 0 + RootPriority: + Int32: 0 + RotVelocity: + Vector3: + - 0 + - 0 + - 0 + Size: + Vector3: + - 0.05 + - 0.3600072 + - 0.6200124 + SmoothingAngle: + Float32: 0 + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + TopParamA: + Float32: -0.5 + TopParamB: + Float32: 0.5 + TopSurface: + Enum: 10 + TopSurfaceInput: + Enum: 0 + Transparency: + Float32: 0 + UsePartColor: + Bool: true + Velocity: + Vector3: + - 0 + - 0 + - 0 + children: [] + - referent: referent-2 + name: Union + class: UnionOperation + properties: + Anchored: + Bool: false + AssetId: + Content: "https://www.roblox.com//asset/?id=2892119179" + Attributes: + Attributes: {} + BackParamA: + Float32: -0.5 + BackParamB: + Float32: 0.5 + BackSurface: + Enum: 10 + BackSurfaceInput: + Enum: 0 + BottomParamA: + Float32: -0.5 + BottomParamB: + Float32: 0.5 + BottomSurface: + Enum: 10 + BottomSurfaceInput: + Enum: 0 + CFrame: + CFrame: + position: + - -1.2853186 + - 1.5163233 + - -0.769176 + orientation: + - - -0.106310226 + - -0.0024746126 + - 0.99433064 + - - -0.02199106 + - 0.999758 + - 0.00013691811 + - - -0.9940908 + - -0.02185182 + - -0.10633907 + CanCollide: + Bool: false + CanQuery: + Bool: true + CanTouch: + Bool: true + CastShadow: + Bool: true + ChildData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + CollisionGroup: + String: Default + CollisionGroupId: + Int32: 0 + Color: + Color3uint8: + - 159 + - 161 + - 172 + CustomPhysicalProperties: + PhysicalProperties: Default + FrontParamA: + Float32: -0.5 + FrontParamB: + Float32: 0.5 + FrontSurface: + Enum: 10 + FrontSurfaceInput: + Enum: 0 + LeftParamA: + Float32: -0.5 + LeftParamB: + Float32: 0.5 + LeftSurface: + Enum: 10 + LeftSurfaceInput: + Enum: 0 + Locked: + Bool: false + Massless: + Bool: false + Material: + Enum: 272 + MeshData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + PhysicalConfigData: + len: 8350 + hash: fb095154e907fd5daaca93bae5bf68ca6400ee1c213e897c65cbf95c65fb4463 + PivotOffset: + CFrame: + position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + Reflectance: + Float32: 0.1 + RenderFidelity: + Enum: 1 + RightParamA: + Float32: -0.5 + RightParamB: + Float32: 0.5 + RightSurface: + Enum: 10 + RightSurfaceInput: + Enum: 0 + RootPriority: + Int32: 0 + RotVelocity: + Vector3: + - 0 + - 0 + - 0 + Size: + Vector3: + - 0.05 + - 0.36000714 + - 0.62001246 + SmoothingAngle: + Float32: 0 + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + TopParamA: + Float32: -0.5 + TopParamB: + Float32: 0.5 + TopSurface: + Enum: 10 + TopSurfaceInput: + Enum: 0 + Transparency: + Float32: 0 + UsePartColor: + Bool: true + Velocity: + Vector3: + - 0 + - 0 + - 0 + children: [] + - referent: referent-3 + name: Union + class: UnionOperation + properties: + Anchored: + Bool: false + AssetId: + Content: "" + Attributes: + Attributes: {} + BackParamA: + Float32: -0.5 + BackParamB: + Float32: 0.5 + BackSurface: + Enum: 10 + BackSurfaceInput: + Enum: 0 + BottomParamA: + Float32: -0.5 + BottomParamB: + Float32: 0.5 + BottomSurface: + Enum: 10 + BottomSurfaceInput: + Enum: 0 + CFrame: + CFrame: + position: + - 0.16903359 + - 1.3672578 + - -0.89124817 + orientation: + - - 0.10630996 + - 0.002474614 + - 0.99433064 + - - 0.021991052 + - -0.99975836 + - 0.00013691811 + - - 0.99409056 + - 0.02185183 + - -0.10633907 + CanCollide: + Bool: false + CanQuery: + Bool: true + CanTouch: + Bool: true + CastShadow: + Bool: true + ChildData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + CollisionGroup: + String: Default + CollisionGroupId: + Int32: 0 + Color: + Color3uint8: + - 248 + - 248 + - 248 + CustomPhysicalProperties: + PhysicalProperties: Default + FrontParamA: + Float32: -0.5 + FrontParamB: + Float32: 0.5 + FrontSurface: + Enum: 10 + FrontSurfaceInput: + Enum: 0 + LeftParamA: + Float32: -0.5 + LeftParamB: + Float32: 0.5 + LeftSurface: + Enum: 10 + LeftSurfaceInput: + Enum: 0 + Locked: + Bool: false + Massless: + Bool: false + Material: + Enum: 1088 + MeshData2: + len: 36 + hash: a8e881ce93449542139935bd0ec3f0a77725c368b5a699b2b87077d9fd842a64 + PhysicalConfigData: + len: 19694 + hash: c0f5b001cda7f15fa5f109b9872cecc30fcc0ce5d83a101d95a77f4ee7cfb221 + PivotOffset: + CFrame: + position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + Reflectance: + Float32: 0 + RenderFidelity: + Enum: 1 + RightParamA: + Float32: -0.5 + RightParamB: + Float32: 0.5 + RightSurface: + Enum: 10 + RightSurfaceInput: + Enum: 0 + RootPriority: + Int32: 0 + RotVelocity: + Vector3: + - 0 + - 0 + - 0 + Size: + Vector3: + - 0.096 + - 0.05 + - 0.05 + SmoothingAngle: + Float32: 0 + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + TopParamA: + Float32: -0.5 + TopParamB: + Float32: 0.5 + TopSurface: + Enum: 10 + TopSurfaceInput: + Enum: 0 + Transparency: + Float32: 0 + UsePartColor: + Bool: false + Velocity: + Vector3: + - 0 + - 0 + - 0 + children: [] + - referent: referent-4 + name: Union + class: UnionOperation + properties: + Anchored: + Bool: false + AssetId: + Content: "https://www.roblox.com//asset/?id=2892119179" + Attributes: + Attributes: {} + BackParamA: + Float32: -0.5 + BackParamB: + Float32: 0.5 + BackSurface: + Enum: 10 + BackSurfaceInput: + Enum: 0 + BottomParamA: + Float32: -0.5 + BottomParamB: + Float32: 0.5 + BottomSurface: + Enum: 10 + BottomSurfaceInput: + Enum: 0 + CFrame: + CFrame: + position: + - -0.102969766 + - 1.5164837 + - -0.8956378 + orientation: + - - 0.10630996 + - -0.0024746126 + - -0.9943304 + - - 0.021991052 + - 0.999758 + - -0.0001369233 + - - 0.99409056 + - -0.02185182 + - 0.1063388 + CanCollide: + Bool: false + CanQuery: + Bool: true + CanTouch: + Bool: true + CastShadow: + Bool: true + ChildData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + CollisionGroup: + String: Default + CollisionGroupId: + Int32: 0 + Color: + Color3uint8: + - 159 + - 161 + - 172 + CustomPhysicalProperties: + PhysicalProperties: Default + FrontParamA: + Float32: -0.5 + FrontParamB: + Float32: 0.5 + FrontSurface: + Enum: 10 + FrontSurfaceInput: + Enum: 0 + LeftParamA: + Float32: -0.5 + LeftParamB: + Float32: 0.5 + LeftSurface: + Enum: 10 + LeftSurfaceInput: + Enum: 0 + Locked: + Bool: false + Massless: + Bool: false + Material: + Enum: 272 + MeshData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + PhysicalConfigData: + len: 8350 + hash: fb095154e907fd5daaca93bae5bf68ca6400ee1c213e897c65cbf95c65fb4463 + PivotOffset: + CFrame: + position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + Reflectance: + Float32: 0.1 + RenderFidelity: + Enum: 1 + RightParamA: + Float32: -0.5 + RightParamB: + Float32: 0.5 + RightSurface: + Enum: 10 + RightSurfaceInput: + Enum: 0 + RootPriority: + Int32: 0 + RotVelocity: + Vector3: + - 0 + - 0 + - 0 + Size: + Vector3: + - 0.05 + - 0.3600072 + - 0.6200124 + SmoothingAngle: + Float32: 0 + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + TopParamA: + Float32: -0.5 + TopParamB: + Float32: 0.5 + TopSurface: + Enum: 10 + TopSurfaceInput: + Enum: 0 + Transparency: + Float32: 0 + UsePartColor: + Bool: true + Velocity: + Vector3: + - 0 + - 0 + - 0 + children: [] + - referent: referent-5 + name: Union + class: UnionOperation + properties: + Anchored: + Bool: false + AssetId: + Content: "https://www.roblox.com//asset/?id=2892119179" + Attributes: + Attributes: {} + BackParamA: + Float32: -0.5 + BackParamB: + Float32: 0.5 + BackSurface: + Enum: 10 + BackSurfaceInput: + Enum: 0 + BottomParamA: + Float32: -0.5 + BottomParamB: + Float32: 0.5 + BottomSurface: + Enum: 10 + BottomSurfaceInput: + Enum: 0 + CFrame: + CFrame: + position: + - -1.2789422 + - 1.5176423 + - -0.70953286 + orientation: + - - -0.106310226 + - -0.0024746126 + - 0.99433064 + - - -0.02199106 + - 0.999758 + - 0.00013691811 + - - -0.9940908 + - -0.02185182 + - -0.10633907 + CanCollide: + Bool: false + CanQuery: + Bool: true + CanTouch: + Bool: true + CastShadow: + Bool: true + ChildData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + CollisionGroup: + String: Default + CollisionGroupId: + Int32: 0 + Color: + Color3uint8: + - 159 + - 161 + - 172 + CustomPhysicalProperties: + PhysicalProperties: Default + FrontParamA: + Float32: -0.5 + FrontParamB: + Float32: 0.5 + FrontSurface: + Enum: 10 + FrontSurfaceInput: + Enum: 0 + LeftParamA: + Float32: -0.5 + LeftParamB: + Float32: 0.5 + LeftSurface: + Enum: 10 + LeftSurfaceInput: + Enum: 0 + Locked: + Bool: false + Massless: + Bool: false + Material: + Enum: 272 + MeshData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + PhysicalConfigData: + len: 8350 + hash: fb095154e907fd5daaca93bae5bf68ca6400ee1c213e897c65cbf95c65fb4463 + PivotOffset: + CFrame: + position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + Reflectance: + Float32: 0.1 + RenderFidelity: + Enum: 1 + RightParamA: + Float32: -0.5 + RightParamB: + Float32: 0.5 + RightSurface: + Enum: 10 + RightSurfaceInput: + Enum: 0 + RootPriority: + Int32: 0 + RotVelocity: + Vector3: + - 0 + - 0 + - 0 + Size: + Vector3: + - 0.05 + - 0.36000714 + - 0.62001246 + SmoothingAngle: + Float32: 0 + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + TopParamA: + Float32: -0.5 + TopParamB: + Float32: 0.5 + TopSurface: + Enum: 10 + TopSurfaceInput: + Enum: 0 + Transparency: + Float32: 0 + UsePartColor: + Bool: true + Velocity: + Vector3: + - 0 + - 0 + - 0 + children: [] + - referent: referent-6 + name: Union + class: UnionOperation + properties: + Anchored: + Bool: false + AssetId: + Content: "https://www.roblox.com//asset/?id=2892119179" + Attributes: + Attributes: {} + BackParamA: + Float32: -0.5 + BackParamB: + Float32: 0.5 + BackSurface: + Enum: 10 + BackSurfaceInput: + Enum: 0 + BottomParamA: + Float32: -0.5 + BottomParamB: + Float32: 0.5 + BottomSurface: + Enum: 10 + BottomSurfaceInput: + Enum: 0 + CFrame: + CFrame: + position: + - -1.2813833 + - 1.2170323 + - -0.7327989 + orientation: + - - -0.106310226 + - 0.002474614 + - -0.9943304 + - - -0.02199106 + - -0.99975836 + - -0.0001369233 + - - -0.9940908 + - 0.02185183 + - 0.1063388 + CanCollide: + Bool: false + CanQuery: + Bool: true + CanTouch: + Bool: true + CastShadow: + Bool: true + ChildData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + CollisionGroup: + String: Default + CollisionGroupId: + Int32: 0 + Color: + Color3uint8: + - 159 + - 161 + - 172 + CustomPhysicalProperties: + PhysicalProperties: Default + FrontParamA: + Float32: -0.5 + FrontParamB: + Float32: 0.5 + FrontSurface: + Enum: 10 + FrontSurfaceInput: + Enum: 0 + LeftParamA: + Float32: -0.5 + LeftParamB: + Float32: 0.5 + LeftSurface: + Enum: 10 + LeftSurfaceInput: + Enum: 0 + Locked: + Bool: false + Massless: + Bool: false + Material: + Enum: 272 + MeshData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + PhysicalConfigData: + len: 8350 + hash: fb095154e907fd5daaca93bae5bf68ca6400ee1c213e897c65cbf95c65fb4463 + PivotOffset: + CFrame: + position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + Reflectance: + Float32: 0.1 + RenderFidelity: + Enum: 1 + RightParamA: + Float32: -0.5 + RightParamB: + Float32: 0.5 + RightSurface: + Enum: 10 + RightSurfaceInput: + Enum: 0 + RootPriority: + Int32: 0 + RotVelocity: + Vector3: + - 0 + - 0 + - 0 + Size: + Vector3: + - 0.05 + - 0.36000717 + - 0.62001246 + SmoothingAngle: + Float32: 0 + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + TopParamA: + Float32: -0.5 + TopParamB: + Float32: 0.5 + TopSurface: + Enum: 10 + TopSurfaceInput: + Enum: 0 + Transparency: + Float32: 0 + UsePartColor: + Bool: true + Velocity: + Vector3: + - 0 + - 0 + - 0 + children: [] + - referent: referent-7 + name: Union + class: UnionOperation + properties: + Anchored: + Bool: false + AssetId: + Content: "" + Attributes: + Attributes: {} + BackParamA: + Float32: -0.5 + BackParamB: + Float32: 0.5 + BackSurface: + Enum: 10 + BackSurfaceInput: + Enum: 0 + BottomParamA: + Float32: -0.5 + BottomParamB: + Float32: 0.5 + BottomSurface: + Enum: 10 + BottomSurfaceInput: + Enum: 0 + CFrame: + CFrame: + position: + - -1.5503206 + - 1.3669466 + - -0.7073545 + orientation: + - - -0.106310226 + - 0.002474614 + - -0.9943304 + - - -0.02199106 + - -0.99975836 + - -0.0001369233 + - - -0.9940908 + - 0.02185183 + - 0.1063388 + CanCollide: + Bool: false + CanQuery: + Bool: true + CanTouch: + Bool: true + CastShadow: + Bool: true + ChildData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + CollisionGroup: + String: Default + CollisionGroupId: + Int32: 0 + Color: + Color3uint8: + - 248 + - 248 + - 248 + CustomPhysicalProperties: + PhysicalProperties: Default + FrontParamA: + Float32: -0.5 + FrontParamB: + Float32: 0.5 + FrontSurface: + Enum: 10 + FrontSurfaceInput: + Enum: 0 + LeftParamA: + Float32: -0.5 + LeftParamB: + Float32: 0.5 + LeftSurface: + Enum: 10 + LeftSurfaceInput: + Enum: 0 + Locked: + Bool: false + Massless: + Bool: false + Material: + Enum: 1088 + MeshData2: + len: 36 + hash: 9262df03156e7ba931096479dc69773b7674d01299e9a832118c53cc21f388ed + PhysicalConfigData: + len: 16278 + hash: ab812b4f1546543445cb10ee2ae8a71c7993a54932de7b1f7a60612a8a027dfa + PivotOffset: + CFrame: + position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + Reflectance: + Float32: 0.2 + RenderFidelity: + Enum: 1 + RightParamA: + Float32: -0.5 + RightParamB: + Float32: 0.5 + RightSurface: + Enum: 10 + RightSurfaceInput: + Enum: 0 + RootPriority: + Int32: 0 + RotVelocity: + Vector3: + - 0 + - 0 + - 0 + Size: + Vector3: + - 0.09600002 + - 0.05 + - 0.05 + SmoothingAngle: + Float32: 0 + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + TopParamA: + Float32: -0.5 + TopParamB: + Float32: 0.5 + TopSurface: + Enum: 10 + TopSurfaceInput: + Enum: 0 + Transparency: + Float32: 0 + UsePartColor: + Bool: false + Velocity: + Vector3: + - 0 + - 0 + - 0 + children: [] + - referent: referent-8 + name: Union + class: UnionOperation + properties: + Anchored: + Bool: false + AssetId: + Content: "https://www.roblox.com//asset/?id=2892119179" + Attributes: + Attributes: {} + BackParamA: + Float32: -0.5 + BackParamB: + Float32: 0.5 + BackSurface: + Enum: 10 + BackSurfaceInput: + Enum: 0 + BottomParamA: + Float32: -0.5 + BottomParamB: + Float32: 0.5 + BottomSurface: + Enum: 10 + BottomSurfaceInput: + Enum: 0 + CFrame: + CFrame: + position: + - -0.099030495 + - 1.2171957 + - -0.85926116 + orientation: + - - 0.10630996 + - 0.002474614 + - 0.99433064 + - - 0.021991052 + - -0.99975836 + - 0.00013691811 + - - 0.99409056 + - 0.02185183 + - -0.10633907 + CanCollide: + Bool: false + CanQuery: + Bool: true + CanTouch: + Bool: true + CastShadow: + Bool: true + ChildData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + CollisionGroup: + String: Default + CollisionGroupId: + Int32: 0 + Color: + Color3uint8: + - 159 + - 161 + - 172 + CustomPhysicalProperties: + PhysicalProperties: Default + FrontParamA: + Float32: -0.5 + FrontParamB: + Float32: 0.5 + FrontSurface: + Enum: 10 + FrontSurfaceInput: + Enum: 0 + LeftParamA: + Float32: -0.5 + LeftParamB: + Float32: 0.5 + LeftSurface: + Enum: 10 + LeftSurfaceInput: + Enum: 0 + Locked: + Bool: false + Massless: + Bool: false + Material: + Enum: 272 + MeshData2: + len: 0 + hash: af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 + PhysicalConfigData: + len: 8350 + hash: fb095154e907fd5daaca93bae5bf68ca6400ee1c213e897c65cbf95c65fb4463 + PivotOffset: + CFrame: + position: + - 0 + - 0 + - 0 + orientation: + - - 1 + - 0 + - 0 + - - 0 + - 1 + - 0 + - - 0 + - 0 + - 1 + Reflectance: + Float32: 0.1 + RenderFidelity: + Enum: 1 + RightParamA: + Float32: -0.5 + RightParamB: + Float32: 0.5 + RightSurface: + Enum: 10 + RightSurfaceInput: + Enum: 0 + RootPriority: + Int32: 0 + RotVelocity: + Vector3: + - 0 + - 0 + - 0 + Size: + Vector3: + - 0.05 + - 0.36000717 + - 0.62001246 + SmoothingAngle: + Float32: 0 + SourceAssetId: + Int64: -1 + Tags: + Tags: [] + TopParamA: + Float32: -0.5 + TopParamB: + Float32: 0.5 + TopSurface: + Enum: 10 + TopSurfaceInput: + Enum: 0 + Transparency: + Float32: 0 + UsePartColor: + Bool: true + Velocity: + Vector3: + - 0 + - 0 + - 0 + children: [] + diff --git a/rbx_xml/tests/test-files.rs b/rbx_xml/tests/test-files.rs index cf53c3019..48305ecdc 100644 --- a/rbx_xml/tests/test-files.rs +++ b/rbx_xml/tests/test-files.rs @@ -28,12 +28,14 @@ test_models! { ball_socket_constraint: "models/ball-socket-constraint", default_inserted_folder: "models/default-inserted-folder", default_inserted_part: "models/default-inserted-part", + gui_inset_and_font_migration: "models/gui-inset-and-font-migration", ref_adjacent: "models/ref-adjacent", ref_child: "models/ref-child", ref_parent: "models/ref-parent", tags: "models/tags", body_movers: "models/body-movers", union: "models/unions", + sharedstring: "models/sharedstring", unknown_type: "edge-cases/xml-unknown-type", } diff --git a/test-files b/test-files index 1f1f25c70..dcdf570e8 160000 --- a/test-files +++ b/test-files @@ -1 +1 @@ -Subproject commit 1f1f25c7098f257cd7fb7a19f0ad5308ea926b86 +Subproject commit dcdf570e80d6069284099fd68b8f7e01bad18133