diff --git a/.cursor/rules/luau.mdc b/.cursor/rules/luau.mdc new file mode 100644 index 00000000..8c939c4c --- /dev/null +++ b/.cursor/rules/luau.mdc @@ -0,0 +1,448 @@ +--- +description: Luau language syntax, type system, single-threaded model, and common gotchas +alwaysApply: true +--- +# Luau Language Rules + +## Finding Documentation + +Search `.cursor/rules/roblox/luau/` for detailed Luau documentation files. + +## Single-Threaded Execution Model + +**Luau is completely single-threaded.** This is the most misunderstood aspect of the language. + +### Key Facts + +- Code in one script **cannot** run simultaneously with another script +- Execution only switches when code **yields** (`task.wait()`, `:Wait()`, `coroutine.yield()`, async APIs) +- **No yield = no other code runs.** Infinite loops without yields freeze the game. + +### Practical Implications + +```luau +-- SAFE: No yield between read/write, guaranteed atomic +local value = data.Value +data.Value = value + 1 + +-- UNSAFE: Yield allows other code to modify data.Value +local value = data.Value +task.wait(0.1) -- Other code can run here! +data.Value = value + 1 -- May not be what you expect +``` + +### Common Misconceptions + +1. **"Multiple scripts run in parallel"** - False. They switch only at yield points. +2. **"I need mutexes/locks"** - Not in pure Luau. No yield = exclusive access. +3. **"`task.spawn` runs code in parallel"** - False. It schedules for later. + +## Luau-Specific Syntax + +### Arrays Are 1-Indexed + +**Critical:** Unlike most languages, Luau arrays start at index 1, not 0. + +```luau +local arr = {"first", "second", "third"} +print(arr[1]) -- "first" (NOT arr[0]) +print(arr[0]) -- nil + +for i = 1, #arr do -- Start at 1 + print(arr[i]) +end +``` + +### Generic Instantiation Uses `<>` + +This is unique to Luau and easy to forget: + +```luau +-- Correct: Double angle brackets +local binding = React.createBinding<>() +local result = someFunc<>() + +-- WRONG: Single angle brackets (won't work) +-- local binding = React.createBinding() +``` + +### Type Ascription Uses `::` + +```luau +local x = someValue :: string +local y = (a + b) :: number +``` + +### String Interpolation Uses Backticks + +```luau +local name = "world" +print(`Hello {name}!`) -- Hello world! +print(`Result: {1 + 2}`) -- Result: 3 + +-- Escape with backslash +print(`Literal braces: \{not interpolated}`) +``` + +### If Expressions (Ternary) + +```luau +local x = if condition then value else alternative +local size = if x > 10 then "big" elseif x > 5 then "medium" else "small" +``` + +### Continue Statement + +```luau +for i = 1, 10 do + if i % 2 == 0 then continue end + print(i) +end +``` + +### Compound Assignment + +```luau +a += b -- a = a + b +x //= 2 -- Floor division +str ..= "suffix" +``` + +### Floor Division + +```luau +local half = width // 2 -- More efficient than math.floor(width / 2) +``` + +## Type System Essentials + +### Type Modes + +- `--!strict`: Full type checking (recommended) +- `--!nonstrict`: Reduced checking +- `--!nocheck`: Disabled + +### Core Types + +```luau +-- Primitives +local x: number +local s: string +local b: boolean +local arr: {string} -- Array +local map: {[string]: number} -- Dictionary + +-- Optional +local maybe: string? -- string | nil + +-- Union / Intersection +type Result = "ok" | "error" +type Combined = TypeA & TypeB + +-- Negation +type NotNil = ~nil + +-- Singleton (literal types) +type Direction = "up" | "down" | "left" | "right" + +-- Function types +type Callback = (number, string) -> boolean +type Generic = (T) -> T +``` + +### Read-Only Properties + +```luau +type ReadOnly = { read x: number } +type WriteOnly = { write x: number } +``` + +### Tagged Unions (Discriminated Unions) + +Common pattern for type-safe variants: + +```luau +type Action = + | { type: "increment" } + | { type: "decrement" } + | { type: "set", value: number } + +function reducer(state: number, action: Action): number + if action.type == "increment" then + return state + 1 + elseif action.type == "decrement" then + return state - 1 + elseif action.type == "set" then + return action.value + else + error(`Unknown action`) + end +end +``` + +### Built-in Type Functions + +```luau +type Keys = keyof +type PropType = index +``` + +### Variadic Type Packs + +For variadic functions, use `...type` in type definitions: + +```luau +-- Function definition +local function addNumbers(...: number) + -- implementation +end + +-- Type definition +type AddNumbers = (...number) -> number + +-- Generic type packs (advanced) +type Fields = { + call: (self, P...) -> R... +} +``` + +### Type Exports + +Share types across modules with `export type`: + +```luau +-- In Types.luau +export type Player = { + name: string, + score: number +} + +-- In another module +local Types = require(ReplicatedStorage.Types) +local player: Types.Player = {name = "Alice", score = 100} +``` + +### Inferred Types with `typeof` + +Use `typeof` to infer types from values: + +```luau +local config = { + maxRetries = 3, + timeout = 30 +} +type Config = typeof(config) -- Infers {maxRetries: number, timeout: number} + +-- Useful for metatable types +type Vector = typeof(setmetatable({}::{ + x: number, + y: number +}, {}::{ + __add: (Vector, Vector) -> Vector +})) +``` + +## Roblox-Specific + +### Use Vector3, Not vector + +The `vector` primitive exists but is poorly integrated with Roblox APIs. Always use `Vector3`: + +```luau +-- Correct +local pos = Vector3.new(1, 2, 3) + +-- Avoid (not compatible with most Roblox APIs) +-- local pos = vector.create(1, 2, 3) +``` + +## Deprecated Functions + +**Never use these:** + +- `getfenv`/`setfenv`: Breaks optimizations and type checking +- `table.getn`: Use `#` or `rawlen` +- `table.foreach`/`table.foreachi`: Use `for..in` loops +- `wait()`: Use `task.wait()` + +## Common Gotchas + +### Raw Table Functions + +When working with metatables, use `rawget`/`rawset`/`rawequal` to bypass metamethods: + +```luau +local t = setmetatable({}, { + __index = function(self, key) + rawset(self, key, key * 10) -- Avoid triggering __newindex + return self[key] + end +}) + +-- rawget: Get without triggering __index +local val = rawget(t, "key") + +-- rawset: Set without triggering __newindex +rawset(t, "key", "value") + +-- rawequal: Compare without triggering __eq +if rawequal(a, b) then end +``` + +### Metamethod Differences from Lua + +- `__eq` always called, even for rawequal objects +- `__len` works on tables (not just userdata) +- `__iter` enables custom iteration + +### No Bitwise Shift Operators + +`<<` and `>>` don't exist (conflicts with generic syntax). Use `bit32.lshift`/`bit32.rshift`. + +### Table Iteration + +Tables can be iterated directly without `pairs`/`ipairs`: + +```luau +for k, v in myTable do + -- Works directly +end +``` + +### Spreading Arrays with `unpack` + +Use `unpack()` to spread array values: + +```luau +local args = {1, 2, 3} +print(unpack(args)) -- 1 2 3 + +local function add(a, b, c) + return a + b + c +end +print(add(unpack(args))) -- 6 +``` + +### Function Attributes + +```luau +@native +function hotFunction() + -- Compiled to native code +end + +@deprecated +function oldFunction() +end +``` + +Note: `@inline` is NOT supported. Compiler handles inlining automatically. + +## OOP Pattern + +```luau +type Point = { x: number, y: number } + +local Point = {} +Point.__index = Point + +function Point.new(): Point + return setmetatable({ x = 0, y = 0 }, Point) +end + +function Point:getX(): number + return self.x +end +``` + +## Performance Tips + +1. **Preallocate tables**: `table.create(count)` for known sizes +2. **Reuse tables**: `table.clear()` instead of creating new +3. **Floor division**: `//` is faster than `math.floor(a / b)` +4. **Avoid yields in hot paths**: Remember the single-threaded model + +### Native Code Generation + +Use `--!native` to compile server scripts to machine code for ~2-10x speedup: + +```luau +--!native +--!strict + +-- Best for: computation-heavy code, math operations, buffer manipulation +-- Avoid: getfenv/setfenv, non-numeric args to math functions +``` + +Or use `@native` for individual functions: + +```luau +@native +local function calculatePhysics(dt: number) + -- Heavy computation here +end +``` + +**When to use:** +- Functions with heavy math/loops called frequently +- `buffer` operations +- Avoid for API-heavy code (gains are minimal) + +**Annotate `Vector3` parameters** for best results: + +```luau +-- Slow: "v" assumed to be table +local function magnitude(v) + return math.sqrt(v.X * v.X + v.Y * v.Y + v.Z * v.Z) +end + +-- Fast: compiler generates optimized vector code +local function magnitude(v: Vector3) + return math.sqrt(v.X * v.X + v.Y * v.Y + v.Z * v.Z) +end +``` + +## Module Exports with Types + +```luau +--!strict + +export type MyType = { field: string } + +local Module = {} + +function Module.create(): MyType + return { field = "value" } +end + +return Module +``` + +## Exhaustiveness Checking + +Use `never` type to ensure all cases are handled: + +```luau +function handle(x: "a" | "b") + if x == "a" then + return 1 + elseif x == "b" then + return 2 + else + local _: never = x -- Type error if not exhaustive + end +end +``` + +## Immutable Tables + +```luau +local config = table.freeze({ + maxRetries = 3, + timeout = 30 +}) + +-- Clone before modifying +local newConfig = table.clone(config) +newConfig.maxRetries = 5 +``` diff --git a/.cursor/rules/luau/abstract-module-paths-and-init-dot-luau.md b/.cursor/rules/luau/abstract-module-paths-and-init-dot-luau.md new file mode 100644 index 00000000..31bcb368 --- /dev/null +++ b/.cursor/rules/luau/abstract-module-paths-and-init-dot-luau.md @@ -0,0 +1,144 @@ +# Abstract module paths and `init.luau` + +**Status**: Implemented + +## Summary + +We will redefine `foo/init.luau` to be the contents of the module named foo for +the purpose of resolving relative `require()` calls within its body. + +We will do this because a significant portion of our users today rely on the +idiom that `init.luau` represents the module's contents, especially when using +Rojo to build for Roblox. + +## Motivation + +First, consider an example filesystem: + +``` +./foo.luau +./package +./package/init.luau +./package/foo.luau +./package/dependency.luau +``` + +Luau maps this filesystem into a module tree. Module paths largely correspond +to filesystem paths, but they are distinct ideas. Given the filesystem above, +Luau considers the following module paths to be valid: + +``` +foo +package +package/init +package/foo +package/dependency +``` + +When Luau is running on a conventional filesystem, we presently offer some +special behaviour to afford the ability for modules to both contain other +modules, and for them to themselves export values and types: The module path +`package` is treated as an alias to `package/init`. + +Library authors can use this feature to afford a package hierarchy with a root +package that exports all of the most important, basic functionality, plus +submodules that either contain implementation details or additional public APIs. + +This feature works well, but it's incompatible with the idiom that Rojo, a +popular tool in our ecosystem today, employs when building artifacts for Roblox. + +This incompatibility stems from how requires are resolved within the body of +`init.luau`. + +Because we consider `package/init` to be an ordinary Luau module, it is +considered to be rooted at `package`. Therefore, a relative +`require('./foo')` call will resolve to `./package/foo.luau` rather than +`./foo.luau`. + +Rojo, by contrast, considers `./package/init.luau` to belong to the containing +directory. A developer using Rojo must instead write +`require('./package/foo')`. This is only necessary when the script is named +`init.luau`. + +Because of this incompatibility, scripts with require-by-string uses in Rojo +projects will not work outside of Roblox places and vice versa. Since +cross-runtime compatibility is an important goal of the require-by-string +project, we would like to rectify this. + +## Design + +First, we introduce a new abstraction: a _module path_. Module paths refer +either to _modules_ or _directories_. + +For the purposes of navigation, both modules and directories are functionally +identical: modules and directories can both have children, which could +themselves be modules or directories, and both types can have at most one +parent, which could also be either a module or a directory. + +The thing that separates a module from a directory is precisely that modules +represent source code that can be imported via the `require()` function. +Directories, by contrast, are merely organizational units. + +The central feature of this RFC is about how module paths correspond to +filesystem paths: A module path refers to a module if it corresponds either to a +`.luau` file or to a directory that contains a file named `init.luau`. A module +path refers to a directory if it refers to a filesystem directory that lacks an +`init.luau` file. + +More concretely, Luau will no longer consider relative requires from a package +`init.luau` file to resolve relative to the script itself. It will instead +resolve relative to the location of the abstract module it represents, i.e. the +location of its parent folder in a filesystem context. + +Secondly, we recognize an unfortunate side effect of this change: code within +`package/init.luau` is forced to write `require('./package/dependency')` when it +specifically wants to carry out the ordinary task of importing a subordinate +module. + +We propose to alleviate this with a special import alias `@self` that resolves +to the path to the current module. + +```lua +-- package/init.luau + +local foo = require('./foo') -- This pulls in the outer foo! +local foo = require('@self/foo') -- import package/foo +``` + +## Drawbacks + +On a filesystem, Rojo's behaviour is frankly very weird! A reader must know the +name of the current source file in order to know what `require('./foo')` will +do, and if a developer renames a file to or from `init.luau`, they will be +forced to rewrite every `require()`. + +We could someday mitigate this with a new lint: If a module is the parent of other +modules, it is poor style for it to directly import sibling or parent modules. +Files named `init.luau` should never issue a require that resolves to a sibling +module. In our example, we would warn if `package/init.luau` were to +`require('./foo')` because that reaches outside of its folder. + +Further, as require-by-string has been live on Roblox for a little while, there +is some risk that changing things now will break existing code. Roblox will use +live telemetry to assess the impact of this change before we move forward. + +## Alternatives + +### Patching Rojo + +Adjusting Rojo to match what Luau does today without breaking any existing +application code is tricky and most likely requires something far weirder than +the change outlined in this RFC. + +Crucially, most code written using Rojo predates string-based requires. All of +this code must continue to run exactly as-is. + +This puts us in quite a bind: + +* If we map `foo/init.luau` to an actual `ModuleScript` at `foo/init` in the + Roblox data model, then instance-based requires break. This rules out clever + solutions like aliasing modules and compatibility shims. +* If we don't, then we need some other magic Roblox rule that changes the + require resolution rules + 1. Only for scripts that, on the Rojo side, are named `init.luau`, and + 2. Only for string-based requires diff --git a/.cursor/rules/luau/amended-require-resolution.md b/.cursor/rules/luau/amended-require-resolution.md new file mode 100644 index 00000000..05689c3e --- /dev/null +++ b/.cursor/rules/luau/amended-require-resolution.md @@ -0,0 +1,243 @@ +# Amended Require Syntax and Resolution Semantics + +**Status**: Implemented + +## Summary + +We need to finalize a syntax for aliases in require expressions and determine intuitive resolution semantics as we prepare to build a package management system. + +## Motivation + +In an [old RFC for require-by-string](https://github.com/luau-lang/luau/pull/969), we removed the `@` prefix from aliases altogether and opted for the following design: +the path `require("my/module")` is resolved by first checking if `my` is an alias defined in a `.luaurc` file. +If so, we perform a string substitution on `my`. +If not, we try to resolve `my/module` relative to the requiring file. +This is identical to approach (3a) below. + +This design changed in the next few months and became what we now have in [require-by-string-aliases.md](require-by-string-aliases.md): +when requiring an alias, it must be prepended with the `@` prefix. +Otherwise, we will assume the given string does not contain an alias and will resolve it relative to the requiring file. +This is identical to approach (1a) below. + +As we prepare to build an official Luau package management system, we need unambiguous alias functionality. +This RFC documents the final design decision made after discussion. + +Note: The numbered labels below are preserved from an earlier version of this document. +Discussion in the [PR](https://github.com/luau-lang/rfcs/pull/56) refers to these approaches by their labels, so they have been left as-is in this document. + +## Design + +### Context + +Assume that the following `.luaurc` file is defined: +```json +{ + "aliases": { + "libs": "/My/Libraries/Directory" + } +} +``` +Additionally, assume that we have a file named `dependency.luau` located in these two locations: +1. `./libs/dependency.luau` +2. `/My/Libraries/Directory/dependency.luau` + +### (1) Make explicit prefixes necessary + +#### (1c) All explicit prefixes necessary + +We will always require prefixes for disambiguation. +In other words, any unprefixed path will _always_ result in an error. +```luau +-- Error: must have either "@", "./", or "../" prefix +require("libs/dependency") + +-- Requires ./libs/dependency.luau +require("./libs/dependency") + +-- Requires /My/Libraries/Directory/dependency.luau +require("@libs/dependency") +``` + +A benefit of this approach is that the role of autocomplete becomes fairly well-defined. +When `require("` is typed, autocomplete has only three options to display: the `@`, `./`, and `../` prefixes. +After a prefix has been typed, autocomplete will either display defined aliases or local modules, depending on the prefix. +Approaches (1a) and (1b) would be less clear about this, as `require("` could be followed by a string component or one of the three prefixes. + +An additional benefit of this approach is that it is forwards-compatible with both (1a) and (1b), which are now in Alternatives. +We effectively reserve unprefixed paths with this approach and can support either (1a) or (1b) further down the road. +After a package manager has been implemented, we will likely have a better sense for which option makes the most sense: mapping unprefixed paths to local modules, to aliased modules, or to nothing (keeping unprefixed paths unsupported). + +### Removing `paths` + +As part of the push to make require expressions more explicit, we will remove `paths`, as aliases defined in `aliases` serve a similar purpose and are more explicit. + +### Throw an error if multiple files matched + +Currently, we allow `require` to resolve to both `.luau` and `.lua` files, implicitly preferring `.luau` if both are present. +In line with this proposal's move toward explicit resolution semantics, this behavior will be revised. +We will continue to support `.luau` and `.lua` files, but we will throw an error if both are present. + +We also currently support requiring a directory if it contains an `init.luau` or `init.lua` file. +If the name of a file matches the name of a sibling directory, we will now also throw an error to avoid ambiguity. + +For example, calling `require("./module")` from `requirer.luau` would throw an error in each of these cases (non-exhaustive). + +Conflict between `module.lua` and `module.luau`: +``` +. +├── module.lua +├── module.luau +└── requirer.luau +``` + +Conflict between `module` directory and `module.luau`: +``` +. +├── module +│ └── init.luau +├── module.luau +└── requirer.luau +``` + +## Drawbacks + +The main drawback of this approach is that it is quite strict and not backwards-compatible with any existing code that uses unprefixed require expressions. +However, because of its forwards compatibility with approaches (1a) and (1b), it is possible for us to relax these restrictions in the future. + +From an aesthetic point of view, this approach is slightly more cluttered than other approaches, as every path must begin with a prefix. + +The removal of `paths` and changes to the implicit resolution order for different file types may also create concerns for backwards compatibility. + +## Alternatives + +### (1) Make explicit prefixes necessary + +Although (1a) and (1b) are both explicit approaches, they take opposite stances on whether writing relative-path requires or aliased-path requires should be optimized for the developer. +Currently, relative-path requires are far more common, which fits well with approach (1a). +In the context of a package management system, however, we would expect aliased paths to be used more frequently, which fits better with approach (1b). + +These approaches have been moved to Alternatives since they are both backwards-compatible with approach (1c). +Rather than making an arbitrary decision now, it makes more sense for us to choose (1c) now and reevaluate once package management is a reality. + +#### (1a) Make aliases explicit with `@` prefix + +We make usage of the `@` prefix necessary in aliased require expressions. +This means that any unprefixed string is always treated as an unaliased path. +```luau +-- Requires ./libs/dependency.luau +require("libs/dependency") + +-- Requires ./libs/dependency.luau +require("./libs/dependency") + +-- Requires /My/Libraries/Directory/dependency.luau +require("@libs/dependency") +``` + +The main drawback of this approach is that projects with many _external_ dependencies will have many `@` symbols appearing within require expressions. + +This is similar to [Lune's approach](https://lune-org.github.io/docs/getting-started/2-introduction/8-modules#file-require-statements) and is identical to the approach currently described in [require-by-string-aliases.md](require-by-string-aliases.md). + +#### (1b) Make relative paths explicit with `./` prefix + +We make usage of the `./` prefix necessary in relative require expressions. +This means that any unprefixed string is always treated as an aliased path. +```luau +-- Requires /My/Libraries/Directory/dependency.luau +require("libs/dependency") + +-- Requires ./libs/dependency.luau +require("./libs/dependency") + +-- Requires /My/Libraries/Directory/dependency.luau +require("@libs/dependency") +``` + +The main drawback of this approach is that projects with many _internal_ dependencies will have many `./` symbols appearing within require expressions. + +This is similar to [darklua's approach](https://darklua.com/docs/path-require-mode/). + +### (2) Strongly recommend explicit prefixes + +We don't make the `@` or `./` prefixes necessary like in approach (1c), but we strongly recommend them. + +This can be accomplished by allowing unprefixed paths but throwing an error if they resolve to multiple files. +There is a performance cost to this: currently, if we successfully match a given path to a file, we stop searching for other matches. +If this approach were implemented, we would need to search for at most two matching files in case we need to throw an error. +In the case of multiple nested directories with their own `.luaurc` files and `paths` arrays, this search could take linear time with respect to the total number of paths defined, in the worst case. + +Of course, developers could use the `@` or `./` prefixes to explicitly specify a search type and eliminate this performance cost. +```luau +-- Error: ./libs/dependency.luau exists and .luaurc defines a distinct "libs" alias +-- Would require ./libs/dependency.luau if "libs" alias did not exist +-- Would require /My/Libraries/Directory/dependency.luau if ./libs/dependency.luau did not exist +require("libs/dependency") + +-- Requires ./libs/dependency.luau +require("./libs/dependency") + +-- Requires /My/Libraries/Directory/dependency.luau +require("@libs/dependency") +``` + +This is a compromise between approaches (1a) and (1b) that sacrifices performance for compatibility and readability. +Unfortunately, this approach could lead to unexpected behavior if users have globally defined `.luaurc` files that conflict with scripts that expect certain aliases to not be defined. + +### (3) Use implicit resolution ordering to avoid `@` prefix + +If we choose to remove the `@` prefix, we must define an implicit resolution ordering. +In essence, aliases must either represent overrides or fallbacks for relative path resolution. +These approaches are not being considered since implicit resolution ordering can be confusing, and people may disagree on which ordering is best. + +#### (3a) Aliases as overrides + +If aliases were overrides, we would have the following behavior. +This is identical to the [old RFC](https://github.com/luau-lang/luau/pull/969)'s behavior. +```luau +-- Requires /My/Libraries/Directory/dependency.luau +require("libs/dependency") + +-- Requires ./libs/dependency.luau +require("./libs/dependency") + +-- Error: there is no "@libs" alias in .luaurc +require("@libs/dependency") +``` + +If the `libs` alias did not exist, however, we would have the following: +```luau +-- Requires ./libs/dependency.luau +require("libs/dependency") + +-- Requires ./libs/dependency.luau +require("./libs/dependency") + +-- Error: there is no "@libs" alias in .luaurc +require("@libs/dependency") +``` + +#### (3b) Aliases as fallbacks + +If aliases were fallbacks, we would have the following behavior. +```luau +-- Requires ./libs/dependency.luau +require("libs/dependency") + +-- Requires ./libs/dependency.luau +require("./libs/dependency") + +-- Error: there is no "@libs" alias in .luaurc +require("@libs/dependency") +``` + +If `./libs/dependency.luau` did not exist, however, we would have the following: +```luau +-- Requires /My/Libraries/Directory/dependency.luau +require("libs/dependency") + +-- Error: does not exist +require("./libs/dependency") + +-- Error: there is no "@libs" alias in .luaurc +require("@libs/dependency") +``` \ No newline at end of file diff --git a/.cursor/rules/luau/behavior-eq-metamethod.md b/.cursor/rules/luau/behavior-eq-metamethod.md new file mode 100644 index 00000000..c17e9a7c --- /dev/null +++ b/.cursor/rules/luau/behavior-eq-metamethod.md @@ -0,0 +1,59 @@ +# Always call `__eq` when comparing for equality + +> Note: this RFC was adapted from an internal proposal that predates RFC process + +**Status**: Implemented + +## Summary + +`__eq` metamethod will always be called during `==`/`~=` comparison, even for objects that are rawequal. + +## Motivation + +Lua 5.x has the following algorithm it uses for comparing userdatas and tables: + +- If two objects are not of the same type (userdata vs number), they aren't equal +- If two objects are referentially equal, they are equal (!) +- If no object has a metatable with `__eq` metamethod, they are equal iff they are referentially equal +- Otherwise, pick one of the `__eq` metamethods, call it with both objects as arguments and return the result. + +In mid-2019, we've released Luau which implements a fast path for userdata comparison. This fast path accidentally omitted step 2 for userdatas with C `__eq` implementations (!), and thus comparing a userdata object vs itself would actually run `__eq` metamethod. This is significant as it allowed users to use `v == v` as a NaN check for vectors, coordinate frames, and other objects that have floating point contents. + +Since this was a bug, we're in a rather inconsistent state: + +- `==` and `~=` in the code always call `__eq` for userdata with C `__eq` +- `==` and `~=` don't call `__eq` for tables and custom newproxy-like userdatas with Lua `__eq` when objects are ref. equal +- `table.find` *doesn't* call `__eq` when objects are ref. equal + +## Design + +Since developers started relying on `==` behavior for NaN checks in the last two years since Luau release, the bug has become a feature. Additionally, it's sort of a good feature since it allows to implement NaN semantics for custom types - userdatas, tables, etc. + +Thus the proposal suggests changing the rules so that when `__eq` metamethod is present, `__eq` is always called even when comparing the object to itself. + +This would effectively make the current ruleset for userdata objects official, and change the behavior for `table.find` (which is probably not significant) and, more significantly, start calling user-provided `__eq` even when the object is the same. It's expected that any reasonable `__eq` implementation can handle comparing the object to itself so this is not expected to result in breakage. + +## Drawbacks + +This represents a difference in a rather core behavior from all upstream versions of Lua. + +## Alternatives + +We could instead equalize (ha!) the behavior between Luau and Lua. In fact, this is what we tried to do initially as the userdata behavior was considered a bug, but encountered the issue with games already depending on the new behavior. + +We could work with developers to change their games to stop relying on this. However, this is more complicated to deploy and - upon reflection - makes `==` less intuitive than the main proposal when comparing objects with NaN, since e.g. it means that these two functions have a different behavior: + +```luau +function compare1(a: Vector3, b: Vector3) + return a == b +end + +function compare2(a: Vector3, b: Vector3) + return a.X == b.X and a.Y == b.Y and a.Z == b.Z +end +``` + +## References + +https://devforum.roblox.com/t/call-eq-even-when-tables-are-rawequal/1088886 +https://devforum.roblox.com/t/nan-vector3-comparison-broken-cframe-too/1130778 diff --git a/.cursor/rules/luau/behavior-stricter-utf8-library.md b/.cursor/rules/luau/behavior-stricter-utf8-library.md new file mode 100644 index 00000000..0fa1c4f2 --- /dev/null +++ b/.cursor/rules/luau/behavior-stricter-utf8-library.md @@ -0,0 +1,48 @@ +# Stricter utf8 library validation + +**Status**: Implemented + +## Summary + +`utf8.len` and other functions in UTF-8 library will do more rigorous validation of UTF-8 input, rejecting UTF-16 surrogates encoded into UTF-8. + +## Motivation + +We use the UTF-8 library `utf8` from Lua 5.3. The implementation of this library mostly correctly validates UTF-8 input and either throws errors (e.g. from `utf8.codes`) or returns `nil` (for `utf8.len`) for invalid input. + +However, certain invalid UTF-8 sequences are treated as valid. This specifically includes surrogate characters encoded in UTF-8; for example, the string `"\237\160\128"` represents an attempt to encode the surrogate `0xD800` into UTF-8. +This is impossible to do in UTF-8; Lua 5.3 accepts this (`utf8.len` returns 1), and so does Luau. + +This creates issues for any other API that correctly validates UTF-8. For example, Roblox extends Luau with a few extra functions, like `utf8.nfcnormalize`, that perform UTF-8 validation correctly and reject the aforementioned string. +As a result, due to Roblox extensions, the `utf8` library exposed in Roblox is inconsistent (this is also a problem in other Roblox-specific APIs like DataStores that reject invalid UTF-8 inputs that `utf8.len` accepts). +We would also expect that in other environments, extra functions that handle UTF-8 inputs and validate them do the validation properly. + +Lua 5.4 fixes this by changing the default behavior of `utf8.len` and other UTF-8 functions to error when surrogates are present. It also fixes an issue in `utf8.codes` that failed to properly reject overlong UTF-8 sequences in certain cases; Luau already contains a fix to this issue. + +## Design + +All functions from Luau `utf8` library will correctly validate UTF-8 and reject inputs that have surrogates. The functions will use their existing error handling strategy: `utf8.len` will return `nil` followed by the byte offset, `utf8.codepoint` and `utf8.codes` will error. + +Any code using these functions should already be prepared for handling errors: `utf8` functions will already do a validation of UTF-8 input, the validation was just not fully comprehensive. It is expected that this will not cause any significant compatibility risk, because many other functions already reject surrogates and the use of `utf8.` function family in general is rare. + +Notably, this is a *partial* implementation of Lua 5.4 behavior. In addition to making the default behavior stricter, Lua 5.4 *relaxes* `utf8.char` (allowing it to produce "codepoints" that exceed 0x10FFFF and are invalid per Unicode standard) unconditionally, and also provides an optional argument `lax` to a few functions like `utf8.len` that allows to accept both surrogates and out-of-range (larger than `0x10FFFF`) codepoints. + +We do not propose to adopt the full Lua 5.4 behavior or introduce the new `lax` argument for the following reasons: + +- Based on the analysis of all packages published to `luarocks`, we conclude that `lax` argument is never used outside of Lua's own tests. As such, it's questionable whether we *need* to give a way to relax the checks. +- The behavior changes regardless due to the parameter defaults (`lax` defaults to `false`). We agree with this choice but conclude that the compatibility risk, however small, exists regardless of the argument's presence. +- Because full 5.4 semantics include both making behavior stricter by default, and also significantly relaxing behavior by allowing out-of-range characters (unconditionally for `utf8.char`, and conditionally on `lax` for other `utf8` functions), they allow easier production of invalid UTF-8 sequences. + +It is likely that 5.4 semantics change is motivated by only having two types of behavior: "strict" (proposed here) and "lax" (supporting a variant of UTF-8 that allows encoding any codepoint value). Because it is always possible to add the "lax" behavior later, and we do not want to establish the precedent and require this addition to all other functions (for example, what should `nfcnormalize` do for surrogates?), we only specify the "strict" behavior here. The "lax" behavior could be added by a separate RFC if there's significant demand for it; that would be fully backwards compatible. + +> After this change, in Roblox strings that are correctly validated by `utf8.len` should also work properly with `utf8.nfcnormalize`, `utf8.graphemes`, DataStore APIs and other functions that validate UTF-8 input. + +## Drawbacks + +Because this technically changes behavior, due to Hyrum's law we might break some code that *really* wants to encode surrogates in UTF-8 despite the fact that only a couple functions support this. + +Because this doesn't fully align behavior with Lua 5.4, it is possible that we will get programs in the future that want the full Lua 5.4 treatment (allowing `lax`). It is likely that this will happen because of larger codepoints for some odd custom encoding reasons though, not for surrogates specifically, and if it does we can add it later. + +## Alternatives + +Other than doing nothing, we could implement full Lua 5.4 behavior (with `lax` argument and relaxed range checks in some existing functions). This leaves the question as to what the behavior of Roblox-specific utf8 extensions like `nfcnormalize` or `graphemes` should be, as they would become inconsistent not just in implementation but also in interface without further changes. diff --git a/.cursor/rules/luau/change-global-version.md b/.cursor/rules/luau/change-global-version.md new file mode 100644 index 00000000..cdb6c1e7 --- /dev/null +++ b/.cursor/rules/luau/change-global-version.md @@ -0,0 +1,21 @@ +# Change \_VERSION global to "Luau" + +> Note: this RFC was adapted from an internal proposal that predates RFC process + +**Status**: Implemented + +## Summary + +Change \_VERSION global to "Luau" to differentiate Luau from Lua + +## Motivation + +Provide an official way to distinguish Luau from Lua implementation. + +## Design + +We inherit the global string \_VERSION from Lua (this is distinct from Roblox `version()` function that returns a full version number such as 0.432.43589). + +The string is set to "Lua 5.1" for us (and "Lua 5.2" etc for newer versions of Lua. + +Since our implementation is sufficiently divergent from upstream, this proposal suggests setting \_VERSION to "Luau". diff --git a/.cursor/rules/luau/config-luauconfig.md b/.cursor/rules/luau/config-luauconfig.md new file mode 100644 index 00000000..dd90e4a9 --- /dev/null +++ b/.cursor/rules/luau/config-luauconfig.md @@ -0,0 +1,146 @@ +# Support Luau-syntax configuration files + +**Status**: Implemented + +## Summary + +Introduce `.config.luau`: a Luau-syntax file used to configure analysis and runtime behavior. + +## Motivation + +We currently support analysis and runtime configuration in `.luaurc` files, which use a JSON-like syntax ([RFC](https://rfcs.luau.org/config-luaurc)). + +Under the current design, the burden of providing JSON-editing support is placed on anyone embedding Luau, even if their environment is not naturally suited for JSON configuration. +Ideally, embedding Luau should not require implementers to build or maintain specialized tooling for editing JSON-based configuration files. + +## Design + +We introduce a new configuration file called `.config.luau`. + +### Syntax + +An example `.config.luau` is given below. + +```luau +return { + luau = { + languagemode = "nonstrict", + lint = { + ["*"] = true, + LocalUnused = false + }, + linterrors = true, + typeerrors = true, + globals = {"expect"}, + aliases = { + src = "./src" + } + } +} +``` + +The file must return a Luau table of the following `Config` type (facilitated by type checking and autocomplete support): +```luau +type LanguageMode = "strict" | "nonstrict" | "nocheck" + +type LintWarning = + "*" + | "UnknownGlobal" + | "DeprecatedGlobal" + | "GlobalUsedAsLocal" + | "LocalShadow" + | "SameLineStatement" + | "MultiLineStatement" + | "LocalUnused" + | "FunctionUnused" + | "ImportUnused" + | "BuiltinGlobalWrite" + | "PlaceholderRead" + | "UnreachableCode" + | "UnknownType" + | "ForRange" + | "UnbalancedAssignment" + | "ImplicitReturn" + | "DuplicateLocal" + | "FormatString" + | "TableLiteral" + | "UninitializedLocal" + | "DuplicateFunction" + | "DeprecatedApi" + | "TableOperations" + | "DuplicateCondition" + | "MisleadingAndOr" + | "CommentDirective" + | "IntegerParsing" + | "ComparisonPrecedence" + | "RedundantNativeAttribute" + +type LuauConfig = { + languagemode: LanguageMode?, + lint: { [LintWarning]: boolean }?, + linterrors: boolean?, + typeerrors: boolean?, + globals: { string }?, + aliases: { [string]: string }?, +} + +type Config = { + luau: LuauConfig? +} +``` + +If configuration fields are not provided, `.config.luau` has the same default behavior as `.luaurc`. + +### Search semantics + +The search semantics of `.config.luau` files are the same as `.luaurc`'s (adapted from a previous RFC): + +> For a given `.luau` or `.lua` script, Luau will search for `.luaurc` files starting from the folder that the script is in; all files in the ancestry chain will be parsed and their configuration applied. +> When multiple configuration files exist throughout the ancestry chain, configurations closer to the script override those in higher-level directories. + +If both `.luaurc` and `.config.luau` are present in a directory, an error is thrown. + +### Configuration extraction + +Unlike `.luaurc` files, `.config.luau` files can contain runtime constructs like variables, functions, and loops. +To extract configuration from a `.config.luau` file, its contents are executed in an isolated Luau VM with only the standard libraries enabled (`luaL_openlibs`). +This approach ensures that configuration files can leverage Luau features while maintaining a sandboxed execution environment. +As a consequence, `.config.luau` files cannot require other scripts, as `require` is not included in the standard libraries. + +#### Timing out + +Executing arbitrarily complex Luau code requires us to guard against excessive computation: +```luau +-- .config.luau with an infinite loop +return (function() + while true do + end +end)() +``` + +For analysis-time configuration extraction, we adopt the same behavior described in the [user-defined type functions RFC](https://rfcs.luau.org/user-defined-type-functions.html): we simply respect the time limit that the embedding context provides through the `Frontend` API. + +At runtime, the configuration extraction timeout for each `.config.luau` file is set to two seconds by default. +This duration is generally sufficient for typical configuration logic while being short enough to prevent accidental or malicious long-running scripts from impacting performance. +For more fine-grained control, however, embedders will be free to override this. +That is to say, we do not wish to prescribe a specific limit in general, but note that having a limit in place is important. + +### Interaction with `require` + +Despite `.config.luau` being a `.luau` file, it is not recognized as a module by `require` at runtime. +Concretely, the source file `foo.luau` cannot extract the contents of its sibling `.config.luau` file with the expression `require("./.config")`. + +## Drawbacks + +**Complexity**: Allowing arbitrary Luau code in configuration files increases the complexity of parsing and validating configurations, which might make debugging more difficult. +Allowing runtime constructs also makes automated edits more difficult to support. + +**Multiple formats**: There might be some confusion surrounding the two different configuration files. +Most of this can be mitigated by (1) editor tooling, and (2) embedded contexts will likely choose one to support, not both. + +## Alternatives + +**Restrict syntax**: Limit `.config.luau` files to only contain table literals and forbid functions, loops, and other runtime constructs to reduce complexity. +Instead of spawning a new Luau VM to "parse" the file, we could simply spin up a Luau parser. + +**Improve support for `.luaurc` files**: We already provide an autocomplete API for Luau-syntax files and could expose an API that facilitates editing `.luaurc` files. diff --git a/.cursor/rules/luau/config-luaurc.md b/.cursor/rules/luau/config-luaurc.md new file mode 100644 index 00000000..b321b94b --- /dev/null +++ b/.cursor/rules/luau/config-luaurc.md @@ -0,0 +1,68 @@ +# Configure analysis via .luaurc + +**Status**: Implemented + +## Summary + +Introduces a way to configure type checker and linter using JSON-like .luaurc files + +## Motivation + +While Luau analysis tools try to provide sensible defaults, it's difficult to establish the rules that work for all code. +For example, some packages may decide that unused variables aren't interesting; other packages may decide that all files should be using strict typechecking mode. + +While it's possible to configure some aspects of analysis behavior using --! comments, it can be cumbersome to replicate this in all files. + +## Design + +To solve this problem, we are going to introduce support for `.luaurc` files for users of command-line Luau tools. +For a given .lua file, Luau will search for .luaurc files starting from the folder that the .lua file is in; all files in the ancestry chain will be parsed and their configuration +applied. When multiple files are used, the file closer to the .lua file overrides the settings. + +.luaurc is a JSON file that can also contain comments and trailing commas. The file can have the following keys: + +- `"languageMode"`: type checking mode, can be one of "nocheck", "nonstrict", "strict" +- `"lint"`: lints to enable; points to an object that maps string literals that correspond to the names of linting rules (see https://luau-lang.org/lint), or `"*"` that means "all rules", to a boolean (to enable/disable the lint) +- `"lintErrors"`: a boolean that controls whether lint issues are reported as errors or warnings (off by default) +- `"typeErrors"`: a boolean that controls whether type issues are reported as errors or warnings (on by default) +- `"globals"`: extra global values; points to an array of strings where each string names a global that the type checker and linter must assume is valid and of type `any` + +Example of a valid .luaurc file: + +```json5 +{ + "languageMode": "nonstrict", + "lint": { "*": true, "LocalUnused": false }, + "lintErrors": true, + "globals": ["expect"] // TestEZ +} +``` + +Note that in absence of a configuration file, we will use default settings: languageMode will be set to nonstrict, a set of lint warnings is going to be enabled by default (this proposal doesn't detail that set - that will be subject to a different proposal), type checking issues are going to be treated as errors, lint issues are going to be treated as warnings. + +## Design -- compatibility + +Today we support .robloxrc files; this proposal will keep parsing legacy specification of configuration for compatibility: + +- Top-level `"language"` key can refer to an object that has `"languageMode"` key that also defines language mode +- Top-level `"lint"` object values can refer to a string `"disabled"`/`"enabled"`/`"fatal"` instead of a boolean as a value. + +These keys are only going to be supported for compatibility and only when the file name is .robloxrc (which is only going to be parsed by internal Roblox command line tools but this proposal mentions it for completeness). + +## Drawbacks + +The introduction of configuration files means that it's now impossible to type check or lint sources in isolation, which complicates the code setup. + +File-based JSON configuration may or may not map cleanly to environments that don't support files, such as Roblox Studio. + +Using JSON5 instead of vanilla JSON limits the interoperability. + +There's no way to force specific lints to be fatal, although this can be solved in the future by promoting the "compatibility" feature where one can specify a string to a non-compatibility feature. + +## Alternatives + +It's possible to consider forcing users to specify the source settings via `--!` comments exclusively. This is problematic as it may require excessive amounts of annotation though, which this proposal aims to simplify. + +The format of the configuration file does not have to be JSON; for example, it can be a valid Luau source file which is the approach luacheck takes. This makes it more difficult to repurpose the .luaurc file to use third-party processing tools though, e.g. a package manager would need to learn how to parse Luau syntax to store configuration in .luaurc. + +It's possible to use the old style of lint rule specification with "enabled"/"fatal"/etc., but it's more verbose and is more difficult to use in common scenarios, such as "all enabled lints are fatal and these are the ones we need to enable in addition to the default set" is impossible to specify. diff --git a/.cursor/rules/luau/deprecate-getfenv-setfenv.md b/.cursor/rules/luau/deprecate-getfenv-setfenv.md new file mode 100644 index 00000000..9e80f9c6 --- /dev/null +++ b/.cursor/rules/luau/deprecate-getfenv-setfenv.md @@ -0,0 +1,38 @@ +# Deprecate getfenv/setfenv + +**Status**: Implemented + +## Summary + +Mark getfenv/setfenv as deprecated + +## Motivation + +getfenv and setfenv are problematic for a host of reasons: + +- They allow uncontrolled mutation of global environment, which results in deoptimization; various important performance features +like builtin calls or imports are disabled when these functions are used. +- Because of the uncontrolled mutation code that uses getfenv/setfenv can't be typechecked correctly; in particular, injecting new +globals is going to produce "unknown globals" warnings, and modifying existing globals can trivially violate soundness wrt type +checking +- While these functions can be used for good (once you ignore the issues above), such as custom module systems, statistically speaking +they are mostly used to obfuscate code to hide malicious intent. + +## Design + +We will mark getfenv and setfenv as deprecated. The only consequence of this change is that the linter will start emitting warnings when they are used. + +Removing support for getfenv/setfenv, while tempting, is not planned in the foreseeable future because it will cause significant backwards compatibility issues. + +## Drawbacks + +There are valid uses for getfenv/setfenv, that include extra logging (in Roblox code this manifests as `getfenv(1).script`), monkey patching for mocks in unit tests, and custom +module systems that inject globals into the calling environment. We do have a replacement for logging use cases, `debug.info`, and we do have an officially recommended replacement +for custom module systems, which is to use `require` that doesn't result in issues that fenv modification carries and can be understood by the type checker, we do not have an +alternative for mocks. As such, testing frameworks that implement mocking via setfenv/getfenv will need to use `--!nolint DeprecatedGlobal` to avoid this warning. + +## Alternatives + +Besides the obvious alternative "do nothing", we could also consider implementing Lua 5.2 support for _ENV. However, since we do not have a way to load script files other than +via `require` that doesn't support _ENV, and `loadstring` is supported but discouraged, we do not currently plan to implement `_ENV` although it's possible that this will happen +in the future. diff --git a/.cursor/rules/luau/deprecate-table-getn-foreach.md b/.cursor/rules/luau/deprecate-table-getn-foreach.md new file mode 100644 index 00000000..ea8e1e6b --- /dev/null +++ b/.cursor/rules/luau/deprecate-table-getn-foreach.md @@ -0,0 +1,31 @@ +# Deprecate table.getn/foreach/foreachi + +**Status**: Implemented + +## Summary + +Mark table.getn/foreach/foreachi as deprecated + +## Motivation + +`table.getn`, `table.foreach` and `table.foreachi` were deprecated in Lua 5.1 that Luau is based on, and removed in Lua 5.2. + +`table.getn(x)` is equivalent to `rawlen(x)` when `x` is a table; when `x` is not a table, `table.getn` produces an error. It's difficult to imagine code where `table.getn(x)` is better than either `#x` (idiomatic) or `rawlen(x)` (fully compatible replacement). However, `table.getn` is slower and provides yet another way to perform an operation, leading new users of the language to use it unknowingly. + +`table.foreach` is equivalent to a `for .. pairs` loop; `table.foreachi` is equivalent to a `for .. ipairs` loop; both may also be replaced by generalized iteration. Both functions are significantly slower than equivalent `for` loop replacements, are more restrictive because the function can't yield, and result in new users (particularly coming from JS background) unknowingly using these thus producing non-idiomatic non-performant code. + +In both cases, the functions bring no value over other library or language alternatives, and thus just serve as a distraction. + +## Design + +We will mark all three functions as deprecated. The only consequence of this change is that the linter will start emitting warnings when they are used. + +Removing support for these functions doesn't provide any measurable value and as such is not planned in the foreseeable future because it may cause backwards compatibility issues. + +## Drawbacks + +None + +## Alternatives + +If we consider table.getn/etc as supported, we'd want to start optimizing their usage which gets particularly tricky with foreach and requires more compiler machinery than this is probably worth. diff --git a/.cursor/rules/luau/disallow-proposals-leading-to-ambiguity-in-grammar.md b/.cursor/rules/luau/disallow-proposals-leading-to-ambiguity-in-grammar.md new file mode 100644 index 00000000..3dd52cd5 --- /dev/null +++ b/.cursor/rules/luau/disallow-proposals-leading-to-ambiguity-in-grammar.md @@ -0,0 +1,129 @@ +# Disallow `name T` and `name(T)` in future syntactic extensions for type annotations + +## Summary + +We propose to disallow the syntax `` `('`` as well as ` ` in future syntax extensions for type annotations to ensure that all existing programs continue to parse correctly. This still keeps the door open for future syntax extensions of different forms such as `` `<' `>'``. + +## Motivation + +Lua and by extension Luau's syntax is very free form, which means that when the parser finishes parsing a node, it doesn't try to look for a semi-colon or any termination token e.g. a `{` to start a block, or `;` to end a statement, or a newline, etc. It just immediately invokes the next parser to figure out how to parse the next node based on the remainder's starting token. + +That feature is sometimes quite troublesome when we want to add new syntax. + +We have had cases where we talked about using syntax like `setmetatable(T, MT)` and `keyof T`. They all look innocent, but when you look beyond that, and try to apply it onto Luau's grammar, things break down really fast. + +### `F(T)`? + +An example that _will_ cause a change in semantics: + +```luau +local t: F +(u):m() +``` + +where today, `local t: F` is one statement, and `(u):m()` is another. If we had the syntax for `F(T)` here, it becomes invalid input because it gets parsed as + +```luau +local t: F(u) +:m() +``` + +This is important because of the `setmetatable(T, MT)` case: + +```luau +type Foo = setmetatable({ x: number }, { ... }) +``` + +For `setmetatable`, the parser isn't sure whether `{}` is actually a type or an expression, because _today_ `setmetatable` is parsed as a type reference, and `({}, {})` is the remainder that we'll attempt to parse as a statement. This means `{ x: number }` is invalid table _literal_. Recovery by backtracking is technically possible here, but this means performance loss on invalid input + may introduce false positives wrt how things are parsed. We'd much rather take a very strict stance about how things get parsed. + +### `F T`? + +An example that _will_ cause a change in semantics: + +```luau +local function f(t): F T + (t or u):m() +end +``` + +where today, the return type annotation `F T` is simply parsed as just `F`, followed by a ambiguous parse error from the statement `T(t or u)` because its `(` is on the next line. If at some point in the future we were to allow `T` followed by `(` on the next line, then there's yet another semantic change. `F T` could be parsed as a type annotation and the first statement is `(t or u):m()` instead of `F` followed by `T(t or u):m()`. + +For `keyof`, here's a practical example of the above issue: + +```luau +type Vec2 = {x: number, y: number} + +local function f(t, u): keyof Vec2 + (t or u):m() +end +``` + +There's three possible outcomes: + 1. Return type of `f` is `keyof`, statement throws a parse error because `(` is on the next line after `Vec2`, + 2. Return type of `f` is `keyof Vec2` and next statement is `(t or u):m()`, or + 3. Return type of `f` is `keyof` and next statement is `Vec2(t or u):m()` (if we allow `(` on the next line to be part of previous line). + +This particular case is even worse when we keep going: + +```luau +local function f(t): F + T(t or u):m() +end +``` + +```luau +local function f(t): F T + {1, 2, 3} +end +``` + +where today, `F` is the return type annotation of `f`, and `T(t or u):m()`/`T{1, 2, 3}` is the first statement, respectively. + +Adding some syntax for `F T` **will** cause the parser to change the semantics of the above three examples. + +### But what about `typeof(...)`? + +This syntax is grandfathered in because the parser supported `typeof(...)` before we stabilized our syntax, and especially before type annotations were released to the public, so we didn't need to worry about compatibility here. We are very glad that we used parentheses in this case, because it's natural for expressions to belong within parentheses `()`, and types to belong within angles `<>`. + +## The One Exception with a caveat + +This is a strict requirement! + +`function() -> ()` has been talked about in the past, and this one is different despite falling under the same category as `` `('``. The token `function` is in actual fact a "hard keyword," meaning that it cannot be parsed as a type annotation because it is not an identifier, just a keyword. + +Likewise, we also have talked about adding standalone `function` as a type annotation (semantics of it is irrelevant for this RFC) + +It's possible that we may end up adding both, but the requirements are as such: + 1. `function() -> ()` must be added first before standalone `function`, OR + 2. `function` can be added first, but with a future-proofing parse error if `<` or `(` follows after it + +If #1 is what ends up happening, there's not much to worry about because the type annotation parser will parse greedily already, so any new valid input will remain valid and have same semantics, except it also allows omitting of `(` and `<`. + +If #2 is what ends up happening, there could be a problem if we didn't future-proof against `<` and `(` to follow `function`: + +```luau + return f :: function(T) -> U +``` + +which would be a parse error because at the point of `(` we expect one of `until`, `end`, or `EOF`, and + +```luau + return f :: function(a) -> a +``` + +which would also be a parse error by the time we reach `->`, that is the production of the above is semantically equivalent to `(f < a) > (a)` which would compare whether the value of `f` is less than the value of `a`, then whether the result of that value is greater than `a`. + +## Alternatives + +Only allow these syntax when used inside parentheses e.g. `(F T)` or `(F(T))`. This makes it inconsistent with the existing `typeof(...)` type annotation, and changing that over is also breaking change. + +Support backtracking in the parser, so if `: MyType(t or u):m()` is invalid syntax, revert and parse `MyType` as a type, and `(t or u):m()` as an expression statement. Even so, this option is terrible for: + 1. parsing performance (backtracking means losing progress on invalid input), + 2. user experience (why was this annotation parsed as `X(...)` instead of `X` followed by a statement `(...)`), + 3. has false positives (`foo(bar)(baz)` may be parsed as `foo(bar)` as the type annotation and `(baz)` is the remainder to parse) + +## Drawbacks + +To be able to expose some kind of type-level operations using `F` syntax, means one of the following must be chosen: + 1. introduce the concept of "magic type functions" into type inference, or + 2. introduce them into the prelude as `export type F = ...` (where `...` is to be read as "we haven't decided") diff --git a/.cursor/rules/luau/explicit-type-parameter-instantiation.md b/.cursor/rules/luau/explicit-type-parameter-instantiation.md new file mode 100644 index 00000000..3c07fd60 --- /dev/null +++ b/.cursor/rules/luau/explicit-type-parameter-instantiation.md @@ -0,0 +1,208 @@ +# Explicit type parameter instantiation + +**Status**: Implemented + +## Summary + +We will add support for the ability to bind a function defined with generics to specific types at the time of expression. This behavior is analagous to C++'s `f` and Rust's `f::`, where `f` is defined as a function accepting a type parameter `T`. + +## Motivation + +There are several cases where Luau either makes it overly difficult to declare a type in a function call or overly verbose. For example, let's consider something akin to React's bindings: + +```lua +local function createBinding(value: T): React.Binding + -- code +end +``` + +If we wanted a binding to a number, then Luau can trivially infer this type: + +```lua +-- 1999 is a number, so moneyBinding is React.Binding +local moneyBinding = React.createBinding(1999) +``` + +In other cases, the type is more complex. For example, if we want money to be `number?`, then we cannot simply pass in `nil`, as that will infer as `React.Binding`. Furthermore, while there are theoretically cases like these where Luau can expand out a `nil` into `number?`, it is still beneficial to want this to be restricted at the type to prevent confusing debugging or potential for the type to infer wider than intended. + +There are two ways to do this. One is to declare the type of `moneyBinding` itself to `React.Binding`. This would look like... + +```lua +local moneyBinding: React.Binding = React.createBinding(nil) +``` + +This is not only quite verbose, but requires that the user know the exact type of the return value of `React.createBinding`, *and* requires that it really be as trivial as just passing in the types. For example, `React.Binding` could be an even more complex type that asks for some sort of initial state type, or setter type, and so on. In other cases, it might even be defined as an inline table, or as a non-exported type. + +The other alternative is something like: + +```lua +local moneyBinding = React.createBinding(nil :: number?) +``` + +However, `::` has the ability to cast things in unsound manners. Both these calls are accepted with `::` when we would not want it in this case: + +```lua +local function f(x: number?) + React.createBinding(x :: number) -- Allowed +end + +type Object = { a: number } +React.createBinding({} :: Object) -- Allowed +``` + +So while it would work in some cases, it provides an extra bit of uncertainty to the correctness of the call. + +In other cases, type parameters are used in places where there is no immediate value binding to that type. For example, a Signal type might be defined as: + +```lua +type Signal = { + fire: (Args...) -> (), + connect: ((Args...) -> ()) -> (), +} + +local function createSignal(): Signal +``` + +The usual local assignment bindings work fine here: + +```lua +local playerTookDamageSignal: Signal = createSignal() +``` + +...but only if this binding is actually declared through a local. In a case like: + +```lua +Signals.playerTookDamageSignal = createSignal() +``` + +...we either have to put this out into another variable above, which increases surface area, or use `::`, which has the problems described previously. This is not a problem specific to function calls, but is one of the places where they would be useful. + +## Design + +We propose allowing the following: + +```lua +-- Saving `f<>` as a variable to called later +local a = f<> + +-- Parameterized function call as statement +f<>() + +-- Parameterized function call as expression +local b = f<>() + +-- Calling through index +local c = t.f<>() +local d = t:f<>() +local e = t["f"]<>() +``` + +For parsing, we will do this by extending `var` to allow `prefixexp '<<' TypeList '>>'`. This will bind the prefixexp equivalent to the substitution of the type parameters. That is to say... + +```lua +local function f() end + +-- Binds `T` and `U` to `number` and `string` +local f1 = f<> + +-- Binds just `T` to number. The unspecified `U` type is anonymous in the same way it would be if this were just `f`. +local f2 = f<> +``` + +When this new syntax is used on a value that is not a function, or does not take those types, a static-time error will be given. This syntax has zero runtime effect. + +### Interoperability with metatables + +There are three problems that arise when attempting to instantiate a table with a metatable attached, namely: + +1. The forall quantifier is nested under the metamethod for that table's metatable, giving three levels of indirection. +2. It's unclear what metamethod to instantiate without a way to disambiguate, since a metatable can have multiple polymorphic metamethods. +3. If the `__metatable` field is present, `getmetatable` will throw an error, making it unsafe to work around this with `getmetatable(t).__call<>`. + +Hence, we must produce a type error if the term is not a function type of the correct kind, full stop. + +If it was supported, explicit type instantiation through the metatable would require disambiguation using the surrounding syntactic context. That is, `t<>.x` instantiates the `__index` metamethod, or `t<>(...)` instantiates the `__call` metamethod, and so forth. The tradeoff there is that the type inference engine will now have an extra `std::optional` parameter that is only used when checking an expression of the form `e<>`. + +This trivial (and contrived) example shows what it would look like in practice, and generalization to more complex cases is straightforward, but would obscure the core point. + +```luau +type T = setmetatable<{ x: number, y: string }, { + __index: (T, K) -> rawget, + __call: (T, K, rawget) -> rawget +}> + +local function f(t: T) + local x = t<<"x">>.x -- instantiates `__index` with `K = "x"`. + local y = t<<"y">>("x", "hello!") -- instantiates `__call` with `K = "y"` (and a type error `"x" >(c) +``` + +This is either a parameterized function call of `f(c)` with `a` and `b` as types, or a return of two values--`f << a`, and `b >> (c)`. + +Because there would be no ability to add bitwise shifts to the language, it is unlikely that any bitwise operators would be added, as it would be a stark omission. + +With that said, the ability to perform these kinds of shifts is already available through the `bit32` library, and [Luau's compatibility page](https://luau.org/compatibility#lua-53) has the following words on the topic in reference to their availability in Lua 5.3: + +> If integers are taken out of the equation, bitwise operators make less sense, as integers aren’t a first class feature; additionally, bit32 library is more fully featured (includes commonly used operations such as rotates and arithmetic shift; bit extraction/replacement is also more readable). Adding operators along with metamethods for all of them increases complexity, which means this feature isn’t worth it on the balance. + +The syntax is also unfamiliar not just in the context of Luau but in the context of programming languages in general--`<<` and `>>` as type parameter specification is completely unique to this call alone. + +## Alternatives + +### Syntax + +First, what we absolutely cannot pick: + +- `f()` is the choice of C++, but is ambiguous with `f(c)` in the same way we mentioned with bitwise operators above. C++ only disambiguates this with an extra pass using type information that would dramatically inflate the complexity of all Luau parsers. +- `f::()`, named the "turbofish", is the choice of Rust. This is not strictly ambiguous, but it would require infinite lookahead as it conflicts with casting generic functions. In `local x = f::(() -> T) -> ()`, which is valid code today, we cannot know this is a type assignment until we get to the first `)`, as until that point we might have code that looks like `local x = f::((x))`. This is not a cost we would like to add to the parser. + +For unambiguous alternatives, `f.` and `f:` are among the most discussed. This would look like: + +```lua +local moneyBinding = React.createBinding.() + +-- or... +local moneyBinding = React.createBinding:() +``` + +The downside of these is that they blur the lines between runtime and static, in the sense that `React.createBinding.` starts out as a runtime concept, followed by the purely static ``. As for `:`, it carries the baggage of `x:y()` carrying the interesting behavior of adding `self` to the call, which it does not do here. + +There is also not necessarily a reason that we have to provide symmetrical operators, so something like `f!T, U()` is reasonably parseable, but is not obviously better and is even more unlike any other language's syntax. + +Ultimately, this RFC chooses `<>` as a least worst option that is fluid to type, easy to read, and easy to remember. + +### Limiting to function calls, instead of expressions + +This is allowed at the expression level as it allows for the obvious use of `f<>()`, but with the ability to be more expressive and pass it into places like: + +```lua +local function f( + a: (A) -> (), + b: (B) -> (), + c: (C) -> () +) end + +f(f1, f2<>, f3) +``` + +The equivalent syntax is allowed in both C++ and Rust, but it is a rare use case that could add significant complexity. In most cases, keeping it to function calls will work just fine. + +### Not doing it + +As always, we can not do this. It is worth noting that in the original generic functions RFC, parameterized function calls are explicitly omitted in a [section entitled "Turbofish", linked here](https://rfcs.luau.org/generic-functions.html#turbofish). + +Relevant to our purposes is the following section: + +> Some languages don’t have a way to specify the types at call site either, Swift being a prominent example. Thus it’s not a given we need this feature in Luau. + +This is still the case for Swift at time of writing. + diff --git a/.cursor/rules/luau/function-bit32-byteswap.md b/.cursor/rules/luau/function-bit32-byteswap.md new file mode 100644 index 00000000..958bb38a --- /dev/null +++ b/.cursor/rules/luau/function-bit32-byteswap.md @@ -0,0 +1,48 @@ +# bit32.byteswap + +**Status**: Implemented + +## Summary + +Add `bit32.byteswap` to swap the endianness of a 32-bit integer. + +## Motivation + +The endianness of an integer is generally invisible to Luau users. Numbers are treated as expected regardless of their underlying representation, as is standard across programming languages. However, in some file formats and algorithms, the endianness of an integer is important, so it becomes necessary to swap the order of bytes of an integer to 'pretend' that it is one endian or the other. + +While the endianness of numbers can be swapped through a few methods, it is cumbersome. Modern CPUs have instructions dedicated to this (`bswap` on x86-64, `rev` on aarch64) but in Luau, the current best method is to manually shift bytes around and OR them together. For 32-bit integers, this becomes a total of 7 calls: + +```luau +bit32.bor( + bit32.lshift(n, 24), + bit32.band(bit32.lshift(n, 8), 0xFF0000), + bit32.band(bit32.rshift(n, 8), 0xFF00), + bit32.rshift(n, 24), +) +``` + +Along with being inefficient, it is also difficult read this code and remember it. It took the author of this RFC several tries to write the above example correctly. + +## Design + +The `bit32` library will gain a new function: `bit32.byteswap`: + +```luau +bit32.byteswap(n: number): number +``` + +`byteswap` will take the bytes of a number and swap their endianness. To be exact, for an integer `0xA1B2_C3D4`, it will return `0xD4C3_B2A1`. + +## Drawbacks + +There is a reasonable expectation that `bit32` functions recieve built-in implementations to improve their performance. This is even more true with native codegen. As this functionality is relatively niche, it may not be worth including it for that reason alone because it would occupy a built-in function slot in the VM. + +However even without a built-in call, an initial implementation was still significantly faster than the alternative presented above. So, the only drawback known is in the marginal increase to the overall VM complexity, which is not considered to be a serious drawback. + +## Alternatives + +A function to simply convert an integer to little-endian was considered, but was rejected due to a basic logic: it is impossible to know whether a given integer is in little-endian so the function may as well be a generic swapping function. Naming such a function is also potentially complex without being verbose (`bit32.tole` is a bad name, but `bit32.tolittleendian` is too long). + +Simply using the existing `bit32` functions as presented at the beginning of the RFC is not unworkably slow, so it is a viable alternative for a niche use case like this. However, as noted before it is complicated to visually parse. + +It may be more reasonable to identify and implement use cases for this function rather than the function itself. However, this is not sustainable: it is doubtful anyone wishes to include support for MD5 hashing natively, as an example. diff --git a/.cursor/rules/luau/function-bit32-countlz-countrz.md b/.cursor/rules/luau/function-bit32-countlz-countrz.md new file mode 100644 index 00000000..9e17f82a --- /dev/null +++ b/.cursor/rules/luau/function-bit32-countlz-countrz.md @@ -0,0 +1,52 @@ +# bit32.countlz/countrz + +**Status**: Implemented + +## Summary + +Add bit32.countlz (count left zeroes) and bit32.countrz (count right zeroes) to accelerate bit scanning + +## Motivation + +All CPUs have instructions to determine the position of first/last set bit in an integer. These instructions have a variety of uses, the popular ones being: + +- Fast implementation of integer logarithm (essentially allowing to compute `floor(log2(value))` quickly) +- Scanning set bits in an integer, which allows efficient traversal of compact representation of bitmaps +- Allocating bits out of a bitmap quickly + +Today it's possible to approximate `countlz` using `floor` and `log` but this approximation is relatively slow; approximating `countrz` is difficult without iterating through each bit. + +## Design + +`bit32` library will gain two new functions, `countlz` and `countrz`: + +```luau +function bit32.countlz(n: number): number +function bit32.countrz(n: number): number +``` + +`countlz` takes an integer number (converting the input number to a 32-bit unsigned integer as all other `bit32` functions do), and returns the number of consecutive left-most zero bits - that is, the number of most significant zero bits in a 32-bit number until the first 1. The result is in `[0, 32]` range. + +For example, when the input number is `0`, it's `32`. When the input number is `2^k`, the result is `31-k`. + +`countrz` takes an integer number (converting the input number to a 32-bit unsigned integer as all other `bit32` functions do), and returns the number of consecutive right-most zero bits - that is, +the number of least significant zero bits in a 32-bit number until the first 1. The result is in `[0, 32]` range. + +For example, when the input number is `0`, it's `32`. When the input number is `2^k`, the result is `k`. + +> Non-normative: a proof of concept implementation shows that a polyfill for `countlz` takes ~34 ns per loop iteration when computing `countlz` for an increasing number sequence, whereas +> a builtin implementation takes ~4 ns. + +## Drawbacks + +None known. + +## Alternatives + +These functions can be alternatively specified as "find the position of the most/least significant bit set" (e.g. "ffs"/"fls" for "find first set"/"find last set"). This formulation +can be more immediately useful since the bit position is usually more important than the number of bits. However, the bit position is undefined when the input number is zero, +returning a sentinel such as -1 seems non-idiomatic, and returning `nil` seems awkward for calling code. Counting functions don't have this problem. + +An early version of this proposal suggested `clz`/`ctz` (leading/trailing) as names; however, using a full verb is more consistent with other operations like shift/rotate, and left/right may be easier to understand intuitively compared to leading/trailing. left/right are used by C++20. + +Of the two functions, `countlz` is vastly more useful than `countrz`; we could implement just `countlz`, but having both is nice for symmetry. diff --git a/.cursor/rules/luau/function-buffer-bits.md b/.cursor/rules/luau/function-buffer-bits.md new file mode 100644 index 00000000..4a7c33ab --- /dev/null +++ b/.cursor/rules/luau/function-buffer-bits.md @@ -0,0 +1,62 @@ +# buffer.readbits/writebits + +**Status**: Implemented + +## Summary + +Add `buffer.readbits` and `buffer.writebits` to give developers an easy way to work with bit buffers. + +## Motivation + +With the release of the buffer type, many developers have asked for a way to write integers of custom non-standard widths and just general bit access, based on previous experience with bit buffer libraries. + +While bit operations can be implemented manually, it requires careful bit manipulation, especially when partial byte writes are required or when reading bits is performed sequentially across bytes without a rigid 'bitfield' offset definition. + +## Design + +`buffer` library will gain two new functions, `readbits` and `writebits`: + +``` +buffer.readbits(b: buffer, bitOffset: number, bitCount: number): number +buffer.writebits(b: buffer, bitOffset: number, bitCount: number, value: number): () +``` + +`bitCount` is an integer in range [0, 32]. Error is thrown if number is not in range. + +0 bit width is supported only to not error in generalized cases where bit count is dynamic. Reading 0 bits returns 0 and writing has no effect. + +Similar to other numerical buffer read/write functions, if `bitOffset` and `bitCount` cause a bit access outside the bounds of the buffer, an error is thrown. + +In `writebits`, `value` is treated as an unsigned 32 bit number. Only `bitCount` least significant bits are written. + +In `readbits`, return value is unsigned. + +--- + +Operations are always preformed in little-endian byte order and starting from least significant bits. + +This means that: + +```lua +buffer.readbits(b, 0, 8) == buffer.readu8(b, 0) +buffer.readbits(b, 0, 16) == buffer.readu16(b, 0) +buffer.readbits(b, 0, 32) == buffer.readu32(b, 0) + +buffer.writebits(b, 0, 1, 1) +buffer.readi8(b, 0) == 1 + +buffer.writebits(b, 1, 1, 1) +buffer.readi8(b, 0) == 3 +``` + +> Only a library function implementation is suggested for implementation, the complexity of the operation of a prototype implementation is unlikely to benefit from a fastcall. + +## Drawbacks + +Because of the bounds checking requirements, implementation needs a loop to access the buffer bytes, which is potentially slower than what developers can do with existing functions when they know that it's safe to read a larger number and extract bits with bit32 functions. + +Because the max size of the buffer is 1GB, `bitOffset` cannot be handled as a 32-bit integer number like byte offset in other buffer functions. + +## Alternatives + +A signed version of `readbits` is not proposed to simplify the design. Writing and reading signed values can be performed with a bias. diff --git a/.cursor/rules/luau/function-coroutine-close.md b/.cursor/rules/luau/function-coroutine-close.md new file mode 100644 index 00000000..b9ffbf6f --- /dev/null +++ b/.cursor/rules/luau/function-coroutine-close.md @@ -0,0 +1,36 @@ +# coroutine.close + +**Status**: Implemented + +## Summary + +Add `coroutine.close` function from Lua 5.4 that takes a suspended coroutine and makes it "dead" (non-runnable). + +## Motivation + +When implementing various higher level objects on top of coroutines, such as promises, it can be useful to cancel the coroutine execution externally - when the caller is not +interested in getting the results anymore, execution can be aborted. Since coroutines don't provide a way to do that externally, this requires the framework to implement +cancellation on top of coroutines by keeping extra status/token and checking that token in all places where the coroutine is resumed. + +Since coroutine execution can be aborted with an error at any point, coroutines already implement support for "dead" status. If it were possible to externally transition a coroutine +to that status, it would be easier to implement cancellable promises on top of coroutines. + +## Design + +We implement Lua 5.4 behavior exactly with the exception of to-be-closed variables that we don't support. Quoting Lua 5.4 manual: + +> coroutine.close (co) +> Closes coroutine co, that is, puts the coroutine in a dead state. The given coroutine must be dead or suspended. In case of error (either the original error that stopped the coroutine or errors in closing methods), returns false plus the error object; otherwise returns true. + +The `co` argument must be a coroutine object (of type `thread`). + +After closing the coroutine, it gets transitioned to dead state which means that `coroutine.status` will return `"dead"` and attempts to resume the coroutine will fail. In addition, the coroutine stack (which can be accessed via `debug.traceback` or `debug.info`) will become empty. Calling `coroutine.close` on a closed coroutine will return `true` - after closing, the coroutine transitions into a "dead" state with no error information. + +## Drawbacks + +None known, as this function doesn't introduce any existing states to coroutines, and is similar to running the coroutine to completion/error. + +## Alternatives + +Lua's name for this function is likely in part motivated by to-be-closed variables that we don't support. As such, a more appropriate name could be `coroutine.cancel` which also +aligns with use cases better. However, since the semantics is otherwise the same, using the same name as Lua 5.4 reduces library fragmentation. diff --git a/.cursor/rules/luau/function-debug-info.md b/.cursor/rules/luau/function-debug-info.md new file mode 100644 index 00000000..396739aa --- /dev/null +++ b/.cursor/rules/luau/function-debug-info.md @@ -0,0 +1,109 @@ +# debug.info + +> Note: this RFC was adapted from an internal proposal that predates RFC process + +**Status**: Implemented + +## Summary + +Add `debug.info` as programmatic debug info access API, similarly to Lua's `debug.getinfo` + +## Motivation + +Today Luau provides only one method to get the callstack, `debug.traceback`. This method traverses the entire stack and returns a string containing the call stack details - with no guarantees about the format of the call stack. As a result, the string doesn't present a formal API and can't be parsed programmatically. + +There are a few cases where this can be inconvenient: + +- Sometimes it is useful to pass the resulting call stack to some system expecting a structured input, e.g. for crash aggregation +- Sometimes it is useful to use the information about the caller for logging or filtering purposes; in these cases using just the script name can be useful, and getting script name out of the traceback is slow and imprecise + +Additionally, in some cases instead of getting the information (such as script or function name) from the callstack, it can be useful to get it from a function object for diagnostic purposes. For example, maybe you want to call a callback and if it doesn't return expected results, display a user-friendly error message that contains the function name & script location - these aren't possible today at all. + +## Design + +The proposal is to expose a function from Lua standard library, `debug.getinfo`, to fix this problem - but change the function's signature for efficiency: + +> debug.info([thread], [function | level], options) -> any... + +(note that the function has been renamed to make it more obvious that the behavior differs from that of Lua) + +The parameters of the function match that of Lua's variant - the first argument is either a function object or a stack level (which is a number starting from 1, where 1 means "my caller"), or a thread (followed by the stack level), followed by a string that contains a list of things the result needs to contain: + + * s - function source identifier, in Roblox environment this is equal to the full name of the script the function is defined in + * l - line number that the function is defined on (when examining a function) or line number of the stack frame (when examining a stack frame) + * n - function name if present; this can be absent for anonymous functions or some C functions that don't have an assigned debug name + * a - function arity information, which refers to the parameter count and whether the function is variadic or not + * f - function object + +Unlike Lua version, which would use the options given to fill a resulting table (e.g. "l" would map to a "currentline" and "linedefined" fields of the output table), our version will return the requested information in the order that it was requested in in the string - all letters specified above map to one extra returned value, "a" maps to a pair of a parameter number and a boolean indicating variadic status. + +For example, here's how you implement a stack trace function: + +```luau + for i=1,100 do -- limit at 100 entries for very deep stacks + local source, name, line = debug.info(i, "snl") + if not source then break end + if line >= 0 then + print(string.format("%s(%d): %s", source, line, name or "anonymous")) + else + print(string.format("%s: %s", source, name or "anonymous")) + end + end +``` + +output: + +``` + cs.lua(3): stacktrace + cs.lua(17): bar + cs.lua(13): foo + [C]: pcall + cs.lua(20): anonymous +``` + +When the first argument is a number and the input level is out of bounds, the function returns no values. + +### Why the difference from Lua? + +Lua's variant of this function has the same string as an input and the same thread/function/level combo as arguments before that, but returns a table with the requested data - or nil, when stack is exhausted. + +The problem with this solution is performance. It results in generating excessive garbage by wrapping results in a table, which slows down the function call itself and generates extra garbage that needs to be collected later. This is not a problem for error handling scenarios, but can be an issue when logging is required; for example, `debug.info` with options containing a single result, "s" (mapping to source identifier aka script name), runs 3-4x slower when using a table variant with the current implementation of both functions in our VM. + +While the difference in behavior is unfortunate, note that Lua has a long-standing precedent of using characters in strings to define the set of inputs or outputs for functions; of particular note is string.unpack which closely tracks this proposal where input string characters tell the implementation what data to return. + +### Why not hardcode the options? + +One possibility is that we could return all data associated with the function or a stack frame as a tuple. + +This would work but has issues: + +1. Because of the tuple-like API, the code becomes more error prone and less self-descriptive. +2. Some data is more expensive to access than other data - by forcing all callers to process all possible data we regress in performance; this is also why the original Lua API has an options string + +To make sure we appropriately address 1, unlike Lua API in our API options string is mandatory to specify. + +### Sandboxing risk? + +Compared to information that you can already parse from traceback, the only extra data we expose is the function object. This is valuable when collecting stacks because retrieving the function object is faster than retrieving the associated source/name data - for example a very performant stack tracing implementation could collect data using "fl" (function and line number), and later when it comes the time to display the results, use `debug.info` again with "sn" to get script & name data from the object. + +This technically wasn't possible to get before - this means in particular that if your function is ever called by another function, a malicious script could grab that function object again and call it with different arguments. However given that it's already possible to mutate global environment of any function on the callstack using getfenv/setfenv, the extra risk presented here seems minimal. + +### Options delta from Lua + +Lua presents the following options in getinfo: + +* `n´ selects fields name and namewhat +* `f´ selects field func +* `S´ selects fields source, short_src, what, and linedefined +* `l´ selects field currentline +* `u´ selects field nup + +We chose to omit `namewhat` as it's not meaningful in our implementation, omit `what` as it's redundant wrt source/short_src for C functions, replace source/short_src with only a single option (`s`) to avoid leaking script source via callstack API, remove `u` because there are no use cases for knowing the number of upvalues without debug.getupvalue API, and add `a` which has been requested by Roact team before for complex backwards compatibility workarounds wrt passed callbacks. + +## Drawbacks + +Having a different way to query debug information from Lua requires language-specific dispatch for code that wants to work on Lua and Luau. + +## Alternatives + +We could expose `debug.getinfo` from Lua as is; the problem is that in addition to performance issues highlighted above, Luau implementation doesn't track the same data and as such can't provide a fully compatible implementation short of implementing a shim for the sake of compatibility - an option this proposal keeps open. diff --git a/.cursor/rules/luau/function-inlining.md b/.cursor/rules/luau/function-inlining.md new file mode 100644 index 00000000..54f52f95 --- /dev/null +++ b/.cursor/rules/luau/function-inlining.md @@ -0,0 +1,91 @@ +# No support for user inlining (yet) + +## Summary +Luau's bytecode compiler is smart about inlining functions. We would rather focus on improving this automation than risk the chance of its misuse. + +## Motivation + +Whether the goal is to improve instruction locality or perform context specific optimizations, function inlining can be a great resource for developers. At `-02` or higher, the compiler is able to automatically decide if functions ought to be inlined. In the currrent state of the language, inlining can only be guaranteed in Luau that is specially crafted to be inlinable, and we demonstrate why below. We argue that exposing this to users could do more harm than good. + +```luau +local function sum(lst: {number}) + return sumAcc(0, 1, lst) +end + +@inline +local function sumAcc(acc: number, i: number, lst: {number}) + return if i > #lst then acc else sumAcc(acc + lst[i], i + 1, lst) +end + +local s = sum({1, 2, 3}) +``` + +Consider this "inlined" recursive call. Inlining a recursive function would mean either the bytecode size is infinite, or the generated code is effectively the same as a loop a la tail call optimization. + +This section further explores common developer patterns that may adopt `@inline` in ways the compiler cannot handle. + +1. Exported a `table` +```luau +-- A.luau +local mod = {} + +@inline +function mod.foo(t) + print(t.foo) +end + +return mod -- no table.freeze + +-- B.luau +local A = require("./A") + +local mod = {} + +function mod.foo() + A.foo(mod) +end + +return table.freeze(mod) +``` + +This example exports a mutable table `mod` in module `A`. Module `B` imports this table and calls it within another function, but because the compiler tries to decide what implementation of this method should be called at runtime through the metatables, it is unable to guarantee that `A.foo()` has not been mutated somewhere between the boundaries of both modules making `mod.foo` not suitable for an inline. Even with a frozen table being exported by module `B`, its function foo could also be mutated before its return leading us back to the same issue. + +2. "OOP" code +```luau +local Account = {} +Account.__index = Account + +function Account.new(name) + return setmetatable({ name = name, balance = 0 }, Account) +end + +@inline +function Account:deposit(bal) + self.balance += bal +end +``` + +With Object Oriented Programming style code, this mutable resolution problem persists. In this code sample, we define a base `Account` class with a deposit method. However, if an instance of this object were made, say `DavesAccount`, it could go on to overload the deposit method making this another case not suitable for inlining. + + +3. Metamethods +```luau +local Vec3 = {} +Vec3.__index = Vec3 + +function Vec3.new(x, y, z) + return setmetatable({ x = x, y = y, z = z }, Vec3) +end + +@inline +function Vec3:__add(rhs) + return Vec3.new(self.x + rhs.x, self.y + rhs.y, self.z + rhs.z) +end +``` +In this example, we declare `Vec3` with an inlined `__add` (`+`) operator overload. To make this inlining work, we would need to be able to statically link the `+` to the `__add` metamethod. However, dynamic dispatch means we cannot make this guarantee, making this case not a candidate for inlining. + +## Drawbacks +The major drawback here is that this prevents developers the opportunity to fine-tune performance-critical optimizations, forcing them to rely on the compiler for fine-grained optimizations, even if their use case may call for it. Doing this assures us that developers have no control over raising the maximum cost of Luau programs, especially in the case where developers would chose to riddle their code base with inlines to make the code "faster". + +## Alternatives +Automatic function inlining in Luau is already very efficient. We suggest opening Github issues with code samples of legitimate cases that we can use to further improve the compiler's automatic (function inlining and unrolling) optimizations. [File a Github issue](https://github.com/luau-lang/luau/issues/new?assignees=&labels=bug&projects=&template=bug_report.md&title=Inlining%20Support) \ No newline at end of file diff --git a/.cursor/rules/luau/function-math-lerp.md b/.cursor/rules/luau/function-math-lerp.md new file mode 100644 index 00000000..749d3e45 --- /dev/null +++ b/.cursor/rules/luau/function-math-lerp.md @@ -0,0 +1,106 @@ +# math.lerp + +**Status**: Implemented + +## Summary + +Add a `lerp` function to the `math` library, which performs linear interpolation between two numbers. + +## Motivation + +Linear interpolation is a very common operation in game development. It is present in standard libraries of some general purpose languages (C++, C#, Zig) and all shading languages (HLSL, GLSL, Slang). It can be used for implementing object motion, GUI sliders, color transitions, gameplay logic, etc. + +Implementation of linear interpolation seems straightforward, but not all implementations have various numerical properties that can be important in practice. As such, a naive manual implementation may lead to unintended results. +Using `math.map` as a replacement with bounds 0..1 seems easy, but it results in worse performance and numerical properties compared to a specialized function, and is less intuitive than `lerp`. In presence of `math.map` and absence of `math.lerp`, users may gravitate towards the slower, numerically worse and less ergonomic solution. + +A native function would help boost ergonomics and provide a good quality-performance tradeoff by default. + +## Design + +A new function, `math.lerp`, will be added and will act equivalently to the following user-defined function: + +```luau +function math.lerp(a: number, b: number, t: number): number + return if t == 1 then b else a + (b - a) * t +end +``` + +Just like common Luau implementations, `t` is allowed to be outside the input range. Since clamped mapping is not as widely used and can be easily replicated using `math.clamp`, it would not be supported out of the box. + +Similarly, `a` and `b` range is allowed to be reversed; the behavior of suggested implementation is intuitive on a reversed range, and enforcing the additional restriction `a <= b` will reduce performance and limit use cases. + +The next section will explain the rationale for choosing the proposed implementation. + +## Rationale + +In addition to performance, interpolation functions can be evaluated using a set of criteria: + +- exactness: `lerp(0) = a`, `lerp(1) = b` +- monotonicity: `lerp(t1) >= lerp(t2)` for `t1 >= t2` +- determinacy: `lerp(a, b, t)` is NaN only if `t` is infinite or `a`/`b`/`t` are NaN +- boundedness: `lerp(t)` is in `[a, b]` interval for any `t` in `[0, 1]` +- consistency: `lerp(x, x, t) == x` for all `t` + +Some applications may require some of these properties but not others. Enforcing all of these properties is expensive, with the most difficult property being determinacy, as many pairs of `b` and `a` of opposite signs will overflow the `b-a` computation. [C++ std::lerp](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0811r3.html) uses a different formula to handle interpolation for `a` and `b` of different signs. + +In practice, exactness can be crucial for some applications as in common use cases, such as interpolating an object's motion from A to B, not reaching the exact final position may result in not triggering conditions based on comparing the result. Boundedness may be important when the result of `lerp` is an input to another function; for example, reverse trigonometric functions like `math.acos` will produce NaN for out of range inputs. Consistency can be valuable to avoid sub-pixel jitter in cases where the object is supposed to stay in place during an animation sequence where the position is being interpolated between two equal points. Similarly, monotonicity can be valuable to avoid sub-pixel jitter in reverse direction of motion in case the object is interpolated between two points. + +Thus, ideally we would like to find a function that is exact, monotonic, bounded and consistent; and, of course, enforcing these properties should come at the minimum performance cost. + +The following commonly encountered formulas have been evaluated for numerical properties, using a combination of numerical reasoning, exhaustive searches and randomized fuzzing. The analysis has been performed for 32-bit floats; it should hold for 64-bit floats as well. Monotonicity is only checked in the `[0, 1]` interval; we also assume `a <= b` for the sake of this analysis. + +```c++ +// exactness 0, monotonicity 1, determinacy 0, boundedness 0, consistency 1 +return a + (b - a) * t; + +// exactness 1, monotonicity 0, determinacy 1, boundedness 0, consistency 0 +return a * (1 - t) + b * t; + +// exactness 1, monotonicity 1, determinacy 0, boundedness 1, consistency 1 +return t == 1 ? b : a + (b - a) * t; + +// exactness 1, monotonicity 1, determinacy 0, boundedness 1, consistency 1 +return t < 0.5f ? a + (b - a) * t : b + (b - a) * (t - 1); + +// exactness 1, monotonicity 0, determinacy 1, boundedness 0, consistency 1 +return a == b ? a : a * (1 - t) + b * t; +``` + +The only two functions that seemingly satisfy our 4 (of 5) desired criteria are the implementation proposed in the design section, and another version that switches behavior around `t=0.5`. Both do not guarantee determinacy due to potential overflow in `b - a`, but seem to guarantee (empirically or provably) other properties for `a <= b` and `0 <= t <= 1`. + +While switching direction around `t=0.5` can increase precision in certain cases, it is also noticeably slower: a branchless implementation requires 6/9 instructions on A64/X64 (absent `fma`) for the proposed implementation, and 9/16 instructions for the last variant of the lerp. The standard implementation should strike the best balance between correctness and performance, and the `t == 1` variant seems to fit the bill. + +Our proposed implementation is trivially exact and consistent due to floating-point properties. Due to floating-point properties, it is monotonic with one possible exception of values around 1. Specifically, it's unclear what the relation is between: + +- `a + (b - a) * (1-ulp)` +- `b` +- `a + (b - a) * (1+ulp)` + +Due to monotonicity property, `a + (b - a) * (1-ulp) <= a + (b - a)`; due to floating point arithmetical properties, `a + (b - a)` should be at most within 1ulp from `b` if `b >= a >= 0`. Empirically, there are cases where it's `b-ulp`, `b` and `b+ulp`, depending on values of `a` and `b`. While it *seems* that our adjustment of the output for `t == 1` can't break monotonicity as it seems impossible that `a + (b - a) * (1-ulp)` is greater than `b`, or that `a + (b - a) * (1+ulp)` is less than `b`, this property has not been formally proven. As such, there's a risk that our implementation is not fully monotonic. C++ `std::lerp` includes a statement "monotonic except near t=1", and, for `a < b`, clamps the result of the lerp to ensure it's correctly ordered with respect to `b`. + +Since the fuzzer has not been able to find a counter-example for our implementation, we assume that either this property does hold or, if it doesn't, the counter-examples are extremely rare. It is likely that the claim C++ makes requires non-default rounding direction; the evaluation has been performed with round-to-nearest, which is the default on all platforms Luau targets. Additionally, the tests from Microsoft STL implementation have been validated against this implementation (the only test on finite numbers that fails compares the sign of the returned zero, which our implementation does not make promises about). The final analysis also involved running the fuzzer with both `float` and `double` inputs for 10 hours using 10 cores each and found no counterexamples where monotonicity is broken, evaluating ~300B triples for each type. Reverse ranges (`a > b`) were also lightly tested for monotonicity in the same 10 hour period on 1 core and found no issues either over ~75B triples. + +In the event monotonicity is indeed somehow broken around 1, the author still considers the `lerp` function described above practically useful and a good balance between performance and correctness. + +> Note: the evaluation and analysis has been performed without fma; while it *probably* holds when `+` and `*` are fused, that has not been established. + +Additional references: + +- [C++ proposal for std::lerp](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0811r3.html) +- [Rust discussion of fNN::lerp](https://github.com/rust-lang/rust/issues/86269) +- [StackOverflow discussion of lerp implementations](https://math.stackexchange.com/questions/907327/accurate-floating-point-linear-interpolation) +- [lerpfuzz.cpp used for analysis + tests](https://gist.github.com/zeux/ea70d4574a50cc819e5f02b6d7ebb1f2) + +## Drawbacks + +This adds yet another function to the standard library. + +The implementation does not guarantee all possible properties of a `lerp` function, and represents a balance between performance and numerical quality; in specific applications, different properties may be required to reach a different set of tradeoffs. + +## Alternatives + +Not doing anything and letting people continue writing their own lerping functions. + +Implementing the "perfect" `lerp` function from C++ standard (significantly slower, but guarantees determinacy), or the "lazy" `lerp` function from shading languages (no guarantees, maximum performance). + +Choosing an idiosyncratic name (`mix`) or argument order (`t, a, b`). diff --git a/.cursor/rules/luau/function-math-map.md b/.cursor/rules/luau/function-math-map.md new file mode 100644 index 00000000..8bb275b8 --- /dev/null +++ b/.cursor/rules/luau/function-math-map.md @@ -0,0 +1,37 @@ +# math.map + +**Status**: Implemented + +## Summary + +Add a `map` function to the `math` library, which maps a number from one range to another. + +## Motivation + +Numerical mapping is a very common operation within game development. With only a brief search of the CoreScript source on the Roblox Client Tracker, there are about [three](https://github.com/MaximumADHD/Roblox-Client-Tracker/blob/9add9114d12e24cf08fa5680dbc95ace2af5c981/scripts/CoreScripts/Modules/PlayerList/Components/PresentationMobile/PlayerListApp.lua#L51) [different](https://github.com/MaximumADHD/Roblox-Client-Tracker/blob/9add9114d12e24cf08fa5680dbc95ace2af5c981/scripts/PlayerScripts/StarterPlayerScriptsCommon/RbxCharacterSounds.lua#L55) [implementations](https://github.com/MaximumADHD/Roblox-Client-Tracker/blob/9add9114d12e24cf08fa5680dbc95ace2af5c981/scripts/PlayerScripts/StarterPlayerScripts/PlayerModule.module/CameraModule/CameraUtils.lua#L53) of this function, each having about five to ten uses per context. + +A native function would help boost ergonomics and provide potential performance benefits in these cases. + +## Design + +A new function, `math.map`, will be added and will act equivalently to the following user-defined function. + +```luau +function math.map(x: number, inmin: number, inmax: number, outmin: number, outmax: number): number + return outmin + (x - inmin) * (outmax - outmin) / (inmax - inmin) +end +``` + +Just like common Luau implementations, `x` is allowed to be outside the input range. Since clamped mapping is not as widely used and can be easily replicated using `math.clamp`, it would not be supported. + +## Drawbacks + +This adds yet another function to the standard library. + +The function may also not provide enough performance improvements to warrant its addition, so implementations of this should be benchmarked. + +## Alternatives + +Not doing anything and letting people continue writing their own mapping functions. This would keep the same problems as before. + +If the use of clamped mapping turns out to be more widespread, then adding an optional sixth argument to enable clamping could be considered. Not doing this may lead to the same problem of people writing their own implementations as before. diff --git a/.cursor/rules/luau/function-string-pack-unpack.md b/.cursor/rules/luau/function-string-pack-unpack.md new file mode 100644 index 00000000..42039fc1 --- /dev/null +++ b/.cursor/rules/luau/function-string-pack-unpack.md @@ -0,0 +1,71 @@ +# string.pack/unpack/packsize from Lua 5.3 + +> Note: this RFC was adapted from an internal proposal that predates RFC process + +**Status**: Implemented + +## Summary + +Add string pack/unpack from Lua 5.3 for binary interop, with small tweaks to format specification to make format strings portable. + +## Motivation + +While the dominant usecase for Luau is a game programming language, for backend work it's sometimes the case that developers need to work with formats defined outside of Roblox. When these are structured as JSON, it's easy, but if they are binary, it's not. Additionally for the game programming, often developers end up optimizing their data transmission using custom binary codecs where they know the range of the data (e.g. it's much more efficient to send a number using 1 byte if you know the number is between 0 and 1 and 8 bits is enough, but RemoteEvent/etc won't do it for you because it guarantees lossless roundtrip). For both working with external data and optimizing data transfer, it would be nice to have a way to work with binary data. + +This is doable in Luau using `string.byte`/`string.char`/`bit32` library/etc. but tends to be a bit cumbersome. Lua 5.3 provides functions `string.pack`/`string.unpack`/`string.packsize` that, while not solving 100% of the problems, often make working with binary much easier and much faster. This proposal suggests adding them to Luau - this will both further our goal to be reasonably compatible with latest Lua versions, and make it easier for developers to write some types of code. + +## Design + +Concretely, this proposal suggests adding the following functions: + +``` +string.pack (fmt, v1, v2, ···) +``` + +Returns a binary string containing the values v1, v2, etc. packed (that is, serialized in binary form) according to the format string fmt. + +``` +string.packsize (fmt) +``` + +Returns the size of a string resulting from string.pack with the given format. The format string cannot have the variable-length options 's' or 'z'. + +``` +string.unpack (fmt, s [, pos]) +``` + +Returns the values packed in string s (see string.pack) according to the format string fmt. An optional pos marks where to start reading in s (default is 1). After the read values, this function also returns the index of the first unread byte in s. + +The format string is a sequence of characters that define the data layout that is described here in full: https://www.lua.org/manual/5.3/manual.html#6.4.2. We will adopt this wholesale, but we will guarantee that the resulting code is cross-platform by: + +a) Ensuring native endian is little endian (de-facto true for all our platforms) +b) Fixing sizes of native formats to 2b short, 4b int, 8b long +c) Treating `size_t` in context of `T` and `s` formats as a 32-bit integer + +Of course, the functions are memory-safe; if the input string is too short to provide all relevant data they will fail with "data string is too short" error. + +This may seem slightly unconventional but it's very powerful and expressive, in much the same way format strings and regular expressions are :) Here's a basic example of how you might transmit a 3-component vector with this: + +```luau +-- returns a 24-byte string with 64-bit double encoded three times, similar to how we'd replicate 3 raw numbers +string.pack("ddd", x, y, z) + +-- returns a 12-byte string with 32-bit float encoded three times, similar to how we'd replicate Vector3 +string.pack("fff", x, y, z) + +-- returns a 3-byte string with each value stored in 8 bits +-- assumes -1..1 range; this code doesn't round the right way because I'm too lazy +string.pack("bbb", x * 127, y * 127, z * 127) +``` + +The unpacking of the data is symmetrical - using the same format string and `string.unpack` you get the encoded data back. + +## Drawbacks + +The format specification is somewhat arbitrary and is likely to be unfamiliar to people who come with prior experience in other languages (having said that, this feature closely follows equivalent functionality from Ruby). + +The implementation of string pack/unpack requires yet another format string matcher, which increases complexity of the builtin libraries and static analysis (since we need to provide linting for another format string syntax). + +## Alternatives + +We could force developers to rely on existing functionality for string packing; it is possible to replicate this proposal in a library, although at a much reduced performance. diff --git a/.cursor/rules/luau/function-table-clear.md b/.cursor/rules/luau/function-table-clear.md new file mode 100644 index 00000000..92279928 --- /dev/null +++ b/.cursor/rules/luau/function-table-clear.md @@ -0,0 +1,21 @@ +# table.clear + +> Note: this RFC was adapted from an internal proposal that predates RFC process and as such doesn't follow the template precisely + +**Status**: Implemented + +## Summary + +Add `table.clear` function that removes all elements from the table but keeps internal capacity allocated. + +## Design + +`table.clear` adds a fast way to clear a Lua table. This is effectively a sister function to `table.create()`, only for reclaiming an existing table's memory rather than pre-allocating a new one. Use cases: + +* Often you want to recalculate a set or map data structure based on a table. Currently there is no good way to do this, the fastest way is simply to throw away the old table and construct a new empty one to work with. This is wasteful since often the new structure will take a similar amount of memory to the old one. + +* Sometimes you have a shared table which multiple scripts access. In order to clear this kind of table, you have no other option than to use a slow for loop setting each index to nil. + +These use cases can technically be accomplished via `table.move` moving from an empty table to the table which is to be edited, but I feel that they are frequent enough to warrant a clearer more understandable method which has an opportunity to be more efficient. + +Like `table.move`, does not invoke any metamethods. Not that it would anyways, given that assigning nil to an index never invokes a metamethod. diff --git a/.cursor/rules/luau/function-table-clone.md b/.cursor/rules/luau/function-table-clone.md new file mode 100644 index 00000000..e6ff47cb --- /dev/null +++ b/.cursor/rules/luau/function-table-clone.md @@ -0,0 +1,66 @@ +# table.clone + +**Status**: Implemented + +## Summary + +Add `table.clone` function that, given a table, produces a copy of that table with the same keys/values/metatable. + +## Motivation + +There are multiple cases today when cloning tables is a useful operation. + +- When working with tables as data containers, some algorithms may require modifying the table that can't be done in place for some reason. +- When working with tables as objects, it can be useful to obtain an identical copy of the object for further modification, preserving the metatable. +- When working with immutable data structures, any modification needs to clone some parts of the data structure to produce a new version of the object. + +While it's possible to implement this function in user code today, it's impossible to implement it with maximum efficiency; furthermore, cloning is a reasonably fundamental +operation so from the ergonomics perspective it can be expected to be provided by the standard library. + +## Design + +`table.clone(t)` takes a table, `t`, and returns a new table that: + +- has the same metatable +- has the same keys and values +- is not frozen, even if `t` was + +The copy is shallow: implementing a deep recursive copy automatically is challenging (for similar reasons why we decided to avoid this in `table.freeze`), and often only certain keys need to be cloned recursively which can be done after the initial clone. + +The table can be modified after cloning; as such, functions that compute a slightly modified copy of the table can be easily built on top of `table.clone`. + +`table.clone(t)` is functionally equivalent to the following code, but it's more ergonomic (on the account of being built-in) and significantly faster: + +```luau +assert(type(t) == "table") +local nt = {} +for k,v in pairs(t) do + nt[k] = v +end +if type(getmetatable(t)) == "table" then + setmetatable(nt, getmetatable(t)) +end +``` + +The reason why `table.clone` can be dramatically more efficient is that it can directly copy the internal structure, preserving capacity and exact key order, and is thus +limited purely by memory bandwidth. In comparison, the code above can't predict the table size ahead of time, has to recreate the internal table structure one key at a time, +and bears the interpreter overhead (which can be avoided for numeric keys with `table.move` but that doesn't work for the general case of dictionaries). + +Out of the abundance of caution, `table.clone` will fail to clone the table if it has a protected metatable. This is motivated by the fact that you can't do this today, so +there are no new potential vectors to escape various sandboxes. Superficially it seems like it's probably reasonable to allow cloning tables with protected metatables, but +there may be cases where code manufactures tables with unique protected metatables expecting 1-1 relationship and cloning would break that, so for now this RFC proposes a more +conservative route. We are likely to relax this restriction in the future. + +## Drawbacks + +Adding a new function to `table` library theoretically increases complexity. In practice though, we already effectively implement `table.clone` internally for some VM optimizations, so exposing this to the users bears no cost. + +Assigning a type to this function is a little difficult if we want to enforce the "argument must be a table" constraint. It's likely that we'll need to type this as `table.clone(T): T` for the time being, which is less precise. + +## Alternatives + +We can implement something similar to `Object.assign` from JavaScript instead, that simultaneously assigns extra keys. However, this won't be fundamentally more efficient than +assigning the keys afterwards, and can be implemented in user space. Additionally, we can later extend `clone` with an extra argument if we so choose, so this proposal is the +minimal viable one. + +We can immediately remove the rule wrt protected metatables, as it's not clear that it's actually problematic to be able to clone tables with protected metatables. diff --git a/.cursor/rules/luau/function-table-create-find.md b/.cursor/rules/luau/function-table-create-find.md new file mode 100644 index 00000000..52ad6a55 --- /dev/null +++ b/.cursor/rules/luau/function-table-create-find.md @@ -0,0 +1,28 @@ +# table.create and table.find + +> Note: this RFC was adapted from an internal proposal that predates RFC process and as such doesn't follow the template precisely + +**Status**: Implemented + +## Design + +This proposal suggests adding two new builtin table functions: + +`table.create(count, value)`: Creates an array with count values, initialized to value. This can be useful to preallocate large tables - repeatedly appending an element to the table repeatedly reallocates it. count is converted to an integer using standard conversion/coercion rules (strings are converted to doubles, doubles are converted to integers using truncation). Negative counts result in the function failing. Positive counts that are too large and would cause a heap allocation error also result in function failing. When value is nil or omitted, table is preallocated without storing anything in it - this is roughly equivalent to creating a large table literal filled with `nil`, or preallocating a table by assigning a sufficiently large numeric index to a value and then erasing it by reassigning it to nil. + +`table.find(table, value [, init])`: Looks for value in the array part of the table; returns index of first occurrence or nil if value is not found. Comparison is performed using standard equality (non-raw) to make sure that objects like Vector3 etc. can be found. The first nil value in the array part of the table terminates the traversal. init is an optional numeric index where the search starts and it defaults to 1; this can be useful to go through repeat occurrences. + +`table.create` can not be replicated efficiently in Lua at all; `table.find` is provided as a faster and more convenient option compared to the code above. + +`table.find` is roughly equivalent to the following code modulo semantical oddities with #t and performance: + +```luau +function find(table, value, init) + for i=init or 1, #table do + if rawget(table, i) == value then + return i + end + end + return nil +end +``` diff --git a/.cursor/rules/luau/function-table-freeze.md b/.cursor/rules/luau/function-table-freeze.md new file mode 100644 index 00000000..ca819882 --- /dev/null +++ b/.cursor/rules/luau/function-table-freeze.md @@ -0,0 +1,55 @@ +# table.freeze + +> Note: this RFC was adapted from an internal proposal that predates RFC process + +**Status**: Implemented + +## Summary + +Add `table.freeze` which allows to make a table read-only in a shallow way. + +## Motivation + +Lua tables by default are freely modifiable in every possible way: you can add new fields, change values for existing fields, or set or unset the metatable. + +Today it is possible to customize the behavior for *adding* new fields by setting a metatable that overrides `__newindex` (including setting `__newindex` to a function that always errors to prohibit additions of new fields). + +Today it is also possible to customize the behavior of setmetatable by "locking" the metatable - this can be achieved by setting a meta-index `__metatable` to something, which would block setmetatable from functioning and force metatable to return the provided value. With this it's possible to prohibit customizations of a table's behavior, but existing fields can still be assigned to. + +To make an existing table read-only, one needs to combine these mechanisms, by creating a new table with a locked metatable, which has an `__index` function pointing to the old table. However, this results in iteration and length operator not working on the resulting table, and carries a performance cost - both for creating the table, and for repeated property access. + +## Design + +This proposal proposes formalizing the notion of "read-only" tables by providing two new table functions: + +- `table.freeze(t)`: given a non-frozen table t, freezes it; fails when t is not a table or is already frozen. Returns t. +- `table.isfrozen(t)`: given a table t, returns a boolean indicating the frozen status; fails when t is not a table. + +When a table is frozen, the following is true: + +- Attempts to modify the existing keys of the table fail (regardless of how they are performed - via table assignments, rawset, or any other methods like table.sort) +- Attempts to add new keys to the table fail, unless `__newindex` is defined on the metatable (in which case the assignment is routed through `__newindex` as usual) +- Attempts to change the metatable of the table fail +- Reading the table fields or iterating through the table proceeds as usual + +This feature is useful for two reasons: + +a) It allows an easier way to expose sandboxed objects that aren't possible to monkey-patch for security reasons. We actually already have support for freezing and use it internally on various builtin tables like `math`, we just don't expose it to Lua. + +b) It allows an easier way to expose immutable objects for consistency/correctness reasons. For example, Cryo library provides an implementation of immutable data structures; with this functionality, it's possible to implement a lighter-weight library by, for example, extending a table with methods to return mutated versions of the table, but retaining the usual table interface + +To limit the use of `table.freeze` to cases when table contents can be freely manipulated, `table.freeze` shall fail when the table has a locked metatable (but will succeed if the metatable isn't locked). + +## Drawbacks + +Exposing the internal "readonly" feature may have an impact on interoperability between scripts - for example, it becomes possible to freeze some tables that scripts may be expecting to have write access to from other scripts. Since we don't provide a way to unfreeze tables and freezing a table with a locked metatable fails, in theory the impact should not be any worse than allowing to change a metatable, but the full extents are unclear. + +There may be existing code in the VM that allows changing frozen tables in ways that are benign to the current sandboxing code, but expose a "gap" in the implementation that becomes significant with this feature; thus we would need to audit all table writes when implementing this. + +## Alternatives + +We've considered exposing a recursive freeze. The correct generic implementation is challenging since it requires supporting infinitely nested tables when working on the C stack (or a stackless implementation that requires heap allocation); also, to handle self-recursive tables requires a separate temporary tracking table since stopping the traversal at frozen sub-tables is insufficient as their children may not have been frozen. As such, we leave recursive implementation to user code. + +We've considered exposing thawing. The problem with this is that freezing is required for sandboxing, and as such we'd need to support "permafrozen" status that is separate from "frozen". This complicates implementation and we didn't find compelling use cases for thawing - if it becomes necessary we can always expose it separately. + +We've considered calling this "locking", but the term has connotations coming from multithreading that aren't applicable here, and in absence of unlocking, "locking" makes a bit less sense. diff --git a/.cursor/rules/luau/function-vector-lerp.md b/.cursor/rules/luau/function-vector-lerp.md new file mode 100644 index 00000000..9dbea83f --- /dev/null +++ b/.cursor/rules/luau/function-vector-lerp.md @@ -0,0 +1,35 @@ + +# vector.lerp + +**Status**: Implemented + +## Summary +Add the function `vector.lerp` to the vector library, which performs linear interpolation between two vectors and is a direct parallel to [`math.lerp`](https://rfcs.luau.org/function-math-lerp.html). + +## Motivation +Linear interpolation is just as common of an operation with vector math as it is with scalars. For example, Roblox provides a [`Vector3:Lerp(goal, alpha)`](https://create.roblox.com/docs/reference/engine/datatypes/Vector3#Lerp) method for their vector implementation. + +Having a built-in library function for linearly interpolating vectors would help facilitate portability, ergonomic and performance improvements to vector math just like `math.lerp`. + +## Design +The function `vector.lerp` will be added to the vector library that behaves similar to the following user-defined function: + +```luau +function vector.lerp(a: vector, b: vector, t: number): vector + return if t == 1 then b else a + (b - a) * t +end +``` + +This implementation mirrors the one for `math.lerp` and inherits the same mathematical properties of exactness, monotonicity, boundedness and consistency. It also supports 4-wide vector mode. + +## Drawbacks +This adds another library function, and most likely would require another fast-call slot for any meaningful performance gain in an interpreted runtime. + +The implementation of `Vector3:Lerp(goal, alpha)` in Roblox does not have the same guarantees of its numerical properties, i.e. it is not exact or deterministic. This may cause confusion because the two won't behave or return the exact same results for certain cases. + +## Alternatives +Do nothing and leave people to write their own implementations. This forgoes any portability, ergonomic and performance opportunities, especially in cases where a numerically correct implementation is preferred and the context cannot take advantage of native codegen. + +Instead of a scalar `t` argument, the function could be fully vectorized and take in a vector for the alpha. While theoretically useful, most use-cases only require a scalar alpha, and the concerns for performance and numerical correctness of a fully vectorized implementation outweigh its usefulness. + +A different set of correctness tradeoffs could be chosen such as guaranteeing determinacy. This would come at the cost of performance and make `vector.lerp` inconsistent with `math.lerp`. diff --git a/.cursor/rules/luau/generalized-iteration.md b/.cursor/rules/luau/generalized-iteration.md new file mode 100644 index 00000000..e89c4f6c --- /dev/null +++ b/.cursor/rules/luau/generalized-iteration.md @@ -0,0 +1,126 @@ +# Generalized iteration + +**Status**: Implemented + +## Summary + +Introduce support for iterating over tables without using `pairs`/`ipairs` as well as a generic customization point for iteration via `__iter` metamethod. + +## Motivation + +Today there are many different ways to iterate through various containers that are syntactically incompatible. + +To iterate over arrays, you need to use `ipairs`: `for i, v in ipairs(t) do`. The traversal goes over a sequence `1..k` of numeric keys until `t[k] == nil`, preserving order. + +To iterate over dictionaries, you need to use `pairs`: `for k, v in pairs(t) do`. The traversal goes over all keys, numeric and otherwise, but doesn't guarantee an order; when iterating over arrays this may happen to work but is not guaranteed to work, as it depends on how keys are distributed between array and hash portion. + +To iterate over custom objects, whether they are represented as tables (user-specified) or userdata (host-specified), you need to expose special iteration methods, for example `for k, v in obj:Iterator() do`. + +All of these rely on the standard Lua iteration protocol, but it's impossible to trigger them in a generic fashion. Additionally, you *must* use one of `pairs`/`ipairs`/`next` to iterate over tables, which is easy to forget - a naive `for k, v in tab do` doesn't work and produces a hard-to-understand error `attempt to call a table value`. + +This proposal solves all of these by providing a way to implement uniform iteration with self-iterating objects by allowing to iterate over objects and tables directly via convenient `for k, v in obj do` syntax, and specifies the default iteration behavior for tables, thus mostly rendering `pairs`/`ipairs` obsolete - making Luau easier to use and teach. + +## Design + +In Lua, `for vars in iter do` has the following semantics (otherwise known as the iteration protocol): `iter` is expanded into three variables, `gen`, `state` and `index` (using `nil` if `iter` evaluates to fewer than 3 results); after this the loop is converted to the following pseudocode: + +```luau +while true do + vars... = gen(state, index) + index = vars... -- copy the first variable into the index + if index == nil then break end + + -- loop body goes here +end +``` + +This is a general mechanism that can support iteration through many containers, especially if `gen` is allowed to mutate state. Importantly, the *first* returned variable (which is exposed to the user) is used to continue the process on the next iteration - this can be limiting because it may require `gen` or `state` to carry extra internal iteration data for efficiency. To work around this for table iteration to avoid repeated calls to `next`, Luau compiler produces a special instruction sequence that recognizes `pairs`/`ipairs` iterators and stores the iteration index separately. + +Thus, today the loop `for k, v in tab do` effectively executes `k, v = tab()` on the first iteration, which is why it yields `attempt to call a table value`. If the object defines `__call` metamethod then it can act as a self-iterating method, but this is not idiomatic, not efficient and not pure/clean. + +This proposal comes in two parts: general support for `__iter` metamethod and default implementation for tables without one. With both of these in place, there's going to be a single, idiomatic, general and performant way to iterate through the object of any type: + +```luau +for k, v in obj do +... +end +``` + +### __iter + +To support self-iterating objects, we modify the iteration protocol as follows: instead of simply expanding the result of expression `iter` into three variables (`gen`, `state` and `index`), we check if the first result has an `__iter` metamethod (which can be the case if it's a table, userdata or another composite object (e.g. a record in the future). If it does, the metamethod is called with `gen` as the first argument, and the returned three values replace `gen`/`state`/`index`. This happens *before* the loop: + +```luau +local genmt = rawgetmetatable(gen) -- pseudo code for getmetatable that bypasses __metatable +local iterf = genmt and rawget(genmt, "__iter") +if iterf then + gen, state, index = iterf(gen) +end +``` + +This check is comparatively trivial: usually `gen` is a function, and functions don't have metatables; as such we can simply check the type of `gen` and if it's a table/userdata, we can check if it has a metamethod `__iter`. Due to tag-method cache, this check is also very cheap if the metamethod is absent. + +This allows objects to provide a custom function that guides the iteration. Since the function is called once, it is easy to reuse other functions in the implementation, for example here's a node object that exposes iteration through its children: + +```luau +local Node = {} +Node.__index = Node + +function Node.new(children) + return setmetatable({ children = children }, Node) +end + +function Node:__iter() + return next, self.children +end +``` + +Luau compiler already emits a bytecode instruction, FORGPREP*, to perform initial loop setup - this is where we can evaluate `__iter` as well. + +Naturally, this means that if the table has `__iter` metamethod and you need to iterate through the table fields instead of using the provided metamethod, you can't rely on the general iteration scheme and need to use `pairs`. This is similar to other parts of the language, like `t[k]` vs `rawget(t, 'k')`, where the default behavior is overrideable but a library function can help peek behind the curtain. + +### Default table iteration + +If the argument is a table and it does not implement `__iter` metamethod, we treat this as an attempt to iterate through the table using the builtin iteration order. + +> Note: we also check if the table implements `__call`; if it does, we fall back to the default handling. We may be able to remove this check in the future, but we will need this initially to preserve backwards compatibility with custom table-driven iterator objects that implement `__call`. In either case, we will be able to collect detailed analytics about the use of `__call` in iteration, and if neither is present we can emit a specialized error message such as `object X is not iteratable`. + +To have a single, unified, iteration scheme over tables regardless of whether they are arrays or dictionaries, we establish the following semantics: + +- First, the traversal goes over numeric keys in range `1..k` up until reaching the first `k` such that `t[k] == nil` +- Then, the traversal goes over the remaining keys (with non-nil values), numeric and otherwise, in unspecified order. + +For arrays with gaps, this iterates until the first gap in order, and the remaining order is not specified. + +> Note: This behavior is similar to what `pairs` happens to provide today, but `pairs` doesn't give any guarantees, and it doesn't always provide this behavior in practice. + +To ensure that this traversal is performant, the actual implementation of the traversal involves going over the array part (in index order) and then over the hash part (in hash order). For that implementation to satisfy the criteria above, we need to make two additional changes to table insertion/rehash: + +- When inserting key `k` in the table when `k == t->sizearray + 1`, we force the table to rehash (resize its array portion). Today this is only performed if the hash portion is full, as such sometimes numeric keys can end up in the hash part. +- When rehashing the table, we ensure that the hash part doesn't contain the key `newsizearray + 1`. This requires checking if the table has this key, which may require an additional hash lookup but we only need to do this in rare cases based on the analysis of power-of-two key buckets that we already collect during rehash. + +These changes guarantee that the order observed via standard traversal with `next`/`pairs` matches the guarantee above, which is nice because it means we can minimize the complexity cost of this change by reusing the traversal code, including VM optimizations. They also mean that the array boundary (aka `#t`) can *always* be computed from just the array portion, which simplifies the table length computation and may slightly speed it up. + +## Drawbacks + +This makes `for` desugaring and implementation a little more complicated; it's not a large complexity factor in Luau because we already have special handling for `for` loops in the VM, but it's something to keep in mind. + +While the proposed iteration scheme should be a superset to both `pairs` and `ipairs` for tables, for arrays `ipairs` may in some cases be faster because it stops at the first `nil`, whereas the proposed new scheme (like `pairs`) needs to iterate through the rest of the table's array storage. This may be fixable in the future, if we replace our cached table length (`aboundary`) with Lua 5.4's `alimit`, which maintains the invariant that all values after `alimit` in the array are `nil`. This would make default table iteration maximally performant as well as help us accelerate GC in some cases, but will require extra checks during table assignments which is a cost we may not be willing to pay. Thus it is theoretically possible that we will end up with `ipairs` being a slightly faster equivalent for array iteration forever. + +The resulting iteration behavior, while powerful, increases the divergence between Luau and Lua, making more programs that are written for Luau not runnable in Lua. Luau language in general does not consider this type of compatibility essential, but this is noted for posterity. + +The changes in insertion behavior that facilitate single iteration order may have a small cost; that said, they are currently understood to belong to paths that are already slow and the added cost is minimal. + +The extra semantics will make inferring the types of the variables in a for loop more difficult - if we know the type of the expression that is being iterated through it probably is not a problem though. + +## Alternatives + +Other major designs have been considered. + +A minor variation of the proposal involves having `__iter` be called on every iteration instead of at loop startup, effectively having `__iter` work as an alternative to `__call`. The issue with this variant is that while it's a little simpler to specify and implement, it restricts the options when implementing custom iteratable objects, because it would be difficult for iteratable objects to store custom iteration state elsewhere since `__iter` method would effectively need to be pure, as it can't modify the object itself as more than one concurrent iteration needs to be supported. + +A major variation of the proposal involves instead supporting `__pairs` from Lua 5.2. The issue with this variant is that it still requires the use of a library method, `pairs`, to work, which doesn't make the language simpler as far as table iteration, which is the 95% case, is concerned. Additionally, with some rare exceptions metamethods today extend the *language* behavior, not the *library* behavior, and extending extra library functions with metamethods does not seem true to the core of the language. Finally, this only works if the user uses `pairs` to iterate and doesn't work with `ipairs`/`next`. + +Another variation involves using a new pseudo-keyword, `foreach`, instead of overloading existing `for`, and only using the new `__iter` semantics there. This can more cleanly separate behavior, requiring the object to have an `__iter` metamethod (or be a table) in `foreach` - which also avoids having to deal with `__call` - but it also requires teaching the users a new keyword which fragments the iteration space a little bit more. Compared to that, the main proposal doesn't introduce new divergent syntax, and merely tweaks existing behavior to be more general, thus making an existing construct easier to use. + +Finally, the author also considered and rejected extending the iteration protocol as part of this change. One problem with the current protocol is that the iterator requires an allocation (per loop execution) to keep extra state that isn't exposed to the user. The builtin iterators like `pairs`/`ipairs` work around this by feeding the user-visible index back to the search function, but that's not always practical. That said, having a different iteration protocol in effect only when `__iter` is used makes the language more complicated for unclear efficiency gains, thus this design doesn't suggest a new core protocol to favor simplicity. diff --git a/.cursor/rules/luau/generic-function-subtyping.md b/.cursor/rules/luau/generic-function-subtyping.md new file mode 100644 index 00000000..bfbe03a5 --- /dev/null +++ b/.cursor/rules/luau/generic-function-subtyping.md @@ -0,0 +1,211 @@ +# Expanded Subtyping for Generic Function Types + +## Summary + +Extend the subtyping relation for function types to relate generic function +types with compatible instantiated function types. + +## Motivation + +As Luau does not have an explicit syntax for instantiation, there are a number +of places where the typechecker will automatically perform instantiation with +the goal of permitting more programs. These instances of instantiation are +ad-hoc and strategic, but useful in practice for permitting programs such as: + +```luau +function id(x: T): T + return x +end + +local idNum : (number) -> number +idNum = id -- ok +``` + +However, they have also been a source of some typechecking bugs because of how +they actually make a determination as to whether the instantation should happen, +and they currently open up some potential soundness holes when instantiating +functions in table types since properties of tables are mutable and thus need to +be invariant (which the automatic-instantiation potentially masks). + +## Design + +The goal then is to rework subtyping to support the relationship we want in the +first place: allowing polymorphic functions to be used where instantiated +functions are expected. In particular, this means adding instantiation itself to +the subtyping relation. Formally, that'd look something like: + +``` +instantiate((T1) -> T2) = (T1') -> T2' +(T1') -> T2' <: (T3) -> T4 +-------------------------------------------- +(T1) -> T2 <: (T3) -> T4) +``` + +Or informally, we'd say that a generic function type is a subtype of another +function type if we can instantiate it and show that instantiated function type +to be a subtype of the original function type. Implementation-wise, this loose +formal rule suggests a strategy of when we'll want to apply instantiation. +Namely, whenever the subtype and supertype are both functions with the potential +subtype having some generic parameters and the supertype having none. So, if we +look once again at our simple example from motivation, we can walk through how +we expect it to type check: + +```luau +function id(x: T): T + return x +end + +local idNum : (number) -> number +idNum = id -- ok +``` + +First, `id` is given the type `(T) -> T` and `idNum` is given the type +`(number) -> number`. When we actually perform the assignment, we must show that +the type of the right-hand side is compatible with the type of the left-hand +side according to subtyping. That is, we'll ask if `(T) -> T` is a subtype of +`(number) -> number` which matches the rule to apply instantiation since the +would-be subtype has a generic parameter while the would-be supertype has no +generic parameters. This contrasts with the current implementation which, before +asking the subtyping question, checks if the type of the right-hand side +contains any generics at any point and if the type of the left-hand side cannot +_possibly_ contain generics and instantiates the right-hand side if so. + +Adding instantiation to subtyping does pose some additional questions still +about when exactly to instantiate. Namely, we need to consider cases like +function application. We can see why by looking at some examples: + +```luau +function rank2(f: (a) -> a): (number) -> number + return f +end +``` + +In this case, we expect to allow the instantiation of `f` from `(a) -> a` to +`(number) -> number`. After all, we can consider other cases like where the body +instead applies `f` to some particular value, e.g. `f(42)`, and we'd want the +instantiation to be allowed there. However, this means we'd potentially run into +issues if we allowed call sites to `rank2` to pass in non-polymorphic functions. +A naive approach to implementing this proposal would do exactly that because we +currently treat contravariant subtyping positions (i.e. for the arguments of +functions) as being the same as our normal (i.e. covariant) subtyping relation +but with the arguments reversed. So, to type check an application like +`rank2(function(str: string) return str + "s" end)` (where the function argument +is of type `(string) -> string`), we would ask if `(a) -> a` is a subtype of +`(string) -> string`. This is precisely the question we asked in the original +example, but in the contravariant context, this is actually unsound since +`rank2` would then function as a general coercion from, e.g., +`(string) -> string` to `(number) -> number`. + +This sort of behavior does come up in other languages that mix polymorphism and +subtyping. If we consider the same example in F#, we can compare its behavior: + +```fsharp +let ranktwo (f : 'a -> 'a) : int -> int = f +let pluralize (s : string) : string = s + "s" +let x = ranktwo pluralize +``` + +For this example, F# produces one warning and one error. The warning is applied +to the function definition of `ranktwo` itself (coded `FS0064`), and says "This +construct causes code to be less generic than indicated by the type annotations. +The type variable 'a has been constrained to be type 'int'." This warning +highlights the actual difference between our example in Luau and the F# +translation. In F#, `'a` is really a free type variable, rather than a generic +type parameter of the function `ranktwo`, as such, this code actually +constrains the type of `ranktwo` to be `(int -> int) -> (int -> int)`. As such, +the application on line 3 errors because our `(string -> string)` function is +simply not compatible with that type. With higher-rank polymorphic function +parameters, it doesn't make sense to warn on their instantiation (as illustrated +by the example of actually applying `f` to some particular data in the +definition of `rank2`), but it's still just as problematic if we were to accept +instantiated functions at polymorphic types. Thus, it's important that we +actually ensure that we only instantiate in covariant contexts. So, we must +ensure that subtyping only instantiates in covariant contexts. + +It may also be helpful to consider an example of rank-1 polymorphism to +understand the full scope of the behavior. So, we can look at what happens if we +simply move the type parameter out in our working example: + +```luau +function rank1(f: (a) -> a): (number) -> number + return f +end +``` + +In this case, we expect an error to occur because the type of `f` depends on +what we instantiate `rank1` with. If we allowed this, it would naturally be +unsound because we could again provide a `(string) -> string` argument (by +instantiating `a` with `string`). This reinforces the idea that the presence of +the generic type parameter is likely to be a good option for determining +instantiation (at least when compared to the presence of free type variables). + +## Drawbacks + +One of the aims of this proposal is to provide a clear and predictable mental +model of when instantiation will take place in Luau. The author feels this +proposal is step forward compared to the existing ad-hoc usage of instantiation +in the typechecker, but it's possible that programmers are already comfortable +with the mental model they have built for the existing implementation. +Hopefully, this is mitigated by the fact that the new setup should allow all of +the _sound_ uses of instantiation permitted by the existing system. Notably, +however, programmers may be surprised by the added restriction when it comes to +properties in tables. In particular, we can consider a small variation of our +original example with identity functions: + +```luau +function id(x: T): T + return x +end + +local poly : { id : (a) -> a } = { id = id } + +local mono : { id : (number) -> number } +mono = poly -- error! +mono.id = id -- also an error! +``` + +In this case, the fact that we're dealing with a _property_ of a table type +means that we're in a context that needs to be invariant (i.e. not allow +subtyping) to avoid unsoundness caused by interactions between mutable +references and polymorphism (see things like the [value +restriction in OCaml][value-restriction] to understand why). In most cases, we +believe programmers will be using functions in tables as an implementation of +methods for objects, so we don't anticipate that they'll actually _want_ to do +the unsound thing here. The accepted RFC for [read-only +properties][read-only-props] gives us a technically-precise solution since +read-only properties would be free to be typechecked as a covariant context +(since they disallow mutation), and thus if the property `id` was marked +read-only, we'd be able to do both of the assignments in the above example. + +## Alternatives + +The main alternatives would likely be keeping the existing solution (and +likely having to tactically fix future bugs where instantiation either happens +too much or not enough), or removing automatic instantiation altogether in favor +of manual instantiation syntax. The former solution (changing nothing) is cheap +now (both in terms of runtime performance and also development cost), but the +existing implementation involves extra walks of both types to make a decision +about whether or not to perform instantiation. To minimize the performance +impact, the functions that perform these questions (`isGeneric` and +`maybeGeneric`) actually do not perform a full walk, and instead try to +strategically look at only enough to make the decision. We already found and +fixed one bug that was caused by these functions being too imprecise against +their spec, but fleshing them out entirely could potentially be a noticeable +performance regression since the decision to potentially instantiate is one that +comes up often. + +Removing automatic instantiation altogether, by contrast, will definitely be +"correct" in that we'll never instantiate in the wrong spot and programmers will +always have the ability to instantiate, but it would be a marked regression on +developer experience since it would increase the annotation burden considerably +and generally runs counter to the overall design strategy of Luau (which focuses +heavily on type inference). It would also require us to actually pick a syntax +for manual instantiation (which we are still open to do in the future if we +maintain an automatic instantiation solution) which is frought with parser +ambiguity issues or requires the introduction of a sigil like Rust's turbofish +for instantiation. Discussion of that syntax is present in the [generic +functions][generic-functions] RFC. + +[value-restriction]: https://stackoverflow.com/questions/22507448/the-value-restriction#22507665 +[read-only-props]: https://github.com/Roblox/luau/blob/master/rfcs/property-readonly.md +[generic-functions]: https://github.com/Roblox/luau/blob/master/rfcs/generic-functions.md diff --git a/.cursor/rules/luau/generic-functions.md b/.cursor/rules/luau/generic-functions.md new file mode 100644 index 00000000..6f49d19d --- /dev/null +++ b/.cursor/rules/luau/generic-functions.md @@ -0,0 +1,155 @@ +# Generic functions + +**Status**: Implemented + +## Summary + +Extend the syntax and semantics of functions to support explicit generic functions, which can bind type parameters as well as data parameters. + +## Motivation + +Currently Luau allows generic functions to be inferred but not given explicit type annotations. For example + +```luau +function id(x) return x end +local x: string = id("hi") +local y: number = id(37) +``` + +is fine, but there is no way for a user to write the type of `id`. + +## Design + +Allow functions to take type parameters as well as function parameters, similar to Java/Typescript/... + +```luau +function id(x : a) : a return x end +``` + +Functions may also take generic type pack arguments for varargs, for instance: + +```luau +function compose(... : a...) -> (a...) return ... end +``` + +Generic type and type pack parameters can also be used in function types, for instance: + +```luau +local id: (a)->a = function(x) return x end +``` + +This change is *not* only syntax, as explicit type parameters need to be part of the semantics of types. For example, we can define a generic identity function + +```luau +local function id(x) return x end +local x: string = id("hi") +local y: number = id(37) +type Id = typeof(id) +``` + +and two functions + +```luau +function f() + return id +end +function g() + local y + function oh(x) + if not(y) then y = x end + return y + end + return oh +end +``` + +The types of these functions are + +```luau + f : () -> (a) -> a + g : () -> (a) -> a +``` + +so this is okay: + +```luau + local i: Id = f() + local x: string = i("hi") + local y: number = i(37) +``` + +but this is not: + +```luau + -- This assignment shouldn't typecheck! + local i: Id = g() + local x: string = i("hi") + -- This is unsound, since it assigns a string to a variable of type number + local y: number = i(37) +``` + +Currently, Luau does not have explicit type binders, so `f` and `g` have the same type. We propose making type binders part of the semantics of types as well as their syntax (so `f` and `g` have different types, and the unsound example does not typecheck). + +We propose supporting type parameters which can be instantiated with any type (jargon: Rank-N Types) but not type functions (jargon: Higher Kinded Types) or types with constraints (jargon: F-bounded polymorphism). + +## Turbofish + +Note that this RFC proposes a syntax for adding generic parameters to functions, but it does *not* propose syntax for adding generic arguments to function call site. For example, for `id` function you *can* write: + +```luau + -- generic type gets inferred as a number in all these cases +local x = id(4) +local x = id(y) :: number +local x: number = id(y) +``` + +but you can *not* write `id(y)`. + +This syntax is difficult to parse as it's ambiguous wrt grammar for comparison, and disambiguating it requires being able to parse types in expression context which makes parsing slow and complicated. It's also worth noting that today there are programs with this syntax that are grammatically correct (eg `id('4')` parses as "compare variable `id` to variable `string`, and compare the result to string '4'"). The specific example with a single argument will always fail at runtime because booleans can't be compared with relational operators, but multi-argument cases such as `print(foo(4))` can execute without errors in certain cases. + +Note that in many cases the types can be inferred, whether through function arguments (`id(4)`) or through expected return type (`id(y) :: number`). It's also often possible to cast the function object to a given type, even though that can be unwieldy (`(id :: (number)->number)(y)`). Some languages don't have a way to specify the types at call site either, Swift being a prominent example. Thus it's not a given we need this feature in Luau. + +If we ever want to implement this though, we can use a solution inspired by Rust's turbofish and require an extra token before `<`. Rust uses `::<` but that doesn't work in Luau because as part of this RFC, `id::(a)->a` is a valid, if redundant, type ascription, so we need to choose a different prefix. + +The following two variants are grammatically unambiguous in expression context in Luau, and are a better parallel for Rust's turbofish (in Rust, `::` is more similar to Luau's `:` or `.` than `::`, which in Rust is called `as`): + +```luau +foo:() -- require : before <; this is only valid in Luau in variable declaration context, so it's safe to use in expression context +foo.() -- require . before <; this is currently never valid in Luau +``` + +This RFC doesn't propose using either of these options, but notes that either one of these options is possible to specify & implement in the future if we so desire. + +## Drawbacks + +This is a breaking change, in that examples like the unsound program above will no longer typecheck. + +Types become more complex, so harder for programmers to reason about, and adding to their space usage. This is particularly noticeable anywhere the typechecker has exponential blowup, since small increases in type size can result in large increases in space or time usage. + +Not having higher-kinded types stops some examples which are parameterized on container types, for example: + +```luau + function g(f : (a) -> c) : (b) -> c> + return function(x) return f(f(x)) end + end +``` + +Not having bounded types stops some examples like giving a type to the function that sums an non-empty array: + +```luau + function sum(xs) + local result = x[0] + for i=1,#xs + result += x[i] + end + return result + end +``` + +## Alternatives + +We did originally consider Rank-1 types, but the problem is that's not backward-compatible, as DataBrain pointed out in the [Dev Forum](https://devforum.roblox.com/t/luau-recap-march-2021/1141387/29), since `typeof` allows users to construct generic types even without syntax for them. Rank-1 types give a false positive type error in this case, which comes from deployed code. + +We could introduce syntax for generic types without changing the semantics, but then there'd be a gap between the syntax (where the types `() -> (a) -> a` and `() -> (a) -> a` are different) and the semantics (where they are not). As noted above, this isn't sound. + +Rather than using Rank-N types, we could use SML-style polymorphism, but this would need something like the [value restriction](http://users.cis.fiu.edu/~smithg/cop4555/valrestr.html) to be sound. diff --git a/.cursor/rules/luau/index-type-operator.md b/.cursor/rules/luau/index-type-operator.md new file mode 100644 index 00000000..be634513 --- /dev/null +++ b/.cursor/rules/luau/index-type-operator.md @@ -0,0 +1,139 @@ +# `index` type function + +**Status**: Implemented + +## Summary + +This RFC proposes the addition of one type function, `index`, which can be used to look up a specific property of another type (like TypeScript's Indexed Access Type). + +## Motivation + +The primary motivation of this proposal is to allow Luau to define a type by accessing a property of another existing type. For instance, consider the following example code: +```luau +type Person = { + age: number, + name: string, + alive: boolean +} + +local bob: Person = { + age = 22, + name = "Bob", + alive = true +} + +local function doSmt(param: typeof(bob["age"])) -- param = number + -- rest of code +end + +type unionType = typeof(bob["age"]) | typeof(bob["name"]) | typeof(bob["alive"]) -- unionType = number | string | boolean +``` + +This is a valid Luau program; however, in order to define the type of `Person["age"]` we had to first declare a variable `bob` and utilize the `typeof` type function. This is quite cumbersome when developers want to typecheck using the type of `Person["age"]` without having to declare a variable first. Additionally, in order to define the union type of all the properties of `Person`, current Luau requires an explicit list of each property using `typeof`. + +The expected outcome of the index type function is that it will enhance developer experience and allow Luau developers to more easily develop well-typed programs. + +## Design + +The solution to this problem is a type function, `index`, that can compute the type based on the static properties of `Person`. Formally, the `index` type function will take in two arguments: the type to index (indexee) and the type to index it with (indexer). This would allow us to instead write the following code: +```luau +type Person = { + age: number, + name: string, + alive: boolean +} + +local function doSmt(param: index) -- param = number + -- rest of code +end + +type idxType = index> -- idxType = number | string | boolean + +type idxType2 = index -- idxType2 = number | string +``` + +Now, the type of `doSmt()`'s parameter can be defined without declaring a variable `bob`. Additionally, regardless of how the type `Person` grows, `idxType` will always be defined as the union of all the properties. + +Error messages will be displayed for incorrect type arguments. If the indexer is not a property in the indexee, +```luau +type age = index -- Error message: Property '"ager"' does not exist on type 'Person' +``` +If the indexer is not a type, +```luau +local key = "age" +type age = index -- Error message: Second argument to index is not a valid index type; Unknown type 'key' +``` +Note: these errors will be part of the general type function reduction errors since `index` will be built into the type function system. + +The indexee may be a union type. In this case, the type function will distribute the arguments to multiple type families: +```luau +type Person2 = { + age: string +} + +-- equivalent of `index | index` +type idxType3 = index -- idxType3 = number | string + +-- equivalent of `index | index` +type idxType4 = index -- Error message: Property '"age" | "alive"' does not exist on type 'Person | Person2' +``` + +In the circumstance that the indexee's type is a class or table with an `__index` metamethod, the `__index` metamethod will *only* be invoked if the indexer is not found within the current scope: +```luau +local exampleClass = { Foo = "eight" } +local exampleClass2 = setmetatable({ Foo = 8 }, { __index = exampleClass }) +local exampleClass3 = setmetatable({ Bar = "nine" }, { __index = exampleClass }) + +type exampleTy2 = index -- exampleTy2 = number +type exampleTy3 = index -- exampleTy3 = string +``` + +One edge case to consider when using/designing this type function is that `__index` only supports 100 nested `__index` metamethods until it gives up. In the case that a property is not found within the 100 recursive calls, this type function will fail to reduce. + +Implementation is straight forward: the type of the indexee will be determined (table, class, etc) -> search through the properties of the indexee and reduce to the corresponding type of the indexer if it exists; otherwise, reduce to an error. + +## Drawbacks + +A drawback to this feature is the possible increase in the cost of maintenance. In the end, this RFC proposes adding another built-in type functions to the new type system. However, the addition of this feature may be worthwhile, as the `index` type function is a useful type feature that: +1. Alleviates the need to manually keep types in sync +2. Provides a powerful way to access the properties of an object and perform various operations on it with other type functions +3. Allows the community to write code with fewer errors and more safety + +## Alternatives + +An alternative design can be depicted from the example below: +```luau +type Person3 = { + age: number, + name: string, + alive: boolean, + job: string +} + +local function edgeCase(p: Person) + type unknownType = index +end +``` +In our current design, the program simply fails to reduce (and throws an error). However, it is worth noting that `index` can also reduce to type `unknown` because the parameter `p` can be of type `Person` or `Person3` (since tables support width subtyping; hence, `Person3` is a subtype of `Person`): +- If `p` is of type `Person`, `index` should reduce to an error. +- If `p` is of type `Person3`, `index` should reduce to type `string`. + +Because there are conflicting types for `p` depending on the run time, it is safest for the program to reduce to a type `unknown`. In this design, we would need a way to determine if the indexee can be different at runtime. We could determine this through the implementation of more table types, specifically exact and inexact table types. Then, the program will have two cases when an indexee does not contain the indexer type: +1. If the indexee is an inexact table type, reduce to an `unknown` type. +2. If the indexee is an exact table type, fail to reduce and throw an error. + +FYI: exact table type indicates that the table has only the properties listed in its type, and inexact table type indicates that the table has at least the properties listed in its type. + +Later down the line, we can also consider adding syntactic sugar for this type function. Instead of doing: +```luau +type name = index +``` +We could use: +```luau +type name = Person["name"] +``` +or +```luau +type name = Person.name +``` +or even both! \ No newline at end of file diff --git a/.cursor/rules/luau/index.md b/.cursor/rules/luau/index.md new file mode 100644 index 00000000..31f3d8cd --- /dev/null +++ b/.cursor/rules/luau/index.md @@ -0,0 +1,21 @@ +# RFCs + +{% assign sortedPages = site.pages | sort: 'title' %} + +Luau uses RFCs to discuss and document the language evolution process. They are hosted [in a GitHub repository](https://github.com/luau-lang/rfcs) which accepts pull requests for corrections to existing RFCs as well as new RFCs. + +If you'd like to submit a benign (grammatical, stylistic) correction, please open a pull request; all RFCs are in [docs folder in the repository](https://github.com/luau-lang/rfcs/tree/master/docs). + +If you'd like to submit a new RFC, please [read our guidelines first](https://github.com/luau-lang/rfcs/blob/master/README.md); RFCs often require a significant amount of design effort and precision to be considered. + +Note that if you'd like to submit a substantial change to an existing RFC that is already implemented according to its Status field, you would need to submit a new amendment RFC instead of editing an existing one. + +
    +{% for page in sortedPages %} +{% assign ext = page.name | split:'.' | last %} +{% if ext == 'md' and page.name != 'index.md' %} +
  • +{{ page.title }} +
  • +{% endif %} +{% endfor %} diff --git a/.cursor/rules/luau/keyof-type-operator.md b/.cursor/rules/luau/keyof-type-operator.md new file mode 100644 index 00000000..ae8f8771 --- /dev/null +++ b/.cursor/rules/luau/keyof-type-operator.md @@ -0,0 +1,128 @@ +# `keyof` and `rawkeyof` type functions + +**Status**: Implemented + +## Summary + +This RFC proposes the addition of two type functions, `keyof` and `rawkeyof`, +which can be used to derive a type automatically for the keys of a table or +class. + +## Motivation + +The primary motivation of this proposal is to make it easier to work with tables +as objects and/or enumerations, and to reduce the amount of duplicate work users +must undergo in order to type code that does this. For instance, consider the +following example code: + +```luau +type AnimalType = "cat" | "dog" | "monkey" | "fox" + +local animals = { + cat = { speak = function() print "meow" end }, + dog = { speak = function() print "woof woof" end }, + monkey = { speak = function() print "oo oo" end }, + fox = { speak = function() print "gekk gekk" end } +} + +function speakByType(animal: AnimalType) + animals[animal].speak() +end + +speakByType("dog") -- ok +speakByType("cactus") -- errors +``` + +This code is totally reasonable, but we had to manually write a type that lists +out the keys of the table `animals` in order to get type safety. The larger the +table is the less tractable this becomes, and it'd be easy to imagine a user +opting to instead provide the annotation `string` and just losing type safety in +this situation. + +## Design + +The solution to this problem is a type function, `keyof`, that can compute the +type based on the type of `animals`. This would allow us to instead write this +code as follows: + +```luau +local animals = { + cat = { speak = function() print "meow" end }, + dog = { speak = function() print "woof woof" end }, + monkey = { speak = function() print "oo oo" end }, + fox = { speak = function() print "gekk gekk" end } +} + +type AnimalType = keyof + +function speakByType(animal: AnimalType) + animals[animal].speak() +end + +speakByType("dog") -- ok +speakByType("cactus") -- errors +``` + +Now, regardless of how the `animals` table grows, `AnimalType` will always be +defined as the type of indices into the table. At its base, this is a simple +solution to a simple, but common problem of code duplication for types. + +Unfortunately, there are some edgecases to be concerned about because of +metatables and the `__index` metamethod in particular. There's valid arguments +for both including properties available from `__index` as well as for excluding +them. This RFC proposes that there are two reasonable solutions, which +correspond directly to the runtime operations `t[i]` and `rawget(t, i)`. The +former is an instance where you'd want the type to incorporate `__index` +properties appropriately, and the latter is a case where you would not. So, we +analogously provide both `keyof` and `rawkeyof` which provide all the +legal keys for indexing and only the keys legal for `rawget` respectively. + +So, if we consider some very simple strawman code here: + +```luau +local MyClass = { Foo = "Bar" } +local OtherClass = setmetatable({ Hello = "World" }, { __index = MyClass }) + +type MyClass = typeof(MyClass) +type OtherClass = typeof(OtherClass) +``` + +`keyof` will give you `"Foo" | "Hello"` while `rawkeyof` +will give you only `"Hello"`. This would then let you use indexing and `rawget` +appropriately in a type-safe way for the motivating style of dynamic code. + +The remaining bit of complexity is the question of what to do for types that do +not necessarily have one consistent set of keys. For instance, if you consider +the type `{ x: number, y: number } | { a: number, y: number }`, you might wonder +what you would get out of `keyof`. One reasonable answer is `"y"` since that is +the greatest common subset of keys present in the components of the union. +Another reasonable, albeit more conservative, answer is to simply say that the +operator fails to resolve in this situation. This RFC proposes that we return +the greatest common subset of keys since this corresponds to the set of keys +that are allowed by indexing operations on tables of that type. + +## Drawbacks + +The main drawbacks of implementing this are that it requires some pretty +powerful machinery to support properly. Fortunately, however, we've already +built the general machinery to support type functions into the ongoing work on +the new type inference engine for Luau, and as such, there is little remaining +drawback to implementing this. In fact, the implementation is already all done +in the new type inference engine and amounts to less than 200 lines of code +including comments. So, beyond looking for motivating examples for potentially +computing the greatest common subset of keys for unions of tables and the small +amount of work that implementing that might entail, the author of this RFC hopes +that this effort is simply an easy win for OOP in Luau supported by the +technical credit built up by implementing the new type inference engine. + +## Alternatives + +The main alternative designs are, in a sense, discussed in the design section. +We could simply choose to offer only one of `keyof` and `rawkeyof` in +order to keep things simpler, but both have corresponding operations in the +language, and seem useful, and almost all of the work to implement them is +shared. So, doing less here doesn't really save us anything. The other +alternative is surrounding the choice of what to do when the set of keys are not +identical across unions of tables. The proposal here was to provide the greatest +common subset of keys, but the alternative of failing to reduce and thus +producing a type error seems perfectly reasonable as well. diff --git a/.cursor/rules/luau/len-metamethod-rawlen.md b/.cursor/rules/luau/len-metamethod-rawlen.md new file mode 100644 index 00000000..60278dda --- /dev/null +++ b/.cursor/rules/luau/len-metamethod-rawlen.md @@ -0,0 +1,45 @@ +# Support `__len` metamethod for tables and `rawlen` function + +**Status**: Implemented + +## Summary + +`__len` metamethod will be called by `#` operator on tables, matching Lua 5.2 + +## Motivation + +Lua 5.1 invokes `__len` only on userdata objects, whereas Lua 5.2 extends this to tables. In addition to making `__len` metamethod more uniform and making Luau +more compatible with later versions of Lua, this has the important advantage which is that it makes it possible to implement an index based container. + +Before `__iter` and `__len` it was possible to implement a custom container using `__index`/`__newindex`, but to iterate through the container a custom function was +necessary, because Luau didn't support generalized iteration, `__pairs`/`__ipairs` from Lua 5.2, or `#` override. + +With generalized iteration, a custom container can implement its own iteration behavior so as long as code uses `for k,v in obj` iteration style, the container can +be interfaced with the same way as a table. However, when the container uses integer indices, manual iteration via `#` would still not work - which is required for some +more complicated algorithms, or even to simply iterate through the container backwards. + +Supporting `__len` would make it possible to implement a custom integer based container that exposes the same interface as a table does. + +## Design + +`#v` will call `__len` metamethod if the object is a table and the metamethod exists; the result of the metamethod will be returned if it's a number (an error will be raised otherwise). + +`table.` functions that implicitly compute table length, such as `table.getn`, `table.insert`, will continue using the actual table length. This is consistent with the +general policy that Luau doesn't support metamethods in `table.` functions. + +A new function, `rawlen(v)`, will be added to the standard library; given a string or a table, it will return the length of the object without calling any metamethods. +The new function has the previous behavior of `#` operator with the exception of not supporting userdata inputs, as userdata doesn't have an inherent definition of length. + +## Drawbacks + +`#` is an operator that is used frequently and as such an extra metatable check here may impact performance. However, `#` is usually called on tables without metatables, +and even when it is, using the existing metamethod-absence-caching approach we use for many other metamethods a test version of the change to support `__len` shows no +statistically significant difference on existing benchmark suite. This does complicate the `#` computation a little more which may affect JIT as well, but even if the +table doesn't have a metatable the process of computing `#` involves a series of condition checks and as such will likely require slow paths anyway. + +This is technically changing semantics of `#` when called on tables with an existing `__len` metamethod, and as such has a potential to change behavior of an existing valid program. +That said, it's unlikely that any table would have a metatable with `__len` metamethod as outside of userdata it would not anything, and this drawback is not feasible to resolve with any alternate version of the proposal. + +## Alternatives + +Do not implement `__len`. diff --git a/.cursor/rules/luau/local-type-inference.md b/.cursor/rules/luau/local-type-inference.md new file mode 100644 index 00000000..209f7f03 --- /dev/null +++ b/.cursor/rules/luau/local-type-inference.md @@ -0,0 +1,180 @@ +# Local Type Inference + +## Summary + +We are going to supplant the current type solver with one based on Benjamin Pierce's Local Type Inference algorithm: + +https://www.cis.upenn.edu/~bcpierce/papers/lti-toplas.pdf + +## Motivation + +Luau's type inference algorithm is used for much more than typechecking scripts. It is also the backbone of an autocomplete algorithm which has to work even for people who don't know what types or type systems are. + +We originally implemented nonstrict mode by making some tactical adjustments to the type inference algorithm. This was great for reducing false positives in untyped code, but carried with it the drawback that the inference result was usually not good enough for the autocomplete system. In order to offer a high quality experience, we've found ourselves to run type inference on nonstrict scripts twice: once for error feedback, and once again to populate the autocomplete database. + +Separately, we would also like more accurate type inference in general. Our current type solver jumps to conclusions a little bit too quickly. For example, it cannot infer an accurate type for an ordinary search function: + +```luau +function index_of(tbl, el) + for i = 0, #tbl do + if tbl[i] == el then + return i + end + end + return nil +end +``` + +Our solver sees two `return` statements and assumes that, because the first statement yields a `number`, so too must the second. + +To fix this, we are going to move to an architecture where type inference and type checking are two separate steps. Whatever mode the user is programming with, we will run an accurate type inference pass over their code and then run one of two typechecking passes over it. + +## Notation + +We'll use the standard notation `A <: B` to indicate that `A` is a subtype of `B`. + +## Design + +At a very high level, local type inference is built around the idea that we track the lower bounds and their upper bounds. The lower bounds of a binding is the set of values that it might conceivably receive. If a binding receives a value outside of its upper bounds, the program will fail. + +At the implementation level, we reencode free types as the space between these bounds. + +Upper bounds arise only from type annotations and certain builtin operations whereas lower bounds arise from assignments, return statements, and uses. + +Free types all start out with bounds `never <: 't <: unknown`. Intuitively, we say that `'t` represents some set of values whose domain is at least `never` and at most `unknown`. This naturally could be any value at all. + +When dispatching a constraint `T <: 't`, we replace the lower bounds of `'t` by the union of its old lower bounds and `T`. When dispatching a constraint `'t <: T`, we replace the upper bounds by its upper bound intersected with `T`. In other words, lower bounds grow from nothing as we see the value used whereas the upper bound initially encompasses everything and shrinks as we constrain it. + +### Constraint Generation Rules + +A return statement expands the lower bounds of the enclosing function's return type. + +```luau +function f(): R + local x: X + return x + -- X <: R +end +``` + +An assignment adds to the lower bounds of the assignee. + +```luau +local a: A +local b: B +a = b +-- B <: A +``` + +A function call adds to the upper bounds of the function being called. + +Equivalently, passing a value to a function adds to the upper bounds of that value and to the lower bounds of its return value. + +```luau +local g +local h: H +local j = g(h) +-- G <: (H) -> I... +-- I... <: J +``` + +Property access is a constraint on a value's upper bounds. +```luau +local a: A +a.b = 2 +-- A <: {b: number} + +a[1] = 3 +-- A <: {number} +``` + +### Generalization + +Generalization is the process by which we infer that a function argument is generic. Broadly speaking, we solve constraints that arise from the function interior, we scan the signature of the function for types that are unconstrained, and we replace those types with generics. This much is all unchanged from the old solver. + +Unlike with the old solver, we never bind free types when dispatching a subtype constraint under local type inference. We only bind free types during generalization. + +If a type only appears in covariant positions in the function's signature, we can replace it by its lower bound. If it only appears in contravariant positions, we replace it by its upper bound. If it appears in both, we'll need to implement bounded generics to get it right. This is beyond the scope of this RFC. + +If a free type has neither upper nor lower bounds, we replace it with a generic. + +Some simple examples: + +```luau +function print_number(n: number) print(n) end + +function f(n) + print_number(n) +end +``` + +We arrive at the solution `never <: 'n <: number`. When we generalize, we can replace `'n` by its upper bound, namely `number`. We infer `f : (number) -> ()`. + +Next example: + +```luau +function index_of(tbl, el) -- index_of : ('a, 'b) -> 'r + for i = 0, #tbl do -- i : number + if tbl[i] == el then -- 'a <: {'c} + return i -- number <: 'r + end + end + return nil -- nil <: 'r +end +``` + +When typechecking this function, we have two constraints on `'r`, the return type. We can combine these constraints by taking the union of the lower bounds, leading us to `number | nil <: 'r <: unknown`. The type `'r` only appears in the return type of the function. The return type of this function is `number | nil`. + +At runtime, Luau allows any two values to be compared. Comparisons of values of mismatched types always return `false`. We therefore cannot produce any interesting constraints about `'b` or `'c`. + +We end up with these bounds: + +``` +never <: 'a <: {'c} +never <: 'b <: unknown +never <: 'c <: unknown +number | nil <: 'r <: unknown +``` + +`'a` appears in the argument position, so we replace it with its upper bound `{'c}`. `'b` and `'c` have no constraints at all so they are replaced by generics `B` and `C`. `'r` appears only in the return position and so is replaced by its lower bound `number | nil`. + +The final inferred type of `index_of` is `({C}, B) -> number | nil`. + +## Drawbacks + +This algorithm requires that we create a lot of union and intersection types. We need to be able to consistently pare down degenerate unions like `number | number`. + +Local type inference is also more permissive than what we have been doing up until now. For instance, the following is perfectly fine: + +```luau +local x = nil +if something then + x = 41 +else + x = "fourty one" +end +``` + +We'll infer `x : number | string | nil`. If the user wishes to constrain a value more tightly, they will have to write an annotation. + +## Alternatives + +### What TypeScript does + +TypeScript very clearly makes it work in what we would call a strict mode context, but we need more in order to offer a high quality nonstrict mode. For instance, TypeScript's autocomplete is completely helpless in the face of this code fragment: + +```ts +let x = null; +x = {a: "a", b: "pickles"}; +x. +``` + +TypeScript will complain that the assignment to `x` is illegal because `x` has type `null`. It will further offer no autocomplete suggestions at all when the user types the final `.`. + +It's not viable for us to require users to write type annotations. Many of our users do not yet know what types are but we are nevertheless committed to providing them a tool that is helpful to them. + +### Success Typing + +Success typing is the algorithm used by the Dialyzer inference engine for Erlang. Instead of attempting to prove that values always flow in sensible ways, it tries to prove that values _could_ flow in sensible ways. + +Success typing is quite nice in that it's very forgiving and can draw surprisingly useful information from untyped code, but that forgiving nature works against us in the case of strict mode. diff --git a/.cursor/rules/luau/lower-bounds-calculation.md b/.cursor/rules/luau/lower-bounds-calculation.md new file mode 100644 index 00000000..93aaa016 --- /dev/null +++ b/.cursor/rules/luau/lower-bounds-calculation.md @@ -0,0 +1,219 @@ +# Lower Bounds Calculation + +**Status**: Abandoned in favor of a future design for full local inference + +## Summary + +We propose adapting lower bounds calculation from Pierce's Local Type Inference paper into the Luau type inference algorithm. + +https://www.cis.upenn.edu/~bcpierce/papers/lti-toplas.pdf + +## Motivation + +There are a number of important scenarios that occur where Luau cannot infer a sensible type without annotations. + +Many of these revolve around type variables that occur in contravariant positions. + +### Function Return Types + +A very common thing to write in Luau is a function to try to find something in some data structure. These functions habitually return the relevant datum when it is successfully found, or `nil` in the case that it cannot. For instance: + +```luau +-- A.lua +function find_first_if(vec, f) + for i, e in ipairs(vec) do + if f(e) then + return i + end + end + + return nil +end +``` + +This function has two `return` statements: One returns `number` and the other `nil`. Today, Luau flags this as an error. We ask authors to add a return annotation to make this error go away. + +We would like to automatically infer `find_first_if : ({T}, (T) -> boolean) -> number?`. + +Higher order functions also present a similar problem. + +```luau +-- B.lua +function foo(f) + f(5) + f("string") +end +``` + +There is nothing wrong with the implementation of `foo` here, but Luau fails to typecheck it all the same because `f` is used in an inconsistent way. This too can be worked around by introducing a type annotation for `f`. + +The fact that the return type of `f` is never used confounds things a little, but for now it would be a big improvement if we inferred `f : ((number | string) -> T...) -> ()`. + +## Design + +We introduce a new kind of TypeVar, `ConstrainedTypeVar` to represent a TypeVar whose lower bounds are known. We will never expose syntax for a user to write these types: They only temporarily exist as type inference is being performed. + +When unifying some type with a `ConstrainedTypeVar` we _broaden_ the set of constraints that can be placed upon it. + +It may help to realize that what we have been doing up until now has been _upper bounds calculation_. + +When we `quantify` a function, we will _normalize_ each type and convert each `ConstrainedTypeVar` into a `UnionTypeVar`. + +### Normalization + +When computing lower bounds, we need to have some process by which we reduce types down to a minimal shape and canonicalize them, if only to have a clean way to flush out degenerate unions like `A | A`. Normalization is about reducing union and intersection types to a minimal, canonicalizable shape. + +A normalized union is one where there do not exist two branches on the union where one is a subtype of the other. It is quite straightforward to implement. + +A normalized intersection is a little bit more complicated: + +1. The tables of an intersection are always combined into a single table. Coincident properties are merged into intersections of their own. + * eg `normalize({x: number, y: string} & {y: number, z: number}) == {x: number, y: string & number, z: number}` + * This is recursive. eg `normalize({x: {y: number}} & {x: {y: string}}) == {x: {y: number & string}}` +1. If two functions in the intersection have a subtyping relationship, the normalization results only in the super-type-most function. (more on function subtyping later) + +### Function subtyping relationships + +If we are going to infer intersections of functions, then we need to be very careful about keeping combinatorics under control. We therefore need to be very deliberate about what subtyping rules we have for functions of differing arity. We have some important requirements: + +* We'd like some way to canonicalize intersections of functions, and yet +* optional function arguments are a great feature that we don't want to break + +A very important use case for us is the case where the user is providing a callback to some higher-order function, and that function will be invoked with extra arguments that the original customer doesn't actually care about. For example: + +```luau +-- C.lua +function map_array(arr, f) + local result = {} + for i, e in ipairs(arr) do + table.insert(result, f(e, i, arr)) + end + return result +end + +local example = {1, 2, 3, 4} +local example_result = map_array(example, function(i) return i * 2 end) +``` + +This function mirrors the actual `Array.map` function in JavaScript. It is very frequent for users of this function to provide a lambda that only accepts one argument. It would be annoying for callers to be forced to provide a lambda that accepts two unused arguments. This obviously becomes even worse if the function later changes to provide yet more optional information to the callback. + +This use case is very important for Roblox, as we have many APIs that accept callbacks. Implementors of those callbacks frequently omit arguments that they don't care about. + +Here is an example straight out of the Roblox developer documentation. ([full example here](https://developer.roblox.com/en-us/api-reference/event/BasePart/Touched)) + +```luau +-- D.lua +local part = script.Parent + +local function blink() + -- ... +end + +part.Touched:Connect(blink) +``` + +The `Touched` event actually passes a single argument: the part that touched the `Instance` in question. In this example, it is omitted from the callback handler. + +We therefore want _oversaturation_ of a function to be allowed, but this combines with optional function arguments to create a problem with soundness. Consider the following: + +```luau +-- E.lua +type Callback = (Instance) -> () + +local cb: Callback +function register_callback(c: Callback) + cb = c +end + +function invoke_callback(i: Instance) + cb(i) +end + +--- + +function bad_callback(x: number?) +end + +local obscured: () -> () = bad_callback + +register_callback(obscured) + +function good_callback() +end + +register_callback(good_callback) +``` + +The problem we run into is, if we allow the subtyping rule `(T?) -> () <: () -> ()` and also allow oversaturation of a function, it becomes easy to obscure an argument type and pass the wrong type of value to it. + +Next, consider the following type alias + +```luau +-- F.lua +type OldFunctionType = (any, any) -> any +type NewFunctionType = (any) -> any +type FunctionType = OldFunctionType & NewFunctionType +``` + +If we have a subtyping rule `(T0..TN) <: (T0..TN-1)` to permit the function subtyping relationship `(T0..TN-1) -> R <: (T0..TN) -> R`, then the above type alias normalizes to `(any) -> any`. In order to call the two-argument variation, we would need to permit oversaturation, which runs afoul of the soundness hole from the previous example. + +We need a solution here. + +To resolve this, let's reframe things in simpler terms: + +If there is never a subtyping relationship between packs of different length, then we don't have any soundness issues, but we find ourselves unable to register `good_callback`. + +To resolve _that_, consider that we are in truth being a bit hasty when we say `good_callback : () -> ()`. We can pass any number of arguments to this function safely. We could choose to type `good_callback : () -> () & (any) -> () & (any, any) -> () & ...`. Luau already has syntax for this particular sort of infinite intersection: `good_callback : (any...) -> ()`. + +So, we propose some different inference rules for functions: + +1. The AST fragment `function(arg0..argN) ... end` is typed `(T0..TN, any...) -> R` where `arg0..argN : T0..TN` and `R` is the inferred return type of the function body. Function statements are inferred the same way. +1. Type annotations are unchanged. `() -> ()` is still a nullary function. + +For reference, the subtyping rules for unions and functions are unchanged. We include them here for clarity. + +1. `A <: A | B` +1. `B <: A | B` +1. `A | B <: T` if `A <: T` or `B <: T` +1. `T -> R <: U -> S` if `U <: T` and `R <: S` + +We propose new subtyping rules for type packs: + +1. `(T0..TN) <: (U0..UN)` if, for each `T` and `U`, `T <: U` +1. `(U...)` is the same as `() | (U) | (U, U) | (U, U, U) | ...`, therefore +1. `(T0..TN) <: (U...)` if for each `T`, `T <: U`, therefore +1. `(U...) -> R <: (T0..TN) -> R` if for each `T`, `T <: U` + +The important difference is that we remove all subtyping rules that mention options. Functions of different arities are no longer considered subtypes of one another. Optional function arguments are still allowed, but function as a feature of function calls. + +Under these rules, functions of different arities can never be converted to one another, but actual functions are known to be safe to oversaturate with anything, and so gain a type that says so. + +Under these subtyping rules, snippets `C.lua` and `D.lua`, check the way we want: literal functions are implicitly safe to oversaturate, so it is fine to cast them as the necessary callback function type. + +`E.lua` also typechecks the way we need it to: `(Instance) -> () ()` and so `obscured` cannot receive the value `bad_callback`, which prevents it from being passed to `register_callback`. However, `good_callback : (any...) -> ()` and `(any...) -> () <: (Instance) -> ()` and so it is safe to register `good_callback`. + +Snippet `F.lua` is also fixed with this ruleset: There is no subtyping relationship between `(any) -> ()` and `(any, any) -> ()`, so the intersection is not combined under normalization. + +This works, but itself creates some small problems that we need to resolve: + +First, the `...` symbol still needs to be unavailable for functions that have been given this implicit `...any` type. This is actually taken care of in the Luau parser, so no code change is required. + +Secondly, we do not want to silently allow oversaturation of direct calls to a function if we know that the arguments will be ignored. We need to treat these variadic packs differently when unifying for function calls. + +Thirdly, we don't want to display this variadic in the signature if the author doesn't expect to see it. + +We solve these issues by adding a property `bool VariadicTypePack::hidden` to the implementation and switching on it in the above scenarios. The implementation is relatively straightforward for all 3 cases. + +## Drawbacks + +There is a potential cause for concern that we will be inferring unions of functions in cases where we previously did not. Unions are known to be potential sources of performance issues. One possibility is to allow Luau to be less intelligent and have it "give up" and produce less precise types. This would come at the cost of accuracy and soundness. + +If we allow functions to be oversaturated, we are going to miss out on opportunities to warn the user about legitimate problems with their program. I think we will have to work out some kind of special logic to detect when we are oversaturating a function whose exact definition is known and warn on that. + +Allowing indirect function calls to be oversaturated with `nil` values only should be safe, but a little bit unfortunate. As long as we statically know for certain that `nil` is actually a permissible value for that argument position, it should be safe. + +## Alternatives + +If we are willing to sacrifice soundness, we could adopt success typing and come up with an inference algorithm that produces less precise type information. + +We could also technically choose to do nothing, but this has some unpalatable consequences: Something I would like to do in the near future is to have the inference algorithm assume the same `self` type for all methods of a table. This will make inference of common OO patterns dramatically more intuitive and ergonomic, but inference of polymorphic methods requires some kind of lower bounds calculation to work correctly. diff --git a/.cursor/rules/luau/luau-mascot.md b/.cursor/rules/luau/luau-mascot.md new file mode 100644 index 00000000..7a92cd0b --- /dev/null +++ b/.cursor/rules/luau/luau-mascot.md @@ -0,0 +1,61 @@ +# An official mascot for Luau + +**Status**: Implemented + +## Summary + +Luau's branding is currently entirely based around a rotated square logo in a particular shade of blue. +This works well for professional presentation on the website and so forth, but there is a gap for +elements of the brand identity that are more personable and easier for people to identify with. Toward +that end, this RFC proposes Luau adopt an official mascot for the language. + +## Motivation + +The primary motivation is that Luau's current branding consists entirely of a logo, which is relatively +cold and harder for people to identify with. In the Rust community, there's been a lot of success with +[Ferris the crab](https://www.rustacean.net/) as a language mascot, leading to a variety of merchandise +and fanart from the language community. Ferris serves as an icon that Rust users are much happier to +identify with and portray than just the language's logo on its own, especially in less formal settings. +We'd like to be able to provide a mascot that can serve a similar role for Luau! + +## Design + +This RFC proposes that Luau adopt the Hawaiian monk seal as a mascot. There's a few reasons for this +choice. First, we want to have a brand and identity that is more distinct from Lua itself, and +therefore we want to choose a mascot that is _not_ based on the "moon" theme that is central to +Lua's brand identity. Second, Luau's name itself draws from Hawaiian culture since it is named after +a traditional Hawaiaan feast. The Hawaiian monk seal is the state mammal of Hawaii, and one of only +two mammals endemic to the islands. Third, the Hawaiian monk seal is an endangered species and we +can, at a minimum, use the choice of mascot to direct energy towards conservation efforts for this +adorable creature. + +For a concrete mascot design, I commissioned [Alex Mullins (@AlexMarieFina)](https://github.com/AlexMarieFina) +to produce a cartoon-style drawing of a Hawaiian monk seal in Luau's brand blue color. +This mascot is Hina the Seal. + +![Hina the Seal](mascot.png) + +We propose naming her Hina, after the Hawaiian goddess of the moon. The word moon itself in Hawaiian +(_mahina_) is derived from this name, and it pays a small homage to Luau's "moon" roots in Lua +while staying within the existing theme and not being too heavy-handed. + +## Drawbacks + +We may prefer to remain "neutral" and avoid expanding the scope of Luau's branding to leave room for +more organic adoption of a mascot within the community. + +## Alternatives + +In early discussions leading up to my commission, the two most serious suggestions for alternative +animals were rabbits (owing to the eastern cultural tradition of "moon rabbits") and a beluga +(thanks to the pun, "beluauga"). We could get some alternative art proposals for either mascot, but +an obvious downside to the beluga, in particular, is that we would have a blue whale mascot which +conflicts with a certain [already well-known blue whale mascot](https://docker.com). + +Additionally, there was some discussion about naming options. The main thrusts for name suggestions +were broadly in three categories: names starting with L (referencing Lua), names starting with S +(for alliteration with Seal), and names with alignment around the moon and Hawaiian and Polynesian +culture. Notable suggestions from these groups included Luna and Lucy, Sera and Selene, +and Mahina and Hina. This proposal chose `Hina` on the basis of its thematic fit, brevity (single +syllable), and distinctiveness (e.g. Luna is very close to Lune and Luau, Selene is already the name +of a community tool, etc.). diff --git a/.cursor/rules/luau/math-isnan-isfinite-isinf.md b/.cursor/rules/luau/math-isnan-isfinite-isinf.md new file mode 100644 index 00000000..d7618a4d --- /dev/null +++ b/.cursor/rules/luau/math-isnan-isfinite-isinf.md @@ -0,0 +1,96 @@ +# math.isnan, math.isinf and math.isfinite for Math Library + +**Status**: Implemented + +## Summary + +This RFC proposes a `math.isnan`, a `math.isinf`, and a `math.isfinite` function to be added to the math library. +These functions will validate that numbers are not NaN and are "finite" (non-NaN non-inf valid numbers) +respectively. + +## Motivation + +Currently, determinating if a value is `NaN` requires non-obvious and non-semantic check `x ~= x`. Determining if +a number is finite requires a verbose check that handles both `NaN` and `Inf` cases, typically like `x == x` +& `math.abs(x) ~= math.huge`. Checking specifically for Infinity also requires a manual check like +`math.abs(x) == math.huge`. + +Adding explicit `math.isnan(x)`, `math.isinf(x)` and `math.isfinite(x)` functions brings Luau's math library +in line with modern languages (such as C++, JavaScript, Python, etc), improving code clarity, robustness and +safety for mathemetical applications. In networked environments, validating numbers received from the client is a +must and applicable across most games. + +## Design + +We propose adding three new functions to the global `math` table: + + +`math.isnan(x: number): boolean` + +Returns `true` if `x` is Not-a-Number (`NaN`), and false otherwise. + +**Example:** +```luau +local x = 0 / 0 -- produces NaN +local y = 10 + +print(math.isnan(x)) -- true +print(math.isnan(y)) -- false +``` + +`math.isinf(x: number): boolean` + + +Returns `true` if `x` is positive or negative infinity (`Inf`), and `false` otherwise. + +**Example:** +```luau +local x = math.huge +local y = 10 + +print(math.isinf(x)) -- true +print(math.isinf(y)) -- false +print(math.isinf(0 / 0)) -- false (NaN) + +``` + + +`math.isfinite(x: number): boolean` + +Returns `true` if `x` is a finite number, meaning it is neither `NaN` nor positive or negative infinity +(`math.huge`). + +**Example:** +```luau +local x = math.huge +local y = 0 / 0 +local z = 123.45 + +print(math.isfinite(x)) -- false +print(math.isfinite(y)) -- false +print(math.isfinite(z)) -- true +``` + + +## Drawbacks + +1. Increased API: This proposal adds three new functions to the global `math` library, increasing the overall + size of the standard library. +2. Redundancy for experienced developers: Experienced developers familiary with these checks, may view these + functions as unnecessary syntactic sugar for the already fast and idiomatic check `x ~= x` and + `math.abs(x) ~= math.huge`. + +## Alternatives + +### **Alternative 1: Status Quo** + +**Proposal:** Do not add new functions. Continue to rely on checks for both. + +**Rejection:** This sacrifices clarity and developer experience for the sake of library minimalism. The lack of +standard functions makes code more brittle and harder to read, especially for newcomes to Luau. + +### **Alternative 2: Only add `math.isfinite`** + +**Proposal:** Only add the primary utility check, `math.isfinite(x)`, as it covers the most common use case +(checking if a number is safe). Users could rely on idioms (`x ~= x`) for `NaN` and (`math.abs(x) == math.huge`) +for `Inf`. diff --git a/.cursor/rules/luau/metatable-type-functions.md b/.cursor/rules/luau/metatable-type-functions.md new file mode 100644 index 00000000..3c18208c --- /dev/null +++ b/.cursor/rules/luau/metatable-type-functions.md @@ -0,0 +1,90 @@ +# Metatable Type Functions + +**Status**: Implemented + +## Summary + +Implement type functions for `getmetatable` and `setmetatable`. + +## Motivation + +### `setmetatable` Type Function + +There is currently no way for users to apply metatable type information to a type without the usage of `typeof()`. This isn't ideal, as it adds verbosity and boilerplate to common patterns such as object-oriented programming. For example, the following: + +```luau +local clock = {} +type Identity = typeof(setmetatable({} :: { time: number }, { __index = clock })) +``` + +could be reduced to: + +```luau +local clock = {} +type Identity = setmetatable<{ time: number }, { __index: typeof(clock) }> +``` + +### `getmetatable` Type Function + +[Issue #1435](https://github.com/luau-lang/luau/issues/1435) is caused by a lack of special behavior for `getmetatable` when the type's metatable has a `__metatable` field. This is fixable in a variety of ways, however a type function has multiple benefits and exposes more type-level expression for users. It fits in nicely with the new solver, as type functions are a cleaner alternative to magic functions. + +## Design + +### `setmetatable` Type Function + +In the following code example, `Identity` should evaluate to `{ sound: string, @metatable: { __index: typeof(animal) } }`: + +```luau +local animal = {} +type Identity = setmetatable<{ + sound: string +}, { + __index: typeof(animal) +}> +``` + +When a non-table type (number, boolean) is passed into the type function, it should result in an error. This includes classes. +If the type is an intersection or union of tables, then the metatable should be applied to every component type. +If the second argument of the type function isn't a table, then it should error. +If the first argument of `setmetatable` has a metatable with the `__metatable` field specified, then it should also report an error. + +### `getmetatable` Type Function + +In the following code example, `ReversedIdentity` should evaluate to `{ __index: typeof(animal) }`: + +```luau +local animal = {} +type Identity = setmetatable<{ + sound: string +}, { + __index: typeof(animal) +}> + +type ReversedIdentity = getmetatable +``` + +Due to `__metatable`, additional behavior needs to be met. In the following code example, `MetatableType` should evaluate to `"No metatable here!"`: + +```luau +type metatable = { + __metatable: "No metatable here!" +} + +type MetatableType = getmetatable> +``` + +If the type passed in does not support metatables in the type system (i.e. at the time of writing, is not any of a primitive, a singleton, a class, a table, or a union or intersection thereof), it should error when passed to `getmetatable`. +If the type passed in is an intersection or union of things that support metatables, then it will return an intersection or union of those metatables respectively. +If no metatable is present, but the type system supports metatables for that type, it should return the `nil` type indicating that there is no metatable present. + +## Drawbacks + +Introducing a large library of "global" type functions can clutter naming space for users. + +The name of `setmetatable` has an interpretation of implying a side effect; tables are references, and `setmetatable` is a side-effecting function. It could be argued that `setmetatable` is not a good name for a type function which has no side effects. However, consistency is desirable. A slight rename of a global function could cause confusion, and likely cause mistakes to be made. Type functions also have a precedent of not allowing side effects, so therefore a `setmetatable` type function would not have ambiguity when it comes to side effects. + +## Alternatives + +Do nothing, and rely on unique metatable type syntax to achieve what a `setmetatable` type function would achieve. However, this still has the issue of `getmetatable`. It is flat out incorrect at the moment, and a type function would be an ideal solution to that problem. If a type function is introduced, then any user could reasonably expect a counterpart `setmetatable` type function. Both metatable type functions and metatable syntax can exist at the same time, and that might be ideal. + +Do nothing. `typeof` solves the current issues with accessibility to the current object-oriented programming patterns, and the issue relating to getmetatable can be solved by overloads. diff --git a/.cursor/rules/luau/method-type-issubtypeof.md b/.cursor/rules/luau/method-type-issubtypeof.md new file mode 100644 index 00000000..6b77bc5c --- /dev/null +++ b/.cursor/rules/luau/method-type-issubtypeof.md @@ -0,0 +1,116 @@ +# type:issubtypeof + +## Summary + +New method on the [`type`](./user-defined-type-functions.md#type-instance) userdata in type functions for performing subtype checks. + +## Motivation + +Currently there is no built in way to do subtype checks in User-Defined Type Functions. This means the developer has to write the following if they wanted to do a subtype check. Subtype checks are useful for type functions, because it makes code like in the following 2 example cases unneeded. + +Case 1: Checking if a type is a string or a string singleton +```luau +local is_string = t:is("string") or (t:is("singleton") and type(t:value()) == "string") +``` + +Case 2: Checking if a type is an enum +```luau +type function isenum(t) + if t:is("union") then + local components = t:components() + local components_that_are_string = 0 + + for _, component in components do + if tv:is("string") or (tv:is("singleton") and type(tv:value()) == "string") then + components_that_are_string += 1 + end + end + return types.singleton( + components_that_are_string == #components + ) + else + return types.singleton(false) + end +end +``` + +Additionally it would be a pain for users to write a type function to be able to do subtype checks for any type. As the following example type function is already very long, despite not covering everything. + +```luau +type function issubtypeof(a, b) + local false_type = types.singleton(false) + local true_type = types.singleton(true) + local is_subtype = false + local a_tag = a.tag + local b_tag = b.tag + + if + (a_tag == b_tag) or + (b_tag == "singleton" and type(b:value()) == a_tag) or + (b_tag == "negation" and type(b:inner()) == a_tag) + then + is_subtype = true + elseif b_tag == "union" or b_tag == "intersection" then + local components = b:components() + local conmponents_that_are_subtype = 0 + + for _, component in components do + if issubtypeof(component):value() then + conmponents_that_are_subtype += 1 + end + end + + return types.singleton(#components == conmponents_that_are_subtype) + elseif b_tag == "table" and a_tag == "table" then + local b_mt = b:metatable() + local a_mt = a:metatable() + + if b_mt == a_mt then + return true_type + elseif b_mt and a_mt then + local b_mts = { b_mt } + local next_b_mt + local next_a_mt = a_mt + + while next_b_mt do + table.insert(b_mts, next_b_mt) + next_b_mt = next_b_mt:metatable() + end + + while next_a_mt do + for _, mt in b_mts do + if mt == next_a_mt then + return true_type + end + end + next_a_mt = next_a_mt:metatable() + end + else + --[[ + For the purposes of this rfc, my point has already been made. And I do not want to write the rest of this type function that nobody should ever use, + as its probably going to be an easy way to hit the type function time limit. + --]] + end + end + + return types.singleton(is_subtype) +end +``` + +## Design + +The [`type`](./user-defined-type-functions.md#type-instance) will gain a new method: `issubtypeof`: + +```luau +type:issubtypeof(arg: type): boolean +``` + +This method will return a boolean indicating if the type is a subtype of `arg`, using luau's existing subtyping algorithm. + +## Drawbacks + +Adds another method to the type userdata in User-Defined type functions. + +## Alternatives + +Do nothing, and let users write the checks themselves as it is currently. diff --git a/.cursor/rules/luau/negation-types.md b/.cursor/rules/luau/negation-types.md new file mode 100644 index 00000000..9a6dd593 --- /dev/null +++ b/.cursor/rules/luau/negation-types.md @@ -0,0 +1,86 @@ +# Negation types + +## Summary + +A type that represents the complement of the type being negated, which is a union type of all inhabited types (`unknown`) excluding the type being negated. + +## Motivation + +Type refinements will produce negation types to get the complementation. For the most part, users will never need to write these negation types themselves, except for when they want to _maintain_ some invariants beyond the scope of the branch. + +A [cofinite set](https://en.wikipedia.org/wiki/Cofiniteness) arises when you have some negated `X` in conjunction with some supertype of `X`. For example, `string & ~"a"` is a cofinite string set that accepts any `string` excluding `"a"`. This happens often with type refinements where `typeof(x) == "string" and x ~= "a"` gives rise to the type `string & ~"a"`. + +## Design + +### Syntax + +The notation is `~T` where `T` is a type annotation. It binds tightly to the type it negates, so `~T | U` is `(~T) | U`, not `~(T | U)`. There's really not much to it, syntax-wise. It has the same precedence as the `not` expression, which is why `~T | U` is `(~T) | U` in the same way `not t or u` is `(not t) or u`. + +We propose to allow users to write such a type. Formally: + +```ebnf +ty ::= `~` ty + | name [`<` [ty {`,` ty}] `>`] + | ty {`|` ty} + | ty {`&` ty} + | `(` ty `)` + | `typeof` `(` exp `)` + | table_ty (* omitted for brevity *) + | function_ty (* omitted for brevity *) +``` + +### Semantics + +The basis set we want to perform set exclusion on is `unknown`, _not_ `any`. This means given the type `~"a"`, it is equivalent to the type `unknown & ~"a"`. + +Choosing `unknown` as the basis makes a lot of things fall in place properly, including the property we wish to maintain where `~~T` is equivalent to `T`. It's crucial that we handle negation of error types properly, otherwise double negations won't actually be consistent. It'd allow error suppression to be improperly suppressed! See below, where `~~any` ends up as `unknown` instead of `any`. + +1. `~~any` +2. `~~(unknown | *error*)` +3. `~(~unknown & ~*error*)` +4. `~(never & unknown)` +5. `~never` +6. `unknown` (not equivalent to `any`!) + +As you can see, since through the series of rewrites `~~any` did not produce a type equivalent to `any`, our basis set must be `unknown`, and negation of an error suppression is still an error suppressing type. Therefore `~*error*` is `*error*`. This fixes the double-negation inconsistency: + +1. `~~any` +2. `~~(unknown | *error*)` +3. `~(~unknown & ~*error*)` +4. `~(never & *error*)` +5. `~never | ~*error*` +6. `unknown | *error*` (`any` is an alias to `unknown | *error*`, so equivalence is achieved) + +### Restrictions + +We currently only support negation of _testable_ types. Intuitively, a testable type is one that can be tested by type refinements at runtime. This includes singleton types, primitive types, and classes. Of course, unions and intersections can be negated as well if and only if all of its constituent types are also testable types, due to the distributivity property of unions and intersections. + +Since types like `{ p: P }` and `(T) -> U` are structural types and the runtime offers no way to test for them, they cannot be negated. An attempt to negate this will just turn the negation type into an error suppressed type. This means `~{ p: P }` and `~(T) -> U` are nonsensical. In the event that you negate some non-testable type, you get a type error. + +Another restriction is that negation types cannot negate generic types. So `(T) -> ~T` is also not legible. + +### Implementation + +Most of the implementation of negation types are already in place. The three things missing are: + +1. the syntax, +2. some guarantee that no negation types survive if it negates non-testables, and +3. a type error if it negates a non-testable type in any way, shape, or form. + +The parser change for this is trivial, so this is of no concern. + +We can use type families to have this guarantee. Add a `negate` type family which would be internal to the type inference engine, and have the syntax `~T` produce that type family, not a `NegationType`. + +As for the type error, we can just consider `negate<{ p: P }>` to be an uninhabited type family, and resolve that as an error type. + +## Drawbacks + +Language design has a concept called weirdness budget. It's a fine line to balance, especially in this case where, even in popular type systems that have negation types, they are seldom used except by power users. + +## Alternatives + +We could provide a set of type aliases for some common use cases, e.g. `not_nil` for `~nil` and `not_string` for `~string` and so on. But this is limited, i.e. no way to negate for a specific string singleton except by a `typeof` hack. + +Alternatively, provide a type family `not`, which can be generalized to any type, so long as they obey the restrictions above! This alternative proposal is essentially the above proposal, sans syntax. + +We could also use the set exclusion syntax `T \ U` which does provide an advantage of an explicit set to exclude a subset of, but there are downsides with this, e.g. it is neither commutative nor associative, which makes for the implementation more annoying since you cannot fold over them as easily. diff --git a/.cursor/rules/luau/never-and-unknown-types.md b/.cursor/rules/luau/never-and-unknown-types.md new file mode 100644 index 00000000..7ab285db --- /dev/null +++ b/.cursor/rules/luau/never-and-unknown-types.md @@ -0,0 +1,146 @@ +# never and unknown types + +**Status**: Implemented + +## Summary + +Add `unknown` and `never` types that are inhabited by everything and nothing respectively. + +## Motivation + +There are lots of cases in local type inference, semantic subtyping, +and type normalization, where it would be useful to have top and +bottom types. Currently, `any` is filling that role, but it has +special "switch off the type system" superpowers. + +Any use of `unknown` must be narrowed by type refinements unless another `unknown` or `any` is expected. For +example a function which can return any value is: + +```luau + function anything() : unknown ... end +``` + +and can be used as: + +```luau + local x = anything() + if type(x) == "number" then + print(x + 1) + end +``` + +The type of this function cannot be given concisely in current +Luau. The nearest equivalent is `any`, but this switches off the type system, for example +if the type of `anything` is `() -> any` then the following code typechecks: + +```luau + local x = anything() + print(x + 1) +``` + +This is fine in nonstrict mode, but strict mode should flag this as an error. + +The `never` type comes up whenever type inference infers incompatible types for a variable, for example + +```luau + function oops(x) + print("hi " .. x) -- constrains x must be a string + print(math.abs(x)) -- constrains x must be a number + end +``` + +The most general type of `x` is `string & number`, so this code gives +a type error, but we still need to provide a type for `oops`. With a +`never` type, we can infer the type `oops : (never) -> ()`. + +or when exhaustive type casing is achieved: + +```luau + function f(x: string | number) + if type(x) == "string" then + -- x : string + elseif type(x) == "number" then + -- x : number + else + -- x : never + end + end +``` + +or even when the type casing is simply nonsensical: + +```luau + function f(x: string | number) + if type(x) == "string" and type(x) == "number" then + -- x : string & number which is never + end + end +``` + +The `never` type is also useful in cases such as tagged unions where +some of the cases are impossible. For example: + +```luau + type Result = { err: false, val: T } | { err: true, err: E } +``` + +For code which we know is successful, we would like to be able to +indicate that the error case is impossible. With a `never` type, we +can do this with `Result`. Similarly, code which cannot succeed +has type `Result`. + +These types can _almost_ be defined in current Luau, but only quite verbosely: + +```luau + type never = number & string + type unknown = nil | number | boolean | string | {} | (...never) -> (...unknown) +``` + +But even for `unknown` it is impossible to include every single data types, e.g. every root class. + +Providing `never` and `unknown` as built-in types makes the code for +type inference simpler, for example we have a way to present a union +type with no options (as `never`). Otherwise we have to contend with ad hoc +corner cases. + +## Design + +Add: + +* a type `never`, inhabited by nothing, and +* a type `unknown`, inhabited by everything. + +And under success types (nonstrict mode), `unknown` is exactly equivalent to `any` because `unknown` +encompasses everything as does `any`. + +The interesting thing is that `() -> (never, string)` is equivalent to `() -> never` because all +values in a pack must be inhabitable in order for the pack itself to also be inhabitable. In fact, +the type `() -> never` is not completely accurate, it should be `() -> (never, ...never)` to avoid +cascading type errors. Ditto for when an expression list `f(), g()` where the resulting type pack is +`(never, string, number)` is still the same as `(never, ...never)`. + +```luau + function f(): never error() end + function g(): string return "" end + + -- no cascading type error where count mismatches, because the expression list f(), g() + -- was made to return (never, ...never) due to the presence of a never type in the pack + local x, y, z = f(), g() + -- x : never + -- y : never + -- z : never +``` + +## Drawbacks + +Another bit of complexity budget spent. + +These types will be visible to creators, so yay bikeshedding! + +Replacing `any` with `unknown` is a breaking change: code in strict mode may now produce errors. + +## Alternatives + +Stick with the current use of `any` for these cases. + +Make `never` and `unknown` type aliases rather than built-ins. diff --git a/.cursor/rules/luau/new-nonstrict.md b/.cursor/rules/luau/new-nonstrict.md new file mode 100644 index 00000000..dcbe9bf7 --- /dev/null +++ b/.cursor/rules/luau/new-nonstrict.md @@ -0,0 +1,340 @@ +# New non-strict mode + +## Summary + +Currently, strict mode and non-strict mode infer different types for +the same program. With this feature, strict and non-strict modes will +share the [local type inference](local-type-inference.md) +engine, and the only difference between the modes will be in which +errors are reported. + +## Motivation + +Having two different type inference engines is unnecessarily +confusing, and can result in unexpected behaviors such as changing the +mode of a module can cause errors in the users of that module. + +The current non-strict mode infers very coarse types (e.g. all local +variables have type `any`) and so is not appropriate for type-driven +tooling, which results in expensively and inconsistently using +different modes for different tools. + +## Design + +### Code defects + +The main goal of non-strict mode is to minimize false positives, that +is if non-strict mode reports an error, then we have high confidence +that there is a code defect. Example defects are: + +* Run-time errors +* Dead code +* Using an expression whose only possible value is `nil` +* Writing to a table property that is never read + +*Run-time errors*: this is an obvious defect. Examples include: + +* Built-in operators (`"hi" + 5`) +* Luau APIs (`math.abs("hi")`) +* Function calls from embeddings (`CFrame.new("hi")`) +* Missing properties from embeddings (`CFrame.new().nope`) + +Detecting run-time errors is undecidable, for example + +```luau +if cond() then + math.abs(“hi”) +end +``` + +It is undecidable whether this code produces a run-time error, but we +do know that if `math.abs("hi")` is executed, it will produce a +run-time error, and so report a type error in this case. + +*Expressions guaranteed to be `nil`*: Luau tables do not error when a +missing property is accessed (though embeddings may). So something +like + +```luau +local t = { Foo = 5 } +local x = t.Fop +``` + +won’t produce a run-time error, but is more likely than not a +programmer error. In this case, if the programmer intent was to +initialize `x` as `nil`, they could have written + +```luau +local t = { Foo = 5 } +local x = nil +``` + +For this reason, we consider it a code defect to use a value that the +type system guarantees is of type `nil`. + +*Writing properties that are never read*: There is a matching problem +with misspelling properties when writing. For example + +```luau +function f() + local t = {} + t.Foo = 5 + t.Fop = 7 + print(t.Foo) +end +``` + +won’t produce a run-time error, but is more likely than not a +programmer error, since `t.Fop` is written but never read. We can use +read-only and write-only table properties for this, and make it an +error to create a write-only property. + +We have to be careful about this though, because if `f` ended with +`return t`, then it would be a perfectly sensible function with type +`() -> { Foo: number, Fop: number }`. The only way to detect that `Fop` +was never read would be whole-program analysis, which is prohibitively +expensive. + +*Implicit coercions*: Luau supports various implicit coercions, such +as allowing `math.abs("-12")`. These should be reported as defects. + +### New Non-strict error reporting + +The difficult part of non-strict mode error-reporting is detecting +guaranteed run-time errors. We can do this using an error-reporting +pass that generates a type context such that if any of the `x : T` in +the type context are satisfied, then the program is guaranteed to +produce a type error. + +For example in the program + +```luau +function h(x, y) + math.abs(x) + string.lower(y) +end +``` + +an error is reported when `x` isn’t a `number`, or `y` isn’t a `string`, so the generated context is + +``` +x : ~number +y : ~string +``` + +In the function: + +```luau +function f(x) + math.abs(x) + string.lower(x) +end +``` + +an error is reported when x isn’t a number or isn’t a string, so the constraint set is + +``` +x : ~number | ~string +``` + +Since `~number | ~string` is equivalent to `unknown`, non-strict mode +can report a warning, since calling the function is guaranteed to +throw a run-time error. In contrast: + +```luau +function g(x) + if cond() then + math.abs(x) + else + string.lower(x) + end +end +``` + +generates context + +``` +x : ~number & ~string +``` + +Since `~number & ~string` is not equivalent to `unknown`, non-strict mode reports no warning. + +* The disjunction of contexts `C1` and `C2` contains `x : T1|T2`, + where `x : T1` is in `C1` and `x : T2` is in `C2`. +* The conjunction of contexts `C1` and `C2` contains `x : T1&T2`, + where `x : T1` is in `C1` and `x : T2` is in `C2`. + +The context generated by a block is: + +* `x = E` generates the context of `E : never`. +* `B1; B2` generates the disjunction of the context of `B1` and the + context of `B2`. +* `if C then B1 else B2` end generates the conjunction of the context + of `B1` and the context of `B2`. +* `local x; B` generates the context of `B`, removing the constraint + `x : T`. If the type inferred for `x` is a subtype of `T`, then + issue a warning. +* `function f(x1,...,xN) B end` generates the context for `B`, + removing `x1 : T1, ..., xN : TN`. If any of the `Ti` are equivalent to + `unknown`, then issue a warning. + +The constraint set generated by a typed expression is: + +* The context generated by `x : T` is `x : T`. +* The context generated by `s : T` (where `s` is a scalar) is + trivial. Issue a warning if `s` has type `T`. +* The context generated by `F(M1, ..., MN) : T` is the disjunction of + the contexts generated by `F : ~function`, and by + `M1 : T1`, ...,`MN : TN` where for each `i`, `F` has an overload + `(unknown^(i-1),Ti,unknown^(N-i)) -> error`. (Pick `Ti` to be + `never` if no such overload exists). Issue a warning if `F` has an + overload `(unknown^N) -> S` where `S <: (T | error)`. +* The context generated by `M.p` is the context generated by `M : ~table`. +* The context generated by `M[N]` is the disjunction of the contexts + generated by `M : ~table` and `N : never`. + +For example: + +* The context generated by `math.abs("hi") : never` is + * the context generated by `"hi" : ~number`, since `math.abs` has an + overload `(~number) -> error`, which is trivial. + * A warning is issued since `"hi"` has type `~number`. +* The context generated by `function f(x) math.abs(x); string.lower(x) end` is + * the context generated by `math.abs(x); string.lower(x)` which is the disjunction of + * the context generated by `math.abs(x)`, which is + * the context `x : ~number`, since `math.abs` has an overload `(~number)->error` + * the context generated by `string.lower(x)`, which is + * the context `x : ~string`, since `string.lower` has an overload `(~string)->error` + * remove the binding `x : (~number | ~string)` + * A warning is issued since `(~number | ~string)` is equivalent to `unknown`. +* The context generated by `math.abs(string.lower(x))` is + * the context generated by `string.lower(x) : ~number`, since `math.abs` has an overload `(~number)->error`, which is + * the text`x : ~string`, since `string.lower` has an overload `(~string)->error`. + * An warning is issued, since `string.lower` has an overload `(unknown) -> (string | error)` and `(string | error) <: (~number | error)`. + +### Ergonomics + +*Error reporting*. A straightforward implementation of this design +issues warnings at the point that data flows into a place +guaranteed to later produce a run-time error, which may not be perfect +ergonomics. For example, in the program: + +```luau +local x +if cond() then + x = 5 +else + x = nil +end +string.lower(x) +``` + +the type inferred for `x` is `number?` and the context generated is `x +: ~string`. Since `number? <: ~string`, a warning is issued at the +declaration `local x`. For ergonomics, we might want to identify +either `string.lower(x)` or `x = 5` (or both!) in the error report. + +*Stringifying checked functions*. This design depends on functions +having overloads with `error` return type. This integrates with +[type error suppression](type-error-suppression.md), but would not be +a perfect way to present types to users. A common case is that the +checked type is the negation of the function type, for example the +type of `math.abs`: + +``` +(number) -> number & (~number) -> error +``` + +This might be better presented as an annotation on the argument type, something like: + +``` +@checked (number) -> number +``` + +The type + +``` + @checked (S1,...,SN) -> T +``` + +is equivalent to + + +``` + (S1,...,SN) -> T + & (~S1, unknown^N-1) -> error + & (unknown, ~S2, unknown^N-2) -> error + ... + & (unknown^N-1, SN) -> error +``` + +As a further extension, we might allow users to explicitly provide `@checked` type annotations. + +Checked functions are known as strong functions in Elixir. + +## Drawbacks + +This is a breaking change, since it results in more errors being issued. + +Strict mode infers more precise (and hence more complex) types than +current non-strict mode, which are presented by type error messages +and tools such as type hover. + +## Alternatives + +Success typing (used in Erlang Dialyzer) is the nearest existing +solution. It is similar to this design, except that it only works in +(the equivalent of) non-strict mode. The success typing function type +`(S)->T` is the equivalent of our +`(~S)->error & (unknown)->(T|error)`. + +We could put the `@checked` annotation on individual function argments +rather than the function type. + +We could use this design to infer checked functions. In function +`f(x1, ..., xN) B end`, we could generate the context +`(x1 : T1, ..., xN : TN)` for `B`, and add an overload +`(unknown^(i-1),Ti,unknown^(N-i))->error` to the inferred type of `f`. For +example, for the function + +```luau +function h(x, y) + math.abs(x) + string.lower(y) +end +``` + +We would infer type + +``` + (number, string) -> () +& (~number, unknown) -> error +& (unknown, ~string) -> error +``` + +which is the same as + +``` + @checked (number, string) -> () +``` + +The problem with doing this is what to do about recursive functions. + +## References + +Lily Brown, Andy Friesen and Alan Jeffrey +*Position Paper: Goals of the Luau Type System*, +in HATRA '21: Human Aspects of Types and Reasoning Assistants, +2021. +https://doi.org/10.48550/arXiv.2109.11397 + +Giuseppe Castagna, Guillaume Duboc, José Valim +*The Design Principles of the Elixir Type System*, +2023. +https://doi.org/10.48550/arXiv.2306.06391 + +Tobias Lindahl and Konstantinos Sagonas, +*Practical Type Inference Based on Success Typings*, +in PPDP '06: Principles and Practice of Declarative Programming, +pp. 167–178, 2006. +https://doi.org/10.1145/1140335.1140356 diff --git a/.cursor/rules/luau/new-require-by-string-semantics.md b/.cursor/rules/luau/new-require-by-string-semantics.md new file mode 100644 index 00000000..d7befdb6 --- /dev/null +++ b/.cursor/rules/luau/new-require-by-string-semantics.md @@ -0,0 +1,196 @@ +# Require by String with Relative Paths + +**Status**: Implemented + +## Summary + +We need to add relative paths to `require` statements to facilitate the grouping together of related Luau files into libraries and allow for future package managers to be developed and integrated easily. + +## Motivation + +The Roblox engine does not currently support require-by-string. One motivation for this RFC is to consolidate require syntax and functionality between the Roblox engine and the broader Luau language itself. + +Luau itself currently supports a basic require-by-string syntax that allows for requiring Luau modules by relative or absolute path. Unfortunately, the current implementation has a few issues. + +### Current Issues with Relative paths + +Currently, relative paths are always evaluated relative to the current working directory that the Luau CLI is running from. This leads to unexpected behavior when requiring modules from "incorrect" working directories. + +Suppose the module `math.luau` is located in `/Users/JohnDoe/LuauModules/Math` and contains the following: + +```luau +-- Beginning of /Users/JohnDoe/LuauModules/Math/math.luau +local sqrt = require("../MathHelperFunctions/sqrt") +``` + +If we then launched the Luau CLI from the directory `/Users/JohnDoe/Projects/MyCalculator` and required `math.luau` as follows: + +```luau +local math = require("/Users/JohnDoe/LuauModules/Math/math") +``` +This would cause the following: +- The current implementation of require would successfully find `math.luau`, as its absolute path was given. +- Then, it would execute the contents of `math.luau` from the context of the current working directory `/Users/JohnDoe/Projects/MyCalculator`. +- When attempting to require `sqrt.luau` from `math.luau`, instead of looking in the directory `/Users/JohnDoe/LuauModules/MathHelperFunctions`, the relative path will be evaluated in relation to the current working directory. +- This will look for `sqrt.luau` in `/Users/JohnDoe/Projects/MathHelperFunctions`, which is a directory that may not even exist. + +This behavior is [problematic](https://github.com/Roblox/luau/issues/959), and puts an unnecessary emphasis on the directory from which the Luau CLI is running. A better solution is to evaluate relative paths in relation to the file that is requiring them. + +## Design + +### Package management + +While package management itself is outside of the scope of this RFC, we want to make it possible for a package management solution to be developed in a way that integrates well with our require syntax. + +To require a Luau module under the current implementation, we must require it either by relative or absolute path: + +### String syntax + +Our require syntax should: + +- Allow a library written in Luau to be imported into the Roblox engine and "just work". +- Support compile-time file resolution _where possible_ for type checking. +- Be consistent across platforms and both inside and outside of Roblox. +- Attempt to remain consistent with the existing Luau path syntax. + +For compatibility across platforms, we will automatically map `/` onto `\`. + +### Path resolution + +**This section is now obsoleted by [this RFC](https://github.com/luau-lang/rfcs/pull/56):** +The implicit resolution order described below is no longer supported. +If multiple files exist that could match a given `require` path, an error is thrown. + +If we find files with the same name but different extensions, then we will attempt to require a file with the following extensions (in this order): +1. `.luau` +2. `.lua` +3. All other file extensions are invalid. + +If the string resolves to a directory instead of a file, then we will attempt to require a file in that directory with the following name (in this order): +1. `init.luau` +2. `init.lua` + +### Relative paths + +**This section is now partially obsoleted by [this RFC](https://github.com/luau-lang/rfcs/pull/56):** +Relative paths *must* begin with either `./` or `../`, and the `paths` variable is no longer supported. + +Modules can be required relative to the requiring file's location in the filesystem (note, this is different from the current implementation, which evaluates all relative paths in relation to the current working directory). + +If we are trying to require a module called `MyModule.luau` in `C:/MyLibrary`: +```luau +local MyModule = require("MyModule") + +-- From C:/MyLibrary/SubDirectory/SubModule.luau +local MyModule = require("../MyModule") + +-- From C:/MyOtherLibrary/MainModule.luau +local MyModule = require("../MyLibrary/MyModule") +``` + +Relative paths may begin with `./` or `../`, which denote the directory of the requiring file and its parent directory, respectively. When a relative path does begin with one of these prefixes, it will only be resolved relative to the requiring file. If these prefixes are not provided, path resolution will fallback to checking the paths in the `paths` configuration variable, as described later. + +When a require statement is executed directly in a REPL input prompt (not in a file), relative paths will be evaluated in relation to the pseudo-file `stdin`, located in the current working directory. If the code being executed is not tied to a file (e.g. using `loadstring`), executing any require statements in this code will result in an error. + +### Absolute paths + +Absolute paths will no longer be supported in `require` statements, as they are unportable. The only way to require by absolute path will be through a explicitly defined paths or aliases defined in configuration files, as described in another [RFC](https://github.com/Roblox/luau/pull/1061). + +### Implementing changes to relative paths + +The current implementation of evaluating relative paths (in relation to the current working directory) can be found in [lua_require](https://github.com/Roblox/luau/blob/e25de95445f2d635a125ab463426bb7fda017093/CLI/Repl.cpp#L133). + +When reading in the contents of a module using [readFile](https://github.com/Roblox/luau/blob/e25de95445f2d635a125ab463426bb7fda017093/CLI/FileUtils.cpp#L47), the function `fopen`/`_wfopen` is called, which itself evaluates relative paths in relation to the CWD. In order to implement relative paths in relation to the requiring file, we have two options when evaluating a relative path. + +**Assume the following:** + - Current working directory: `"/Users/johndoe/project/subdirectory/cwd"` + - Requiring file's location: `"/Users/johndoe/project/requirer.luau"` + - Relative path given to require by user: `"./sibling"` + +**Approach 1: Translate to the "correct" relative path** + - Translated relative path given to `fopen`/`_wfopen`: `"../../sibling"` + +**Approach 2: Convert the given relative path into its corresponding absolute path** + - Translated relative path given to `fopen`/`_wfopen`: `"/Users/johndoe/project/sibling"` + +Although `fopen`/`_wfopen` can handle both relative (to CWD) and absolute paths, the second approach makes more sense for our use case. We already need absolute paths for caching, as explained in the "Caching" section, so we might as well generate these absolute paths during the path resolution stage. With the first approach, we would need to call `realpath` to convert the relative-to-CWD path into an absolute path for caching, which is an unnecessary extra step. + +However, for security reasons, we don't want to expose absolute paths directly to Luau scripts (for example, through `debug.info`). To prevent this, even though we will cache and read files by absolute path (which helps reduce cache misses), the `chunkname` used to load code [here](https://github.com/Roblox/luau/blob/e25de95445f2d635a125ab463426bb7fda017093/CLI/Repl.cpp#L152) will be the file's path relative to the current working directory. This way, the output of `debug.info` will be unaffected by this RFC's proposed changes. + +- In the example above, the requiring file's stored `chunkname` would be `"../../requirer.luau"`, and its cache key would be `"/Users/johndoe/project/requirer.luau"` (was set when it was required). +- When resolving the path `"./sibling"`, we would apply this to `"../../requirer.luau"`, obtaining the relative-to-cwd path `"../../sibling.luau"`. +- This would become the `chunkname` of `sibling.luau` during loading. +- This would then be converted to an absolute path `"/Users/johndoe/project/sibling"` for caching by resolving it relative to the CWD. + +In the case of an aliased path, it doesn't make sense to make the path relative to the CWD. In this case, the alias would remain in the `chunkname` to prevent leaking any absolute paths. + +#### Where to begin traversal + +One key assumption of this section is that we will have the absolute path of the requiring file when requiring a module by relative path. + +While we could add an explicit reference to this directory to the `lua_State`, we already have an internal mechanism that allows us to get this information. We essentially want to call the `C++` equivalent of `debug.info(1, "s")` when we enter `lua_require`, which would return the name of the file that called `require`, or `stdin` if the module was required directly from the CLI. + +As an example, we might do something like this in `lua_require`: + +```cpp +static int lua_require(lua_State* L) +{ + lua_Debug ar; + lua_getinfo(L, 1, "s", &ar); + + // Path of requiring file + const char* basepath = ar.source; + + // ... +} +``` + +#### Impact on `debug.info` output + +The current implementation also has a slight inconsistency that should be addressed. When executing a Luau script directly (launching Luau with a command-line argument: `"luau script.luau"`), that base script's name is internally stored with a file extension. However, files that are later required are stored with this extension omitted. As a result, the output of `debug.info` depends on whether the file was the base Luau script being executed or was required as a dependency of the base script. + +For consistency, we propose storing the file extension in `lua_require` and always outputting it when `debug.info` is called. + +## Use cases + +### Improvements to relative-path requires + +By interpreting relative paths relative to the requiring file's location, Luau projects can now have internal dependencies. For example, in [Roact's current implementation](https://github.com/Roblox/roact), `Component.lua` requires `assign.lua` [like this](https://github.com/Roblox/roact/blob/beb0bc2706b307b04204abdcf129385fd3cb3e6f/src/Component.lua#L1C1-L1C45): + +```luau +local assign = require(script.Parent.assign) +``` + +By using "Roblox-style" syntax (referring to Roblox Instances in the require statement), `Component.lua` is able to perform a relative-to-requiring-script require. However, with the proposed changes in this RFC, we could instead do this with clean syntax that works outside of the context of Roblox: + +```luau +local assign = require("./assign") +``` + +(Of course, for this to work in the Roblox engine, there needs to be support for require-by-string in the engine. This is being discussed internally.) + +## Drawbacks + +### Backwards compatibility + +Luau libraries are already not compatible with existing Lua libraries. This is because Lua favors the `.` based require syntax instead and relies on the `LUA_PATH` environment variable to search for modules, whereas Luau currently supports a basic require-by-string syntax. + +- Libraries are fully compatible with the Roblox engine, as require-by-string is currently unimplemented. +- Luau currently implements relative paths in relation to the current working directory. +- We propose changing this behavior and breaking backwards compatibility on this front. +- With the current implementation, requiring a library that itself contains relative-path require statements [can become a mess](https://github.com/Roblox/luau/issues/959) if the Luau VM is not launched from the "correct" working directory. +- We propose the following change: relative paths passed to require statements will be evaluated in relation to the requiring file's location, not in relation to the current working directory. + - Caveat 1: if the relative-path require is executed directly in a REPL input prompt (not in a file), it will be evaluated relative to the pseudo-file `stdin`, located in the current working directory. + - Caveat 2: if the code being executed is not tied to a file (e.g. using `loadstring`), executing require statements contained in this code will throw an error. +- If this causes issues, we can later introduce a default alias for the current working directory (e.g. `@CWD`). + +## Alternatives + +### Different ways of importing packages + +In considering alternatives to enhancing relative imports in Luau, one can draw inspiration from other language systems. An elegant solution is the package import system similar to Dart's approach. Instead of relying on file-specific paths, this proposed system would utilize an absolute `package:` syntax: + +``` +import 'package:my_package/my_file.lua'; +``` +Undesirable because this would be redundant with the [alias RFC](https://github.com/Roblox/luau/pull/1061). diff --git a/.cursor/rules/luau/property-readonly.md b/.cursor/rules/luau/property-readonly.md new file mode 100644 index 00000000..b692e0fe --- /dev/null +++ b/.cursor/rules/luau/property-readonly.md @@ -0,0 +1,148 @@ +# Read-only properties + +## Summary + +Allow properties of classes and tables to be inferred as read-only. + +## Motivation + +Currently, Roblox APIs have read-only properties of classes, but our +type system does not track this. As a result, users can write (and +indeed due to autocomplete, an encouraged to write) programs with +run-time errors. + +In addition, user code may have properties (such as methods) +that are expected to be used without modification. Currently there is +no way for user code to indicate this, even if it has explicit type +annotations. + +It is very common for functions to only require read access to a parameter, +and this can be inferred during type inference. + +## Design + +### Properties + +Add a modifier to table properties indicating that they are read-only. + +This proposal is not about syntax, but it will be useful for examples to have some. Write: + +* `read p: T` for a read-only property of type `T`. + +For example: +```luau +function f(t) + t.p = 1 + t.p + t.q +end +``` +has inferred type: +``` +f: (t: { p: number, read q: number }) -> () +``` +indicating that `p` is used read-write but `q` is used read-only. + +### Subtyping + +Read-only properties are covariant: + +* If `T` is a subtype of `U` then `{ read p: T }` is a subtype of `{ read p: U }`. + +Read-write properties are a subtype of read-only properties: + +* If `T` is a subtype of `U` then `{ p: T }` is a subtype of `{ read p: U }`. + +### Indexers + +Indexers can be marked read-only just like properties. In +particular, this means there are read-only arrays `{read T}`, that are +covariant, so we have a solution to the "covariant array problem": + +```luau +local dogs: {Dog} +function f(a: {read Animal}) ... end +f(dogs) +``` + +It is sound to allow this program, since `f` only needs read access to +the array, and `{Dog}` is a subtype of `{read Dog}`, which is a subtype +of `{read Animal}`. This would not be sound if `f` had write access, +for example `function f(a: {Animal}) a[1] = Cat.new() end`. + +### Functions + +Functions are not normally mutated after they are initialized, so +```luau +local t = {} +function t.f() ... end +function t:m() ... end +``` + +should have type +``` +t : { + read f : () -> (), + read m : (self) -> () +} +``` + +If developers want a mutable function, +they can use the anonymous function version +```luau +t.g = function() ... end +``` + +For example, if we define: +```luau + type RWFactory = { build : () -> A } +``` + +then we do *not* have that `RWFactory` is a subtype of `RWFactory` +since the build method is read-write, so users can update it: +```luau + local mkdog : RWFactory = { build = Dog.new } + local mkanimal : RWFactory = mkdog -- Does not typecheck + mkanimal.build = Cat.new -- Assigning to methods is OK for RWFactory + local fido : Dog = mkdog.build() -- Oh dear, fido is a Cat at runtime +``` + +but if we define: +```luau + type ROFactory = { read build : () -> A } +``` + +then we do have that `ROFactory` is a subtype of `ROFactory` +since the build method is read-write, so users can update it: +```luau + local mkdog : ROFactory = { build = Dog.new } + local mkanimal : ROFactory = mkdog -- Typechecks now! + mkanimal.build = Cat.new -- Fails to typecheck, since build is read-only +``` + +Since most idiomatic Lua does not update methods after they are +initialized, it seems sensible for the default access for methods should +be read-only. + +*This is a possibly breaking change.* + +### Classes + +Classes can also have read-only properties and accessors. + +Methods in classes should be read-only by default. + +Many of the Roblox APIs an be marked as having getters but not +setters, which will improve accuracy of type checking for Roblox APIs. + +## Drawbacks + +This is adding to the complexity budget for users, +who will be faced with inferred get modifiers on many properties. + +## Alternatives + +Rather than making read-write access the default, we could make read-only the +default and add a new modifier for read-write. This is not backwards compatible. + +We could continue with read-write access to methods, +which means no breaking changes, but means that users may be faced with type +errors such as "`Factory` is not a subtype of `Factory`". diff --git a/.cursor/rules/luau/property-writeonly.md b/.cursor/rules/luau/property-writeonly.md new file mode 100644 index 00000000..22e365a7 --- /dev/null +++ b/.cursor/rules/luau/property-writeonly.md @@ -0,0 +1,179 @@ +# Write-only properties + +## Summary + +Allow properties of classes and tables to be inferred as write-only. + +## Motivation + +This RFC is a follow-on to supporting read-only properties. + +Read-only properties have many obvious use-cases, but write-only properties +are more technical. + +The reason for wanting write-only properties is that it means +that we can infer a most specific type for functions, which we can't do if +we only have read-write and read-only properties. + +For example, consider the function +```luau + function f(t) t.p = Dog.new() end +``` + +The obvious type for this is +```luau + f : ({ p: Dog }) -> () +``` + +but this is not the most specific type, since read-write properties +are invariant, We could have inferred `f : ({ p: Animal }) -> ()`. +These types are incomparable (neither is a subtype of the other) +and there are uses of `f` that fail to typecheck depending which one choose. + +If `f : ({ p: Dog }) -> ()` then +```luau + local x : { p : Animal } = { p = Cat.new() } + f(x) -- Fails to typecheck +``` + +If `f : ({ p: Animal }) -> ()` then +```luau + local x : { p : Dog } = { p = Dog.new() } + f(x) -- Fails to typecheck +``` + +The reason for these failures is that neither of these is the most +specific type. It is one which includes that `t.p` is written to, and +not read from. +```luau + f : ({ write p: Dog }) -> () +``` + +This allows both example uses of `f` to typecheck. To see that it is more specific than `({ p: Animal }) -> ()`: + +* `Dog` is a subtype of `Animal` +* so (since write-only properties are contravariant) `{ write p: Dog }` is a supertype of `{ write p: Animal }` +* and (since read-write properties are a subtype of write-only properties) `{ write p: Animal }` is a supertype of `{ p: Animal }` +* so (by transitivity) `{ write p: Dog }` is a supertype of `{ write p: Animal }` is a supertype of `{ p: Animal }` +* so (since function arguments are contravariant `({ write p: Dog }) -> ()` is a subtype of `({ p: Animal }) -> ()` + +and similarly `({ write p: Dog }) -> ()` is a subtype of `({ p: Dog }) -> ()`. + +Local type inference depends on the existence of most specific (and most general) types, +so if we want to use it "off the shelf" we will need write-only properties. + +There are also some security reasons why properties should be +write-only. If `t` is a shared table, and any security domain can +write to `t.p`, then it may be possible to use this as a back-channel +if `t.p` is readable. If there is a dynamic check that a property is +write-only then we may wish to present a script analysis error if a +user tries reading it. + +## Design + +### Properties + +Add a modifier to table properties indicating that they are write-only. + +This proposal is not about syntax, but it will be useful for examples to have some. Write: + +* `write p: T` for a write-only property of type `T`. + +For example: +```luau +function f(t) + t.p = 1 + t.q +end +``` +has inferred type: +``` +f: (t: { write p: number, read q: number }) -> () +``` +indicating that `p` is used write-only but `q` is used read-only. + +### Adding read-only and write-only properties + +There are various points where type inference adds properties to types, we now have to consider how to treat each of these. + +When reading a property from a free table, we should add a read-only +property if there is no such property already. If there is already a +write-only property, we should make it read-write. + +When writing a property to a free table, we should add a write-only +property if there is no such property already. If there is already a +read-only property, we should make it read-write. + +When writing a property to an unsealed table, we should add a read-write +property if there is no such property already. + +When declaring a method in a table or class, we should add a read-only property for the method. + +### Subtyping + +Write-only properties are contravariant: + +* If `T` is a subtype of `U` then `{ write p: U }` is a subtype of `{ write p: T }`. + +Read-write properties are a subtype of write-only properties: + +* If `T` is a subtype of `U` then `{ p: U }` is a subtype of `{ write p: T }`. + +### Indexers + +Indexers can be marked write-only just like properties. In +particular, this means there are write-only arrays `{write T}`, that are +contravariant. These are sometimes useful, for example: + +```luau +function move(src, tgt) + for i,v in ipairs(src) do + tgt[i] = src[i] + src[i] = nil + end +end +``` + +we can give this function the type +``` + move: ({a},{write a}) -> () +``` + +and since write-only arrays are contravariant, we can call this with differently-typed +arrays: +```luau + local dogs : {Dog} = {fido,rover} + local animals : {Animal} = {tweety,sylvester} + move (dogs,animals) +``` + +This program does not type-check with read-write arrays. + +### Classes + +Classes can also have write-only properties and indexers. + +Some Roblox APIs which manipulate callbacks are write-only for security reasons. + +### Separate read and write types + +Once we have read-only properties and write-only properties, type intersection +gives read-write properties with different types. + +```luau + { read p: T } & { write p : U } +``` + +If we infer such types, we may wish to present them differently, for +example TypeScript allows both a getter and a setter. + +## Drawbacks + +This is adding to the complexity budget for users, who will be faced +with inferred set modifiers on many properties. There is a trade-off +here about how to spend the user's complexity budget: on understanding +inferred types with write-only properties, or debugging false positive +type errors caused by variance issues). + +## Alternatives + +Just stick with read-only and read-write accesses. diff --git a/.cursor/rules/luau/rawget-type-operator.md b/.cursor/rules/luau/rawget-type-operator.md new file mode 100644 index 00000000..adac2db4 --- /dev/null +++ b/.cursor/rules/luau/rawget-type-operator.md @@ -0,0 +1,53 @@ +# `rawget` type function + +**Status**: Implemented + +## Summary + +This RFC proposes the addition of a new type function, `rawget`, which can be used to look up a specific property of a table type *without* invoking the `__index` metamethod. + +## Motivation + +Currently, `rawget` is a built-in runtime operator in the language ([rawget in Luau Global functions](https://luau-lang.org/library#global-functions)) that is missing a corresponding type function that captures its behavior. This RFC seeks to address this hole in the type system by providing a builtin type function for `rawget` that will allow Luau developers to express more accurate types in their code: + +```luau +local prop: rawget = rawget(someExpr, "someProp") +``` + +## Design + +The functionality of the `rawget` type function behaves the same as its [runtime counterpart](https://luau-lang.org/library#global-functions). Namely, it provide a way to look up a specific property of a table type without invoking the `__index` metamethod. + +```luau +local var1 = { + property = "Hello" +} + +local var2 = setmetatable({ }, { __index = var1 }) +type doesntExist = rawget -- reduces to an error + +local var3 = setmetatable({ property = 1 }, { __index = var1 }) +type doesExist = rawget -- doesExist = number +``` + +Error messages would be consistent with those of the `index` type function: +```luau +type doesntExist = rawget -- Error message: Property '"property"' does not exist on type 'var2' + +local key = "property" +type age = rawget -- Error message: Second argument to rawget is not a valid index type; Unknown type 'key' +``` + +Note: `rawget` type function does not work on class types because they do not have direct fields that can be looked up without invoking its metamethod. + +The implementation effort for this type function is very minimal. Since the `rawget` type function functions similarly to the `index` type function, we can reuse the functions already used to implement the `index` type function. + +## Drawbacks + +There aren't appreciable drawbacks. One possible drawback is the increase in the size of the codebase, which may complicate maintenance. However, this is not expected to be a major drawback since the code for `index` type functions already exists. By reusing the code, it is even fair to say that there will be less than 50 lines of code needed to implement this type function. + +Another drawback can come from the extra knowledge a user may need in order to use this type function. For example, users will need to know the inner workings of types and how different operations interact with them (for instance, how `index` interacts with metatables that have the `__index` metamethod). However, this additional complexity is manageable because the language already incorporates such complexities at the runtime level. Developers are already familiar with concepts like `rawget`, so this does not add much new complexity. + +## Alternatives + +An alternative to the `rawget` type function is to enable users to modify the behavior of the existing `index` type function to control its recursive nature. While this approach offers flexibility, it requires additional design considerations and complicates both usage and implementation. However, the introduction of "user-defined type functions" is planned for the near future. This will allow users to create their own type functions, making this alternative design feasible for developers to implement. \ No newline at end of file diff --git a/.cursor/rules/luau/recursive-type-restriction.md b/.cursor/rules/luau/recursive-type-restriction.md new file mode 100644 index 00000000..e7198c28 --- /dev/null +++ b/.cursor/rules/luau/recursive-type-restriction.md @@ -0,0 +1,65 @@ +# Recursive type restriction + +**Status**: Implemented + +## Summary + +Restrict generic type aliases to only be able to refer to the exact same instantiation of the generic that's being declared. + +## Motivation + +Luau supports recursive type aliases, but with an important restriction: +users can declare functions of recursive types, such as: +```luau + type Tree = { data: a, children: {Tree} } +``` +but *not* recursive type functions, such as: +```luau + type Weird = { data: a, children: Weird<{a}> } +``` +If types such as `Weird` were allowed, they would have infinite unfoldings for example: +```luau + Weird = { data: number, children: Weird<{number}> }` + Weird<{number}> = { data: {number}, children: Weird<{{number}}> } + Weird<{{number}}> = { data: {{number}}, children: Weird<{{{number}}}> } + ... +``` + +Currently Luau has this restriction, but does not enforce it, and instead +produces unexpected types, which can result in free types leaking into +the module exports. + +## Design + +To enforce the restriction that recursive types aliases produce functions of +recursive types, we require that in any recursive type alias defining `T`, +in any recursive use of `T`, we have that `gs` and `Us` are equal. + +This allows types such as: +```luau + type Tree = { data: a, children: {Tree} } +``` +but *not*: +```luau + type Weird = { data: a, children: Weird<{a}> } +``` +since in the recursive use `a` is not equal to `{a}`. + +This restriction applies to mutually recursive types too. + +## Drawbacks + +This restriction bans some type declarations which do not produce infinite unfoldings, +such as: +```luau + type WeirdButFinite = { data: a, children: WeirdButFinite } +``` +This restriction is stricter than TypeScript, which allows programs such as: +```typescript +interface Foo { x: Foo[]; y: a; } +let x: Foo = { x: [], y: 37 } +``` + +## Alternatives + +We could adopt a solution more like TypeScript's, which is to lazily rather than eagerly instantiate types. diff --git a/.cursor/rules/luau/relax-recursive-type-restriction.md b/.cursor/rules/luau/relax-recursive-type-restriction.md new file mode 100644 index 00000000..3dd3da59 --- /dev/null +++ b/.cursor/rules/luau/relax-recursive-type-restriction.md @@ -0,0 +1,80 @@ +# Relax the recursive type restriction + +## Summary + +Relax the [recursive type restriction](recursive-type-restriction.md) by implementing isorecursive +types properly for parameterized type aliases. + +## Motivation + +Luau supports parameterized type aliases as follows: +```luau +type Box = { data: T } +``` + +These type aliases can also be recursive: +```luau +type Tree = { data: T, children: {Tree} } +``` +but the [recursive type restriction](recursive-type-restriction.md) limits us to supporting only +direct recursion as above, where the type aliases' parameters remain unchanged. + +At the time the restriction was implemented, Luau featured a greedy type inference engine that would +forward declare type aliases using a free type. Recursive uses of that type alias in the definition +would attempt to instantiate them before the alias is resolved (effectively a noop). The result was +often nonsensical, incomplete types with unresolved free types present in them. + +This limitation means that Luau's type system is unable to express common recursive type patterns +for data structures, such as `andThen` for a monadic data type like `Promise`. For instance, the +following definition is rejected because of the use of `Promise` in the signature of `andThen`: +```luau +type Promise = { + create: (T) -> Promise, + andThen: (self: Promise, callback: (T) -> Promise) -> Promise +} +``` + +## Design + +Today, Luau has a new type inference engine that is able to deal with dynamic constraint resolution +and has already allowed us to build a system for arbitrary type functions, both builtin and +provided with the language and [user-defined type functions](user-defined-type-functions.md). We can +relax the recursive type restriction today in this new type inference engine by treating type +aliases as proper type functions that are lazily expanded when their contents are needed. + +## Drawbacks + +Eliminating this restriction means committing to an intrinsically more complicated architecture for +type inference in Luau in general. The Luau team, however, has already made the decision to do this, +and so there seems to be little drawback beyond the obvious implementation work required in making +type alias expansion completely lazy. This pays for itself in the considerable gain in expressivity +gained for users of the type system. + +## Alternatives + + +### Equirecursive Types + +The main alternative besides doing nothing at all would be to implement equirecursive types. +Equirecursive types have considerably greater complexity, both for humans and for computers. They +pose considerable algorithmic challenges for both type checking and type inference, and require +an implementation of a canonicalization of recursive types that is O(n log n). Isorecursive types +are simpler, map closely to what is already implemented in Luau today, and match the intuitions +users likely have from interacting with recursive types in nominal object-oriented languages. + +### Strict type aliases with Caching + +[A previous RFC](https://github.com/asajeffrey/rfcs/blob/recursive-type-unrestriction/docs/recursive-type-unrestriction.md) +proposed loosening the recursive type restriction, but still leaving it partially in tact, by implementing a strategy of +mapping distinct recursive uses of a type alias to a free type during the definition portion of constructing the type alias +and then tying the knot using that mapping as a cache. This feels in the spirit of Landin's Knot, and was a meaningful +proposal to improve the status quo without us implementing a new type inference engine, but as mentioned in the drawbacks +section, this work is already well underway for other reasons and so the appeal of taking this route today is lessened. + +### Lazy recursive type instantiations with Caching + +The previous RFC also mentioned briefly both the approach proposed by this RFC and an approach that uses a cache as well +to limit the size of the graph. This may be useful, and may in fact be what we implement, but the author of this RFC does +not feel that it is necessary to make a commitment one way or the other to the implementation using caching. We will do +whatever gets us the correct semantics for recursive types, and if there is any caching, it should not be visible to the +user. diff --git a/.cursor/rules/luau/require-by-string-aliases.md b/.cursor/rules/luau/require-by-string-aliases.md new file mode 100644 index 00000000..35e7c502 --- /dev/null +++ b/.cursor/rules/luau/require-by-string-aliases.md @@ -0,0 +1,275 @@ +# Require by String with Aliases + +**Status**: Implemented + +## Summary + +We need to add intuitive alias and paths functionality to facilitate the grouping together of related Luau files into libraries and allow for future package managers to be developed and integrated easily. + +## Motivation + +The Roblox engine does not currently support require-by-string. One motivation for this RFC is to consolidate require syntax and functionality between the Roblox engine and the broader Luau language itself. + +Luau itself currently supports a basic require-by-string syntax that allows for requiring Luau modules by relative or absolute path. Unfortunately, the current implementation does not support aliases. + +### Package management + +While package management itself is outside of the scope of this RFC, we want to make it possible for a package management solution to be developed in a way that integrates well with our require syntax. + +To require a Luau module under the current implementation, we must require it either by relative or absolute path: + +```luau +-- Requiring Roact by absolute path +local Roact = require("C:/LuauModules/Roact-v1.4.2") +``` + +If we wanted to change the location of this package on disk, we would have to modify all files that require the old path above, which essentially boils down to manual package management. This approach is tedious and prone to mistakes. + +To solve this, we introduce path and alias configuration in this RFC, which would allow for future package management software to maintain package paths and versions by directly modifying configuration files. + +This would also create simple and readable require statements for developers. + +```luau +-- Suppose "@src" is an alias for the same directory as "../../../../../" + +-- Instead of this: +local result = require("../../../../../HelperModules/graphing") + +-- We could have this: +local result = require("@src/HelperModules/graphing") +``` + +## Design + +### Aliases + +Aliases can be used to bind an absolute or relative path to a convenient, case-insensitive name that can be required directly. + +```json +"aliases": { + "Roact": "C:/LuauModules/Roact-v1.4.2" +} +``` + +Based on the alias map above, you would be able to require Roact directly with an `@` prefix: + +```luau +local Roact = require("@Roact") +``` + +Or even a sub-module: + +```luau +local createElement = require("@Roact/createElement") +``` + +Aliases are overrides. Whenever the first component of a path exactly matches a pre-defined alias, it will be replaced before the path is resolved to a file. Alias names are also restricted to the charset `[A-Za-z0-9.\-_]`. We restrict the charset and make them case insensitive because we envision alias names to be primarily used as package names, which tend to be case insensitive and alphanumeric. They also must be preceded by an `@` symbol. + +#### Versioning + +Aliases are simple bindings and aren't concerned with versioning. The intention is to allow package management software to leverage aliases by automatically adding and updating the alias map to reflect a package's dependencies. For manual versioning, a user could always "version" their aliases: `@MyModule-v1`, `@MyModule-v2`, etc. + +#### Library root alias + +In the past, it has been proposed to define an alias (e.g. "`@`") to represent the root directory of a file's encapsulating library. +- However, the concept of a "Luau library" and its root directory is not yet rigorously defined in Luau, in terms of folder/file structure. +- In the future, we may add a `package.json` file or something similar that marks the root directory of a library, but this is outside of the scope of this RFC, which primarily focuses on improving require-by-string. +- For the time being, this functionality will remain unimplemented for this reason. The alias "`@`" will remain reserved for now, meaning it cannot be overridden. + +Of course, users can still use the alias map to explicitly define this behavior with a named alias: + +```json +"aliases": { + "src": "../" +} +``` + +#### Current limitations of aliases + +- Alias names cannot contain the directory separators `/` and `\`. +- Aliases can only occur at the beginning of a path. + +#### Configuring alias maps: .luaurc + +As part of this proposal, alias maps will be configured in `.luaurc`, which follows a JSON-like syntax. + +Proposed structure of an alias map: +```json +{ + "aliases": { + "alias1": "/path/of/alias1", + "alias2": "/path/of/alias2" + } +} +``` + +Missing aliases in `.luaurc` are inherited from the alias maps of any parent directories, and fields can be overridden. + +If an alias is bound to a relative path, the path will be evaluated relative to the `.luaurc` file in which the alias was defined. +If an alias resolves to an aliased path, the aliased path is resolved by checking the current `.luaurc` file and falling back to parent directories if needed. +This search continues iteratively if a chain of aliases must be resolved; if a cycle is detected, alias resolution will fail with an error. + +Finally, providing support for alias maps within the Roblox engine is out of the scope of this RFC but is being considered internally. + +### Paths + +**This section is now obsoleted by [this RFC](https://github.com/luau-lang/rfcs/pull/56):** +The `paths` array described below is no longer supported. + +Similar to [paths in TypeScript](https://www.typescriptlang.org/tsconfig#paths), we will introduce a `paths` array that can be configured in `.luaurc` files. Whenever a path is passed to `require` and does not begin with `./` or `../`, the path will first be resolved relative to the requiring file. If this fails, we will attempt to resolve paths relative to each path in the `paths` array. + +The `paths` array can contain absolute paths, and relative paths are resolved relative to `.luaurc` file in which they appear. + +#### Example Definition + +With the given `paths` definition (`.luaurc` file located in `/Users/johndoe/Projects/MyProject/src`): +```json +"paths": [ + "../dependencies", + "/Users/johndoe/MyLuauLibraries", + "/Users/johndoe/MyOtherLuauLibraries", +] +``` + +If `/Users/johndoe/Projects/MyProject/src/init.luau` contained the following code: +```luau +local graphing = require("graphing") +``` +We would search the following directories, in order: +- `/Users/johndoe/Projects/MyProject/src` +- `/Users/johndoe/Projects/MyProject/dependencies` +- `/Users/johndoe/MyLuauLibraries` +- `/Users/johndoe/MyOtherLuauLibraries` + +### Symlinks + +Symlinks carry some security concerns; for example, a link's target might exist outside of the project folder in which the link was defined. For the first version of this implementation, symlinks will not be supported and will be treated as ordinary files. + +If we do implement symlinks in the future, we will likely use our own limit to the number of symlinks to "follow through" for cross-platform compatibility. It is also possible that we will add a new configurable property in `.luaurc` that will allow developers to toggle whether or not to resolve symlinks. + +Similar examples: +- https://www.typescriptlang.org/tsconfig#preserveSymlinks +- https://webpack.js.org/configuration/resolve/#resolvesymlinks + +## Use Cases + +### Alias map + +Using alias maps, Luau developers can require globally installed Luau libraries in their code without needing to specify their locations in Luau scripts. + +``` +luau-aliases-project +├── .luaurc +└── src + └── module.luau +``` + +For example, if we wanted to require `Roact` in `module.luau`, we could add the following alias to `.luaurc`: + +```json +{ + "aliases": { + "Roact": "/Users/johndoe/LuauLibraries/Roact/src" + } +} +``` + +Then, we could simply write the following in `module.luau`, and everything would work as intended: +```luau +local Roact = require("@Roact") +local Component = require("@Roact/Component") +``` + +If we ever wanted to change the version of `Roact` used by `luau-aliases-project`, we would simply change the absolute path to `Roact` in `.luaurc`. By abstracting away the exact location of globally installed libraries like this, we get clean, readable code, and we make it easier for a future package manager to update dependencies by modifying `.luaurc` files. + +### Paths array + +**This section is now obsoleted by [this RFC](https://github.com/luau-lang/rfcs/pull/56):** +The `paths` array described below is no longer supported. + +The `paths` configuration variable provides convenience and allows Luau developers to build complex, well-organized libraries. Imagine the following project structure: + +``` +luau-paths-project +├── .luaurc +├── dependencies +│ └── dependency.luau +└── src + └── module.luau +``` + +If `.luaurc` contained the following `paths` array: +```json +{ + "paths": ["./dependencies"] +} +``` + +Then, `module.luau` could simply require `dependency.luau` like this: +```luau +local dependency = require("dependency") + +-- Instead of: require("../dependencies/dependency") +``` + +Using the `paths` array allows Luau developers to organize their projects however they like without compromising code readability. + +### Large-scale projects in Luau + +For large-scale Luau projects, we might imagine that every dependency of the project is a Luau project itself. We might use an organizational structure like this to create a clean hierarchy: + +``` +large-luau-project +├── .luaurc +├── subproject-1 +├── subproject-2 +└── subproject-3 +``` + +We can provide the following alias in `large-luau-project/.luaurc`: + +```json +{ + "aliases": { + "com.roblox.luau": "." + } +} +``` + +This way, each subproject directory can contain its own source code, dependencies, and `.luaurc` configuration files, while also inheriting the `com.roblox.luau` alias from `large-luau-project/.luaurc`. + +This allows us to refer to other subprojects like this, regardless of the exact location of the requiring file in `large-luau-project`: +```luau +local subproject1 = require("@com.roblox.luau/subproject-1") +``` +### Roblox Specifics +In the Roblox engine, a similar aliasing system could be implemented. Assuming a central package management system were available, a Roblox Script could contain local Roact = require("@Roact"), and everything would "just work". + +## Drawbacks +## Backwards Compatibility +This alias system introduces a new layer to require that wasn't previously there. However, the advantages of this system are expected to outweigh the complexities it introduces. + +## Alternatives + +### Different ways of defining aliases + +#### Defining paths/aliases directly in the requiring file + +Rather than defining paths/alias maps in an external configuration file, we could alternatively define paths/aliases directly in the files that require them. For example, this could manifest itself through an extension of the `--!` comment syntax or introduce new syntax like `--@ = @`. +```luau +--@"Roact" = @"C:/LuauModules/Roact-v1.4.2" +local Roact = require("@Roact") + +-- Same as this: +local Roact = require("C:/LuauModules/Roact-v1.4.2") +``` + +Some potential issues with this approach: +- Could lead to Luau file headers becoming cluttered. +- Would probably lead to substantial copy-and-pasting between modules in the same library, as they would likely need to share certain paths/aliases. +- Using configuration files for paths/alias maps allows modules to share aliases while still providing the flexibility to override if needed. This approach does not support inheritance and overriding in an obvious way. +- Removes the layer of abstraction that is provided by external paths/alias maps. This might also blur the scope of package managers. The software would need to directly modify lines of code in `.luau` files, rather than modifying configuration files. + +#### Defining configuration files in a non-JSON format + +Alias maps could alternatively be defined in specially named `.luau` files themselves, or at least adhering to Luau syntax. This approach is somewhat unappealing, however, as it would require package management software to parse Luau syntax. JSON syntax is well-understood and well-supported, which would likely facilitate the development of package management software. diff --git a/.cursor/rules/luau/reserve-dollar-sign.md b/.cursor/rules/luau/reserve-dollar-sign.md new file mode 100644 index 00000000..eecf1bd1 --- /dev/null +++ b/.cursor/rules/luau/reserve-dollar-sign.md @@ -0,0 +1,34 @@ +# Reserve dollar sign (`$`) to be forever unused + +## Summary + +This RFC proposes a stable contract that `$` will not be used for any features in Luau, and will not be accepted as part of identifier tokens. + +## Motivation + +By reserving `$` external pattern matching tools, which at time of writing are already planned to be created by both Roblox and full-moon, can use it to symbolize things like placeholder tokens, similar to [ast-grep](https://ast-grep.github.io/guide/pattern-syntax.html). + +For example, a search in ast-grep for "checking equality to itself" would be `$A == $A`. This becomes ambiguous and harder to write if `$A` is also a valid identifier, or means some potential expression. + +## Design + +Nothing more than a stable contract is necessary. `$` will not be allowed in identifiers, and `$` will not be a component of any syntax being added to the language. + +`$` is chosen as it seems fairly unlikely we will ever use it for any syntax, while at the same time its use as a placeholder token is common. +- ast-grep, as mentioned before +- SQL uses `$` for binded parameters in prepared statements + +## Drawbacks + +The dollar sign is used in a couple of places outside Luau: + +- JavaScript, C++, and probably others allow it as an identifier, which jQuery uses as its primary controller +- PHP, Perl, Bash, and others both use it for variables (`$name = "John"`) +- Haskell uses it as an infix operator as sugar to help clean up function applications + +These use cases are nowhere near compelling enough to where we would likely do the same. + +## Alternatives + +- Don't do it, as always. +- Pick a different sigil, though `$` is a fairly clear choice diff --git a/.cursor/rules/luau/sealed-table-subtyping.md b/.cursor/rules/luau/sealed-table-subtyping.md new file mode 100644 index 00000000..006d8dc5 --- /dev/null +++ b/.cursor/rules/luau/sealed-table-subtyping.md @@ -0,0 +1,106 @@ +# Sealed table subtyping + +**Status**: Implemented + +## Summary + +In Luau, tables have a state, which can, among others, be "sealed". A sealed table is one that we know the full shape of and cannot have new properties added to it. We would like to introduce subtyping for sealed tables, to allow users to express some subtyping relationships that they currently cannot. + +## Motivation + +We would like this code to type check: +```luau +type Interface = { + name: string, +} + +type Concrete = { + name: string, + id: number, +} + +local x: Concrete = { + name = "foo", + id = 123, +} + +local function getImplementation(): Interface + return x +end +``` +Right now this code fails to type check, because `x` contains an extra property, `id`. Allowing sealed tables to be subtypes of other sealed tables would permit this code to type check successfully. + +## Design + +In order to do this, we will make sealed tables act as a subtype of other sealed tables if they contain all the properties of the supertype. + +``` +type A = { + name: string, +} + +type B = { + name: string, + id: number, +} + +type C = { + id: number, +} + +local b: B = { + name = "foo", + id = 123, +} + +-- works: B is a subtype of A +local a: A = b + +-- works: B is a subtype of C +local c: C = b + +-- fails: A is not a subtype of C +local a2: A = c +``` + +This change affects existing code, but it should be a strictly more permissive change - it won't break any existing code, but it will allow code that was previously denied before. + +## Drawbacks + +This change will mean that sealed tables that don't exactly match may be permitted. In the past, this was an error; users may be relying on the type checker to perform these checks. We think the risk of this is minimal, as the presence of extra properties is unlikely to break user code. This is an example of code that would have raised a type error before: + +```luau +type A = { + name: string, +} + +local a: A = { + name = "foo", + -- Before, we would have raised a type error here for the presence of the + -- extra property `id`. + id = 123, +} +``` + +## Alternatives + +In order to avoid any chance of breaking backwards-compatibility, we could introduce a new state for tables, "interface" or something similar, that can only be produced via new syntax. This state would act like a sealed table, except with the addition of the subtyping rule described in this RFC. An example syntax for this: + +```luau +-- `interface` context-sensitive keyword denotes an interface table +type A = interface { + name: string, +} + +type B = { + name: string, + id: number, +} + +local b: B = { + name = "foo", + id = 123, +} + +local a: A = b +``` diff --git a/.cursor/rules/luau/shared-self-types.md b/.cursor/rules/luau/shared-self-types.md new file mode 100644 index 00000000..33fc8909 --- /dev/null +++ b/.cursor/rules/luau/shared-self-types.md @@ -0,0 +1,367 @@ +# Shared self types + +## Summary + +This RFC proposes sharing `self` types between method definitions which share a metatable. + +## Motivation + +Currently, metamethods are type-inferred independently, and so give +completely separate types to `self`. This has poor ergonomics, as type +errors for inconsistent methods are produced on method calls rather +than method definitions. It also has poor performance, as the independent +self types have separate memory footprints, and there is idiomatic code with +exponential blowup in the size of the type graph. + +For example, `Point` class can be simulated using metatables: + +```luau + --!strict + + local Point = {} + Point.__index = Point + + function Point.new() + local result = {} + setmetatable(result, Point) + result.x = 0 + result.y = 0 + return result + end + + function Point:getX() + return self.x + end + + function Point:getY() + return self.Y + end + + function Point:abs() + return math.sqrt(self:getX() * self:getX() + self:getY() * self:getY()) + end +``` + +Currently, this code is problematic, since there is no connection between the types +of the `Point` metamethods. For example, the inferred type for `Point.getX` +is `({ x : a }) -> a`, rather than the expected `(Point) -> number`. + +Even worse, the method `Point.abs` does not type-check, since the type +of `self.x * self.x` is unknown. If Luau had subtyping constraints and type families +for overloaded operators, the inferred type would be something like: + +```luau + type PointMT = { + new : () -> Point, + getX : ({ x : a }) -> a, + getY : ({ y : a }) -> a, + abs : (a) -> number where + a <: { getX : (a) -> b, getY : (a) -> c } + Add, Mul> <: number, + } + type Point = { + x : number, + y : number, + @metatable PointMT + } +``` + +but this type is not great ergonomically, since this type may be presented to +users in type hover or type error messages, and will surprise users +expecting a simpler type such as: + +```luau + type PointMT = { + new : () -> Point + getX : (Point) -> number, + getY : (Point) -> number, + abs : (Point) -> number + } + type Point = { + x : number, + y : number, + @metatable PointMT + } +``` + +This is the type inferred by *shared self types*. Rather than +inferring the `self` type separately for each metamethod declared on a +table, and for each use of `setmetatable` the same type is used. + +Unfortunately, while this change is fairly straightforward for +monomorphic types like `Point`, it is problematic for generic classes +such as containers. For example: + +```luau +local Set = {} +Set.__index = Set + +function Set.new() + return setmetatable({ + elements={} + }, Set) +end + +function Set:add(el) + self.elements[el] = true +end + +function Set:contains(el) + return self.elements[el] ~= nil +end +``` + +In this case, the expected type would be something like: + + +```luau + type SetMT = { + new : () -> Set, + add : (Set, E) -> (), + contains : (Set, E) -> boolean + } + type Set = { + elements : { [E] : boolean }, + @metatable SetMT + } +``` + +Inferring this type is beyond the scope of this RFC, though. Initially, we propose only inferring `self` monotypes, +in this case: + + +```luau + type SetMT = { + new : () -> Set, + add : (Set, unknown) -> (), + contains : (Set, unknown) -> boolean + } + type Set = { + elements : { [unknown] : boolean }, + @metatable SetMT + } +``` + +and propose allowing explicit declaration of the shared self type, +following the common practice of naming the self type after the metatable: + +```luau + type Set = { elements : { [E] : boolean } } +``` + +This type (and its generic type parameters) are used to derive the +type of `self` in methods declared using `function Set:m()` +declarations: + +```luau + type SetSelf = { + elements : { [E] : boolean }, + @metatable SetMT + } +``` + +In cases where shared self types are just getting in the way, there +are two work-arounds. Firstly, the shared self type can be declared to +be `any`, which will silence type errors: + +```luau + type Foo = any +``` + +Secondly, the self type can be declared explicitly: + +```luau + function Foo.m(self : Bar) ... end +``` + +## Design + +### Self types + +For each table `t`, introduce: + +* the self type parameters of `t`, a sequence of generic type and typepack variables, +* the self type definition of `t`, a type which can use the type parameters of `t`, and +* the self type of `t`, a type which can use the type parameters of `t`. + +These can be declared explicitly: + +```luau + type t = U +``` + +which defines, when `t` has type `T`: + +* the self type parameters of `t` to be `As`, +* the self type definition of `t` to be `U`, and +* the self type of `t` to be `U` extended with `@metatable T`. + +For example, + +```luau + type Set = { [E] : boolean } +``` + +declares, when `Set` has type `SetMT`: + +* the self type parameters of `Set` to be `E`, +* the self type definition of `Set` to be `{ [E] : boolean }`, and +* the self type of `Set` to be `{ [E] : boolean, @metatable SetMT }`. + +If there is no explicit declaration of the self type of `t`, then, when `t` has type `T`: + +* the self type parameters of `t` are empty, +* the self type definition of `t` is a free table type `U`, +* if `t` has an `__index` property of type `MT`, then the self type of `t` is + a metatable type, whose metatable is `MT`, and whose table is `U`, and +* if `t` does not have an `__index` property, then the self type of `t` is `U`. + +The free table type is unified in the usual fashion. + +Self types are used in two ways: in calls to `setmetatable`, and in metamethod declarations. + +### `setmetatable` + +In calls to `setmetatable(t, mt)`: + +* if `mt` has self type parameters `As`, self type definition `T` and self type `S`, +* and `t` has (final) type `T [ Ts/As ]` +* then `setmetatable(t, mt)` has type `S [ Ts/As ]`. + +As currently, this has a side-effect of updating the type state of `t` from +`T [ Ts/As ]` to `S [ Ts/As ]`. + +For example, in `setmetatable({ elements = {} }, Set)`, we have: + +* `Set` has type `SetMT`, self type parameter `E`, self type definition` { elements : { [E] : boolean } }`, and self type `{ elements : { [E] : boolean }, @metatable SetMT }`, +* and `{ elements = {} }` has type `{ elements : { [X] : boolean } }` for a free `X`, +* so `setmetatable({ elements = {} }, Set)` has type `{ elements : { [X] : boolean }, @metatable SetMT }`. + +as a result `Set.new` has type `() -> { elements : { [a] : boolean }, @metatable SetMT }`. + +As another example, in `setmetatable(result, Point)`: + +* `Point` has type `PointMT`, no self type parameters, a free self type definition (call it `T`), and a self type whose table type is `T` and whose metatable is `PointMT`, +* and `result` has final type `{ x : number, y : number }`, +* so (by unifying `T` with `{ x : number, y : number }`) `setmetatable(Point, result)` has type `{ x : number, y : number, @metatable PointMT }`. + +As a side-effect, the type state of `result` is updated to be `{ x : number, y : number, @metatable PointMT }`, +and unification causes the self type of `Point` to be `{ x : number, y : number, @metatable PointMT }`. + +Note that this relies on the type of `result` being `{ x : number, y : number }`, which is why we use the final +long-lived type of `t` rather than its current type state. + +### Method declarations + +In method declarations `function mt:m`: + +* if `mt` has self type parameters `As` and self type `S`, +* then give the `self` parameter of `mt:m` the type `S [ Xs/As ]` for fresh free Xs (these types are quantified as all other free types are). + +For example, in the method `Set:add(el)`: + +* `Set` has self type parameter `E`, and self type `{ elements : { [E] : boolean }, @metatable SetMT }`, +* so `self` has type `{ elements : { [X] : boolean }, @metatable SetMT }` when type checking the body of `Set:add(el)`. + +At this point, type inference proceeds as usual: + +* `el` is given fresh free type `Y`, +* the statement `self.elements[el] = true` will unifies `X` and `Y`, and +* quantifying results in type `({ elements : { [a] : boolean }, @metatable SetMT }) -> ()`. + +## Drawbacks + +### Partially-constructed objects + +Shared self types capture an idiom where tables with metatables have +all of their fields initialized *before* any methods are called. In +cases where methods are called before all the fields are initialized, +this will result in optional types being inferred. For example: + +```luau + function Point.new() + local result = setmetatable({}, Point) + result.x = 0 + print(result:getX()) + result.y = 0 + print(result:getY()) + return result + end +``` + +the call to `result:getY()` uses the *current* type state of `result`, which is `{ x : number, @metatable PointMT }`. +Unification will then cause `Point` to consider `y` to be optional: + +```luau + type PointMT = { + new : () -> Point + getX : (Point) -> number, + getY : (Point) -> number?, + abs : (Point) -> number -- with a type error! + } + type Point = { + x : number, + y : number?, + @metatable PointMT + } +``` + +Since `y` has type `number?` rather than `number`, the `abs` method will fail to type check. + +As a workaround, developers can declare different self types for different methods: + +```luau + function Point.getX(self : { x : number }) : number + return self.x + end + function Point.getY(self : { y : number }) : number + return self.y + end +``` + +resulting in: + +```luau + type PointMT = { + new : () -> Point + getX : ({ x : number }) -> number, + getY : ({ y : number }) -> number, + abs : (Point) -> number -- without a type error! + } + type Point = { + x : number, + y : number, + @metatable PointMT + } +``` + +or can switch off type checking `self` by declaring `type Point = any`. + +### Methods called on both tables and metatables. + +This is a similar problem, caused by calling methods directly on +metatables as well as tables. For example calling `Point:abs()` will +result in inferring that both `x` and `y` are optional, + +### Classes with multiple constructors + +With the current greedy unifier, classes with constructors of different types will fail: + +```luau + local Foo = {} + Foo.__index = Foo + function Foo.from(x) return setmetatable({ msg = tostring(x) }, Foo) end + function Foo.new() return setmetatable({}, Foo) end +``` + +rather than inferring an optional field, this will report a type error. + +## Alternatives + +We could use new syntax for declaring self types, rather than using +the convention that they have the same name as the metatable. + +We could do nothing, but at a performance and ergonomics cost. + +We could introduce special syntax for classes or records, though this +doesn't address type checking current code. diff --git a/.cursor/rules/luau/support-for-generic-function-types-in-user-defined-type-functions.md b/.cursor/rules/luau/support-for-generic-function-types-in-user-defined-type-functions.md new file mode 100644 index 00000000..540183c4 --- /dev/null +++ b/.cursor/rules/luau/support-for-generic-function-types-in-user-defined-type-functions.md @@ -0,0 +1,124 @@ +# Support for Generic Types and Packs in User-Defined Type Functions + +**Status**: Implemented + +## Summary + +Add support for generic function types in type functions to allow more types to be accepted by them, including tables and classes which might contain generic function types. + +## Motivation + +Generic functions are very common in Luau, especially when inferred by the typechecking engine. They are also often present in classes defined by the environment. + +Omitting generic types from appearing in type functions limits their use. +Today, even if there is no direct manipulation of generics, a serialization error appears immediately for any generic function or class containing them. +Ideally, we want user-defined type functions to support any possible type, aside from temporary implementation-detail types of the type solver. + +## Design + +We will introduce a single 'generic' kind of runtime type for both generic types and generic packs. + +While this doesn't match up the typechecking engine representation directly, we avoid having to deal with two different userdata types. +Since the value of a generic type or pack is not known upfront, assigning separate tags is not that different from having an extra property on it. + +We already have variadic types (`...number`) that get represented as a regular runtime type and only gain that special meaning when placed in a 'tail' spot. +We also have a different representation of a table with a metatable between type functions and typechecking. +There alternative representations were chosen to improve developer experience working with user-defined type functions based on the experience of people working on the type checker. +It is still compatible with potential extensions to have other kinds of type packs represented as types in the future. + +Generics are created by specifying a name and a boolean marking it as a type or a pack. +Generics that are coming from type inference might not have a display name, but still hold an auto-generated name internally. + +Names are the way generic identity is specified. +Generic types are immutable and two generics with the same name are equal, even if they are defined in different function type scopes. + +For example, consider a type `(T, U, (T) -> U) -> ()` + +From the typechecking perspective, inner and outer function 'T' types are different, but they are still represented by the same runtime generic named 'T'. + +The ambiguity is resolved based on the scoping of the generic in question. +When the runtime type is returned back to the typechecking engine, only those generics that are in the current set of function type generic lists are allowed to be mentioned. Usage of ill-scoped generics will result in serialization errors. +When the inner generic function list places the name 'T' again, it represents a different typechecking type and hides the outer 'T' until the scope of the inner type ends. + +As such, generics are defined by their lexical scope, matching how they are written out in source code. + +Just like in the syntax of the language, reusing the same generic name, even between types and packs in a single list results in a duplicate generic definition error. + +### Examples + +Creating a function type with generic types and packs: + +```lua +type function pass() + local T = types.generic("T") + local Us, Vs = types.generic("U", true), types.generic("V", true) + + local f = types.newfunction() + f:setparameters({T}, Us); + f:setreturns({T}, Vs); + f:setgenerics({T, Us, Vs}); + return f +end + +type X = pass<> -- (T, U...) -> (T, V...) +``` + +Creating a function type with a nested function type that reuses a generic name: + +```lua +type function pass() + local T, U = types.generic("T"), types.generic("U") + + -- (T) -> () + local func = types.newfunction({ head = {T} }, {}, {T}); + + -- { x: (T) -> (), y: U } + local tbl = types.newtable({ [types.singleton("x")] = func, [types.singleton("y")] = U }) + + -- (T, { x: (T) -> (), y: U }) -> () + return types.newfunction({ head = {T, tbl} }, {}, {T, U}) +end +``` + +## Updates to the library and type userdata + +### `types` Library + +| New/Update | Library Functions | Return Type | Description | +| ------------- | ------------- | ------------- | ------------- | +| New | `generic(name: string, ispack: boolean?)` | `type` | returns an immutable instance of a generic type or a pack; name cannot be empty | +| Update | `newfunction(parameters: { head: {type}?, tail: type? }, returns: { head: {type}?, tail: type? }, generics: {type}?)` | `type` | New `generic` argument is added to specify generic types and packs in a single list | + +### `type` Instance + +| New/Update | Instance Properties | Type | Description | +| ------------- | ------------- | ------------- | ------------- | +| Update | `tag` | `"nil" \| "unknown" \| "never" \| "any" \| "boolean" \| "number" \| "string" \| "singleton" \| "negation" \| "union" \| "intersection" \| "table" \| "function" \| "class" \| "thread" \| "buffer" \| "generic"` | Added `generic` as a possible tag | + +#### Generic `type` instance + +| New/Update | Instance Methods | Type | Description | +| ------------- | ------------- | ------------- | ------------- | +| New | `name()` | `string?` | name of the generic; `nil` for inferred generics | +| New | `ispack()` | `boolean` | `true` if the generic represents a pack, `false` otherwise | + +#### Function `type` instance + +| New/Update | Instance Methods | Return Type | Description | +| ------------- | ------------- | ------------- | ------------- | +| New | `setgenerics({type}?)` | `()` | sets the function's generic types and packs list; types cannot follow a pack | +| New | `generics()` | `{type}` | returns the function's generic types and packs (in that order in the array) | + +## Alternatives + +We can assign a different `tag` to a generic pack instead of the `ispack` property. + +It is also possible to split a single list containing both generic types and packs into two. +This was done in an initial prototype implementation and was inconvenient to specify. +One benefit was that list didn't have to be split manually when reading types or packs individually. + +## Drawbacks + +Generics do bring additional complexity to type functions, especially with the way we can now hold a generic type pack as a separate item (while `type T = U...` impossible to define in the syntax of the language). + +The way they bring in lexical scoping considerations is also new for the type function runtime. diff --git a/.cursor/rules/luau/support-for-thread-and-buffer-types-in-user-defined-type-functions.md b/.cursor/rules/luau/support-for-thread-and-buffer-types-in-user-defined-type-functions.md new file mode 100644 index 00000000..3bf88449 --- /dev/null +++ b/.cursor/rules/luau/support-for-thread-and-buffer-types-in-user-defined-type-functions.md @@ -0,0 +1,36 @@ +# Support for thread and buffer Types in User-Defined Type Functions + +**Status**: Implemented + +## Summary + +Add support for 'thread' and 'buffer' primitive types, omitted from original user-defined type function RFC. + +## Motivation + +While more rarely used than 'string' or 'number', 'thread' and 'buffer' are perfectly valid primitive types already supported by Luau typechecking engine, so should be included in user-defined type function API. + +Developers are already hitting this limitation and there's no specific reason to exclude these types. + +## Design + +We propose two new library properties and two new type tags. + +No methods are added for types with these new tags. + +### Update `types` Library + +| Library Properties | Type | Description | +| ------------- | ------------- | ------------- | +| `thread` | `type` | an immutable instance of the built-in type `thread` | +| `buffer` | `type` | an immutable instance of the built-in type `buffer` | + +### Update `type` Instance + +| Instance Properties | Type | Description | +| ------------- | ------------- | ------------- | +| `tag` | `"nil" \| "unknown" \| "never" \| "any" \| "boolean" \| "number" \| "string" \| "singleton" \| "negation" \| "union" \| "intersection" \| "table" \| "function" \| "class" \| "thread" \| "buffer"` | an immutable property holding this type's tag | + +## Drawback + +Unclear if this proposal has any drawbacks. diff --git a/.cursor/rules/luau/syntax-array-like-table-types.md b/.cursor/rules/luau/syntax-array-like-table-types.md new file mode 100644 index 00000000..486f7deb --- /dev/null +++ b/.cursor/rules/luau/syntax-array-like-table-types.md @@ -0,0 +1,65 @@ +# Array-like table types + +> Note: this RFC was adapted from an internal proposal that predates RFC process + +**Status**: Implemented + +## Summary + +Add special syntax for array-like table types, `{ T }` + +## Motivation + +Luau supports annotating table types. Tables are quite complex beasts, acting as essentially an associative container mapping any value to any other value, and to make it possible to reason about them at type level we have a more constrained definition of what a table is: + +- A table can contain a set of string keys with a specific type for each key +- A table can additionally have an "indexer" for a given key/value type, meaning that it acts as an associative container mapping keys of type K to values of type V + +The syntax for this right now looks like this: + +``` +{ key1: Type1, key2: Type2, [KeyType]: ValueType } +``` + +This is an example of a hybrid table that has both an indexer and a list of specific key/value pairs. + +While Luau technically doesn't support arrays, canonically tables with integer keys are called arrays, or, more precisely, array-like tables. Luau way to specify these is to use an indexer with a number key: + +``` +{ [number]: ValueType } +``` + +(note that this permits use of non-integer keys, so it's technically richer than an array). + +As the use of arrays is very common - for example, many library functions such as `table.insert`, `table.find`, `ipairs`, work on array-like tables - Luau users who want to type-annotate their code have to use array-like table annotations a lot. + +`{ [number]: Type }` is verbose, and the only alternative is to provide a slightly shorter generic syntax: + +``` +type Array = { [number]: T } +``` + +... but this is necessary to specify in every single script, as we don't support preludes. + +## Design + +This proposal suggests adding syntactic sugar to make this less cumbersome: + +``` +{T} +``` + +This will be exactly equivalent to `{ [number]: T }`. `T` must be a type definition immediately followed by `}` (ignoring whitespace characters of course) + +Conveniently, `{T}` syntax matches the syntax for arrays in Typed Lua (a research project from 2014) and Teal (a recent initiative for a TypeScript-like Lua extension language from 2020). + +## Drawbacks + +This introduces a potential ambiguity wrt a tuple-like table syntax; to represent a table with two values, number and a string, it's natural to use syntax `{ number, string }`; however, how would you represent a table with just one value of type number? This may seem concerning but can be resolved by requiring a trailing comma for one-tuple table type in the future, so `{ number, }` would mean "a table with one number", vs `{ number }` which means "an array-like table of numbers". + +## Alternatives + +A different syntax along the lines of `[T]` or `T[]` was considered and rejected in favor of the current syntax: + +a) This allows us to, in the future - if we find a good workaround for b - introduce "real" arrays with a distinct runtime representation, maybe even starting at 0! (whether we do this or not is uncertain and outside of scope of this proposal) +b) Square brackets don't nest nicely due to Lua lexing rules, where [[foo]] is a string literal "foo", so with either syntax with square brackets array-of-arrays is not easy to specify diff --git a/.cursor/rules/luau/syntax-attribute-functions-deprecated.md b/.cursor/rules/luau/syntax-attribute-functions-deprecated.md new file mode 100644 index 00000000..20024925 --- /dev/null +++ b/.cursor/rules/luau/syntax-attribute-functions-deprecated.md @@ -0,0 +1,93 @@ +# Deprecated Attribute for Functions + +**Status**: Implemented + +## Summary + +This RFC proposes a `@deprecated` attribute to annotate Luau functions for deprecation. Using these functions will result in a deprecation warning from the linter. The Luau LSP can indicate the deprecated status of these functions in its completion list by showing them in a visually distinct style. + +## Motivation + +Roblox already has numerous deprecated Luau APIs. LSP strikes out the names of these APIs in the autocompletion popup in Roblox Studio, their use issues deprecation warnings, and their deprecation status is reflected in Roblox's Creator Hub documentation. Unfortunately, Luau lacks support to leverage this tooling for deprecating custom creator-defined functions. Even for core Luau deprecated functions, `getfenv` and `setfenv`, the linter has hardcoded name comparisons to identify their uses and report deprecation messages. Deprecating new APIs requires ad-hoc modifications to the tooling which can only be performed by the language designers. + +This RFC proposes the introduction of a `@deprecated` attribute to mark deprecated Luau APIs. This has multiple benefits: +1. It provides an explicit syntactic marker to identify deprecated functions in Luau code. +2. The LSP interface can display the deprecated API in a visually distinct style in the autocompletion popup. +3. The linter can issue a warning message when the deprecated function is used. + +## Design + +The `@deprecated` attribute can be used on named functions and properties. It does not apply recursively to the functions defined within the lexical scope of the attributed function. It can take up to two named string parameters. The parameters affect the warning message issued by the linter. The `reason` parameter gives the reason for deprecation and the `use` parameter gives the name of the function that should be used in lieu of the deprecated function. The following table shows the warning message issued by the different styles of this attribute when used on a function named `foo`. + +| Style | Message | +| ----------------------------------------------------- | -----------------------------------------------------------------------| +| `@deprecated` | `"Function 'foo' is deprecated."` | +| `@[deprecated {reason = "my reason"}]` | `"Function 'foo' is deprecated. "` | +| `@[deprecated {use = "bar()"}]` | `"Function 'foo' is deprecated, use '' instead."` | +| `@[deprecated {reason = "my reason", use = "bar()"}]` | `"Function 'foo' is deprecated, use '' instead. "` | + +If `foo` is a member of class `bar`, the warning messages above will start as `"Member 'bar.foo' is deprecated ...`. + +Consider the following example. Function `printTable` is marked deprecated. + +```lua +@[deprecated { + use = "table.foreach(table, print)", + reason = "`printTable` forces tables to be printed in one style; `table.foreach` allows configurable printing.", +}] +local function printTable(t) + for k,v in pairs(t) do + print(k, v) + end +end + +printTable({"a", "b", "c", "d"}) +``` + +The call to `printTable` causes the linter to issue the following warning message: + +``` +Function `printTable` is deprecated, use `table.foreach(table, print)` instead. `printTable` forces tables to be printed in one style; `table.foreach` allows configurable printing. +``` + +Table and class properties also support deprecated members. In the following example property `m` of table `t` is deprecated. + +```lua +local t = {} + +@deprecated +function t:m() end +``` + +## Related Work + +Many mainstream languages provide a similar mechanism for deprecating language features. They differ in the kind of program elements that can be deprecated, the ability to convert deprecation warnings to errors, and the ability to specify the version which deprecated the API. + +1. **C++** since C++14 provides a `[[deprecated(msg)]]` attribute that can be applied to declaration of a class, a typedef-name, a variable, a nonstatic data member, a function, a namespace, an enumeration, an enumerator, or a template specialization. The compiler emits a deprecation message, `msg`, when the deprecated program element is used. + +2. **C#** provides a `[ObsoleteAttribute(msg, error)]` which can be applied to all program elements except assemblies, modules, parameters, and return values. The `msg` string is emitted by the compiler when the deprecated program element is used in code. The `error` flag converts the warning to an error. + +3. **Java** provides a `@Deprecated` annotation to deprecate a class, method, or field. The Java compiler issues warnings when these program elements are used. A detailed deprecation message can be supplied by a corresponding javadoc `@deprecated` tag. + +4. **Rust** provides a `#[deprecated(since, note)]` attribute. `since` specifies a version number when the item was deprecated and `note` specifies a string that should be included in the deprecation message. The deprecated attribute can be applied to many program elements such as macros, modules, functions, enums, structs, traits, enum variants, struct fields, etc. When applied to an item containing other items, such as a module, all child items inherit the deprecation attribute. + +5. **Scala** provides a `@deprecated(msg, version)` annotation for deprecating definitions. The annotation takes a message and a string specifying the first version since the definition has been deprecated. + +6. **Kotlin** provides a `@Deprecated(message, replaceWith, level)` annotation. The `message` and `replaceWith` fields translate respectively to `msg` and `alt` fields of the `@deprecated` attribute proposed in this RFC. The `level` field can be `WARNING`: to report use of the API as a warning, `ERROR`: to report use of the API as an error, and `HIDDEN`: to make the API inaccessible from code. + +7. **Dart** provides a `Deprecated(msg)` annotation that applies to libraries, top-level declarations (variables, getters, setters, functions, classes, mixins, extension and typedefs), class-level declarations (variables, getters, setters, methods, operators or constructors, whether static or not), named optional parameters and trailing optional positional parameters. This annotation applies transitively. Deprecating a library or a class deprecates all its members. Deprecating a variable deprecates its implicit getter and setter. Deprecating a superclass does not deprecate its subclass. Deprecation warning is issued when the code imports a deprecated library or any deprecated member. + +8. **Python** decorators provide a mechanism for developers to roll their own deprecated decoration. A popular implementation is provided by the `deprecation` library which provides `@deprecation.deprecated(deprecated_in, removed_in, current_version, details)` decorator that updates the docstring of the deprecated method and issues warning when it is used. `deprecated_in` is the version at which the decorated method is considered deprecated, `removed_in` is the version when the decorated method will be removed, and `current_version` is the version information for the currently running code, and `details` string provides extra details added to the method docstring and warning. + +The description above shows the full-form of the deprecation annotation. In most cases, it is valid to leave the message parameter in favor of a generic deprecation message. Compared to most of these languages, the design proposed for deprecating Luau APIs is simpler. +1. Deprecation is not supported for non-function program elements because Luau only supports attributes on functions. +2. There is no way to convert deprecation warnings to errors. +3. There is no explicit attribute parameter for specifying version string. They can be accommodated in the `reason` parameter. If desired, a future RFC could introduce a `version` parameter to the `@deprecated` attribute. + +## Drawbacks + +Adding this attribute increases complexity of code. Once the attribute is released, we cannot deprecate it. + +## Alternatives + +The alternative would be to not provide this attribute; core Luau APIs will rely on custom enhancements to the Linter for deprecation but creators will have no way to deprecate their Luau functions. \ No newline at end of file diff --git a/.cursor/rules/luau/syntax-attribute-functions-native.md b/.cursor/rules/luau/syntax-attribute-functions-native.md new file mode 100644 index 00000000..807ae519 --- /dev/null +++ b/.cursor/rules/luau/syntax-attribute-functions-native.md @@ -0,0 +1,51 @@ +# Native Attribute for Functions + +**Status**: Implemented + +## Summary + +This RFC proposes a function-level `@native` attribute to request native compilation for individual functions, independent of the script-level `--!native` comment directive. + +## Motivation + +Luau's native compiler currently compiles whole scripts annotated with `--!native` comment directive. The compiler imposes an upper limit on the memory consumed by the generated native code which makes it important to target native compilation for functions that will benefit from it the most. This might force creators to break their code organization and move unrelated functions together to scripts marked `--!native`. In this RFC, we propose a function-level `@native` attribute to facilitate developers to request native compilation for individual functions. In the future, we want Luau's native compiler to automatically pick functions for native compilation, making the `--!native` comment directive redundant. Since compiler heuristics can be suboptimal, the proposed `@native` attribute would still remain useful by providing creators with a way to force native compilation of functions that were not automatically chosen by the compiler but would benefit significantly from native execution. + +## Design + +Syntactically, the `@native` attribute takes no parameters. It can be used on both top-level and inner functions. It does not apply recursively to the functions defined within the lexical scope of the attributed function. These "inner" functions have to be explicitly attributed for native compilation. + +In the following example, only `parent` will be natively compiled. + +```lua +@native +function parent() + function child() + -- do something + end + -- do something +end +``` + +On the other hand, in this example, both `parent` and `child` will be natively compiled. + +```lua +@native +function parent() + @native + function child() + -- do something + end + -- do something +end +``` + +## Drawbacks + +Introducing this attribute will have two adverse consequences: + +1. It will increase the complexity of the implementation which will now have to make compilation decisions on a per-function basis. +2. Experience code will be strewn with occurrences of `@native` attribute. + +## Alternatives + +The alternative would be to not provide this attribute and rely on `--!native` comment directive to make compilation decisions on a per-script basis. This might force developers to break their code organization and move unrelated functions together but it does not prevent them from getting performance benefits. diff --git a/.cursor/rules/luau/syntax-attributes-functions-parameters.md b/.cursor/rules/luau/syntax-attributes-functions-parameters.md new file mode 100644 index 00000000..953dcda6 --- /dev/null +++ b/.cursor/rules/luau/syntax-attributes-functions-parameters.md @@ -0,0 +1,75 @@ +# Function Attribute Parameters + +**Status**: Implemented + +## Summary + +This RFC proposes a syntax for function attribute parameters. This is a follow up to the [Attributes](./syntax-attributes-functions.md) RFC, which proposed a design for function attributes. We only propose a syntactic extension in this RFC; the rest of the implementation details remain unchanged. + +## Motivation + +The [Attributes](./syntax-attributes-functions.md) RFC provides a syntax for parameterless function attributes. This suffices for some potential use cases, such as `@native`, and `@inline`. However, other potential cases such as `@deprecated` will benefit from an expressive attribute syntax that allows parameters to be supplied. We can use the parameters to provide the name of the function to be used in place of the deprecated function, and the reason for deprecation. This information can be used to generate informative deprecation warning messages. Another potential use case could be an `@unroll` attribute for loop unrolling which could use a numeric parameter for specifying the number of iterations to be unrolled. This would also require supporting attributes on loops, which would be a topic of discussion for a separate RFC. + +## Design + +Attributes with parameters can only be specified inside `@[]`, separated by commas. Attribute parameter syntax mirrors the syntax for function calls; parameters are specified as a comma-separated list of zero or more literal values enclosed in parentheses, which are optional for single-parameter attributes if the parameter is either a literal string or a table constructor. `@[]` cannot be empty or nested. Attributes inside `@[]` cannot have a leading `@`. Attribute parameters cannot have attributes on them. + +`@[attr "literal string"]`, `@[attr {key = 1, 2, 3}]`, `@[attr()]`, `@[attr(1, 2, 3)]`, `@[attr(1, nil, true, false, "literal string", {name = "value", 3.0})]` are some examples of attributes that conform to the proposed syntax. + +The formal syntax for attributes with parameters is described below. + +```ebnf +littable ::= '{' [fieldlist] '}' +fieldlist ::= field {fieldsep field} [fieldsep] +field ::= Name '=' literal | literal +fieldsep ::= ',' | ';' + +literal ::= 'nil' | 'false' | 'true' | Numeral | LiteralString | littable + +litlist ::= literal {‘,’ literal} + +pars ::= ‘(’ [litlist] ‘)’ | littable | LiteralString + +parattr ::= Name [pars] + +attribute ::= '@' Name | '@[' parattr {',' parattr} ']' + +attributes ::= {attribute} +``` + +Attributes can appear before `function` and `local function` statements, augmenting the allowed statement syntax as follows: + +```ebnf +stat ::= attributes 'function' funcname funcbody +stat ::= attributes 'local' 'function' Name funcbody +``` + +Attributes can also used in declaration files with the following syntax: + +```ebnf +type ::= Type | Name ':' Type +decl ::= attributes 'declare' 'function' '(' {type} ')' : Type +decl ::= 'declare' Name ':' '{' {Name ':' attributes '(' {type} ')' '->' Type} '}' +``` + +The extensions proposed to the [Attributes](./syntax-attributes-functions.md) RFC are: + +1. An attribute list, `@[]`, for specifying multiple comma-separated attributes with parameters. +2. A parameter syntax for attributes. +3. An attribute syntax for declaration files. + +Attributes with parameters are enclosed with `@[]` to facilitate syntax evolution without introducing parsing ambibguity. Without `@[]`, if we decide to allow attributes on arbitrary expressions in the future, `@attr(...)` will have two meanings; an attribute with parameters or an attribute on a parenthesized expression. `@[]` resolves this by providing a closing delimiter, `]`, to separate the attribute from the expression. `@[` has been chosen instead of `[` since it is unique and does not introduce ambiguity if we enable attributes on table entries of the form `[exp1] = [exp2]`. + +`@attr`, `@[attr]`, and `@[attr()]` are equivalent. The order in which attributes is specified is irrelevant. Hence, `@attr1 @[attr2, attr3(2, "hi")]`, `@attr1 @attr2 @[attr3(2, "hi")]`, `@attr1 @[attr3(2, "hi")] @attr2`, and `@[attr1, attr2, attr3(2, "hi")]` are also equivalent. + +Attribute parameters are restricted to be literals, i.e., values that evaluate to themselves. This is because attributes are a mechanism for providing tagged metadata to the implementation. They are not user-extensible and have no evaluation semantics of their own. For this reason, even entries of the form `[exp1] = [exp2]` in table literal parameters are disallowed, since they would require evaluating `exp1` at construction time. + +Attributes should not be repeated on a definition or a declaration and every attribute should receive the correct number and type of parameters. Non-conformance should result in a parsing error, obviating the need for a separate linting pass. + +## Drawbacks + +Extending attribute syntax to accept parameters contributes to the complexity of the language in the parsing phase. + +## Alternatives + +The alternative is to not support attribute parameters. This will lead to substandard warning messages from `@deprecated` attribute. It will also prevent us from introducing `@unroll` attribute in the future. diff --git a/.cursor/rules/luau/syntax-attributes-functions.md b/.cursor/rules/luau/syntax-attributes-functions.md new file mode 100644 index 00000000..f961ca67 --- /dev/null +++ b/.cursor/rules/luau/syntax-attributes-functions.md @@ -0,0 +1,98 @@ +# Attributes (for Functions) + +**Status**: Implemented + +## Summary + +Add a syntax for attributes to function declarations in the style of `@name` that can be placed before their declarations to adjust the behavior of the compiler, analyzer, and runtime. + +These attributes would be valid in both the normal syntax for declaring functions and the syntax for anonymous functions, with or without locally scoped names. + +Due to attributes being tied to the language's behavior, this proposal does not allow for them to be implemented by users. A mechanism to do so would be either very complex or wildly unsafe and is thus not considered by this proposal. + +## Motivation + +It's desirable to have control over various parts of Luau. Consider three potential attributes: + +- `@native`, to indicate that a function should be compiled using native codegen +- `@inline`, to indicate that a function should be inlined where called +- `@deprecated`, to indicate that a function should be marked as deprecated by the analyzer + +Right now, `@native` has an equivalent directive at the top of scripts in the form of `--!native`, albeit for the entire chunk being processed. In the future however, this may be guided by heuristics on a per-function basis to determine if doing so is 'profitable'. While cost models of this nature can be extremely well tuned, they tend to err on the side of caution so are not always correct. Without some way to indicate that a specific function should be natively compiled, users are at the whim of a cost model that might change unexpectedly and negatively impact performance. + +Functions are sometimes inlined too, based on a heuristic cost model. There is currently no way to tell one way or another whether the model has determined if a function is a good candidate for inlining without inspecting bytecode however, which is often not possible (as in the case of Roblox). An `@inline` attribute would allow a user to heavily suggest the compiler inline a function, trusting that they know the potential downsides and have decided it's worth it. + +There is currently no way to discourage the use of functions in user code. Luau has existing lints for this named `DeprecatedGlobal` and `DeprecatedApi`, which flag the use of deprecated globals and API members in code, but they do not have a user-facing API. A `@deprecated` attribute could be used to let users indicate that a piece of code is deprecated, which is an obvious boost to the user experience, and would do so without introducing any new syntax beyond that of attributes. + +While all of these attributes could be supported on a case-by-case basis, a unified syntax for them would simplify the language's grammar and ease their implementation as well as any other features of this sort in the future. + +## Design + +The following syntax is proposed for attributes: + +```ebnf +attribute = '@' NAME +``` + +Attributes would attach to the function as a form of metadata to adjust the behavior of Luau, whether it be in the compiler, analyzer, or otherwise. + +Attributes would be valid before function declarations, both anonymous and named: +```luau +@example +function foo() +end + +foo = @example function() end +``` + +Whether the name of a function is a local variable would have no impact on the use of attributes. + +When declaring a function as a member of a table, any attributes should be for the function: +```luau +@example -- @example applies to `bar`, not `foo` +function foo:bar() +end +``` + +This is consistent with other uses, as it applies the attribute to what is being declared. + +Multiple attributes are supported inline, so that a function with multiple attributes does not have several lines of boilerplate: +```luau +@attribute1 @attribute2 @attribute3 @attribute4 @attribute5 +local function example() +end +``` + +Attributes with parameters are not included in this proposal because it's unclear what the syntax and limitations should be. However, the syntax proposed would not conflict with a future addition of parameters provided they used proper delimiters. + +User-defined attributes are not proposed because they are considered incompatible with Luau's goals of being a simple but safe-to-embed language. Since the compiler would at least in part be controlled by attributes, allowing them to be implemented by users would be either prohibitively complex or unsafe. + +## Drawbacks + +Attributes are a potentially very broad-reaching syntax extension. While there are tangible benefits to users, it may not be worth the complexity they bring to the table. Though it is not currently proposed, attributes may eventually become attached to other language constructs like loops and variable declarations, which would heighten this problem. + +Allowing manual control over language features like inlining and native codegen may be a bad idea, since it means that obvious flaws in the heuristics used for doing this normally may go unreported by power users that care about performance. It may be better to not include them simply for the sake of refining the cost models used for these things. + +Adding yet another symbol (`@`) contributes to the complexity of the language, both in the literal implementation and to read, write, and learn. + +## Alternatives + +Most of the features attributes can support could be implemented by refining the type system (in the case of `@deprecated` and attributes of that nature) and improving heuristics for the compiler (in the case of `@native` and `@inline`). This is very much an option, but in the case of the type system is probably not sustainable since every new feature adds more complexity. + +Attributes are distinct from decorators in that they are compiler defined and thus cannot be defined during runtime. An alternative use for this syntax may be user-defined decorators as in JavaScript. If the language provided special built-in decorators, this could serve a very similar purpose. This is not rejected on merit, it's simply that attributes have a more obvious path to implementation. + +A more complete syntax for attributes with parameters could be proposed instead, but it would require quite a bit more consideration than this proposal. Since it's not currently clear what the needs of attribute parameters are, any proposed syntax would be speculative and might be overly or underly ambitious. Many of the 'obvious' attributes don't require parameters to be useful, so in the current state of this proposal is designed to be straightforward to facilitate their implementation. + +Other potential syntaxes that were considered include a Rust-style syntax (`#[attribute]`) and comment directives (`--!attribute`). These were rejected because: + +- `#` is used in other places in the language, where it means something totally unrelated + +- Comments being used to control language features and flow means that tooling and users must care about them, which is antithetical to how comments are traditionally used + +- Attribute-as-comments would naturally conflict with the language in a lot of weird ways and would just cause a lot of problems: +```luau +local f = --!native function() end +print(f) +``` + +As proposed, attributes would only be applicable on functions at first. They could instead be added to the entire language at once, which would facilitate widespread adoption immediately. However, that is a lot more work, and most of the potential uses for attributes are on functions, so it makes sense to begin with them. diff --git a/.cursor/rules/luau/syntax-compound-assignment.md b/.cursor/rules/luau/syntax-compound-assignment.md new file mode 100644 index 00000000..e1c13151 --- /dev/null +++ b/.cursor/rules/luau/syntax-compound-assignment.md @@ -0,0 +1,49 @@ +# Compound assignment using `op=` syntax + +> Note: this RFC was adapted from an internal proposal that predates RFC process and as such doesn't follow the template precisely + +**Status**: Implemented + +## Design + +A feature present in many many programming languages is assignment operators that perform operations on the left hand side, for example + +```luau +a += b +``` + +Lua doesn't provide this right now, so it requires code that's more verbose, for example + +```luau +data[index].cost = data[index].cost + 1 +``` + +This proposal suggests adding `+=`, `-=`, `*=`, `/=`, `%=`, `^=` and `..=` operators to remedy this. This improves the ergonomics of writing code, and occasionally results in code that is easier to read to also be faster to execute. + +The semantics of the operators is going to be as follows: + +- Only one value can be on the left and right hand side +- The left hand side is evaluated once as an l-value, similarly to the left hand side of an assignment operator +- The right hand side is evaluated as an r-value (which results in a single Lua value) +- The assignment-modification is performed, which can involve table access if the left hand side is a table dereference +- Unlike C++, these are *assignment statements*, not expressions - code like this `a = (b += 1)` is invalid. + +Crucially, this proposal does *not* introduce new metamethods, and instead uses the existing metamethods and table access semantics, for example + +```luau +data[index].cost += 1 +``` + +translates to + +```luau +local table = data[index] +local key = "cost" +table[key] = table[key] + 1 +``` + +Which can invoke `__index` and `__newindex` on table as necessary, as well as `__add` on the element. In this specific example, this is *faster* than `data[index].cost = data[index].cost + 1` because `data[index]` is only evaluated once, but in general the compound assignment is expected to have the same performance and the goal of this proposal is to make code easier and more pleasant to write. + +The proposed new operators are currently invalid in Lua source, and as such this is a backwards compatible change. + +From the implementation perspective, this requires adding new code/structure to AST but doesn't involve adding new opcodes, metatables, or any extra cost at runtime. diff --git a/.cursor/rules/luau/syntax-continue-statement.md b/.cursor/rules/luau/syntax-continue-statement.md new file mode 100644 index 00000000..ff77e545 --- /dev/null +++ b/.cursor/rules/luau/syntax-continue-statement.md @@ -0,0 +1,98 @@ +# continue statement + +> Note: this RFC was adapted from an internal proposal that predates RFC process + +**Status**: Implemented + +## Summary + +Add `continue` statement to `for`, `while` and `repeat` loops using a context-sensitive keyword to preserve compatibility. + +## Motivation + +`continue` statement is a feature present in basically all modern programming languages. It's great for ergonomics - often you want the loop to only process items of a specific kind, so you can say `if item.kind ~= "blah" then continue end` in the beginning of the loop. + +`continue` never makes code that was previously impossible to write possible, but it makes some code easier to write. + +We'd like to add this to Luau but we need to keep backwards compatibility - all existing scripts that parse correctly must parse as they do now. The rest of the proposal outlines the exact syntax and semantics that makes it possible. + +## Design + +`continue` statement shall be the statement that *starts* with "continue" identifier (*NOT* keyword - effectively it will be a context-sensitive keyword), and such that the *next* token is none of (`.`, `[`, `:`, `{`, `(`, `=`, string literal or ','). + +These rules effectively say that continue statement is the statement that *does not* parse as a function call or the beginning of an assignment statement. + +This is a continue statement: + +```luau +do +continue +end +``` + +This is not a continue statement: + +```luau +do +continue = 5 +end +``` + +This is not a continue statement: + +```luau +do +continue(5) +end +``` + +This is not a continue statement either, why do you ask? + +```luau +do +continue, foo = table.unpack(...) +end +``` + +These rules are simple to implement. In any Lua parser there is already a point where you have to disambiguate an identifier that starts an assignment statement (`foo = 5`) from an identifier that starts a function call (`foo(5)`). It's one of the few, if not the only, place in the Lua grammar where single token lookahead is not sufficient to parse Lua, because you could have `foo.bar(5)` or `foo.bar=5` or `foo.bar(5)[6] = 7`. + +Because of this, we need to parse the entire left hand side of an assignment statement (primaryexp in Lua's BNF) and then check if it was a function call; if not, we'd expect it to be an assignment statement. + +Alternatively in this specific case we could parse "continue", parse the next token, and if it's one of the exclusion list above, roll the parser state back and re-parse the non-continue statement. Our lexer currently doesn't support rollbacks but it's also an easy strategy that other implementations might employ for `continue` specifically. + +The rules make it so that the only time we interpret `continue` as a continuation statement is when in the old Lua the program would not have compiled correctly - because this is not valid Lua 5.x: + +```luau +do +continue +end +``` + +There is one case where this can create new confusion in the newly written code - code like this: + +```luau +do +continue +(foo())(5) +end +``` + +could be interpreted both as a function call to `continue` (which it is!) and as a continuation statement followed by a function call (which it is not!). Programmers writing this code might expect the second treatment which is wrong. + +We have an existing linter rule to prevent this, however *for now* we will solve this in a stronger way: + +Once we parse `continue`, we will treat this as a block terminator - similarly to `break`/`return`, we will expect the block to end and the next statement will have to be `end`. This will make sure there's no ambiguity. We may relax this later and rely on the linter to tell people when the code is wrong. + +Semantically, continue will work as you would expect - it would skip the rest of the loop body, evaluate the condition for loop continuation (e.g. check the counter value for numeric loops, call the loop iterator for generic loops, evaluate while/repeat condition for while/repeat loops) and proceed accordingly. Locals declared in the loop body would be closed as well. + +One special case is the `until` expression: since it has access to the entire scope of `repeat` statement, using `continue` is invalid when it would result in `until` expression accessing local variables that are declared after `continue`. + +## Drawbacks + +Adding `continue` requires a context-sensitive keyword; this makes editor integration such as syntax highlighting more challenging, as you can't simply assume any occurrence of the word `continue` is referring to the statement - this is different from `break`. + +Implementing `continue` requires special care for `until` statement as highlighted in the design, which may make compiler slower and more complicated. + +## Alternatives + +In later versions of Lua, instead of `continue` you can use `goto`. However, that changes control flow to be unstructured and requires more complex implementation and syntactic changes. diff --git a/.cursor/rules/luau/syntax-default-type-alias-type-parameters.md b/.cursor/rules/luau/syntax-default-type-alias-type-parameters.md new file mode 100644 index 00000000..6d352942 --- /dev/null +++ b/.cursor/rules/luau/syntax-default-type-alias-type-parameters.md @@ -0,0 +1,97 @@ +# Default type alias type parameters + +**Status**: Implemented + +## Summary + +Introduce syntax to provide default type values inside the type alias type parameter list. + +## Motivation + +Luau has support for type parameters for type aliases and functions. +In languages with similar features like C++, Rust, Flow and TypeScript, it is possible to specify default values for looser coupling and easier composability, and users with experience in those languages would like to have these design capabilities in Luau. + +Here is an example that is coming up frequently during development of GraphQL Luau library: +```luau +export type GraphQLFieldResolver< + TSource, + TContext, + TArgs = { [string]: any } +> = (TSource, TArgs, TContext, GraphQLResolveInfo) -> any +``` +If we could specify defaults like that, we won't have to write long type names when type alias is used unless specific customization is required. +Some engineers already skip these extra arguments and use `'any'` to save time, which gives worse typechecking quality. + +Without default parameter values it's also harder to refactor the code as each type alias reference that uses 'common' type arguments has to be updated. + +While previous example uses a concrete type for default type value, it should also be possible to reference generic types from the same list: +```luau +type Eq = (l: T, r: U) -> boolean + +local a: Eq = ... +local b: Eq = ... +``` + +Generic functions in Luau also have a type parameter list, but it's not possible to specify type arguments at the call site and because of that, default type parameter values for generic functions are not proposed. + +## Design + +If a default type parameter value is assigned, following type parameters (on the right) must also have default type parameter values. +```luau +type A = ... -- not allowed +``` + +Default type parameter values can reference type parameters which were defined earlier (to the left): +```luau +type A = ...-- ok + +type A = ... -- not allowed +``` + +Default type parameter values are also allowed for type packs: +```luau +type A -- ok, variadic type pack +type B -- ok, type pack with no elements +type C -- ok, type pack with one element +type D -- ok, type pack with two elements +type E -- ok, variadic type pack with a different first element +type F -- ok, same type pack as T... +``` + +--- + +Syntax for type alias type parameter is extended as follows: + +```typeparameter ::= Name [`...'] [`=' typeannotation]``` + +Instead of storing a simple array of names in AstStatTypeAlias, we will store an array of structs containing the name and an optional default type value. + +When type alias is referenced, missing type parameters are replaced with default type values, if they are available. + +If all type parameters have a default type value, it is now possible to reference that without providing a type parameter list: +```luau +type All = ... + +local a: All -- ok +local b: All<> -- ok as well +``` + +If type is exported from a module, default type parameter values will still be available when module is imported. + +--- +Type annotations in Luau are placed after `':'`, but we use `'='` here to assign a type value, not to imply that the type parameter on the left has a certain type. + +Type annotation with `':'` could be used in the future for bounded quantification which is orthogonal to the default type value. + +## Drawbacks + +Other languages might allow references to the type alias without arguments inside the scope of that type alias to resolve into a recursive reference to the type alias with the same arguments. + +While that is not allowed in Luau right now, if we decide to change that in the future, we will have an ambiguity when all type alias parameters have default values: +```luau +-- ok if we allow Type to mean Type +type Type = { x: number, b: Type? } + +-- ambiguity, Type could mean Type or Type +type Type = { x: number, b: Type? } +``` diff --git a/.cursor/rules/luau/syntax-floor-division-operator.md b/.cursor/rules/luau/syntax-floor-division-operator.md new file mode 100644 index 00000000..8734d22a --- /dev/null +++ b/.cursor/rules/luau/syntax-floor-division-operator.md @@ -0,0 +1,64 @@ +# Floor division operator + +**Status**: Implemented + +## Summary + +Add floor division operator `//` to ease computing with integers. + +## Motivation + +Integers are everywhere. Indices, pixel coordinates, offsets, ranges, quantities, counters, rationals, fixed point arithmetic and bitwise operations all use integers. + +Luau is generally well suited to work with integers. The math operators +, -, \*, ^ and % support integers. That is, given integer operands these operators produce an integer result (provided that the result fits into representable range of integers). However, that is not the case with the division operator `/` which in the general case produces numbers with fractionals. + +To overcome this, typical Luau code performing integer computations needs to wrap the result of division inside a call to `math.floor`. This has a number of issues and can be error prone in practice. + +A typical mistake is to forget to use `math.floor`. This can produce subtle issues ranging from slightly wrong results to script errors. A script error could occur, for example, when the result of division is used to fetch from a table with only integer keys, which produces nil and a script error happens soon after. Another type of error occurs when an accidental fractional number is passed to a C function. Depending on the implementation, the C function could raise an error (if it checks that the number is actually an integer) or cause logic errors due to rounding. + +Particularly problematic is incorrect code which seems to work with frequently used data, only to fail with some rare input. For example, image sizes often have power of two dimensions, so code dealing with them may appear to work fine until much later some rare image has an odd size and a division by two in the code does not produce the correct result. Due to better ergonomics of the floor division operator, it becomes a second nature to write `//` everywhere when integers are involved and thus this class of bugs is much less likely to happen. + +Another issue with using `math.floor` as a workaround is that code performing a lot of integer calculations is harder to understand, write and maintain. + +Especially with applications dealing with pixel graphics, such as 2D games, integer math is so common that `math.floor` could easily become the most commonly used math library function. For these applications, avoiding the calls to `math.floor` is alluring from the performance perspective. + +> Non-normative: Here are the top math library functions used by a shipped game that heavily uses Lua: +> `floor`: 461 matches, `max`: 224 matches, `sin`: 197 matches, `min`: 195 matches, `clamp`: 171 matches, `cos`: 106 matches, `abs`: 85 matches. +> The majority of `math.floor` calls disappear from this codebase with the floor division operator. + +Lua has had floor division operator since version 5.3, so its addition to Luau makes it easier to migrate from Lua to Luau and perhaps more importantly use the wide variety of existing Lua libraries in Luau. Of other languages, most notably Python has floor division operator with same semantics and same syntax. R and Julia also have a similar operator. + +## Design + +The design mirrors Lua 5.3: + +New operators `//` and `//=` will be added to the language. The operator `//` performs division of two operands and rounds the result towards negative infinity. By default, the operator is only defined for numbers. The operator has the same precedence as the normal division operator `/`. `//=` is the compound-assignment operator for floor division, similar to the existing operator `/=`. + +A new metamethod `__idiv` will be added. The metamethod is invoked when any operand of floor division is not a number. The metamethod can be used to implement floor division for any user defined data type as well as the built-in vector type. + +The typechecker does not need special handling for the new operators. It can simply apply the same rules for floor division as it does for normal division operators. + +Examples of usage: + +```luau +-- Convert offset into 2d indices +local i, j = offset % 5, offset // 5 + +-- Halve dimensions of an image or UI element +width, height = width // 2, height // 2 + +-- Draw an image to the center of the window +draw_image(image, window_width // 2 - element_width // 2, window_height // 2 - element_height // 2) +``` + +## Drawbacks + +The addition of the new operator adds some complexity to the implementation (mostly to the VM) and to the language, which can be seen as a drawback. + +C like languages use `//` for line comments. Using the symbol `//` for floor division closes the door for using it for line comments in Luau. On the other hand, Luau already has long and short comment syntax, so adding yet another syntax for comments would add complexity to the language for little benefit. Moreover, it would make it harder to translate code from Lua to Luau and use existing Lua libraries if the symbol `//` has a completely different meaning in Lua and Luau. + +## Alternatives + +An alternative would be to do nothing but this would not solve the issues the lack of floor division currently has. + +An alternative implementation would treat `//` and `//=` only as syntactic sugar. The addition of new VM opcode for floor division could be omitted and the compiler could be simply modified to automatically emit a call to `math.floor` when necessary. This would require only minimal changes to Luau, but it would not support overloading the floor division operator using metamethods and would not have the performance benefits of the full implementation. diff --git a/.cursor/rules/luau/syntax-if-expression.md b/.cursor/rules/luau/syntax-if-expression.md new file mode 100644 index 00000000..6c1a7e48 --- /dev/null +++ b/.cursor/rules/luau/syntax-if-expression.md @@ -0,0 +1,108 @@ +# if-then-else expression + +> Note: this RFC was adapted from an internal proposal that predates RFC process + +**Status**: Implemented + +## Summary + +Introduce a form of ternary conditional using `if cond then value else alternative` syntax. + +## Motivation + +Luau does not have a first-class ternary operator; when a ternary operator is needed, it is usually emulated with `and/or` expression, such as `cond and value or alternative`. + +This expression evaluates to `value` if `cond` and `value` are truthy, and `alternative` otherwise. In particular it means that when `value` is `false` or `nil`, the result of the entire expression is `alternative` even when `cond` is truthy - which doesn't match the expected ternary logic and is a frequent source of subtle errors. + +Instead of `and/or`, `if/else` statement can be used but since that requires a separate mutable variable, this option isn't ergonomic. An immediately invoked function expression is also unergonomic and results in performance issues at runtime. + +## Design + +To solve these problems, we propose introducing a first-class ternary conditional. Instead of `? :` common in C-like languages, we propose an `if-then-else` expression form that is syntactically similar to `if-then-else` statement, but lacks terminating `end`. + +Concretely, the `if-then-else` expression must match `if then else `; it can also contain an arbitrary number of `elseif` clauses, like `if then elseif then else `. Unlike if statements, `else` is mandatory. + +The result of the expression is the then-expression when condition is truthy (not `nil` or `false`) and else-expression otherwise. Only one of the two possible resulting expressions is evaluated. + +Example: + +```luau +local x = if FFlagFoo then A else B + +MyComponent.validateProps = t.strictInterface({ + layoutOrder = t.optional(t.number), + newThing = if FFlagUseNewThing then t.whatever() else nil, +}) +``` + +Note that `else` is mandatory because it's always better to be explicit. If it weren't mandatory, it opens the possiblity that someone might be writing a chain of if-then-else and forgot to add in the final `else` that _doesn't_ return a `nil` value! Enforcing this syntactically ensures the program does not run. Also, with it being mandatory, it solves many cases where parsing the expression is ambiguous due to the infamous [dangling else](https://en.wikipedia.org/wiki/Dangling_else). + +This example will not do what it looks like it's supposed to do! The if expression will _successfully_ parse and be interpreted as to return `h()` if `g()` evaluates to some falsy value, when in actual fact the clear intention is to evaluate `h()` only if `f()` is falsy. + +```luau +if f() then + ... + local foo = if g() then x +else + h() + ... +end +``` + +The only way to solve this had we chose optional `else` branch would be to wrap the if expression in parentheses or to place a semi-colon. + +## Drawbacks + +Studio's script editor autocomplete currently adds an indented block followed by `end` whenever a line ends that includes a `then` token. This can make use of the if expression unpleasant as developers have to keep fixing the code by removing auto-inserted `end`. We can work around this on the editor side by (short-term) differentiating between whether `if` token is the first on its line, and (long-term) by refactoring completion engine to use infallible parser for the block completer. + +Parser recovery can also be more fragile due to leading `if` keyword - when `if` was encountered previously, it always meant an unfinished expression, but now it may start an `if-expr` that, when confused with `if-end` statement can lead to a substantially incorrect parse that is difficult to recover from. However, similar issues occur frequently due to function call statements and as such it's not clear that this makes the recovery materially worse. + +While this is not a problem today, in the past we've contemplated adding support for mid-block `return` statements; these would create an odd grammatical quirk where an `if..then` statement following an empty `return` would parse as an `if` expression. This would happen even without `if` expressions though for function calls (e.g. `return` followed by `print(1)`), and is more of a problem with the potential `return` statement changes and less of a problem with this proposal. + +## Alternatives + +We've evaluated many alternatives for the proposed syntax. + +### Python syntax +``` +b if a else c +``` +Undesirable because expression evaluation order is not left-to-right which is a departure from all other Lua expressions. Additionally, since `b` may be ending a statement (followed by `if` statement), resolving this ambiguity requires parsing `a` as expression and backtracking if `else` is not found, which is expensive and likely to introduce further ambiguities. + +### C-style ternary operator +``` +a ? b : c +``` +Problematic because `:` is used for method calls. In Julia `? :` and `:` are both operators which are disambiguated by _requiring_ spaces in the first case and _prohibiting_ them in the second case; this breaks backwards compatibility and doesn't match the rest of the language where whitespace in the syntax is not significant. + +### Function syntax +``` +iff(a, b, c) +``` +If implemented as a regular function call, this would break short-circuit behavior. If implemented as a special builtin, it would look like a regular function call but have magical behavior -- something likely to confuse developers. + +### Perl 6 syntax +``` +a ?? b !! c +``` +Syntax deemed too unconventional to use in Luau. + +### Smaller variations +``` +(if a then b else c) +``` +Ada uses this syntax (with parentheses required for clarity). Similar solutions were discussed for `as` previously and rejected to make it easier for humans and machines to understand the language syntax. + +``` +a then b else c +``` +This is ambiguous in some cases (like within if condition) so not feasible from a grammar perspective. + +``` +if a then b else c end +``` +The `end` here is unnecessary since `c` is not a block of statements -- it is simply an expression. Thus, use of `end` here would be inconsistent with its other uses in the language. It also makes the syntax more cumbersome to use and could lead to developers sticking with the error-prone `a and b or c` alternative. + +### `elseif` support + +We discussed a simpler version of this proposal without `elseif` support. Unlike if statements, here `elseif` is purely syntactic sugar as it's fully equivalent to `else if`. However, supporting `elseif` makes if expression more consistent with if statement - it is likely that developers familiar with Luau are going to try using `elseif` out of habit. Since supporting `elseif` here is trivial we decided to keep it for consistency. diff --git a/.cursor/rules/luau/syntax-leading-bar-and-ampersand.md b/.cursor/rules/luau/syntax-leading-bar-and-ampersand.md new file mode 100644 index 00000000..01062440 --- /dev/null +++ b/.cursor/rules/luau/syntax-leading-bar-and-ampersand.md @@ -0,0 +1,84 @@ +# Leading `|` and `&` in types + +**Status**: Implemented + +## Summary + +Allow the use of `|` and `&` without any types preceding them. + +## Motivation + +Occasionally, you will have many different types in a union or intersection type that exceeds a reasonable line limit and end up formatting it to avoid horizontal scrolling. Using the English alphabet as an example: + +```luau +type EnglishAlphabet = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" | "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" +``` + +Or you might just format it for readability: + +```luau +type EnglishAlphabet = never + | "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" + | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" + | "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" + | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" +``` + +Currently, there are two solutions to effect it: + +1. Moving `=` to the next line +2. Keep `=` on the line and add `never` if using `|`, or `unknown` if using `&` + +```luau +-- 1) union: +type Result + = { tag: "ok", value: T } + | { tag: "err", error: E } + +-- 2) union: +type Result = never + | { tag: "ok", value: T } + | { tag: "err", error: E } + +-- 1) intersection: +type MyOverloadedFunction + = ((string) -> number) + & ((number) -> string) + +-- 2) intersection: +type MyOverloadedFunction = unknown + & ((string) -> number) + & ((number) -> string) +``` + +OCaml and TypeScript support this same syntax: + +```ocaml +type 'a tree = + | Leaf + | Node of 'a tree * 'a * 'a tree;; +``` + +```ts +type Tree = + | { type: "leaf" } + | { type: "node", left: Tree, value: T, right: Tree }; +``` + +## Design + +This type becomes valid Luau syntax. + +```luau +type Tree = + | { type: "leaf" } + | { type: "node", left: Tree, value: T, right: Tree } +``` + +## Drawbacks + +No drawbacks. The parser change is trivial. Instead of trying to parse a simple type and then calling `Parser::parseTypeSuffix`, simply sense whether the current lexeme is `|` or `&` and directly invoke `Parser::parseTypeSuffix` with `nullptr` for the first type and making sure that `nullptr` does not get pushed into the resulting vector. If the current lexeme is not `|` or `&`, then revert to current logic. + +## Alternatives + +Don't do this and accept one of the solutions already mentioned. diff --git a/.cursor/rules/luau/syntax-named-function-type-args.md b/.cursor/rules/luau/syntax-named-function-type-args.md new file mode 100644 index 00000000..14dbd7c4 --- /dev/null +++ b/.cursor/rules/luau/syntax-named-function-type-args.md @@ -0,0 +1,58 @@ +# Named function type arguments + +**Status**: Implemented + +## Summary + +Introduce syntax for optional names of function type arguments. + +## Motivation + +This feature will be useful to improve code documentation and provide additional information to LSP clients. + +## Design + +This proposal uses the same syntax that functions use to name the arguments: `(a: number, b: string) -> string` + +Names can be provided in any place where function type is used, for example: + +* in type aliases: +```luau +type MyFunc = (cost: number, name: string) -> string +``` + +* in definition files for table types: +```luau +declare string: { + rep: (pattern: string, repeats: number) -> string, + sub: (string, start: number, end: number?) -> string -- names are optional, here the first argument doesn't use a name +} +``` + +* for variables: +```luau +local cb: (amount: number) -> number +local function foo(cb: (name: string) -> ()) +``` + +Variadic arguments cannot have a name, they are already written as ...: number. + +This feature can be found in other languages: + +* TypeScript (names are required): `let func: (p: type) => any` +* C++: `void (*f)(int cost, std::string name) = nullptr;` + +Implementation will store the names inside the function type description. + +Parsing the argument list will require a single-token lookahead that we already support. +Argument list parser will check if current token is an identifier and if the lookahead token is a colon, in which case it will consume both tokens. + +Function type comparisons will ignore the argument names, this proposal doesn't change the semantics of the language and how typechecking is performed. + +## Drawbacks + +Argument names require that we create unique function types even when these types are 'identical', so we can't compare types using pointer identity. + +This is already the case in current Luau implementation, but it might reduce the optimization opportunities in the future. + +There might also be cases of pointer identity checks that are currently hidden and named arguments might expose places where correct unification is required in the type checker. diff --git a/.cursor/rules/luau/syntax-number-literals.md b/.cursor/rules/luau/syntax-number-literals.md new file mode 100644 index 00000000..2ad6a6fa --- /dev/null +++ b/.cursor/rules/luau/syntax-number-literals.md @@ -0,0 +1,14 @@ +# Extended numeric literal syntax + +> Note: this RFC was adapted from an internal proposal that predates RFC process and as such doesn't follow the template precisely + +**Status**: Implemented + +## Design + +This proposal suggests extending Lua number syntax with: + +1. Binary literals: `0b10101010101`. The prefix is either '0b' or '0B' (to match Lua's '0x' and '0X'). Followed by at least one 1 or 0. +2. Number literal separators: `1_034_123`. We will allow an arbitrary number and arrangement of underscores in all numeric literals, including hexadecimal and binary. This helps with readability of long numbers. + +Both of these features are standard in all modern languages, and can help write readable code. diff --git a/.cursor/rules/luau/syntax-property-access-modifiers.md b/.cursor/rules/luau/syntax-property-access-modifiers.md new file mode 100644 index 00000000..642b2020 --- /dev/null +++ b/.cursor/rules/luau/syntax-property-access-modifiers.md @@ -0,0 +1,197 @@ +# Syntax for table property access modifiers + +**Status**: Implemented + +## Summary + +We need syntax to match the semantics of read-only and write-only modifiers for table properties and indexers. + +## Motivation + +See the semantic RFCs for motivation: + +* [Read-only table properties](https://github.com/luau-lang/rfcs/blob/master/docs/property-readonly.md) +* [Write-only table properties](https://github.com/luau-lang/rfcs/blob/master/docs/property-writeonly.md) + +## Design + +We will use the following syntax for describing a read or a write type of a property: + +```luau +type ReadOnly = { read x: number } +type WriteOnly = { write x: number } +``` + +A property will occasionally be both readable and writable, but using different +types. The author will have to duplicate the property name in this case: + +```luau +type Foo = { + read p: Animal, + write p: Dog +} +``` + +The tokens `read` and `write` are contextual. They are still valid property names. + +```luau +type Reader = { read: () -> number } +type Writer = { write: (number) -> () } +``` + +Indexers can also be read-only or write-only. + +```luau +type ReadOnlyMap = { read [K]: V } +type WriteOnlyMap = { write [K]: V } + +type ReadAnimals = { read Animal } +type WriteDogs = { write Dog } +``` + +Mixed indexers are allowed but heavily discouraged: + +```luau +type MixedMap = { read [string]: Animal, write [string]: Dog } +type MixedArray = { read Animal, write Dog } +``` + +Redundant record fields are still disallowed: Each field may have at most one +read type and one write type: + +```luau +type A = { read x: string, write x: "Hello" } -- OK +type C = { read x: string, read x: "hello" } -- ERROR +type B = { x: string, read x: "hello" } -- ERROR +``` + +We place no restriction on the relationship between the read and write type. +The following is certainly a bad idea, but it is legal: + +```luau +type T = { read n: number, write n: string } +``` + +This syntax is readable, matches the flavour of preexisting Luau syntax well, +and is pretty easy to parse efficiently. + +## Drawbacks + +We expect it to be very commonplace to have table types containing read-only +functions. This syntax is a little bit verbose and maybe unintuitive for that +use case. + +`read` and `write` are also very useful method names. It's a little bit +awkward to talk about a table that has a `read` or a `write` method: + +```luau +type Reader = { read read: () -> number } +type Writer = { read write: (number) -> () } +``` + +It is important to consider that this will be an issue for any keywords we might +choose unless we were to take the step of picking something unlikely to be a +useful property name. (ie something weird looking and ugly) + +Lastly, mixed indexers are very awkward both in syntax and semantics. + +## Alternatives + +The design space for syntax includes: + +* Names, symbols or attributes? +* Modifier position? +* How to parse or serialize properties with differing read- and write-types? + +### Names, symbols or attributes? + +We could use names for modifiers, such as + +* `get` and `set` +* `const` and `mut` +* `read` and `write` +* `readonly` and `writeonly` + +One issue is that these are all valid identifiers, so if we want +backward compatbility, they cannot be made keywords. This presents +issues with code that uses the chosen names as type or property names, +for instance: + +```luau + type set = { [any] : bool } + type ugh = { get set : set } +``` + +We could use symbols, for example + +* `+` and `-` +* (Are there other obvious pairs of symbols?) + +We could use attributes, for example + +* `@read` and `@write` +* ... as per "names for modifiers", only prefixed by `@` ... + +These both have the advantage of being unambiguous and easier to parse. Symbols +are terser, whch is both good and bad. + +We decided not to use glyphs because they are more difficult to understand, +don't contribute very much, and aren't very stylistically consistent with other +Luau syntax. + +### Modifier position? + +For attributes, the position is given by the syntax of attributes, for example: + +```luau + type Vector2 = { @read x: number, @read y : Number } +``` + +For the other proposals, there are four possibilities, depending on whether the +modifier is west-coast or east-coast, and whether it modifies the propertry name +or the type: + +```luau + type Vector2 = { read x : number, read y : number } + type Vector2 = { x read : number, y read : number } + type Vector2 = { x : read number, y : read number } + type Vector2 = { x : number read, y : number read } +``` + +The east-coast options are not easy-to-read with names, but are +easier with symbols, especially since `T?` is already postfix, for +example + +```luau + type Foo = { p: number?+ } +``` + +### How do we talk about properties with differing read- and write-types? + +One corner case is that type inference may deduce different read- and +write-types, which need to be presented to the user. For example the +read-type of `x` is `Animal` but its write-type is `Dog` in the principal type of: + +```luau + function f(x) + let a: Animal = x.pet + x.pet = Dog.new() + return a + end +``` + +If we are adding the modifier to the property name, we can repeat the name, for example + +```luau + x : { read pet : Animal, write pet : Dog } +``` + +If we are adding the modifier to the property type, we can give both types, for example: +```luau + x : { pet : read Animal + write Dog } +``` + +This syntax plays well with symbols for modifiers, for example +```luau + x : { pet : +Animal -Dog } +``` diff --git a/.cursor/rules/luau/syntax-singleton-types.md b/.cursor/rules/luau/syntax-singleton-types.md new file mode 100644 index 00000000..147d9f57 --- /dev/null +++ b/.cursor/rules/luau/syntax-singleton-types.md @@ -0,0 +1,91 @@ +# Singleton types + +> Note: this RFC was adapted from an internal proposal that predates RFC process + +**Status**: Implemented + +## Summary + +Introduce a new kind of type variable, called singleton types. They are just like normal types but has the capability to represent a constant runtime value as a type. + +## Motivation + +There are two primary drivers to add two kinds of singleton types: `string` and `boolean`. + +### `string` singleton types + +Luau type checker can get by mostly fine without constant string types, but it can shine at its best in user code. + +One popular pattern are the abstract data types, which could be supported: + +``` +type Ok = { type: "ok", value: T } +type Err = { type: "error", error: E } +type Result = Ok | Err + +local result: Result = ... +if result.type == "ok" then + -- result :: Ok + print(result.value) +else + -- result :: Err + error(result.error) +end +``` + +### `boolean` singleton types + +At the moment, Luau type checker is completely unable to discern the state of a boolean whatsoever, which makes it impossible to determine all the possible types of the expression from any variations of `a and b`, `a and b or c`, or `a or b`. + +## Design + +Both design components of singleton types should be intuitive for everyone by default. + +### Syntax + +A constant string token as well as a constant boolean token is now allowed to show up in type annotation context. + +``` +type Animals = "Dog" | "Cat" | "Bird" +type TrueOrNil = true? +``` + +Adding constant strings as type means that it is now legal to write +`{["foo"]:T}` as a table type. This should be parsed as a property, +not an indexer. For example: +```luau + type T = { + ["foo"]: number, + ["$$bar"]: string, + baz: boolean, + } +``` +The table type `T` is a table with three properties and no indexer. + +### Semantics + +You are allowed to provide a constant value to the generic primitive type. + +```luau +local foo: "Hello world" = "Hello world" +local bar: string = foo -- allowed + +local foo: true = true +local bar: boolean = foo -- also allowed +``` + +The inverse is not true, because you're trying to narrow any values to a specific value. + +```luau +local foo: string = "Hello world" +local bar: "Hello world" = foo -- not allowed + +local foo: boolean = true +local bar: true = foo -- not allowed +``` + +## Drawbacks + +This may increase the cost of type checking - since some types now need to carry a string literal value, it may need to be copied and compared. The cost can be mitigated through interning although this is not very trivial due to cross-module type checking and the need to be able to typecheck a module graph incrementally. + +This may make the type system a bit more complex to understand, as many programmers have a mental model of types that doesn't include being able to use literal values as a type, and having that be a subtype of a more general value type. diff --git a/.cursor/rules/luau/syntax-string-interpolation.md b/.cursor/rules/luau/syntax-string-interpolation.md new file mode 100644 index 00000000..00783370 --- /dev/null +++ b/.cursor/rules/luau/syntax-string-interpolation.md @@ -0,0 +1,175 @@ +# String interpolation + +**Status**: Implemented + +## Summary + +New string interpolation syntax. + +## Motivation + +The problems with `string.format` are many. + +1. Must be exact about the types and its corresponding value. +2. Using `%d` is the idiomatic default for most people, but this loses precision. + * `%d` casts the number into `long long`, which has a lower max value than `double` and does not support decimals. + * `%f` by default will format to the millionths, e.g. `5.5` is `5.500000`. + * `%g` by default will format up to the hundred thousandths, e.g. `5.5` is `5.5` and `5.5312389` is `5.53123`. It will also convert the number to scientific notation when it encounters a number equal to or greater than 10^6. + * To not lose too much precision, you need to use `%s`, but even so the type checker assumes you actually wanted strings. +3. No support for `boolean`. You must use `%s` **and** call `tostring`. +4. No support for values implementing the `__tostring` metamethod. +5. Using `%` is in itself a dangerous operation within `string.format`. + * `"Your health is %d% so you need to heal up."` causes a runtime error because `% so` is actually parsed as `(%s)o` and now requires a corresponding string. +6. Having to use parentheses around string literals just to call a method of it. + +## Design + +To fix all of those issues, we need to do a few things. + +1. A new string interpolation expression (fixes #5, #6) +2. Extend `string.format` to accept values of arbitrary types (fixes #1, #2, #3, #4) + +Because we care about backward compatibility, we need some new syntax in order to not change the meaning of existing strings. There are a few components of this new expression: + +1. A string chunk (`` `...{ ``, `}...{`, and `` }...` ``) where `...` is a range of 0 to many characters. + * `\` escapes `` ` ``, `{`, and itself `\`. + * The pairs must be on the same line (unless a `\` escapes the newline) but expressions needn't be on the same line. +2. An expression between the braces. This is the value that will be interpolated into the string. +{% raw %} + * Restriction: we explicitly reject `{{` as it is considered an attempt to escape and get a single `{` character at runtime. +{% endraw %} +3. Formatting specification may follow after the expression, delimited by an unambiguous character. + * Restriction: the formatting specification must be constant at parse time. + * In the absence of an explicit formatting specification, the `%*` token will be used. + * For now, we explicitly reject any formatting specification syntax. A future extension may be introduced to extend the syntax with an optional specification. + +To put the above into formal EBNF grammar: + +``` +stringinterp ::= exp { exp} +``` + +Which, in actual Luau code, will look like the following: + +``` +local world = "world" +print(`Hello {world}!`) +--> Hello world! + +local combo = {5, 2, 8, 9} +print(`The lock combinations are: {table.concat(combo, ", ")}`) +--> The lock combinations are: 5, 2, 8, 9 + +local set1 = Set.new({0, 1, 3}) +local set2 = Set.new({0, 5, 4}) +print(`{set1} ∪ {set2} = {Set.union(set1, set2)}`) +--> {0, 1, 3} ∪ {0, 5, 4} = {0, 1, 3, 4, 5} + +print(`Some example escaping the braces \{like so}`) +print(`backslash \ that escapes the space is not a part of the string...`) +print(`backslash \\ will escape the second backslash...`) +print(`Some text that also includes \`...`) +--> Some example escaping the braces {like so} +--> backslash that escapes the space is not a part of the string... +--> backslash \ will escape the second backslash... +--> Some text that also includes `... +``` + +As for how newlines are handled, they are handled the same as other string literals. Any text between the `{}` delimiters are not considered part of the string, hence newlines are OK. The main thing is that one opening pair will scan until either a closing pair is encountered, or an unescaped newline. + +``` +local name = "Luau" + +print(`Welcome to { + name +}!`) +--> Welcome to Luau! + +print(`Welcome to \ +{name}!`) +--> Welcome to +-- Luau! +``` + +We currently *prohibit* using interpolated strings in function calls without parentheses, this is illegal: + +``` +local name = "world" +print`Hello {name}` +``` + +> Note: This restriction is likely temporary while we work through string interpolation DSLs, an ability to pass individual components of interpolated strings to a function. + +{% raw %} +The restriction on `{{` exists solely for the people coming from languages e.g. C#, Rust, or Python which uses `{{` to escape and get the character `{` at runtime. We're also rejecting this at parse time too, since the proper way to escape it is `\{`, so: + +```luau +print(`{{1, 2, 3}} = {myCoolSet}`) -- parse error +``` +{% endraw %} + +If we did not apply this as a parse error, then the above would wind up printing as the following, which is obviously a gotcha we can and should avoid. + +``` +--> table: 0xSOMEADDRESS = {1, 2, 3} +``` + +Since the string interpolation expression is going to be lowered into a `string.format` call, we'll also need to extend `string.format`. The bare minimum to support the lowering is to add a new token whose definition is to perform a `tostring` call. `%*` is currently an invalid token, so this is a backward compatible extension. This RFC shall define `%*` to have the same behavior as if `tostring` was called. + +```luau +print(string.format("%* %*", 1, 2)) +--> 1 2 +``` + +The offset must always be within bound of the numbers of values passed to `string.format`. + +```luau +local function return_one_thing() return "hi" end +local function return_two_nils() return nil, nil end + +print(string.format("%*", return_one_thing())) +--> "hi" + +print(string.format("%*", Set.new({1, 2, 3}))) +--> {1, 2, 3} + +print(string.format("%* %*", return_two_nils())) +--> nil nil + +print(string.format("%* %* %*", return_two_nils())) +--> error: value #3 is missing, got 2 +``` + +It must be said that we are not allowing this style of string literals in type annotations at this time, regardless of zero or many interpolating expressions, so the following two type annotations below are illegal syntax: + +```luau +local foo: `foo` +local bar: `bar{baz}` +``` + +String interpolation syntax will also support escape sequences. Except `\u{...}`, there is no ambiguity with other escape sequences. If `\u{...}` occurs within a string interpolation literal, it takes priority. + +```luau +local foo = `foo\tbar` -- "foo bar" +local bar = `\u{0041} \u{42}` -- "A B" +``` + +## Drawbacks + +If we want to use backticks for other purposes, it may introduce some potential ambiguity. One option to solve that is to only ever produce string interpolation tokens from the context of an expression. This is messy but doable because the parser and the lexer are already implemented to work in tandem. The other option is to pick a different delimiter syntax to keep backticks available for use in the future. + +If we were to naively compile the expression into a `string.format` call, then implementation details would be observable if you write `` `Your health is {hp}% so you need to heal up.` ``. When lowering the expression, we would need to implicitly insert a `%` character anytime one shows up in a string interpolation token. Otherwise attempting to run this will produce a runtime error where the `%s` token is missing its corresponding string value. + +## Alternatives + +Rather than coming up with a new syntax (which doesn't help issue #5 and #6) and extending `string.format` to accept an extra token, we could just make `%s` call `tostring` and be done. However, doing so would cause programs to be more lenient and the type checker would have no way to infer strings from a `string.format` call. To preserve that, we would need a different token anyway. + +Language | Syntax | Conclusion +----------:|:----------------------|:----------- +Python | `f'Hello {name}'` | Rejected because it's ambiguous with function call syntax. +Swift | `"Hello \(name)"` | Rejected because it changes the meaning of existing strings. +Ruby | `"Hello #{name}"` | Rejected because it changes the meaning of existing strings. +JavaScript | `` `Hello ${name}` `` | Viable option as long as we don't intend to use backticks for other purposes. +C# | `$"Hello {name}"` | Viable option and guarantees no ambiguities with future syntax. + +This leaves us with only two syntax that already exists in other programming languages. The current proposal are for backticks, so the only backward compatible alternative are `$""` literals. We don't necessarily need to use `$` symbol here, but if we were to choose a different symbol, `#` cannot be used. I picked backticks because it doesn't require us to add a stack of closing delimiters in the lexer to make sure each nested string interpolation literals are correctly closed with its opening pair. You only have to count them. diff --git a/.cursor/rules/luau/syntax-type-alias-type-packs.md b/.cursor/rules/luau/syntax-type-alias-type-packs.md new file mode 100644 index 00000000..9f4279ed --- /dev/null +++ b/.cursor/rules/luau/syntax-type-alias-type-packs.md @@ -0,0 +1,218 @@ +# Type alias type packs + +**Status**: Implemented + +## Summary + +Provide semantics for referencing type packs inside the body of a type alias declaration + +## Motivation + +We now have an ability to declare a placeholder for a type pack in type alias declaration, but there is no support to reference this pack inside the body of the alias: +```luau +type X = () -> A... -- cannot reference A... as the return value pack + +type Y = X -- invalid number of arguments +``` + +Additionally, while a simple introduction of these generic type packs into the scope will provide an ability to reference them in function declarations, we want to be able to use them to instantiate other type aliases as well. + +Declaration syntax also supports multiple type packs, but we don't have defined semantics on instantiation of such type alias. + +## Design + +We currently support type packs at these locations: +```luau +-- for variadic function parameter when type pack is generic +local function f(...: a...) + +-- for multiple return values +local function f(): a... + +-- as the tail item of function return value pack +local function f(): (number, a...) +``` + +We want to be able to use type packs for type alias instantiation: +```luau +type X = -- + +type A = X -- T... = (S...) +``` + +Similar to function calls, we want to be able to assign zero or more regular types to a single type pack: +```luau +type A = X<> -- T... = () +type B = X -- T... = (number) +type C = X -- T... = (number, string) +``` + +Definition of `A` doesn't parse right now, we would like to make it legal going forward. + +Variadic types can also be assigned to type alias type pack: +```luau +type D = X<...number> -- T... = (...number) +``` + +### Multiple type pack parameters + +We have to keep in mind that it is also possible to declare a type alias that takes multiple type pack parameters. + +Again, type parameters that haven't been matched with type arguments are combined together into the first type pack. +After the first type pack parameter was assigned, following type parameters are not allowed. +Type pack parameters after the first one have to be type packs: +```luau +type Y = -- + +type A = Y -- T... = S..., U... = S... +type B = Y<...string, S...> -- T... = (...string), U... = S... +type C = Y -- T... = (number, string), U... = S... +type D = Y<...number> -- error, T = (...number), but U... = undefined, not (...number) even though one infinite set is enough to fill two, we may have '...number' inside a type pack argument and we'll be unable to see its content +type E = Y -- error, type parameters are not allowed after a type pack + +type Z = -- + +type F = Z -- T = number, U... = S... +type G = Z -- error, not enough regular type arguments, can't split the front of S... into T + +type W = -- + +type H = W -- U... = S..., V... = R... +type I = W -- U... = (string), V... = S... +``` + +### Explicit type pack syntax + +To enable additional control for the content of a type pack, especially in cases where multiple type pack parameters are expected, we introduce an explicit type pack syntax for use in type alias instantiation. + +Similar to variadic types `...a` and generic type packs `T...`, explicit type packs can only be used at type pack positions: +```luau +type Y = (T...) -> (U...) + +type F1 = Y<(number, string), (boolean)> -- T... = (number, string), U... = (boolean) +type F2 = Y<(), ()> -- T... = (), U... = () +type F3 = Y -- T... = (string, number), U... = (number, S...) +``` + +In type parameter list, types inside the parentheses always produce a type pack. +This is in contrast to function return type pack annotation, where `() -> number` is the same as `() -> (number)`. + +However, to preserve backwards-compatibility with optional parenthesis around regular types, type alias instantiation is allowed to assign a non-variadic type pack parameter with a single element to a type argument: +```luau +type X = (T) -> U? +type A = X<(number), (string)> -- T = number, U = string +type A = X<(number), string> -- same + +type Y = (T...) -> () +type B = Y<(number), (string)> -- error: too many type pack parameters +``` + +Explicit type pack syntax is not available in other type pack annotation contexts. + +## Drawbacks + +### Type pack element extraction + +Because our type alias instantiations are not lazy, it's impossible to split of a single type from a type pack: +```luau +type Car = T + +type X = Car -- number +type Y = Car -- error, not enough regular type arguments +type Z = Y -- error, Y doesn't have a valid definition +``` + +With our immediate instantiation, at the point of `Car`, we only know that `S...` is a type pack, but contents are not known. + +Splitting off a single type is is a common pattern with variadic templates in C++, but we don't allow type alias overloads, so use cases are more limited. + +### Type alias can't result in a type pack + +We don't propose type aliases to generate type packs, which could have looked as: +```luau +type Car = T +type Cdr = U... +type Cons = (T, U...) + +--[[ + using type functions to operate on type packs as a list of types +]] +``` + +We wouldn't be able to differentiate if an instantiation results in a type or a type pack and our type system only allows variadic types as the type pack tail element. + +Support for variadic types in the middle of a type pack can be found in TypeScript's tuples. + +## Alternatives + +### Function return type syntax for explicit type packs + +Another option that was considered is to parse `(T)` as `T`, like we do for return type annotation. + +This option complicates the match ruleset since the typechecker will never know if the user has written `T` or `(T)` so each regular type could be a single element type pack and vice versa. +```luau +type X +type C = X -- T... = (number, number) +type D = X<(number), (number)> -- T... = (number, number) + +type Y + +--- two items that were enough to satisfy only a single T... in X are enough to satisfy two T..., U... in Y +type E = Y -- T... = (number), U... = (number) +``` + +### Special mark for single type type packs + +In the Rust language, there is a special disambiguation syntax for single element tuples and single element type packs using a trailing comma: +```rust +(Type,) +``` + +In Python, the same idea is used for single element tuple values: +```python +value = (1, ) +``` + +Since our current ruleset no longer has a problem with single element type tuples, I don't think we need syntax-directed disambiguation option like this one. + +### Only type pack arguments for type pack parameters + +One option that we have is to remove implicit pack assignment from a set of types and always require new explicit type pack syntax: + +```luau +type X = -- + +type B = X<> -- invalid +type C = X -- invalid +type D = X -- invalid + +type B = X<()> -- T... = () +type C = X<(number)> -- T... = (number) +type D = X<(number, string)> -- T... = (number, string) +``` + +But this doesn't allow users to define type aliases where they only care about a few types and use the rest as a 'tail': + +```luau +type X = (T, U, Rest...) -> Rest... + +type A = X -- forced to use a type pack when there are no tail elements +``` + +It also makes it harder to change the type parameter count without fixing up the instantiations. + +### Combining types together with the following type pack into a single argument + +Earlier version of the proposal allowed types to be combined together with a type pack as a tail: +```luau +type X = -- + +type A = X --- T... = (number, S...) +``` + +But this syntax resulted in some confusing behavior when multiple type pack arguments are expected: +```luau +type Y = -- + +type B = Y -- not enough type pack parameters +``` diff --git a/.cursor/rules/luau/syntax-type-ascription-bidi.md b/.cursor/rules/luau/syntax-type-ascription-bidi.md new file mode 100644 index 00000000..a2381943 --- /dev/null +++ b/.cursor/rules/luau/syntax-type-ascription-bidi.md @@ -0,0 +1,36 @@ +# Relaxing type assertions + +**Status**: Implemented + +## Summary + +The way `::` works today is really strange. The best solution we can come up with is to allow `::` to convert between any two related types. + +## Motivation + +Due to an accident of the implementation, the Luau `::` operator can only be used for downcasts and casts to `any`. + +Because of this property, `::` works as users expect in a great many cases, but doesn't actually make a whole lot of sense when scrutinized. + +```luau +local t = {x=0, y=0} + +local a = t :: {x: number, y: number, z: number} -- OK +local a = t :: {x: number} -- Error: This is an upcast! +``` + +Originally, we intended for type assertions to only be useful for upcasts. This would make it consistent with the way annotations work in OCaml and Haskell and would never break soundness. However, users have yet to report this oddity! It is working correctly for them! + +From this, we conclude that users are actually much more interested in having a convenient way to write a downcast. We should bless this use and clean up the rules so they make more sense. + +## Design + +I propose that we change the meaning of the `::` operator to permit conversions between any two types for which either is a subtype of the other. + +## Drawbacks + +`::` was originally envisioned to be a way for users to make the type inference engine work smarter and better for them. The fact of the matter is, though, that downcasts are useful to our users. We should be responsive to that. + +## Alternatives + +We initially discussed allowing `::` to coerce anything to anything else, acting as a full bypass of the type system. We are not doing this because it is really just not that hard to implement: All we need to do is to succeed if unification works between the two types in either direction. Additionally, requiring one type to be subtype of another catches mistakes when two types are completely unrelated, e.g. casting a `string` to a table will still produce an error when this proposal is in effect - this will make sure that `::` is as safe of a bypass as it can be in practice. diff --git a/.cursor/rules/luau/syntax-type-ascription.md b/.cursor/rules/luau/syntax-type-ascription.md new file mode 100644 index 00000000..a56c5099 --- /dev/null +++ b/.cursor/rules/luau/syntax-type-ascription.md @@ -0,0 +1,68 @@ +# Type ascriptions + +> Note: this RFC was adapted from an internal proposal that predates RFC process + +**Status**: Implemented + +## Summary + +Implement syntax for type ascriptions using `::` + +## Motivation + +Luau would like to provide a mechanism for requiring a value to be of a specific type: + +```luau +-- Asserts that the result of a + b is a number. +-- Emits a type error if it isn't. +local foo = (a + b) as number +``` + +This syntax was proposed in the original Luau syntax proposal. Unfortunately, we discovered that there is a syntactical ambiguity with `as`: + +```luau +-- Two function calls or a type assertion? +foo() as (bar) +``` + +## Design + +To provide this functionality without introducing syntactical confusion, we want to change this syntax to use the `::` symbol instead of `as`: + +```luau +local foo = (a + b) :: number +``` + +This syntax is borrowed from Haskell, where it performs the same function. + +The `::` operator will bind very tightly, like `as`: + +```luau +-- type assertion applies to c, not (b + c). +local a = b + c :: number +``` + +Note that `::` can only cast a *single* value to a type - not a type pack (multiple values). This means that in the following context, `::` changes runtime behavior: + +```luau +foo(1, bar()) -- passes all values returned by bar() to foo() +foo(1, bar() :: any) -- passes just the first value returned by bar() to foo() +``` + +## Drawbacks + +It's somewhat unusual for Lua to use symbols as operators, with the exception of arithmetics (and `..`). Also a lot of Luau users may be familiar with TypeScript, where the equivalent concept uses `as`. + +`::` may make it more difficult for us to use Turbofish (`::<>`) in the future. + +## Alternatives + +We considered requiring `as` to be wrapped in parentheses, and then relaxing this restriction where there's no chance of syntactical ambiguity: + +```luau +local foo: SomeType = (fn() as SomeType) +-- Parentheses not needed: unambiguous! +bar(foo as number) +``` + +We decided to not go with this due to concerns about the complexity of the grammar - it requires users to internalize knowledge of our parser to know when they need to surround an `as` expression with parentheses. The rules for when you can leave the parentheses out are somewhat nonintuitive. diff --git a/.cursor/rules/luau/syntax-typed-variadics.md b/.cursor/rules/luau/syntax-typed-variadics.md new file mode 100644 index 00000000..53372a4f --- /dev/null +++ b/.cursor/rules/luau/syntax-typed-variadics.md @@ -0,0 +1,45 @@ +# Typed variadics + +> Note: this RFC was adapted from an internal proposal that predates RFC process + +**Status**: Implemented + +## Summary + +Add syntax for ascribing a type to variadic pack (`...`). + +## Motivation + +Luau's type checker internally can represent a typed variadic: any number of values of the same type. Developers should be able to describe this construct in their own code, for cases where they have a function that accepts an arbitrary number of `string`s, for example. + +## Design + +We think that the postfix `...: T` syntax is the best balance of readability and simplicity. In function type annotations, we will use `...T`: + +```luau +function math.max(...: number): number +end + +type fn = (...string) -> string + +type fn2 = () -> ...string +``` + +This doesn't introduce syntactical ambiguity and should cover all cases where we need to represent this construct. Like `...` itself, this syntax is only legal as the last parameter to a function. + +Like all type annotations, the `...: T` syntax has no effect on runtime behavior versus an unannotated `...`. + +There are currently no plans to introduce named variadics, but this proposal leaves room to adopt them with the form `...name: Type` in function declarations in the future. + +## Drawbacks + +The mismatch between the type of `...` in function declaration (`number`) and type declaration (`...number`) is a bit awkward. This also gets more complicated when we introduce generic variadic packs. + +## Alternatives + +We considered several other syntaxes for this construct: + +* `...T`: leaves no room to introduce named variadics +* `...: T...`: redundant `...` +* `... : ...T`: feels redundant, same as above +* `...: T*`: potentially confusing for users with C knowledge, where `T*` is a pointer type diff --git a/.cursor/rules/luau/type-ascription-by-inhabitance.md b/.cursor/rules/luau/type-ascription-by-inhabitance.md new file mode 100644 index 00000000..5239dfbe --- /dev/null +++ b/.cursor/rules/luau/type-ascription-by-inhabitance.md @@ -0,0 +1,71 @@ +# Improved type checking rules of cast operator + +## Summary + +Replace the bivariance rule of the cast operator `::` by a rule of intersection inhabitance. + +## Motivation + +This [RFC](./syntax-type-ascription.md) proposed a rule such that the cast is legal if and only if it is an upcast, i.e. given a term `number`, you can upcast into `number | string`. An implementation error instead actually allowed _downcasts_ only, i.e. given a term `number | string`, you can downcast into `number` but not the other way. + +We relaxed it in this [RFC](./syntax-type-ascription-bidi.md) by making the cast operator _bivariant_, which is to test downcasts _or_ upcasts, so now you can cast from `number` to `number | string` and also `number | string` to `number`. + +The current rule almost works for some use cases, but not all. For instance, you cannot cast `string` into `"a"?` because neither `string <: "a"?` nor `"a"? <: string` holds true: + - Upcast: `string` is not a subtype of `"a"` + - Downcast: `"a"` is a subtype of `string`, but `nil` is not a subtype of `string`. + +The workaround currently is to have an intermediary `any` or `unknown` cast: `(e :: any) :: "a"?` where `e : string`. + +## Design + +We propose that cast operator should instead test for whether there exists a common type from the type of the expression and the type we wish to cast into. + +For example, `e :: T` will report an error if and only if `typeof(e) & T` is uninhabited, unless `typeof(e)` is already uninhabited. More concretely: + +```luau +local function noop(x) end + +local function f(e: number | string) + -- OK + noop(e :: string) -- (number | string) & string ~ string + noop(e :: number) -- (number | string) & number ~ number + noop(e :: string | boolean) -- (number | string) & (string | boolean) ~ string + + -- Not OK + noop(e :: boolean) -- (number | string) & boolean ~ never + noop(e :: never) -- (number | string) & never ~ never + + -- Special cases + noop(error("") :: string) -- OK +end +``` + +The reason why the special case oughtn't report an error is to support ad hoc typed holes pattern instead of having to hand-craft an expression that matches that type: + +```luau +local x = error("") :: string | number +-- versus +local x = if math.random() > 0.5 then "hello" else 5 +``` + +We don't apply the same special case for `T`, otherwise we won't report an error when `e : string` and `T` is `never`. This would mean we get to support the exhaustive analysis use case: + +```luau +local function f(e: number | string) + if typeof(e) == "number" then + -- ... + elseif typeof(e) == "string" then + -- ... + else + noop(e :: never) -- Statically asserts that `e` is indeed `never` + end +end +``` + +## Drawbacks + +This does relax the rules of the cast operator significantly and despite that it's what users actually do with it, it's more likely to be error-prone than before, e.g. casting from `number | string` to `string | boolean` without `any` intermediary cast. + +## Alternatives + +Remove all the type checking rules and just let it run amok, such as casting `number` right into `string` with no type errors. diff --git a/.cursor/rules/luau/type-byte-buffer.md b/.cursor/rules/luau/type-byte-buffer.md new file mode 100644 index 00000000..335b35d7 --- /dev/null +++ b/.cursor/rules/luau/type-byte-buffer.md @@ -0,0 +1,187 @@ +# Byte buffer type + +**Status**: Implemented + +## Summary + +A new built-in type to serve as a mutable array of bytes, with a library for reading and writing the contents. + +## Motivation + +The existing mechanisms for representing binary data in Luau can be insufficient for performance-oriented use cases. + +A binary blob may be represented as an array of numbers 0-255 (idiomatic and reasonably performant, but very space-inefficient: each element takes 16 bytes, and it's difficult to work with data that is wider than bytes) or a string (only works for read-only cases, data extraction is possible via `string.unpack` but not very efficient). Neither of the two options are optimal, especially when the use case is data encoding (as opposed to decoding). + +While the host can provide custom data types that close this gap using `userdata` with overridden `__index`/`__newindex` that provide byte storage, the resulting type would be memory-efficient but not performance-efficient due to the cost of metamethod dispatch for every access. Additionally, since every host has a different API, this would make it difficult to write portable Luau algorithms that require efficient binary access. + +With this type, we solve the use cases for binary format encoding and decoding. This opens the door for developers to work with file formats that might've been too large to represent with tables or to write to strings. It also allows for writing algorithms that deal with raw data often, such as compression or hashing. Web services that exchange data in packed formats could also benefit from this. The new type can also serve as a more efficient internal representation for libraries that provide higher level objects like images or geometry data. + +Other high-level languages support similar data structures, for example [Java ByteByffer](https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/nio/ByteBuffer.html) or [JavaScript ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). + +## Design + +This type will be called 'buffer' and will be implemented using a new built-in type (GCObject with new tag). + +By default, metatable is not set for this type and can only be modified using `lua_setmetatable` C API. + +Operations on this type will be exposed through a new Luau library called 'buffer`, with the following functions: + +`buffer.create(size: number): buffer` + +Instantiates the object with a fixed size. +Each byte is initialized to 0. + +'size' has to be an integer and it cannot be negative. Maximum size is defined by implementation, but it at least matches the maximum string size. + +`buffer.fromstring(str: string): buffer` + +Instantiates the object from a string. +The size of the buffer is fixed and equals to the length of the string. + +`buffer.tostring(b: buffer): string` + +Returns the buffer data as a string. + +`buffer.len(b: buffer): number` + +Returns the size of the buffer. + +`buffer.copy(target_buffer: buffer, target_offset: number, source_buffer: buffer, source_offset: number?, count: number?): ()` + +Copy 'count' bytes from 'source_buffer' starting at offset 'source_offset' into the 'target_buffer' at 'target_offset'. + +It is possible for 'source_buffer' and 'target_buffer' to be the same. +Copying an overlapping region inside the same buffer acts as if the source region is copied into a temporary buffer and then that buffer is copied over to the target. + +If 'source_offset' is nil or is omitted, it defaults to 0. +If 'count' is 'nil' or is omitted, the whole 'source_buffer' data starting from 'source_offset' is taken. + +`buffer.fill(b: buffer, offset: number, value: number, count: number?): ()` + +Set 'count' bytes in the buffer starting from specified offset to 'value'. + +'value' is converted to unsigned integer using `bit32` library semantics, lower 8 bits are taken from the resulting integer to use as the byte value. + +If 'count' is 'nil' or is omitted, all bytes after the specified offset are set. + +`buffer.readi8(b: buffer, offset: number): number` + +`buffer.readu8(b: buffer, offset: number): number` + +`buffer.readi16(b: buffer, offset: number): number` + +`buffer.readu16(b: buffer, offset: number): number` + +`buffer.readi32(b: buffer, offset: number): number` + +`buffer.readu32(b: buffer, offset: number): number` + +`buffer.readf32(b: buffer, offset: number): number` + +`buffer.readf64(b: buffer, offset: number): number` + +Used to read the data from the buffer by reinterpreting bytes at the offset as the type in the argument and converting it into a number. + +When reading the value of any NaN representation, implementation can (but not required to) replace it with a different quiet NaN representation. + +`buffer.writei8(b: buffer, offset: number, value: number): ()` + +`buffer.writeu8(b: buffer, offset: number, value: number): ()` + +`buffer.writei16(b: buffer, offset: number, value: number): ()` + +`buffer.writeu16(b: buffer, offset: number, value: number): ()` + +`buffer.writei32(b: buffer, offset: number, value: number): ()` + +`buffer.writeu32(b: buffer, offset: number, value: number): ()` + +`buffer.writef32(b: buffer, offset: number, value: number): ()` + +`buffer.writef64(b: buffer, offset: number, value: number): ()` + +Used to write data to the buffer by converting the number into the type specified by the argument and reinterpreting it as individual bytes. + +Conversion to integer numbers performs a truncation of the number value. Results of converting special number values (inf/nan) are platform-specific. +Conversion to unsigned numbers uses `bit32` library semantics. + +`buffer.readstring(b: buffer, offset: number, count: number): string` + +Used to read a string of length 'count' from the buffer at specified offset. + +`buffer.writestring(b: buffer, offset: number, value: string, count: number?): ()` + +Used to write data from a string into the buffer at specified offset. + +If an optional 'count' is specified, only 'count' bytes are taken from the string. 'count' cannot be larger than the string length. + +--- + +All offsets start at 0 (not to be confused with indices that start at 1 in Luau tables). +This choice is made for both performance reasons (no need to subtract 1) and for compatibility with data formats that often describe field positions using offsets. +While there is a way to solve the performance problem using luajit trick where table array part is allocated from index 0, this would mean that data in the buffer has 1 extra byte and this complicates the bounds checking. + +Offsets and 'count' numbers are cast to an integer in an implementation-defined way. + +Read and write operations for relevant types are little endian as it is the most common use case, and conversion is often trivial to do manually. + +Integer numbers are read and written using two's complement representation. + +Floating-point numbers are read and written using a format specified by IEEE 754. + +Additionally, unaligned offsets in all operations are valid and behave as expected. + +Unless otherwise specified, if a read or write operation would cause an access outside the data in the buffer, an error is thrown. + +### Public C API + +`void* lua_tobuffer(lua_State* L, int idx, size_t* len);` + +Used to fetch buffer data pointer and buffer size at specified location. + +If there is no buffer at the location, `NULL` is returned and `len` is not modified. + +`void* lua_newbuffer(lua_State* L, size_t l);` + +Pushes new buffer of size `l` onto the stack. + +`lua_isbuffer(L, n)` + +C macro helper to check if value at the specified location is a buffer. + +Simiar to `lua_istable`/`lua_isvector`/`lua_isthread` it's a simple wrapper over `lua_type` call and doesn't require internal coercions/internal field access like `lua_isnumber`/`lua_iscfunction`. + +`void* luaL_checkbuffer(lua_State* L, int narg, size_t* len);` + +Similar to `lua_tobuffer`, but throws a tag error if there is no buffer at specified location. + +`int luaopen_buffer(lua_State* L);` + +Registers the 'buffer' library. If `luaL_openlibs` is used, that includes the 'buffer' library. + +`LUA_BUFFERLIBNAME` + +Macro containing the 'buffer' library name. + +## Drawbacks + +This introduces 'buffer' as a class type in global typing context and adds new global 'buffer' table. +While class type might intersect with user-defined 'buffer' type, such type redefinitions are already allowed in Luau, so this should not cause new type errors. +The same goes for the global table, users can already override globals like 'string', so additional of a new global is backwards-compatible, but new table will not be accessible in such a case. + +This increases the complexity of the VM a little bit, since support for new tagged type is required in interpreter loop and GC. + +There is also a string buffer C API; by having functions talk about 'buffer' (like `luaL_extendbuffer`) and use `luaL_Buffer`, it might be a point of confusion for C API users. + +## Alternatives + +The workarounds without this feature are significantly inefficient: + +* Tables can, at most, represent 64 bits per slot using expensive `vector` packing. +* Tables with or without packing severely bloat memory, as each array entry is subject to Luau value size and alignment. +* Strings are immutable and can’t be used to efficiently construct binary data without exponential allocations. +* Built in `string.pack` and `string.unpack` can’t cover more complex schemas on their own or formats which are edited mid-creation. + +The proposed buffer object has no cursor/position as part of its state; while it would be possible to implement this along with a separate set of APIs like `pushTYPE` and `takeTYPE`, this addition is always possible to implement later and it makes the buffer structure more complicated; additionally, external offset management might be easier to optimize and is more orthogonal as we do not need to duplicate stateful and stateless functions. + +The proposed buffer object is not resizeable; this is possible to implement later using explicit `buffer.resize` call, however this may result in a performance impact for native implementation as the data will be read through a pointer redirection and will be more difficult to optimize; thus, this version of the RFC only proposes fixed length buffers. That said, if resizeable buffers are desired in the future, we would plan to enhance the current buffer type instead of making a parallel resizeable buffer type to reduce complexity. diff --git a/.cursor/rules/luau/type-error-suppression.md b/.cursor/rules/luau/type-error-suppression.md new file mode 100644 index 00000000..94d6f0b2 --- /dev/null +++ b/.cursor/rules/luau/type-error-suppression.md @@ -0,0 +1,132 @@ +# Type Error Suppression + +**Status**: Implemented + +## Summary + +An alternative approach to type error suppression and the `any` type. + +## Motivation + +There are two reasons for this RFC: to make clearer how we're +approaching error suppression, and to remove the magic "both top and +bottom" behavior of the `any` type. + +### Error suppression + +Currently, we have ad hoc error suppression, where we try to avoid cascading errors, for example in +```luau + local x = t.p.q.r +``` + +if `t` is a table without a `p` field, we report a type error on +`t.p`, but we avoid cascading errors by assigning `t.p` an internal +`error` type, and suppressing errors in property access `M.p` when `M` +has type `error`. + +In this RFC, we clarify that error suppression occurs when the error +is caused by a type `T`, and `error` is a subtype of `T`. + +### The `any` type + +The `any` type is an outlier in the type system, in that currently it +is both a top type (`T` is a subtype of `any` for all types `T`) and a +bottom type (`any` is a subtype of `U` for all types `U`). This is +"consistent subtyping" (written `T ≾ U`) from Siek and Taha (2007), +which has the issue of not being transitive (if it were, then `T ≾ U` +for all types `T` and `U`, which is not a very useful definition of +subtyping). + +The solution used by Siek and Taha is to split consistent subtyping (`S ≾ U`) +into a *consistency relation* `S ~ T` and a *subtyping relation* (`T <: U`). +The role of the consistency relation is to allow `any` to stand in for any type +(`any ~ T` for all types `T`). + +We propose something different: performing *error suppression* on +failures of subtyping. We treat `any` as a top type, so `T <: any`, +but suppress type error messages caused by `any <: U` failing. + +## Design + +This design uses an `error` type (though adding user syntax for it is +out of scope of this RFC). + +Call a type: + + * shallowly safe when any uses of `error` or `any` are inside a table or function type, and + * deeply safe when it does not contain `error` or `any` anywhere. + +A type `T` is shallowly unsafe precisely when `error <: T`. + +We add a new subtyping relationship: + + * `any <: unknown | error` + +We keep the existing subtyping relationships: + + * `T <: any` for any type `T` + +We add a proviso to `unknown` being a top type: + + * `T <: unknown` for any *shallowly safe* type `T` + +Currently, we consider a subtype test to have failed when it generates +no errors. We separate out the result of the check from its errors, +and instead have a requirement: + + * If checking `T <: U` succeeds, it produces no errors. + +It is now possible for a subtyping test to fail, but produce no errors. +For example, `number <: any` succeeds (since `any` is the top type) +and `number <: string` fails with an error, but now `any <: string` fails +*but produces no errors*. + +For end users, who only care about errors being reported, this will not be +a noticable change (but see the discussion of breaking changes below). +Internally though, it helps us avoid footguns, since now subtyping +is transitive. + +The subtype testing algorithm changes: + + * Subtype checking returns a boolean. + * Replace all of the current tests of "errors are empty" by testing the return value. + * In the case of testing `any <: T`, return `true` with no errors. + * In the case of testing `T <: any`, return `false` with no errors. + * In the case of testing `T <: unknown`, check `T` for being a shallowly safe type. + +These changes are not huge, and can be implemented for both the current greedy unifier, +and future constraint solvers. + +Theses changes have been prototyped: https://github.com/luau-lang/agda-typeck/pull/4 + +## Drawbacks + +This is theoretically a breaking change but my word you have to work hard at it. +For just checking subtyping there is no difference: the new algorithm returns `true` precisely +when the old algorithm generates no errors. But it can result in different unifications. + +For example, if `Y` is a free type variable, then currently checking `(any & Y) <: number` +will not perform any unification, which makes a difference to the program: + +```luau + function f(x : any, y) -- introduces a new free type Y for y + if x == y then -- type refinement makes y have type (any & Y) + return math.abs(y) -- checks (any & Y) <: number + end + end +``` + +Currently we infer type `(any, a) -> number` for `f`. With the new +algorithm, checking `(any & Y) <: number` will succeed by unifying `Y` +with `number`, so `f` will be given the more accurate type +`(any, number) -> number`. + +So this is a breaking change, but results in a more accurate type. +In practice it is unlikely that this change will do anything but help find bugs. + +## Alternatives + +We could implement Siek and Taha's algorithm, but that only helps with +`any`, not with more general error supression. + +We could leave everything alone, and live with the weirdness of non-transitive subtyping. diff --git a/.cursor/rules/luau/types-library-optional.md b/.cursor/rules/luau/types-library-optional.md new file mode 100644 index 00000000..5a364923 --- /dev/null +++ b/.cursor/rules/luau/types-library-optional.md @@ -0,0 +1,21 @@ +# types.optional + +**Status**: Implemented + +## Summary + +This RFC proposes adding a new method to the `types` library in type functions, that provides a shorthand for `types.unionof(type, types.singleton(nil))`. + +## Motivation + +Optional types occur very commonly, and it is annoying to have to always type `types.unionof(meow, types.singleton(nil))` to make a optional type, this leads to having the following appear in codebases that make use of optional types a lot in type functions: + +```luau +type function optional(type) + return types.unionof(type, types.singleton(nil)) +end +``` + +## Design + +As a solution, a new method to the `types` library should be added called `optional`. When called on a union, this will add `nil` to the components. Otherwise, this new method will act the same as `types.unionof(type, types.singleton(nil))`. diff --git a/.cursor/rules/luau/udtf-is-extern.md b/.cursor/rules/luau/udtf-is-extern.md new file mode 100644 index 00000000..3c2b0518 --- /dev/null +++ b/.cursor/rules/luau/udtf-is-extern.md @@ -0,0 +1,36 @@ +# `extern` tag in User-Defined Type Functions. + +## Summary + +Currently, in user-defined type functions, the ``tag`` field for an external type is ``class``. This RFC proposes changing the value of the tag to ``extern``. + +## Motivation + +In the past, Luau type system internals played generally fast and loose with the terminology for types coming from our foreign function interface. We broadly referred to them +as class types because the types were known to be coming specifically from C++ in the context of Roblox, but Luau as a language supports embedding from C as well, and any +language that can speak a C ABI. To avoid confusion, especially for users curiously poking at some of the internals, we changed all the internal references from ``class`` to +"extern type" which is a more fitting name for what we actually know here: that the type describes some external or foreign data. The last remaining inconsistency here is +a user-facing one: we had mistakenly codified ``class`` as the name of the tag for extern types in user-defined type functions. We should correct this issue now, before +the New Type Solver moves into a released state and we are no longer able to change this for the sake of backwards compatibility. + +## Design + +The ``tag`` field of a type that is an external type will be ``"extern"`` instead of ``"class"``. To test a tag, you will write ``type:is("extern")`` instead of ``type:is("class")``. + +### Changes + +#### `type` Instance + +| Instance Properties | Type | +| ------------- | ------------- | +| `tag` | `"nil" \| "unknown" \| "never" \| "any" \| "boolean" \| "number" \| "string" \| "singleton" \| "negation" \| "union" \| "intersection" \| "table" \| "function" \| "extern"` ~~`"class"`~~ | + +## Drawbacks + +The primary drawback of this is that some existing code using user-defined type functions in the New Type Solver Beta may be relying on testing that the tag is ``"class"``. The hope is that the affected surface of code here is currently very little because the API of user-defined type functions today does not allow a lot of useful operations to be performed on extern types (beyond exactly what is possible for tables), and we'd like to correct the issue if possible before the New Type Solver leaves beta, which would likely make breaking backwards compatibility more expensive. + +## Alternatives + +### What is the impact of not doing this? + +The longer we wait to correct this, the harder it is to change, and we will have the persistent issue of user-defined type functions referring to "class types". Users will likely continue to be confused by this, and to continue to ask questions about how to employ these "class types" for object-oriented programming in Luau, which is not possible because they are actually foreign function interface types. This is the only place in user-facing syntax where Luau currently refers to "classes" at all as a concept, and without correcting this, we may run into issues down the line for any proposals that _do_ seek to add class-like constructs to the language in any capacity. diff --git a/.cursor/rules/luau/unsealed-table-assign-optional-property.md b/.cursor/rules/luau/unsealed-table-assign-optional-property.md new file mode 100644 index 00000000..3f1c6792 --- /dev/null +++ b/.cursor/rules/luau/unsealed-table-assign-optional-property.md @@ -0,0 +1,60 @@ +# Unsealed table assignment creates an optional property + +**Status**: Implemented + +## Summary + +In Luau, tables have a state, which can, among others, be "unsealed". +An unsealed table is one that we are still constructing. Currently +assigning a table literal to an unsealed table does not introduce new +properties, so it is a type error if they are read. +We would like to change this so that assigning a table +literal to an unsealed table creates an optional property. + +## Motivation + +In lua-apps, there is testing code which (simplified) looks like: + +```luau +local t = { u = {} } +t = { u = { p = 37 } } +t = { u = { q = "hi" } } +local x: number? = t.u.p +local y: string? = t.u.q +``` + +Currently, this code doesn't typecheck, due to `p` and `q` being unknown properties of `t.u`. + +## Design + +In order to support this idiom, we propose that assigning a table +to an unsealed table should add an optional property. + +For example, before this change the type of `t` is `{ u: {} }`, +and after this change is `{ u: { p: number?, q: number? } }`. + +This is implemented by adding a case to unification where the supertype +is an unsealed table, and the subtype is a table with extra properties. +Currently the extra properties are ignored, but with this change we would +add the property to the unsealed table (making it optional if necessary). + +Since tables with optional properties of the same type are subtypes of +tables with indexers, this allows table literals to be used as dictionaries, +for example the type of `t` is a subtype of `{ u: { [string]: number } }`. + +Note that we need to add an optional property, otherwise the example above will not typecheck. +```luau +local t = { u = {} } +t = { u = { p = 37 } } +t = { u = { q = "hi" } } -- fails because there's no u.p +``` + +## Drawbacks + +The implementation of this proposal introduces optional types during unification, +and so needs access to an allocator. + +## Alternatives + +Rather than introducing optional properties, we could introduce an indexer. For example we could infer the type of +`t` as `{ u: { [string]: number } }`. diff --git a/.cursor/rules/luau/unsealed-table-literals.md b/.cursor/rules/luau/unsealed-table-literals.md new file mode 100644 index 00000000..df0bc18e --- /dev/null +++ b/.cursor/rules/luau/unsealed-table-literals.md @@ -0,0 +1,78 @@ +# Unsealed table literals + +**Status**: Implemented + +## Summary + +Currently the only way to create an unsealed table is as an empty table literal `{}`. +This RFC proposes making all table literals unsealed. + +## Motivation + +Table types can be *sealed* or *unsealed*. These are different in that: + +* Unsealed table types are *precise*: if a table has unsealed type `{ p: number, q: string }` + then it is guaranteed to have only properties `p` and `q`. + +* Sealed tables support *width subtyping*: if a table has sealed type `{ p: number }` + then it is guaranteed to have at least property `p`, so we allow `{ p: number, q: string }` + to be treated as a subtype of `{ p: number }` + +* Unsealed tables can have properties added to them: if `t` has unsealed type + `{ p: number }` then after the assignment `t.q = "hi"`, `t`'s type is updated to be + `{ p: number, q: string }`. + +* Unsealed tables are subtypes of sealed tables. + +Currently the only way to create an unsealed table is using an empty table literal, so +```luau + local t = {} + t.p = 5 + t.q = "hi" +``` +typechecks, but +```luau + local t = { p = 5 } + t.q = "hi" +``` +does not. + +This causes problems in examples, in particular developers +may initialize properties but not methods: +```luau + local t = { p = 5 } + function t.f() return t.p end +``` + +## Design + +The proposed change is straightforward: make all table literals unsealed. + +## Drawbacks + +Making all table literals unsealed is a conservative change, it only removes type errors. + +It does encourage developers to add new properties to tables during initialization, which +may be considered poor style. + +It does mean that some spelling mistakes will not be caught, for example +```luau +local t = {x = 1, y = 2} +if foo then + t.z = 3 -- is z a typo or intentional 2-vs-3 choice? +end +``` + +In particular, we no longer warn about adding properties to array-like tables. +```luau +local a = {1,2,3} +a.p = 5 +``` + +## Alternatives + +We could introduce a new table state for unsealed-but-precise +tables. The trade-off is that that would be more precise, at the cost +of adding user-visible complexity to the type system. + +We could continue to treat array-like tables as sealed. diff --git a/.cursor/rules/luau/unsealed-table-subtyping-strips-optional-properties.md b/.cursor/rules/luau/unsealed-table-subtyping-strips-optional-properties.md new file mode 100644 index 00000000..6aef0671 --- /dev/null +++ b/.cursor/rules/luau/unsealed-table-subtyping-strips-optional-properties.md @@ -0,0 +1,67 @@ +# Only strip optional properties from unsealed tables during subtyping + +**Status**: Implemented + +## Summary + +Currently subtyping allows optional properties to be stripped from table types during subtyping. +This RFC proposes only allowing that when the subtype is unsealed and the supertype is sealed. + +## Motivation + +Table types can be *sealed* or *unsealed*. These are different in that: + +* Unsealed table types are *precise*: if a table has unsealed type `{ p: number, q: string }` + then it is guaranteed to have only properties `p` and `q`. + +* Sealed tables support *width subtyping*: if a table has sealed type `{ p: number }` + then it is guaranteed to have at least property `p`, so we allow `{ p: number, q: string }` + to be treated as a subtype of `{ p: number }` + +* Unsealed tables can have properties added to them: if `t` has unsealed type + `{ p: number }` then after the assignment `t.q = "hi"`, `t`'s type is updated to be + `{ p: number, q: string }`. + +* Unsealed tables are subtypes of sealed tables. + +Currently we allow subtyping to strip away optional fields +as long as the supertype is sealed. +This is necessary for examples, for instance: +```luau + local t : { p: number, q: string? } = { p = 5, q = "hi" } + t = { p = 7 } +``` +typechecks because `{ p : number }` is a subtype of +`{ p : number, q : string? }`. Unfortunately this is not sound, +since sealed tables support width subtyping: +```luau + local t : { p: number, q: string? } = { p = 5, q = "hi" } + local u : { p: number } = { p = 5, q = false } + t = u +``` + +## Design + +The fix for this source of unsoundness is twofold: + +1. make all table literals unsealed, and +2. only allow stripping optional properties from when the + supertype is sealed and the subtype is unsealed. + +This RFC is for (2). There is a [separate RFC](unsealed-table-literals.md) for (1). + +## Drawbacks + +This introduces new type errors (it has to, since it is fixing a source of +unsoundness). This means that there are now false positives such as: +```luau + local t : { p: number, q: string? } = { p = 5, q = "hi" } + local u : { p: number } = { p = 5, q = "lo" } + t = u +``` +These false positives are so similar to sources of unsoundness +that it is difficult to see how to allow them soundly. + +## Alternatives + +We could just live with unsoundness. diff --git a/.cursor/rules/luau/user-defined-type-functions.md b/.cursor/rules/luau/user-defined-type-functions.md new file mode 100644 index 00000000..db6482da --- /dev/null +++ b/.cursor/rules/luau/user-defined-type-functions.md @@ -0,0 +1,238 @@ +# User-Defined Type Functions + +**Status**: Implemented + +## Summary + +The new Luau type inference engine (or type solver, for short) adds support for a system of built-in type functions that compute result types from provided argument types. This system is already being used to power support for overloadable operators, and the broad design philosophy is to include built-in type functions that correspond to built-in runtime-level operations in the language. To further enhance the expressivity of the type system, this RFC extends that system with a proposed design for user-defined type functions, allowing developers to define their own type functions in ordinary Luau code. + +## Motivation + +The primary motivation for introducing user-defined type functions is to increase the expressiveness of the type system and empower developers to create more type-safe abstractions in their libraries. Current limitations of the type system prevent programmers from constructing types in relational ways, e.g. producing a new table where the types of every property have changed in some predictable way (like being made optional). These limitations can prevent developers from writing precisely-typed abstracts in their libraries, leading to less type-safe abstractions that rely on the use of `any` casting or less-than-desirable structural changes to their designed APIs. By adding support for user-defined type functions, we aim to: +- Enable more precise type definitions that can capture complex relations on types +- Facilitate the creation of type-safe, reusable and composable libraries +- Enhance Luau's support for type-level programming + +The expected outcome is a more versatile type system that can adapt to a wider range of programming patterns, improving the Luau developer experience. + +## Design + +Type functions will be defined with the following syntax: +```luau +type function f(...) + -- implementation of the type function +end +``` + +The bodies of these functions will consist of fundamentally entirely ordinary Luau code that can interact with types as runtime values. For instance, the built-in `rawget` type function could be written as: +```luau +type function rawget(tbl, key) + if not tbl:is("table") then + error("first parameter must be a table type!") + end + + for k, v in tbl:properties() do + if k == key then + if v.read ~= v.write then + error("mismatched read/write types found for the property") + end + + return v.read + end + end + + error("key not found!") +end + +type Person = { + name: string, + age: number +} + +type ty = rawget -- resolves to `ty` defined as `string` +``` + +This function takes `tbl`, a table type, and `key`, the type of a property key for the table (typically a string singleton type), and computes the corresponding value type for the property `key` in the table `tbl`. If `tbl` is not a table type, or `key` is not found in `tbl`, then the function raises an error. + +The scoping and shadowing rules of user-defined type functions will be made to match the existing rules for type aliases (i.e. `type Array = {T}`) which are, as it turns out, a sort of total form of type functions in the first place. This means that they are order-independent, and can refer to one another, as well as to type aliases. We do not intend to introduce an additional set of scoping rules, so ensuring they work the same as type aliases already do is a requirement for the design. + +### The type runtime + +To understand how type functions behave, we have to consider a split between stages: type analysis time and runtime. The full types of Luau's type system currently exist only during type analysis, and never during runtime. This RFC proposes changing Luau to include an additional stage, type runtime, that is part of the overall type analysis. During type analysis, when we encounter a user-defined type function, e.g. `rawget<...>` in the example above, we will serialize the type parameters of that call into a form that Luau can manipulate, and then execute the body of the type function in a Luau VM (this stage would be the "type runtime"), and reify its results (returning a value, erroring, etc.) back into type analysis. This means that the type solver will need to maintain a VM instance for evaluating user-defined type functions, and that each reference to a type function corresponds to evaluating a function call in that VM. + +The key to making this type runtime work is the introduction of a `type` userdata that Luau's types can be serialized into. For clarity in this RFC, `type` (in code block) always refers to the userdata and type (the unadorned string) refers to the ordinary meaning of the word in the context of Luau (i.e. the static type of a binding). An instance of the `type` userdata is a type runtime representation of a type within the program, and it provides a set of API calls that can be used to inspect and manipulate the type. As part of the _type runtime_, they are *only accessible within type functions* and are *not available during ordinary function runtimes*. Each type function can take an arbitrary number of `type` arguments, and can return exactly one `type` as a successful result during evaluation. Returning additional results will signal an error to the user for now, but a future RFC may revisit this to support user-defined type pack functions as well. We are currently excluding them since the scope of this RFC is already very large as-is, and even the built-in type function system has yet to find a compelling use for type pack functions. + +Because the name `type` clashes with the global function `type(...)`, unlike `string` (whose library is named `string`), the name of the library for constructing `type`s will be `types`. So, a programmer will be able to access the boolean type by writing `types.boolean` or the number type by writing `types.number`. Evaluating `typeof(...)` on a `type` userdata will give the string `"type"`, and any possible extensions to support typechecking will likely name the type of types `type` as well. We considered an alternative where we used the name `type` and set the `__call` metamethod will to the original `type(...)` function. This would allow us to gracefully preserve the behavior of the built-in `type` function if it is necessary for developers, while still choosing the best possible name for the datatype itself, but it would also require the type runtime to provide a duplicate implementation of the `type(...)` function which would have to be maintained separately. We also considered alternative names like `luautype` `typelib` or `ltype`, but they seem to feel broadly worse when used in speech and writing, and have a similar disadvantage of being dissimilar from the existing library names in Luau. + +Beyond `type`s, type functions will also reify any runtime errors that result from running their body into a type analysis error to report to the user. This means that developers can use the `error` and `assert` global functions to signal errors to consumers of their type function, and can provide detailed error messages that explain what went wrong. It also means that any "ordinary" runtime errors that arise from bad function calls or stack overflows will also become a user-facing error at the point that that type function is called. + +### A note about syntax + +Given this realization that type functions are, in fact, functions and their uses are function _calls_, one may wonder a couple things about the syntax that are helpful to clarify here. When programming types, all type functions (whether a user-defined type function, a type alias like `type Array = {T}`, or a built-in type function like `add`) are written with their parameters in angle brackets. At a call site, like `add` or `rawget` from above, the angle brackets indicate that the arguments to that call are _types_. By contrast, ordinary Luau functions are defined using parentheses for their parameters and function calls are similarly written with parentheses, e.g. `add(5, 6)`. For user-defined type functions, the arguments are types _serialized as runtime values for a Luau VM_, and so when we _declare_ a type function, we similarly use parentheses since they will be evaluated as functions in the _type runtime_. + +### The environment of type functions + +The type functions will run in a sandboxed VM instance with a limited scope of available libraries and globals. They will not be able to refer to statements defined in the scripts outer scope, nor to any runtime functions declared in the script. For the first iteration of this feature, we aim to be reasonably conservative in what we include to support writing type functions. The reason for this is that it is broadly much more feasible to _add_ new facilities to the language, than it is to take away features that are already in use. At the same time, we're attempting to balance this to ensure that programming type functions still feels like programming ordinary Luau code, so we wish to avoid having lots of "gotchas" or very unexpected exclusions. As such, we propose that the environment for type functions include only the following: + +- `assert`, `error`, and `print`, which will be used by type functions to provide error feedback to consumers of a type function +- `next`, `ipairs`, `pairs`, `select`, and `unpack`, which support basic iteration and interaction with tables and multiple return +- `getmetatable`, `setmetable`, `rawget`, `rawset`, `rawlen`, `rawequal`, `tonumber`, `tostring`, `type`, and `typeof`, which are builtin functions that are essentially operators in Luau +- the `math` library, where we note that `math.randomseed` will be reset automatically on type function entry +- the `table` library +- the `string` library +- the `bit32` library +- the `utf8` library +- the `buffer` library + +This list can be expanded in future RFCs if we learn of compelling usecases for additional libraries in type function contexts. + +### The halting problem + +In general, we'd like to be able to guarantee that type analysis will always terminate on all programs. Unfortunately, type inference for Luau's type system is already, in general, undecidable, and there are known edgecases where the type inference can be spun into exponential blowup or worse. Adding type functions seems like another space where this problem could be made worse, and so one might wish to try to detect when a type function will not terminate and error instead. Unfortunately, by [Rice's theorem](https://en.wikipedia.org/wiki/Rice%27s_theorem), all non-trivial semantic properties of programs are undecidable. + +We could attempt to get around this either by heavily limiting the language in type functions to avoid Turing-completeness or by introducing heuristics to try to detect infinite loops while the type function is running. We propose doing neither. In the former case, the restrictions to the language would be significant, heavily limiting the use of while loops, function calls, etc. This would mean that learning to program type functions would feel _very_ different from learning to program Luau in general. In the latter case, the implementation work is considerable, and it's not clear what kind of impact it might have on the VM itself. + +Instead, this RFC proposes that we accept that type functions, like the rest of Luau's type system, are already not guaranteed to terminate in general, and we should employ the same mitigations that we've already implemented for addressing that problem --- namely, Luau's analysis supports global limits that include an overall runtime limit on analysis and a user-requestable (really, embedder-requestable) cancellation system for analysis. This means that editors, language services, and other software embedding Luau's type analysis will continue to be able to use one simple, unified system for imposing limits on analysis. In an editor tooling context, we expect that it might be useful for us to grow the feedback provided by the cancellation to support editors providing more detailed feedback to the users. It's not hard to imagine a developer experience where your editor informs you that a particular type function call in a particular spot in your program is taking a long time to evaluate. This would actually be a better experience than what is available today when builtin pieces of Luau's type system are unable to complete in an acceptable amount of time, and we are unable to give any actionable feedback to the user. Extending such a system to support identifying problem areas in built-in components of the type system is likely a much harder effort that is out of scope for this RFC. + +### `types` API Reference + +This section details the initial programming interface we propose for `type`s when they are reflected into type function bodies. Each section is separated by headers (e.g. Singleton) and describe the methods available to that category of type. The "`type` Instance" section, describes the elements of the interface common to every category of type. All properties of newly-created `type`s are initialized with empty tables / arrays and `nil`. All arguments are passed by references. + +### `types` Library + +| Library Properties | Type | Description | +| ------------- | ------------- | ------------- | +| `unknown` | `type` | an immutable instance of the built-in type `unknown` | +| `never` | `type` | an immutable instance of the built-in type `never` | +| `any` | `type` | an immutable instance of the built-in type `any` | +| `boolean` | `type` | an immutable instance of the built-in type `boolean` | +| `number` | `type` | an immutable instance of the built-in type `number` | +| `string` | `type` | an immutable instance of the built-in type `string` | + +| Library Functions | Return Type | Description | +| ------------- | ------------- | ------------- | +| `singleton(arg: string \| boolean \| nil)` | `type` | returns an immutable instance of the argument as a singleton type | +| `negationof(arg: type)` | `type` | returns an immutable instance of the parameter as a negated type; the parameter cannot be a table or function type | +| `unionof(...: type)` | `type` | returns an immutable instance of an union type of the arguments; requires at least 2 parameters to be provided | +| `intersectionof(...: type)` | `type` | returns an immutable instance of an intersection type of the arguments; requires at least 2 parameters to be provided | +| `newtable(props: {[type]: type \| { read: type?, write: type? } }?, indexer: { index: type, readresult: type, writeresult: type }?, metatable: type?)` | `type` | returns a mutable instance of a table type; the keys of the table's property must be a singleton type; sets the table's metatable if one is provided | +| `newfunction(parameters: { head: {type}?, tail: type? }, returns: { head: {type}?, tail: type? })` | `type` | returns a mutable instance of a `function` type | +| `copy(arg: type)` | `type` | returns a deep copy of the given `type` | + +### `type` Instance + +| Instance Properties | Type | Description | +| ------------- | ------------- | ------------- | +| `tag` | `"nil" \| "unknown" \| "never" \| "any" \| "boolean" \| "number" \| "string" \| "singleton" \| "negation" \| "union" \| "intersection" \| "table" \| "function" \| "class"` | an immutable property holding this type's tag | + +| Instance Methods | Return Type | Description | +| ------------- | ------------- | ------------- | +| `__eq(arg: type)` | `boolean` | overrides the == operator to return true if self is syntactically equal to arg, note that semantically equivalent types like `true \| false` and `boolean` will _not_ compare equal | +| `is(arg: string)` | `boolean` | returns true if self has the same tag as the argument. List of available tags: "nil", "unknown", "never", "any", "boolean", "number", "string", "singleton", "negation", "union", "intersection", "table", "function", "class" | + +Depending on the particular `tag`, a `type` instance can have additional properties and methods available as described below. + +#### Negation `type` instance + +| Instance Methods | Type | Description | +| ------------- | ------------- | ------------- | +| `inner()` | `type` | returns the `type` being negated | + +#### Singleton `type` instance + +| Instance Methods | Return Type | Description | +| ------------- | ------------- | ------------- | +| `value()` | `string \| boolean \| nil` | returns the actual value of the singleton, i.e. a specific string, boolean, or `nil` | + +#### Table `type` instance + +| Instance Methods | Return Type | Description | +| ------------- | ------------- | ------------- | +| `setproperty(key: type, value: type?)` | `()` | adds / overrides (if same key exists) a key, value pair to the table's properties; if value is nil, removes the key, value pair; if the key does not exist and the value is nil, nothing happens; equivalent to calling `setreadproperty` and `setwriteproperty` with the same parameters | +| `setreadproperty(key: type, value: type?)` | `()` | adds / overrides (if same key exists) a key, value pair to the table's properties; if value is nil, removes the key, value pair; if the key does not exist and the value is nil, nothing happens | +| `setwriteproperty(key: type, value: type?)` | `()` | adds / overrides (if same key exists) a key, value pair to the table's properties; if value is nil, removes the key, value pair; if the key does not exist and the value is nil, nothing happens | +| `readproperty(key: type)` | `type?` | returns the type used for _reading_ values to this property in the table; if the key does not exist, returns nil | +| `writeproperty(key: type)` | `type?` | returns the type used for _writing_ values to this property in the table; if the key does not exist, returns nil | +| `properties()` | `{[type]: { read: type?, write: type? } }` | returns a table mapping property keys to a table with their respective read and write types | +| `setindexer(index: type, result: type)` | `()` | sets the table's indexer with the index type as the first parameter, and the result as the second parameter; equivalent to calling `setreadindexer` and `setwriteindexer` with the same parameters | +| `setreadindexer(index: type, result: type)` | `()` | sets the table's indexer with the index type as the first parameter, and the resulting read type as the second parameter | +| `setwriteindexer(index: type, result: type)` | `()` | sets the table's indexer with the index type as the first parameter, and the resulting write type as the second parameter | +| `indexer()` | `{ index: type, readresult: type, writeresult: type }?` | returns the table's indexer as a table; if the indexer does not exist, returns nil | +| `readindexer()` | `{ index: type, result: type }?` | returns the table's indexer as a table using the read type of the result; if the indexer does not exist, returns nil | +| `writeindexer()` | `{ index: type, result: type }?` | returns the table's indexer as a table using the write type of the result; if the indexer does not exist, returns nil | +| `setmetatable(arg: type)` | `()` | sets the table's metatable to the argument | +| `metatable()` | `type?` | returns the table's metatable; if the metatable does not exist, returns nil | + +#### Function `type` instance + +| Instance Methods | Return Type | Description | +| ------------- | ------------- | ------------- | +| `setparameters(head: {type}?, tail: type?)` | `()` | sets the function's parameter types to the given arguments | +| `parameters()` | `{ head: {type}?, tail: type? }` | returns the function's parameter list as an array of ordered parameter types and optionally a variadic tail | +| `setreturns(head: {type}?, tail: type?)` | `()` | sets the function's return types to the given arguments | +| `returns()` | `{ head: {type}?, tail: type? }` | returns the function's return types as an array of types and optionally a variadic tail | + +#### Union `type` instance + +| Instance Methods | Return Type | Description | +| ------------- | ------------- | ------------- | +| `components()` | `{type}` | returns an array of `types` being unioned | + +#### Intersection `type` instance + +| Instance Methods | Return Type | Description | +| ------------- | ------------- | ------------- | +| `components()` | `{type}` | returns an array of `types` being intersected | + +#### Class `type` instance + +| Instance Methods | Return Type | Description | +| ------------- | ------------- | ------------- | +| `properties()` | `{[type]: { read: type, write: type } }` | returns a table mapping class' property keys to a table with their respective read and write types | +| `readparent()` | `type?` | returns the read type of class' parent class; if the parent class does not exist, returns nil | +| `writeparent()` | `type?` | returns the write type class' parent class; if the parent class does not exist, returns nil | +| `metatable()` | `type?` | returns the class' metatable; if the metatable does not exists, returns nil | +| `indexer()` | `{ index: type, readresult: type, writeresult: type }?` | returns the class' indexer as a table; if the indexer does not exist, returns nil | +| `readindexer()` | `{ index: type, result: type }?` | returns the class' indexer as a table using the read type of the result; if the indexer does not exist, returns nil | +| `writeindexer()` | `{ index: type, result: type }?` | returns the class' indexer as a table using the write type of the result; if the indexer does not exist, returns nil | + +## Drawback + +The main drawback to the proposed design, particularly the use of the standard Luau VM for execution, is that it makes analysis explicitly depend on the Luau runtime in order to evaluate type functions. This has been historically discouraged for the purpose of maintaining a clear separation of concerns for different parts of Luau's implementation and to minimize side effects across different phases of the program execution. We believe this concern is mitigated since we still retaining a separation between the type runtime and its evaluation of type functions versus the overall runtime and its evaluation of ordinary functions. Further, the ability to use the same VM for both ensures that the runtime semantics of code in type function bodies is _always_ consistent with the runtime semantics of ordinary Luau code. This is not the case for some alternatives, like implementing a separate interpreter. + +## Alternatives + +### Table Runtime Representation + +Instead of serializing types into `type`, we can serialize them into tables with a predefined structure. For instance, the representation for a string singleton `"abc"` could be `{type = "singleton", value = "abc"}`. So, instead of writing: +```luau +type function issingleton(t) + if t:is("singleton") then + return t + end +end +``` +developers could write: +```luau +type function issingleton(t) + if t.type == "singleton" then + return t + end +end +``` + +This is a reasonable design in its own right, and was used in the initial prototype of user-defined type functions because of its relative ease of implementation. We decided against continuing with it, however, because it makes it more difficult to apply basic well-formedness restrictions to the interface of type functions. For instance, we want all union types to have at least two elements to them (i.e. to be a non-trivial union), which would be harder to enforce with the table design since developers could just write `{type = "union", components = {{type = "string"}}}`. More generally, this design makes the creation of new types at runtime messier and more prone to errors since there's a greater surface for minor typos and misplaced braces to impact the program. + +### Compile-Time Interpreter + +Many languages implement an additional interpreter for evaluating expressions at compile-time. This approach has its benefits, such as allowing us to completely isolate analysis and runtime and allowing developers to write type functions in a syntax that potentially deviates from Luau's runtime syntax (e.g. supporting constructing intersection and union types using `&` and `|`). This has two main downsides: (1) the implementation required is higher complexity and carries a greater maintenance burden, and (2) the design against one of the stated goals for type functions. We want the experience of writing type functions to feel intrinsically familiar to developers and for the semantics to be the same as ordinary Luau code. Since Luau is already designed around being embeddable, we prefer to use the existing VM and add a new userdata instead. + +### More Built-In Type Functions + +Another alternative is to create more built-in type functions that cover a wider range of programming patterns. This approach clearly lacks the flexibility of fully user-defined type functions because type manipulation would still be limited to the predefined set of type functions designed by the Luau team. Furthermore, continuously expanding the set of built-in type functions leads to bloat and complexity within the language, making it harder to keep in your head, harder to maintain, and ultimately running against Luau's core philosophy of simple, general-purpose primitives and a small standard library. + +## Future Work + +In the future, we may consider adding type checking for user-defined type functions. In other advanced type systems, this is typically called _kind checking_ (where a _kind_ is what we'd call the type of a type). So, for instance, the type `number` has the kind `type`, but a type alias like `type Array = {T}` has the kind `(T: type) -> type`, i.e. `Array` is a type function that when applied to a type `T` gives you a type. However, there's additional complexity in building this out in a way where we can reuse the existing type system machinery to implement typing. Since we expect type functions to largely be fairly small and the developer experience is inherently _very_ interactive since they will execute live in your IDE as you write code, we believe that working with dynamically-typed type functions will feel very pleasant, and so taking on the additional complexity is not yet justified. + +Other areas of future work may include expanding the set of libraries available in type function environments to enable more expressive type functions, such as those manipulating generic types or named parameters for function types. We also want to investigate making type aliases (which are themselves a sort of _total_ type function) available as part of the type function environment to make type function programming feel even more like conventional Luau programming. diff --git a/.cursor/rules/luau/vector-library-vector2-constructor.md b/.cursor/rules/luau/vector-library-vector2-constructor.md new file mode 100644 index 00000000..86b7ada8 --- /dev/null +++ b/.cursor/rules/luau/vector-library-vector2-constructor.md @@ -0,0 +1,33 @@ +# 2-component vector constructor + +**Status**: Implemented + +## Summary + +Add a constructor for initializing vectors from two components. + +## Motivation + +Currently the vector constructor supports only initializing vectors with three components (and optionally four if 4-wide vectors are enabled). However, there are problem domains such 2D graphics and graphical user interfaces which would benefit from a two component constructor. The benefits are twofold: it would improve code ergonomics because the third component does not need to be given when it is irrelevant or implicitly zero. Secondly, it would improve the performance of vector creation because there is one less argument to pass in the 2D case. + +Existing vector library functions such as `vector.dot`, `vector.angle`, `vector.normalize`, `vector.min`, `vector.max`, `vector.abs` and `vector.clamp` already work out of the box in 2D as long as the unused components are zeroes. The functions also retain zeroes allowing function calls to be chained without issues. Out of the current functions, only `vector.cross` is not meaningful in 2D. + +The constructor in 4-wide mode already sets the fourth component to zero when unspecified. Therefore, the 2-component constructor working identically for the unused components can be treated as a natural extension. + +Game engines that use a Z up coordinate system would also benefit from this change because the new constructor could be used for topographical positions in the world by providing X and Y only. + +## Design + +A new vector constructor `vector.create(x: number, y: number): vector` will be added. The third component, and fourth component with 4-wide vectors, will be zero initialized. + +## Drawbacks + +Accidentally omitting the third component becomes a possibility because the vector constructor would no longer raise an error when only two components are provided. However, the benefits seem to outweight this small inconvenience. + +## Alternatives + +An alternative would be to add a new constructor with a different name (for example, `vector.create2`). + +Another considerably more complex alternative is to add a new, separate vector type for 2D vectors. This would add significant bloat to the C API and type system in general, so it is unfeasible in practice. + +Finally, an option is to not add the new constructor. In this case applications working in 2D would not get the ergonomic and performance benefits discussed above. \ No newline at end of file diff --git a/.cursor/rules/luau/vector-library.md b/.cursor/rules/luau/vector-library.md new file mode 100644 index 00000000..0b0a985e --- /dev/null +++ b/.cursor/rules/luau/vector-library.md @@ -0,0 +1,136 @@ +# Vector library + +**Status**: Implemented + +## Summary + +Implement a standard library that provides functionality for the vector type. + +## Motivation + +Currently, vectors are a primitive type implemented internally. All of the heavy work to implement vectors is done, but there is no runtime-agnostic way to use vectors in Luau code. Individual Luau runtimes, such as [Lune](https://github.com/lune-org/lune) or Roblox, must provide their own distinct libraries to work with native vectors which may be inconsistent. In cross-runtime code, this results in performance drawbacks & difficulty utilizing native vectors. + +## Design + +The default metatable for vectors should now be the `vector` library. While buffers and coroutines do not have this, vectors likely should for ergonomics. + +Luau VM can be configured in two different vector value modes. +Default configuration uses vectors with 3 components (`xyz`) and if the `LUA_VECTOR_SIZE` configuration option is set to 4, vector values get an additional fourth `w` component. +This mode will be referred to as '4-wide mode' in this proposal. + +### Library functions & constants + +This RFC proposes the following basic functions and constants. + +`vector.create(x: number, y: number, z: number): vector` + +Creates a new vector with the given components. In 4-wide mode, the fourth `w` component value is set to 0.0. + +`vector.create(x: number, y: number, z: number, w: number): vector` + +Additional constructor available in 4-wide mode. Creates a new vector with the given components. + +`vector.magnitude(vec: vector): number` + +Calculates the magnitude of a given vector. When in 4-wide mode, this includes the fourth component. + +`vector.normalize(vec: vector): vector` + +Returns the normalized version (aka unit vector) of a given vector. When in 4-wide mode, this includes the fourth component. + +`vector.cross(vec1: vector, vec2: vector): vector` + +Returns the cross product of two vectors. If 4-wide vectors are enabled, this function will ignore the fourth component and return the 3-dimensional cross product. + +`vector.dot(vec1: vector, vec2: vector): number` + +Returns the dot product of two vectors. Uses all components, even in 4-wide mode. + +`vector.angle(vec1: vector, vec2: vector, axis: vector?): number` + +Returns the angle between two vectors in radians. The axis, if specified, is used to determine the sign of the angle. If 4-wide vectors are enabled, this function will ignore the fourth component and return the 3-dimensional angle. + +`vector.floor(vec: vector): vector` + +Applies `math.floor` component-wise for each vector. Equivalent of: `vector.create(math.floor(vec.x), etc)`. + +`vector.ceil(vec: vector): vector` + +Applies `math.ceil` component-wise for each vector. Equivalent of: `vector.create(math.ceil(vec.x), etc)`. + +`vector.abs(vec: vector): vector` + +Applies `math.abs` component-wise for each vector. Equivalent of: `vector.create(math.abs(vec.x), etc)`. + +`vector.sign(vec: vector): vector` + +Applies `math.sign` component-wise for each vector. Equivalent of: `vector.create(math.sign(vec.x), etc)`. + +`vector.clamp(vec: vector, min: vector, max: vector): vector` + +Applies `math.clamp` component-wise for each vector. Equivalent of: `vector.create(math.clamp(vec.x, min.x, max.x), etc)`. + +`vector.max(...: vector): vector` + +Applies `math.max` component-wise for each vector. Equivalent of: `vector.create(math.max((...).x), etc)`. + +`vector.min(...: vector): vector` + +Applies `math.min` component-wise for each vector. Equivalent of: `vector.create(math.min((...).x), etc)`. + +--- + +`vector.zero` + +Vector where `x=0, y=0, z=0, w?=0`. + +`vector.one` + +Vector where `x=1, y=1, z=1, w?=1`. + +--- + +### Arithmetic operations + +Primitive operators for vectors are already implemented, so this RFC doesn't concern vector arithmetic. + +### Component access + +Component access is already supported in the VM using the fields 'x', 'y', 'z', 'X', 'Y' and 'Z' (plus 'w' and 'W' in 4-wide mode). +Note that writes to a single component are not supported as the vector value is immutable. +This RFC doesn't define any changes to this behavior. + + +### Compiler options + +Currently, there are 2 compiler options relating to vectors, `vectorLib` & `vectorCtor`. This poses an interesting problem: a builtin library would remove the _requirement_ for such compiler options, however these options still need to be supported. The intuitive solution to this is to leave both compiler options working and maintained, but provide the built-in vector library by default, allowing two vector libraries and two vector constructors. + +### Typechecking + +A new primitive `vector` type should be added to the type system. + +## Future Work + +A better vector constructor with new syntax, such as `` or `(x, y, z)` or `|x, y, z|` or `vector(x, y, z)` or `[x, y, z]` could be implemented. This would make code that does stuff with vectors much less verbose. + +The buffer library could include functions to work with vectors, such as `buffer.writevector2`, `buffer.writevector3`, and in 4-wide mode, `buffer.writevector4`. The corresponding read functions would of course be included. + +## Drawbacks + +As per all additional globals, this creates a new global `vector`. This is a commonly used variable name, and many style guides will advise to avoid using `vector` as a variable name due to the global being added. + +Introducing a vector library means introducing more globals. Due to the presence of vectors in performance-intensive code, it can be assumed that the built-in functions will have fastcalls. This means more fastcall slots will be used. + +Existing code won't get any improvements from a built-in library. Developers will have to switch over to the built-in library in order to gain any benefit. + +## Alternatives + +Do nothing; vectors have an internal constructor, which lets the runtime implement vectors, and subsequently a library for vector math. + +### Alternative implementations + +The function `vector.create` could be skipped entirely in favor of syntax for creating vectors. This should not be done because a function for creating vectors will be nice to have no matter what. + +Instead of `vector.magnitude`, the magnitude could be derived from the vector's coordinates themselves, and be accessed by a property instead of a function. There is a downside to this: all current properties of vectors are hard-coded to the VM, so any new property to vectors requires a lot of additional complexity & changes to the VM to allow for this. A library function, however, would be trivial. An easy and quick workaround to the verbosity would be at the runtime/C API level. It's trivial to set the metatable of vectors to be the vector library: this allows for `vec:magnitude()` without much issue. + +Instead of ignoring the 4th dimension in `vector.cross`, the function could be disabled when four-dimensional vectors are enabled. diff --git a/.cursor/rules/persona.mdc b/.cursor/rules/persona.mdc new file mode 100644 index 00000000..8faceef0 --- /dev/null +++ b/.cursor/rules/persona.mdc @@ -0,0 +1,42 @@ +--- +description: Agent behavior constraints and communication style +alwaysApply: true +--- + +# Agent Behavior + +## Greeting +Always begin responses with "Yes Sir". + +## Scope Discipline +- Do not refactor or fix typos in existing code unless specifically asked +- Do not rename variables, functions, or files unless asked +- Do not "clean up" imports, formatting, or whitespace unless asked +- Do not fix line length in existing code unless specifically asked +- Do not add comments, logging, or "improvements" beyond the request + +When making changes, consider: +1. **Impact on Codebase** - How will changes affect the rest of the code? +2. **Relevance** - Is this code related to the request? If not, don't touch it. +3. **Scope** - Only change what's directly relevant. Adding a feature? Don't alter unrelated UI. +4. **Unnecessary Changes** - If tempted to make extras, stop and explain why to the user. + +## Code Preservation +- Never remove code you don't understand +- Never replace code blocks with placeholders like `-- rest of code here...` + +## Communication +- Ask clarifying questions before making assumptions on ambiguous requests +- Admit uncertainty rather than guessing - say "I don't know" when uncertain +- Do not ask for confirmation after changes are already made +- Allowed to disagree and seek clarification if requirements are unclear +- Be ultra-concise by default, comprehensive when explaining +- Support claims by quoting available documents exactly + +## Technical Accuracy +- Do not use outdated patterns from training data when current docs are available + +## Implementation +- Write only what's needed, clean up unnecessary code +- When implementing new features, be relentless - finish completely +- Avoid imperative code; ensure proper error handling diff --git a/.cursor/rules/plugin.mdc b/.cursor/rules/plugin.mdc new file mode 100644 index 00000000..b2e7efdd --- /dev/null +++ b/.cursor/rules/plugin.mdc @@ -0,0 +1,139 @@ +--- +description: "Rojo Studio plugin specifics: Roact patterns, reconciler logic, WebSocket protocol, and plugin testing." +globs: + - "plugin/**/*.lua" + - "plugin/**/*.luau" + - "plugin/**/*.json" +--- + +# Rojo Studio Plugin + +Built with Roact (React-like), handles WebSocket sync with server, patch application to Studio, and UI. + +**Entry:** `plugin/src/init.server.lua` | **Protocol:** WebSocket v5 | **Must match server MAJOR.MINOR** + +## Architecture + +### Key Components + +**1. UI Layer** (`App/`) +- **App.lua** - Root component, manages connection state +- **Components/** - Reusable UI components + - `StatusPages/` - Connected, Connecting, Error, Settings screens + - `PatchVisualizer/` - Shows changes before applying + - `StringDiffVisualizer/` - Side-by-side script diffs + - `TableDiffVisualizer/` - Attributes and Tags diffs + - `Notifications/` - Toast notifications +- **Theme.lua** - Studio-matched color palette +- Uses Roact for declarative UI + +**2. Communication** (`ServeSession.lua`) +- WebSocket connection to server (previously long-polling) +- Handles patches, errors, reconnection +- Protocol version checking + +**3. Reconciler** (`Reconciler/`) +- **applyPatch.lua** - Applies server patches to Studio tree +- **reify.lua** - Creates instances from snapshots +- **hydrate.lua** - Updates existing instances +- **diff.lua** - Generates patches (for two-way sync) +- **decodeValue.lua** - Converts encoded values to Roblox types +- **setProperty.lua** - Sets properties safely +- **getProperty.lua** - Gets properties with fallbacks + +**4. State Management** +- **Settings.lua** - Persistent plugin settings +- **InstanceMap.lua** - Tracks server ID → Studio instance mapping +- **PatchSet.lua** / **PatchTree.lua** - Patch representation + +**5. Testing** +- Unit tests: `.spec.lua` files (TestEZ) +- Integration tests: `integration/` directory +- Stress tests: `.stress.spec.lua` files +- Test runner: `runTests.lua` + +## Key Configuration (`Config.lua`) + +```lua +{ + version = {7, 7, 0, "-rc.1"}, + protocolVersion = 5, -- MUST match server + ignoredClassNames = { TouchTransmitter = true, Camera = true } +} +``` + +**When changing protocol:** Bump `protocolVersion` in both plugin AND server. + +## WebSocket Protocol (v5) + +1. Connect to `ws://host:port/api/rojo` +2. Server sends: protocol version, project name +3. Plugin sends: `{"type": "Subscribe"}` +4. Server sends patches on filesystem changes + +**Patch structure:** +```lua +{ + type = "ApplyPatch", + sessionId = "uuid", + patch = { + removed = {"id1", "id2"}, -- Array of IDs (Vec) + added = { ["id3"] = {...} }, -- Map: ID → Instance data + updated = { -- Array of updates (Vec) + { id = "id4", changedName = "...", changedProperties = {...} } + } + } +} +``` + +## Reconciler (`Reconciler/`) + +**applyPatch.lua** - Main patch application: +1. Remove instances in `removed` +2. Create instances in `added` via `reify` +3. Update instances in `updated` via `hydrate` +4. Collect errors, show in UI + +**reify.lua** - Create instances (parent last - Roblox best practice) +**hydrate.lua** - Update existing (only changed properties) +**setProperty.lua** / **getProperty.lua** - Handle unscriptable properties + +## UI Components (`App/`) + +**StatusPages:** NotConnected, Connecting, Connected, Error, Settings +**PatchVisualizer:** Tree view of changes with property diffs +**StringDiffVisualizer:** Side-by-side script diffs +**TableDiffVisualizer:** Attributes and Tags diffs +**Notifications:** Toast messages +**Theme.lua:** Studio-matched colors (auto light/dark) + +## InstanceMap + +Bidirectional Server ID ↔ Studio Instance mapping: + +```lua +instanceMap:insert(serverId, studioInstance) +local instance = instanceMap:fromId(serverId) +local serverId = instanceMap:fromInstance(instance) +``` + +Critical for patch application and avoiding duplicates. + +## Two-Way Sync (Experimental) + +⚠️ Watches Studio changes, sends to server. Has known issues - use with caution. + +## Dependencies (`plugin/Packages/`) + +Roact, Flipper, Promise, TestEZ, t, Highlighter, msgpack-luau. **Don't edit vendored packages.** + +## Common Issues + +**Plugin not reloading:** Enable Studio setting "Reload plugins on file change" +**Connection fails:** Check server running, host/port match, protocol versions match +**Properties not syncing:** Verify scriptable in rbx_reflection_database +**Duplicates:** InstanceMap corruption - disconnect, restart Studio + +## Debugging + +Settings → Log Level → "Trace" for verbose output. `ROJO_DEV_BUILD` instance enables auto-tests. diff --git a/.cursor/rules/python.mdc b/.cursor/rules/python.mdc new file mode 100644 index 00000000..4330332e --- /dev/null +++ b/.cursor/rules/python.mdc @@ -0,0 +1,47 @@ +--- +description: Python code style and conventions +globs: ["**/*.py"] +alwaysApply: false +--- + +# Python Code Style + +## Formatting +- 2-space indentation +- Double quotes for strings +- f-strings for formatting +- Max line width ~100 chars +- Break long function declarations/calls across multiple lines + +## Types +- Type declarations on function parameters and return types only +- Don't add types where inference is obvious (constants, assignments) + +## Code Organization +- Use `pathlib` for file paths +- Prefer built-in Python libraries when suitable +- Blank lines between functions; condensed within functions +- Use blank lines meaningfully to separate logical sections + +## Comments & Debugging +- Minimal comments - let types and names speak +- No docstring comments for parameters/return values +- No scattered print statements for debugging + +## Dependencies +- Modern, maintained packages only +- Up-to-date practices + +## User-Facing Messages +- Descriptive error messages for input/output issues +- Keep internal error strings minimal + +## UI/Styling +- Dark mode preferred +- Modern, clean UI/text + +## Restrictions (unless specifically asked) +- Never create python tools or test scripts +- Don't modify JSON configs +- Don't run test commands +- Don't generate READMEs diff --git a/.cursor/rules/rbx-dom.mdc b/.cursor/rules/rbx-dom.mdc new file mode 100644 index 00000000..561b0a9a --- /dev/null +++ b/.cursor/rules/rbx-dom.mdc @@ -0,0 +1,177 @@ +--- +description: "rbx-dom submodule: separate Git repo for Roblox format libraries. Has own CI/CD and release cycle." +globs: + - "rbx-dom/**/*.rs" + - "rbx-dom/**/*.lua" + - "rbx-dom/**/*.toml" +--- + +# rbx-dom Submodule + +**This is a Git submodule** linking to https://github.com/rojo-rbx/rbx-dom - a separate project with its own repository, CI/CD, and release cycle. + +**Critical:** When working on rbx-dom code, refer to `rbx-dom/README.md` and follow that project's conventions, not Rojo's. + +## What is rbx-dom? + +A collection of cross-platform libraries enabling any software to interact with Roblox instances. Documentation: https://dom.rojo.space + +### Core Libraries + +**1. rbx_dom_weak** - Weakly-typed instance representation +- In-memory DOM for Roblox instances +- Used by Rojo's snapshot system +- Defines `Instance`, `InstanceBuilder`, `WeakDom` + +**2. rbx_types** - Roblox value types +- Types like `Vector3`, `CFrame`, `Color3`, `NumberSequence` +- Shared by all rbx-dom crates +- Handles serialization/deserialization + +**3. rbx_binary** - Binary format (rbxm/rbxl) +- Serializer/deserializer for binary models and places +- Feature flag: `unstable_text_format` (used by Rojo) +- Complex format with chunks and internal references + +**4. rbx_xml** - XML format (rbxmx/rbxlx) +- Serializer/deserializer for XML models and places +- More human-readable than binary format +- Used by default in `rojo build` for debugging + +**5. rbx_reflection** - Instance metadata +- Class hierarchies, property descriptors, enum definitions +- Used for validation and type inference + +**6. rbx_reflection_database** - Bundled reflection data +- Statically-compiled reflection database +- Updated periodically from Roblox Studio + +**7. rbx_dom_lua** - Lua implementation +- Roblox Lua DOM APIs for reflection within Studio +- Compatible data format with rbx_dom_weak +- Used by Rojo plugin for encoding instances + +**8. rbx_reflector** - Reflection generator +- CLI tool to generate reflection database +- Runs inside Roblox Studio to extract API data + +**9. rbx_util** - Debugging utility +- CLI tool to convert and inspect model files +- Useful for debugging format issues + +## Updating the Submodule + +### Initial Setup + +```bash +# Clone Rojo with submodules +git clone --recursive https://github.com/rojo-rbx/rojo + +# Or update existing submodules +git submodule update --init --recursive +``` + +### Updating to Latest + +```bash +cd rbx-dom +git pull origin main +cd .. +git add rbx-dom +git commit -m "Update rbx-dom submodule" +``` + +**Important:** Test thoroughly after updating. rbx-dom changes can affect: +- Build/serve functionality +- Property serialization +- Format compatibility +- Reflection data + +## Property Type Support + +See `rbx-dom/README.md` for complete property type coverage matrix. Key types: + +- ✔ **Fully Supported:** Bool, String, Int32, Float32, Vector3, CFrame, Color3, Enum, Ref, Content, Attributes, Tags +- ✔ **Complex Types:** NumberSequence, ColorSequence, PhysicalProperties, Font, SecurityCapabilities +- ➖ **Partially Supported:** BinaryString (no Lua support) +- ❌ **Unsupported:** Region3/Region3int16 in binary format +- ⛔ **Never:** Bytecode, QDir, QFont (Studio-only types) + +## Development Guidelines + +### Working on rbx-dom + +Since rbx-dom is a separate repository: + +1. **Fork and clone rbx-dom separately** for development +2. **Make changes in the rbx-dom repository** (not the submodule) +3. **Open PRs against rojo-rbx/rbx-dom** (not rojo-rbx/rojo) +4. **Update Rojo's submodule** only after rbx-dom changes are merged + +### Testing Changes + +**In Rojo with local rbx-dom changes:** + +```bash +# Edit Cargo.toml to use local path temporarily +[dependencies] +rbx_binary = { path = "../rbx-dom/rbx_binary" } +rbx_dom_weak = { path = "../rbx-dom/rbx_dom_weak" } +# ... etc + +# Run Rojo tests +cargo test +``` + +**Don't commit local path changes** - they won't work in CI or for other contributors. + +### rbx-dom Testing + +rbx-dom has extensive snapshot tests: + +```bash +cd rbx-dom + +# Run all tests +cargo test + +# Review snapshot changes +cargo insta review + +# Run Lua tests (requires run-in-roblox) +bash scripts/run-tests.sh +``` + +## Release Process + +rbx-dom packages must be published **in dependency order**: + +1. `rbx_types` (no dependencies) +2. `rbx_dom_weak` and `rbx_reflection` (depend on rbx_types) +3. `rbx_reflection_database` (depends on rbx_reflection) +4. `rbx_binary` and `rbx_xml` (depend on all above) + +**Only maintainers can publish.** If you need a new rbx-dom release: +1. Open issue in rojo-rbx/rbx-dom +2. Explain what features/fixes you need +3. Maintainers will coordinate release + +## Common Issues + +**Submodule not initialized:** +```bash +git submodule update --init --recursive +``` + +**Detached HEAD state:** Normal when updating submodules. To update to latest: +```bash +cd rbx-dom && git checkout main && git pull +``` + +**Property bugs:** Check `rbx-dom/test-files/` for similar cases, file issue in rojo-rbx/rbx-dom + +**Outdated reflection:** File issue requesting reflection database update (maintainers run `rbx_reflector`) + +## Contributing to rbx-dom + +See https://github.com/rojo-rbx/rbx-dom. Remember: rbx-dom is designed for projects beyond Rojo, so changes should be general-purpose. diff --git a/.cursor/rules/roblox.mdc b/.cursor/rules/roblox.mdc new file mode 100644 index 00000000..cda0f872 --- /dev/null +++ b/.cursor/rules/roblox.mdc @@ -0,0 +1,40 @@ +--- +description: Index for Roblox API documentation in .cursor/rules/roblox/ +alwaysApply: true +--- + +# Roblox Documentation Reference + +When you need information about Roblox APIs, features, or best practices, reference the documentation in `.cursor/rules/roblox/`. + +## Directory Structure + +| Path | Content | +|------|---------| +| `roblox/luau/` | Luau language basics (tables, strings, functions, type-checking, etc.) | +| `roblox/scripting/` | Scripting concepts (scripts, modules, events, coroutines, etc.) | +| `roblox/ui/` | UI components (buttons, frames, layouts, styling, etc.) | +| `roblox/physics/` | Physics system (constraints, assemblies, network ownership, etc.) | +| `roblox/animation/` | Animation system | +| `roblox/audio/` | Audio system | +| `roblox/effects/` | Visual effects (beams, particles, trails, lighting) | +| `roblox/environment/` | Environment (atmosphere, clouds, lighting, skybox) | +| `roblox/workspace/` | Workspace concepts (CFrames, raycasting, collisions, streaming) | +| `roblox/players/` | Player management | +| `roblox/chat/` | Chat system | +| `roblox/input/` | Input handling | +| `roblox/parts/` | Parts and meshes | +| `roblox/characters/` | Character system | +| `roblox/avatar/` | Avatar system | +| `roblox/cloud/` | Cloud services | +| `roblox/cloud-services/` | Open Cloud APIs | +| `roblox/production/` | Publishing, monetization, analytics, localization | +| `roblox/performance-optimization/` | Performance best practices | +| `roblox/studio/` | Studio features and tools | +| `roblox/tutorials/` | Step-by-step tutorials | +| `roblox/resources/` | Feature packages, modules, templates | +| `roblox/reference/` | API reference (YAML format) | + +## Finding Documentation + +Use glob and grep to search `.cursor/rules/roblox/` for Roblox-specific documentation files. diff --git a/.cursor/rules/roblox/affiliates.md b/.cursor/rules/roblox/affiliates.md new file mode 100644 index 00000000..dcfe935f --- /dev/null +++ b/.cursor/rules/roblox/affiliates.md @@ -0,0 +1,19 @@ +--- +title: Creator Affiliate Program +description: Learn how to earn Robux by driving users to experiences. +--- + + +Effective July 24, 2025, the Creator Affiliate program is deprecated and has been replaced by the [Creator Rewards](./creator-rewards.md) program. + + +The [Creator Affiliate Program](https://create.roblox.com/affiliate) is a pilot program that lets you earn Robux using affiliate links. With it, you can: + +- Generate affiliate share links for any Roblox experience, including other developers' experiences, through the Creator Hub. +- Promote your affiliate links off-platform on social media channels. +- Earn revenue in Robux whenever new users create a Roblox account and purchase Robux using your affiliate link. A new user is someone who doesn't already have an alternative Roblox account. +- Exchange your Robux earnings for real-world money using the Developer Exchange program. + +When a user creates a Roblox account using your affiliate link and then buys Robux, you can receive up to 50% of the value of their Robux purchases during their first six months on the platform, for a maximum revenue of \$100 USD per new user. For example, if a new user joins Roblox and purchases \$100 USD of Robux, you can earn up to \$50 USD, minus certain fees like taxes and VAT. + +You receive your revenue in Robux, which you can exchange for real-world money through Developer Exchange. diff --git a/.cursor/rules/roblox/ai-data-sharing.md b/.cursor/rules/roblox/ai-data-sharing.md new file mode 100644 index 00000000..a605c09e --- /dev/null +++ b/.cursor/rules/roblox/ai-data-sharing.md @@ -0,0 +1,88 @@ +--- +title: AI data sharing +description: Understand AI data sharing policies and how to update your preferences. +--- + +Roblox has a suite of AI-powered solutions, including [Code Assist](studio/script-editor.md#code-assist), [Material Generator](studio/material-generator.md), [Assistant](assistant/guide.md), in-experience chat translation, [Texture Generator](studio/texture-generator.md), and [Avatar Setup](/avatar-setup/index.md). These tools help you quickly find information, accelerate the creation process, and complement your existing skillset. + +To improve these tools and build new ones, Roblox uses data to train its generative AI models. + +When you publish an experience in Studio, upload an avatar item, or upload a **paid** asset to the [Creator Store](production/creator-store.md), you have the option to share your data. The default choice in the user interface is based on a setting in the [Creator Hub](https://create.roblox.com/). + +An image of the publish experience dialog showing the data sharing toggle. + +- The data sharing setting is **off by default** for experiences, avatar items, and paid assets published prior to July 10, 2024. +- The data sharing setting is **on by default** for experiences, avatar items, and paid assets published on or after July 10, 2024. + +You can change your default choice at any time and override it as desired whenever you publish. + + +Because they're distributed with the intent of others using them, **free** [Creator Store](production/creator-store.md) assets are shared by default, with no ability to disable sharing. + + +## Manage data sharing preferences + +To set your global data sharing preferences: + +1. On the [Creator Hub](https://create.roblox.com/), click your user name and **Settings**. +1. Select **Data Sharing**. +1. Enable or disable **Make sharing data the default option when publishing experiences**. +1. (Optional) Choose individual experiences, avatar items, and paid Creator Store assets to share or not share. + +## How Roblox uses data + +All data shared with Roblox is for AI-enhancement purposes only and is not shared with third parties. Data is processed and stored in accordance with strict security protocols, contains no personal information, is split into tokens (small snippets) for further anonymization, and is retained for only as long as it is beneficial for model improvement. Roblox regularly reviews and purges shared data. + +If you share something and then later stop sharing it, Roblox will remove it from the training dataset within 30 days. Any AI models that were trained using your data will be updated within 365 days. + +
    Sources and ownership of the datasets
    + +Roblox's generative AI systems made available to the public are trained on the following, with particular data sources varying for each system: + +- Data from publicly accessible repositories under permissive licenses or released in the public domain +- Non-public data obtained from third-party providers via commercial arrangements +- Data from user activity on our platform and from our creators who have not opted-out from model training +- Data generated internally, including synthetic data +- Data provided by annotation services and other contractors + +
    Purpose and methodology of data collection, cleaning, processing, or modification
    + +Roblox uses training data to develop or enhance its AI offerings to its creators. Data enables contextual understanding and generation with respect to language capabilities, as well as within virtual, 3D environments, including with respect to materials, textures, geometry, and structures, to enhance details, interactions, and relevance among objects. + +Data is retained for only as long as it is beneficial for model improvement. Roblox regularly reviews and purges data. + +
    Data points included in the datasets, such as types, labels, and counters
    + +Training data incorporates various types of (a) written and audio text including in a variety of languages; (b) visual content; and (c) annotations, rating, and preference data. The size of datasets varies by system type and version, but the amount of training can range up to over 3 million distinct assets. + +
    Licensing status, indicating whether datasets are copyright-protected, purchased, licensed, or in the public domain
    + +Training data may include data subject to third party intellectual property rights. Third party data is derived from data repositories under (a) permissive licenses or released in the public domain; (b) third-party providers via commercial arrangements; and (c) our creators on our platform who have not opted-out from model training. Roblox conducts diligence on training data, including from third-party sources. + +
    Inclusion of personal or aggregate consumer information, as defined by the California Consumer Privacy Act
    + +Roblox implements processes including filtering to exclude personal information from training generative AI systems available for public use. Creator data is also tokenized to ensure it is not associated with an individual. To the extent data may contain aggregate consumer information, Roblox does not use it to identify or target individuals. Creators on our platform can control their data sharing preferences, including opting-out of their content being used for training, and all users may request deletion of personal information generally. + +
    Cleaning, processing, or other modification of datasets by the developer and the respective purpose for each modification
    + +Roblox employs various data processing techniques to enhance efficiency, quality, and safety, and to protect sensitive information, including deduplication, classification, and safety and privacy filtering. + +
    Use of synthetic data in development and/or training of the system
    + +Generated synthetic data is included in datasets used in development and training. + +
    Dates when datasets were first used and the time frame during which the data was collected
    + +Roblox started compiling and using datasets for generative AI systems in 2023. Such use is ongoing. + +
    Additional information
    + +For additional information, refer to our model cards and research papers related to our published models. + +This information is provided pursuant to California Civil Code Section 3111 (AB 2013) and is subject to update. + +## Public Luau + +Previously, Roblox launched a program that allowed you to share your scripts with Roblox, a public Luau dataset, or both. Roblox no longer uses the script data that was shared only with Roblox. Instead, you now decide if you want to share entire experiences, including their scripts. + +The Luau public dataset is not affected by this change. You can set your sharing preferences on the Creator Hub in the **Public Luau** tab. For more details on the public dataset, see [Empower Luau creation](https://create.roblox.com/data-collection). diff --git a/.cursor/rules/roblox/animation/capture.md b/.cursor/rules/roblox/animation/capture.md new file mode 100644 index 00000000..0a1b4731 --- /dev/null +++ b/.cursor/rules/roblox/animation/capture.md @@ -0,0 +1,67 @@ +--- +title: Animation capture +description: Animation Capture in the Animation Editor allows you to generate high-quality, realistic animations for faces and bodies. +--- + +import BetaAlert from '../includes/beta-features/beta-alert.md' + +You can record or upload video content to the [Animation Editor](../animation/editor.md) to quickly capture movement and expressions as animation keyframes. These tools can create unique and realistic animations within minutes while providing access to the animation keyframes for additional adjustments. + +The animation capture tools allow you to: + +- [Record your face](#face) with a webcam to puppeteer characters with [animation compatible heads](../art/characters/facial-animation/index.md). +- [Upload full-body video content](#body) to generate high quality realistic animations for an entire character. + +## Face + +**Animation Capture - Face** allows you to use your webcam to puppeteer rigs with [animation compatible heads](../art/characters/facial-animation/index.md) and generate corresponding keyframes to your movement. With the ability to record up to 60‑second animations, you can quickly provide both your playable and nonplayable characters the means to realistically grin, raise their eyebrows, drop their jaw, or any other expression necessary for your experience. + + + +Before you begin to record your face, ensure that you're in a well lit room close enough to your camera so that your face is in the center of your camera's recording frame. This increases your camera's ability to distinguish you from your surroundings so that you can accurately puppeteer your avatar and create high-quality animations. + +1. From the toolbar's **Avatar** tab, click **Animation**. The [Animation Editor](../animation/editor.md) window displays. +2. In the 3D viewport or the [Explorer](../studio/explorer.md) hierarchy, select the rig you want your video to animate. Enter a new animation name in the dialog window and click the **Create** button. +3. Navigate to the **track list** and click the **Face Capture** button. A popup displays asking you to acknowledge that you consent to the collection of your facial movements to enable the feature and camera access. + + + +4. If you have multiple cameras, choose which camera you want to use to record. + +5. In the controls widget in the 3D viewport, click the red circle. Your camera begins recording your facial movements. + + + +6. When you finish your recording, click either the red square or countdown timer. Keyframes that correspond to your facial movement display within the timeline. + + + +7. If you'd like to delete the recording and try again, click **Re‑Record**. + +After you finish your recording, you can [fine-tune](../animation/editor.md#keyframes) the keyframes, [save](../animation/editor.md#save-an-animation) your animation, then [export](../animation/editor.md#export-an-animation) it to use across all of your experiences. + +## Body + +The **Animation Capture - Body** allows you to quickly generate high-quality, realistic full-body animations for your R15 rigs by uploading videos to use to track the body's movement and generate corresponding keyframes. This significantly speeds up the manual process of creating animations, and allows you to personalize your avatars and NPCs with life-like mannerisms in a few minutes. + + + +Before you import a video to the **Animation Editor**, ensure the `.mp4` or `.mov` file meets the following requirements: + +- It includes just one person who is well-lit and visible throughout the video. +- It only contains a continuous single shot that's less than 15 seconds from a stable camera. +- It adheres to Roblox's [Community Rules](https://en.help.roblox.com/hc/articles/203313410) and [Terms of Use](https://en.help.roblox.com/hc/articles/115004647846). + +To import a video to create an animation: + +1. From the toolbar's **Avatar** tab, click **Animation**. The [Animation Editor](../animation/editor.md) window displays. +2. In the 3D viewport or the [Explorer](../studio/explorer.md) hierarchy, select the R15 rig you want your video to animate. Enter a new animation name in the dialog window and click the **Create** button. +3. Navigate to the **media and playback controls** and click the **⋯** button, then navigate to **Import** ⟩ **Live Animation Creator**. + + + +4. In the popup dialog, click the **Choose Video** button. +5. Select the video you want to import from your local machine, then click the **Open** button. After about a minute, keyframes that correspond to movement in your video display within the timeline. + +After your import is successful, you can [save](../animation/editor.md#save-an-animation) and [export](../animation/editor.md#export-an-animation) your animation to use across all of your experiences. diff --git a/.cursor/rules/roblox/animation/curve-editor.md b/.cursor/rules/roblox/animation/curve-editor.md new file mode 100644 index 00000000..cd07292d --- /dev/null +++ b/.cursor/rules/roblox/animation/curve-editor.md @@ -0,0 +1,164 @@ +--- +title: Curve Editor +description: Curve Editor is a curve-based animation editing interface that lets you see and modify a rig's position and orientation. +comments: There are some opportunities to improve or add images/videos in this doc. Also some opportunity to create a "Using Curve Editor" use-case based article that'll quickly get an animator up to speed on the curve editor UI without the math. +--- + +The **Curve Editor** is a curve-based animation editing interface within the [Animation Editor](../animation/editor.md) that allows you to see and modify how a rig's position and orientation changes between keyframes through color‑coded curve graphs. It allows you to define independent tracks for the **X**, **Y** and **Z** angles, providing additional levels of control to make your animations more fluid and realistic. + + +
    + +
    Dope Sheet Editor
    +
    +
    + +
    Curve Editor
    +
    +
    + +Instead of using the default dope sheet editor's method of manually moving the scrubber from one frame to another to see how a rig's position and orientation change over time, the Curve Editor lets you quickly reference position and orientation values of your selected tracks through the **position ruler** on the left side of the timeline and the **rotation ruler** on the right side of the timeline. + +Curve Editor Overview + +## Open the Curve Editor + +You can switch the editor's timeline between the dope sheet editor and the Curve Editor at any time. + +1. Open the [Animation Editor](./editor.md) from Studio's **Avatar** tab or the **Window** ⟩ **Avatar** menu. + + Animation Editor indicated in Studio's toolbar + +2. Studio automatically converts [quaternions](https://en.wikipedia.org/wiki/Quaternion) to [Euler angles](https://en.wikipedia.org/wiki/Euler_angles) when you open the Curve Editor, so it's important that you verify your rotation type **before** you switch to the Curve Editor. Once you convert quaternions to Euler angle tracks, it's impossible to convert them back into quaternions. + + 1. In the top-right corner of the editor window, click the gear icon. A contextual menu displays. + + Gear Icon + + 2. Hover over **Default Rotation Type**, then select either **Euler Angles** or **Quaternions**. Your rotation type sets to your choice and becomes the default rotation type for future projects. + +3. In the top-left corner of the **timeline**, click the **Curve Animation** icon. A popup window displays to confirm that your `Class.KeyframeSequence` clip will convert to a `Class.CurveAnimation` clip. + + Opening Curve Editor + + If you kept the default rotation type of Euler angles, Studio automatically converts any pre-existing quaternions to Euler angles following the [Euler angles order](#euler-angles-order) setting. Because `Class.KeyframeSequence|KeyframeSequences` work with quaternions and curve animations work with Euler angles by default, your animation might appear slightly different between keyframes, especially if any of your Euler angles approach [Gimbal lock](https://en.wikipedia.org/wiki/Gimbal_lock). + + Convert Euler Angles + + If you set the rotation type to quaternions, the conversion to curves preserves the quaternions and the animation remains the same. + + Curve Editor Overview + +## Interpolation + +Interpolation is Studio's process of "filling in" position and orientation values between your keyframes. This allows the rig to seamlessly animate from one orientation or position to another instead of disjointedly jumping between keyframes. While Euler angle curves interpolate between the values of each keyframe, quaternion curves interpolate from `0` to `1` over a set time. To illustrate this, the following images display the same `Class.KeyframeSequence` after you open the Curve Editor with either a Euler angle or a quaternion rotation type: + + +
    + +
    Euler Angle Curve
    +
    +
    + +
    Quaternion Curve
    +
    +
    + +For **Euler angle curves**, the height of each keyframe represents its orientation value over time. For example, the highest keyframe represents a rotation of about 120 degrees around the **X** axis, and the lowest keyframe represents a rotation of about -10 degrees. For **quaternion curves**, each segment represents orientation changing between keyframes, and the line displays the interpolation between them. In the previous example, the animation starts from orientation A, then interpolates linearly to orientation B. Once it is at B, the interpolation starts again from orientation B to orientation C, then continues with this pattern until the rig reaches its final orientation. + +You can modify how the Curve Editor handles interpolation for both Euler angle curves and quaternion curves by [setting tangents](#set), [changing the interpolation mode](#interpolation-mode), or by [generating interpolation curves](#generate-interpolation-curves) between two or more keyframes. + +### Tangents + +The Curve Editor provides **tangents**, or handles, that let you quickly adjust the interpolation either before or after a keyframe. Euler angle curves have a tangent both before and after the keyframe while quaternion curves have one tangent at the beginning and another at the end of a segment. The initial tangent controls the interpolation after the keyframe and the secondary tangent controls the interpolation before the keyframe. For example: + + +
    + +
    Euler Angle Curve Tangents
    +
    +
    + +
    Quaternion Curve Tangents
    +
    +
    + + +For quaternion curve tangents, no matter how much you adjust each tangent, each segment always begins at `0` and ends at `1`. Although each segment of a quaternion curve graph is disconnected from subsequent segments, the two keyframes within the same frame always represent the same orientation. + + +Tangents change appearance when you set them to a new position. For example, when you manually set a tangent, the handle displays as a white circle, otherwise an unset tangent displays as a clear circle. For keyframes with two tangents, you can manually set either one or both tangents, and their appearance changes accordingly. + +Tangents change appearance when you set them to a new position; an unset tangent displays as a clear circle, and a set tangent displays as a white circle. Studio automatically calculates the position for unset tangents based on the position of any set tangents. For instance, if you only set one tangent and leave the other unset, the unset tangent aligns with its opposite tangent: + +Tangent Image + +#### Set + +To set a tangent: + +1. Click and drag the tangent in the direction you want to pull the curve. The curve adjusts based on the location of your cursor. +2. Release the tangent. The interpolation between keyframes adjusts accordingly. +3. If you set one tangent and want to align the unset tangent horizontally, right-click the unset tangent and select **Set Tangent to Zero** from the contextual menu. + +#### Reset + +If you ever set a tangent to a new position and the resulting interpolation is undesirable, you can always use "auto‑tangent mode" to clear a tangent's value and reset it back to its default interpolation behavior. + +1. Right-click on a tangent. A contextual menu displays. +2. Select **Set Tangent To Zero**. The tangent resets to its default interpolation behavior. + +### Interpolation mode + +Interpolation mode is the rate at which an animation moves between different keyframe positions within the animation. There are three interpolation modes available for curve animations: + +- **Linear** (default) — Moves at a constant speed from one keyframe to another. +- **Constant** — Removes interpolation between the selected keyframe and next keyframe, causing the animation to "snap" from keyframe to keyframe. +- **Cubic** — Eases in and/or out of the animation. Cubic is the only mode that allows you to define tangents. + +To change interpolation mode: + +1. Right-click a keyframe. A contextual menu displays. +2. Hover over **Interpolation Mode**, then select either **Linear**, **Constant**, or **Cubic**. The interpolation mode changes the curve following the keyframe. + + Interpolation Mode + +### Generate interpolation curves + +For curve animations, bounce and elastic easing styles are not available as standard interpolations like they are for `Class.KeyframeSequence|KeyframeSequences`. However, when you convert a `Class.KeyframeSequence` to a curve animation, Studio automatically adds additional keyframes to your animation to keep the animation intact, and you can select two or more keyframes and generate an **interpolation curve** that removes and replaces any of their intermediate keyframes to mimic bounce and elastic easing behavior. + +To generate interpolation curves: + +1. Select two or more keyframes. Each keyframe you select highlights. +2. Right-click one of these keyframes. A contextual menu displays. +3. Hover over **Generate Curve**, then over **Bounce** or **Elastic**, and then select either **Out**, **In**, or **InOut**. An interpolation curve between your selected keyframes generates according to your settings. + + - **Out** — The motion is faster at the beginning and slower toward the end of the keyframe range. + - **In** — The motion is slower at the beginning and faster toward the end of the keyframe range. + - **InOut** — **In** and **Out** on the same tween, with **In** at the beginning and **Out** taking effect halfway through the keyframe range. + +## Euler angles order + +When you're working with Euler angles, Studio represents the **X**, **Y**, and **Z** axes through three channel values that follow a specific order to move your rig from its starting orientation to its next orientation. Each order is named after the [matrix multiplications](https://en.wikipedia.org/wiki/Matrix_multiplication) to get to the final orientation. For example, an **XYZ** order (**X**×**Y**×**Z**) means that the rig moves starting on the **Z** axis, then the **Y** axis, then the **X** axis. + +How an animation changes when you set Euler angles order is dependent on **when** you change the order: + +- If you load a `Class.KeyframeSequence` or a `Class.CurveAnimation` with a set quaternion rotation type then change the order, the new order doesn't affect the animation. This is because Studio uses quaternions to configure changes in your rig's orientation using the shortest path possible between its starting orientation to its next orientation. However, this method does affect how the quaternions of each keyframe transform into **X**, **Y**, and **Z** angles in the track list, which might visually affect the values within the timeline without affecting the animation itself. +- If you change the order of an existing Euler angle track, the animation might change since Studio preserves the values of each keyframe. This means that the ordered path Studio takes to change your rig's orientation from its starting orientation to its next orientation changes with the Euler angles order. + +To set the Euler angles order: + +1. In the top-right corner of the editor window, click the gear icon. A contextual menu displays. + + Gear Icon + +2. Hover over **Default Euler's Angles Order**, then select either **XYZ**, **XZY**, **YXZ**, **YZX**, **ZXY**, or **ZYX**. Your Euler angles order changes accordingly. diff --git a/.cursor/rules/roblox/animation/editor.md b/.cursor/rules/roblox/animation/editor.md new file mode 100644 index 00000000..20fc16e4 --- /dev/null +++ b/.cursor/rules/roblox/animation/editor.md @@ -0,0 +1,597 @@ +--- +title: Animation Editor +description: Animation Editor allows you to design and publish custom animations on rigs. +--- + +The **Animation Editor**, accessible from Studio's **Avatar** tab or **Window** ⟩ **Avatar** menu, allows you to design and publish custom animations on rigs. A rig is an object with individual sections connected by joints. You can move these joints to [create poses](#create-poses) and then smoothly animate the rig from pose to pose. + +Animation Editor indicated in Studio's toolbar + +## Interface + + + +### Media and playback controls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    The name of the animation.
    + Opens a contextual menu with the following menu items: +
      +
    • **Load**
    • +
    • **Save**
    • +
    • **Save As**
    • +
    • **Import**
    • +
    • **Export**
    • +
    • **Create New**
    • +
    • **Set Animation Priority**
    • +
    +
    Moves the scrubber to the first key.
    Moves the scrubber to the previous key.
    Previews the animation in reverse.
    Pauses the animation.
    Previews the animation.
    Moves the scrubber to the next key.
    Moves the scrubber to the last key.
    Toggles looping for the animation.
    The **position indicator** that displays the timeline unit for the position of the scrubber in **seconds:frames**.
    + +### Timeline + + + + + + + + + + + + + + + + + + + + + + +
    A scrubber that marks the current frame position.
    Time units that allow you to move the scrubber to a precise time unit.
    A keyframe that marks the change in position or orientation of a part.
    Either expands or contracts the time unit marks.
    + Opens a contextual menu with the following menu items: +
      +
    • **Timeline Unit**
    • +
    • **Frame Rate: 30fps**
    • +
    • **Show Animation Events**
    • +
    • **Snap To Keys**
    • +
    +
    + +### Track list + + + + + + + + + + + + + + + + + + + + + + +
    The name of the rig.
    Opens the **Manage IK** window.
    Opens a contextual menu of additional tracks you can add to the track list.
    The track displaying the name, position, and rotation of the part that + has been moved or rotated to a new position or orientation.
    + Opens a contextual menu with the following menu items: +
      +
    • **Add Keyframe**
    • +
    • **Delete Track**
    • +
    +
    + +## Create an animation + +You can only create animations using rigs. If you don't have a rig available, insert a pre-built rig using the [Rig Generator](../studio/rig-builder.md) tool. The pre-built rigs have all of the basic parts and mechanisms to +build a character animation. + +If you have a rig, you can create a new animation for it using the following steps: + +1. From the toolbar's **Avatar** tab, click **Animation**. +2. Select the rig you want to create an animation for to display the creation dialog. + + + +3. In the **Animation Name** field, enter a new animation name, then + click the **Create** button. The **Animation Editor** window displays + the [media and playback controls](#media-and-playback-controls), [timeline](#timeline), and [track list](#track-list). + +From here, you can begin [creating poses](#create-poses) +for your rig and modifying the animation settings, such as [looping +the animation](#loop-an-animation) or [setting its +priority](#set-a-priority). + +### Create poses + +An animation consists of different **poses**, or specific positions and orientations of `Class.Bone` or `Class.MeshPart` objects within a rig. You can create poses by moving or rotating bones or meshes, such as the rig's hands, feet, or torso. After you create multiple poses on different positions of the timeline, the **Animation Editor** runs between them with your [easing settings](#easing) to smoothly animate the rig from pose-to-pose. + +For example, a simple animation where a humanoid character turns +to look 45° to the left has two poses: + +- The initial position looking forward. +- The turned position looking left. + + + +To create a pose: + +1. In the **Explorer** window, select the rig and expand its child instances to access the bones or meshes. + +2. In the **Animation Editor** window, navigate to the timeline, then + click-and-move the **scrubber** to the frame position where you + want to set the pose. By default, Roblox represents timeline units as + **seconds:frames** and animations run at 30 frames per second. For example, 0:15 indicates ½ second. + + + +3. In the **viewport**, hover your mouse over **rig** and select a bone or mesh. You can also select the ⊕ icon on the timeline and click **Add All** to add all bones or meshes to the animation. + + +4. Move or rotate the bone or mesh to a new orientation. For bones, you can rotate them to pose the rig along the created bone joints. + + + + + When creating poses, you can toggle between **Move** and **Rotate** + modes by pressing R. These modes work exactly like moving and rotating base objects, including the snap settings and incremental values located in Studio's toolbar. + + +5. Continue moving or rotating bones or meshes until you get the desired pose. + Whenever you adjust a specific bone or mesh, a **new track** displays in the track list, and a **new keyframe** displays on the **timeline** for that bone more mesh at that specific frame position. + + + +6. When you're ready to preview the animation, you can either: + + - Navigate to the **Media and Playback Controls**, then click the + **Play** button. + + + + - Or press the **Spacebar**. + + + By default, the timeline displays a duration of 1 second (30 frames), but the final keyframe determines the animation's actual duration. To + add more time to the timeline, enter a new value in the right-side box of + the position indicator. + + +## Keyframes + +Once you [create basic poses](#create-poses) for a rig, +fine-tuning individual keyframes can significantly improve the final +animation. + +### Add keyframes + +Whenever you change a part's position or orientation, a new keyframe +displays on the timeline. You can also add keyframes to a timeline +through the following methods. + +To add a keyframe for a single part of the rig: + +1. Navigate to the **timeline**, then move the **scrubber** to a new + position. +2. In the **track list**, navigate to the part's **track** and click + the **⋯** button. A contextual menu displays. + + + +3. Select **Add Keyframe**. + +To add a keyframe for multiple parts of the rig: + +1. Navigate to the **timeline**, then right-click in the dark region + above the tracks. A pop-up menu displays. + + + +2. Select **Add Keyframe Here**. + +Note that the keyframes insert at the frame position closest to where you click, +not at the position of the scrubber. + +### Move keyframes + +You can increase or decrease the amount of time between keyframes by moving +either individual keyframes or every keyframe in a frame position. + +To move a single keyframe: + +1. Navigate to the **timeline** and click on any **gray keyframe**. + Both the **gray keyframe** and the **white keyframe** are now + surrounded with a blue border. + + + +2. Click-and-drag it to a new frame position. + +To move every keyframe in a frame position: + +1. Navigate to the **timeline** and click on the **white keyframe** in + the dark region above the tracks. Every keyframe in the frame + position is now surrounded with a blue border. + + + +2. Click-and-drag it to a new frame position. + +### Duplicate keyframes + +You can duplicate either a specific keyframe or multiple keyframes for +multiple parts into a new position in the timeline. This is particularly +useful for when you want to + +To duplicate one or more keyframes: + +1. Navigate to the **timeline** and select one or more keyframes. Every selected keyframe is now surrounded by a blue border. +1. Press CtrlC (⌘C). Every selected keyframe copies to your clipboard. +1. Move the **scrubber** to a new frame position. +1. Press CtrlV (⌘V). The keyframe(s) paste into the new frame position. + +### Delete keyframes + +To delete one or more keyframes, select the keyframe(s), then press +**Delete** or **Backspace**. + +### Optimize keyframes + +Animators can often generate many keyframes during the course of animation, especially when using various animation tools and features. To help reduce the number of unnecessary keyframes and make it easier to animate on the timeline, the **Animation Editor** provides tools for [automatic](#automatic-optimization) and [on-demand](#on-demand-optimization) keyframe optimization. + +#### Automatic optimization + +The **Animation Editor** automatically detects and removes unnecessary keyframes when creating [facial animations](../art/characters/facial-animation/animate-heads.md) and when [promoting a keyframe animation to a curve animation](../animation/curve-editor.md#open-the-curve-editor). + +If 3 or more consecutive keyframes have the same value in a track, the **Animation Editor** removes the intermediary keyframes and keeps only the first and last keyframes. + +If the track only contains keyframes with default values, such as an `Datatype.CFrame.identity|Identity Cframe`, or a `0` value for a curve animation, the entire track is removed from the animation. + +#### On-demand optimization + +Optimize Keyframes + +During animating, you can use the editor's **Keyframe Optimization** tool to quickly reduce the number of unnecessary keyframes. Keyframe Optimization prioritizes the least impactful keyframes first. You can adjust the number of keyframes using the slider. + +While using the slider, you can preview the animation and scrub through the timeline to check your animation but you can not perform editing operations, such as changing keyframe values or adding tracks. + +To access the **Optimize Keyframes** tool: + +1. In the **Animation Editor**, click \***\*⋯\*\*** button and select **Optimize Keyframes**. A dialog box with a slider displays. + + Optimize Keyframes + +2. Move the slider to the desired number of keyframes. You can preview and playback the animation to verify the optimization. + + Optimize Keyframes + +3. Click **OK** when complete. + +### Easing + +For each keyframe in the [Animation Editor](../animation/editor.md), you can choose both an +[easing style](#easing-style) and an [easing direction](#easing-direction). + +#### Easing style + +**Easing style** is the rate at which an animation moves between different frame +positions within the animation. By default, a part will move and/or rotate from +one keyframe to the next in an even, steady motion known as **linear easing**. +In the following video, linear easing makes the character's turning animation +appear stiff and robotic. + +
    + +
    Linear easing
    +
    + +While that may look appropriate for some motions, compare the following video +where **cubic easing** makes the animation of the character's motion appear more +natural. + +
    + +
    Cubic easing
    +
    + +To change the easing style for one or more keyframes: + +1. Navigate to the **timeline** and select one or more keyframes. Every selected + keyframe is now surrounded by a blue border. +2. Right-click on a **keyframe with a border**. A pop-up menu displays. +3. Hover over **Easing Style**, then choose from the following options: + + - **Linear** - Moves at a constant speed. + - **Constant** - Removes interpolation between the selected keyframe and + next keyframe. The animation will "snap" from keyframe to keyframe. + - **Cubic** - Eases in or out with cubic interpolation. + - **Elastic** - Moves as if the object is attached to a rubber band. + - **Bounce** - Moves as if the start or end position of the tween is bouncy. + +#### Easing direction + +**Easing direction** defines which end of the animation movement is affected by +the [easing style](#easing-style). By default, the motion is slower at the +beginning and faster toward the end of the animation. + +To change the easing direction for one or more keyframes: + +1. Navigate to the **timeline** and select one or more keyframes. Every selected + keyframe is now surrounded by a blue border. +1. Right-click on a **keyframe with a border**. A pop-up menu displays. +1. Hover over **Easing Direction**, then choose from the following options: + + - **Out** - The motion will be faster at the beginning and slower toward the + end. + - **InOut** - **In** and **Out** on the same tween, with **In** at the + beginning and **Out** taking effect halfway through. + - **In** - The motion will be slower at the beginning and faster toward the + end. + +## Loop an animation + +To make an animation automatically loop, navigate to the [Media and +Playback Controls](#media-and-playback-controls) and click +the **Looping** button. + + + + + A looping animation doesn't interpolate between the final + keyframes and first keyframes. To make the animation loop smoothly, +
    duplicate the first + keyframes and use them as the final keyframes. + + +## Set a priority + +An animation's **priority** (`Enum.AnimationPriority`) dictates when it will play in an +experience. For example, if you play an animation with a higher priority +than another animation that's already playing, the new animation will +override the old. For example, a "jump" animation should take priority over an "idle" animation so that a character doesn't perform both at the same time. + +Roblox uses seven levels of priority, ordered here from highest to lowest: + + + + + **Action4** + + + + + + **Action3** + + + + + + **Action2** + + + + + + **Action** + + + + + + **Movement** + + + + + + **Idle** + + + + + + **Core** + + +
    + +To set an animation to a different priority: + +1. Navigate to the [Media and Playback Controls](#media-and-playback-controls) + and click the **⋯** button. A + contextual menu displays. +1. Hover over **Set Animation Priority**, then choose your desired + priority setting. + +## Save an animation + +When you save an animation, Studio saves it as a +`Class.KeyframeSequence` object in `Class.ServerStorage` and adds a reference to your rig object. Saving your animation is meant to preserve your animation progress and work. If you intend to use an animation, [export it](#export-an-animation) before referencing the published animation in your experience. + +To save an animation: + +1. Navigate to the [Media and Playback Controls](#media-and-playback-controls) + and click the **⋯** button. A + contextual menu displays. + + + +2. Select **Save** or **Save As** to save the animation with a reference added to the **AnimSaves** object. + + + +### Access local data + +Roblox saves animation data locally to `Class.ServerStorage` to preserve your animation work. In most cases, your experience shouldn't directly access this local data and instead should reference a published animation. + +In the rare cases that your experience requires accessing local data, reference the value of the `Class.ObjectValue` in your rig's AnimSaves folder rather than directly accessing the `Class.ServerStorage`. See the following examples: + +```lua title="Access local animation data" +local myAnim = myRig.AnimSaves.Value.myAnimation +-- Accesses your local animation data with the value reference in your rig +``` + +```lua title="Incorrectly access local data" +local myAnim = ServerStorage.RBX_ANIMSAVES.myRig.myAnimation +-- Can conflict with other rigs sharing the same name +``` + + +Since local data is stored in `Class.ServerStorage`, it doesn't replicate and isn't available from clients. If your clients need access to that data, you must move the `Class.KeyframeSequence` or `Class.CurveAnimation` objects and their descendants to `Class.ReplicatedStorage`. + + +### Migrate legacy data + +The **Animation Editor** previously stored animation objects directly within a rig, not within `Class.ServerStorage`. If your experience references legacy animation objects in a rig, you can migrate this data to `Class.ServerStorage` using the animation migration tool, allowing you to [access local animation data](#access-local-data) in the same way. + +To migrate your legacy animation data: + +1. With the **Animation Editor**, select a rig with older animations that aren't saved in `Class.ServerStorage`. A migration window displays. + + + +2. Select **Delete**, **Migrate**, or **Ignore** for each detected animation. + + - **Delete**: Delete animations that are already published or no longer being used. + - **Migrate**: Migrate animations that are still in progress or that haven't yet been published. + - **Ignore**: Ignore animations if you have yet to update your experience's code to [access local data](#access-local-data) from `Class.ServerStorage`. Once updated, migrate these animations. + +3. Press **OK** when complete. + +## Export an animation + +When you export an animation to Studio, it becomes available for use in +all experiences. This means that you only need to create an animation +once, then you can reuse it as many times as you want. + + + If your animation will be used for a **default** Roblox character animation like jumping or running, ensure that you rename the final keyframe as outlined in the first step below. + + +To export an animation: + +1. **(Important)** If the animation will be used to [replace a default character animation](../animation/using.md#replace-default-animations) like running or jumping, rename the final keyframe **End** as follows: + + 1. Right-click the final white keyframe symbol in the upper bar region and choose **Rename Key Keyframe** from the + contextual menu. + + + + 2. Type **End** (case-sensitive) into the input field. + 3. Click the **Save** button. + +2. Navigate to the [Media and Playback Controls](#media-and-playback-controls) + and click the **⋯** button. + + + +3. Select **Publish to Roblox** from the contextual menu. +4. In the **Asset Configuration** window, enter an animation title and optional description. +5. **(Important)** If the animation will be used in any [group-owned](../projects/groups.md) experience, select the group from the **Creator** field. +6. Click the **Submit** button. + +Once the upload is complete, you can copy the animation's asset ID +from the [Toolbox](../projects/assets/toolbox.md) for scripting custom animations or to replace default character animations, as outlined in [Use animations](../animation/using.md). + +1. Click the **Creations** tab and select **Animations** from the dropdown menu. +2. Right-click the desired animation and select **Copy Asset ID** from the contextual menu. +3. See [Use animations](../animation/using.md) for instructions on how to play the animation from a script or use the animation as a default character animation. diff --git a/.cursor/rules/roblox/animation/events.md b/.cursor/rules/roblox/animation/events.md new file mode 100644 index 00000000..fd8aa957 --- /dev/null +++ b/.cursor/rules/roblox/animation/events.md @@ -0,0 +1,135 @@ +--- +title: Animation events +description: Animation Events are markers across the timeline span in the Animation Editor. +--- + +You can define animation **event markers** across the timeline span and use +`Class.AnimationTrack:GetMarkerReachedSignal()|GetMarkerReachedSignal()` +to detect those markers as the animation runs. + +## Show events + +By default, the event track isn't visible. To show the event track: + +1. Navigate to the right of the **timeline**, then click the **Gear** icon. + A pop-up menu displays. + + + +2. Select **Show Animation Events**. This opens the **Animation Events** bar directly below the media and + playback controls. + + + +You can now [create](#create-events), [detect](#detect-events), and +[duplicate](#duplicate-events) events. + +## Create events + +Event markers are visual indicators of where an animation event begins. After you create an event +marker, you can move it to any frame position on the timeline. + +To create a new event marker: + +1. Navigate to the **timeline**, then click-and-drag the **scrubber** to the + frame position where the event should occur. +2. Navigate to the **event track**, then click the **Edit Animation Events** + button. The **Edit Animation Events** dialog displays. + + + +3. In the **Edit Animation Events** dialog, click **+ Add Event**, then enter an + event name. + + + +4. **(Optional)** In the **Parameter** field, enter a parameter string for the event. +5. Click the **Save** button. In the events bar within the timeline, a new + marker symbol displays at the frame position. + + + +## Detect events + +To detect animation events in a `Class.LocalScript`, +connect a function to the `Class.AnimationTrack:GetMarkerReachedSignal()|GetMarkerReachedSignal()` function of `Class.AnimationTrack`. For example: + +```lua +local Players = game:GetService("Players") + +local player = Players.LocalPlayer +local character = player.Character or player.CharacterAdded:Wait() +local humanoid = character:WaitForChild("Humanoid") +local animator = humanoid:WaitForChild("Animator") + +-- Create new "Animation" instance +local walkAnim = Instance.new("Animation") +-- Set its "AnimationId" to the corresponding animation asset ID +walkAnim.AnimationId = "rbxassetid://5432167890" + +-- Load animation onto the animator +local walkAnimTrack = animator:LoadAnimation(walkAnim) + +-- Connect "GetMarkerReachedSignal" event to a specific named keyframe +walkAnimTrack:GetMarkerReachedSignal("FootStep"):Connect(function(paramString) + print(paramString) +end) +``` + + +You can specify a Parameter value for any event +marker within the **Animation Editor**. This lets you pass a custom string +(single value, comma-separated string, etc.) to the `Class.AnimationTrack:GetMarkerReachedSignal()|GetMarkerReachedSignal()` function, as illustrated by the paramString argument in the code example above. This string can then be parsed or converted, if necessary, and used for whatever action you wish to perform in the event. + + +## Duplicate events + +As you create events, they become available for usage throughout the whole +animation, not only at the frame position where you originally created them. For +instance, you can create a "FootStep" event marker at the point where a +character's **left** foot touches down, then use the same event when the +character's **right** foot touches down. + +To duplicate an event: + +1. Navigate to the **timeline**, then click an **event marker** in the **event bar**. + + + +2. Press CtrlC (⌘C on Mac). +3. Click-and-drag the **scrubber** to the frame position where you want to + duplicate the event. +4. Press CtrlV (⌘V on Mac). + + + +If the original event uses a parameter +but the duplicated event should use a modified parameter, perform the following +steps: + +1. Right-click the duplicated event marker. A pop-up menu displays. +2. Select **Edit Animation** Event. The **Edit Animation Events** dialog + displays. +3. Make your changes, then click the **Save** button. + + +You can also duplicate events by clicking the Edit Animation Events button (just as if you were creating a new event), clicking Add Event in the pop-up menu, selecting the desired event from the dropdown, and clicking Save. + diff --git a/.cursor/rules/roblox/animation/index.md b/.cursor/rules/roblox/animation/index.md new file mode 100644 index 00000000..b42c01e2 --- /dev/null +++ b/.cursor/rules/roblox/animation/index.md @@ -0,0 +1,34 @@ +--- +title: Animation in Roblox +description: An overview of all animation tools in Roblox Studio. +--- + +**Animation** is the process of applying motion to your characters, objects, and environments to create an engaging and dynamic experience. While there are many ways to make objects move and interact, animation in Roblox typically refers to customizing an expressive movement of a specific character, or group of parts, using the **Animation Editor** or **animation-related APIs**. + +Animation can apply to any Roblox part or group of parts. Different types of objects can utilize various animation features. The following are the general categories of animatable objects: + +- **Simple objects**, such as a basic part, can only animate changes across the part's single position or rotation property. +- **Rigs**, or parts connected by joints like `Class.Bone` or `Class.Motor6D`, can articulate positional and rotational movement between their joints, like elbows and wrists. Rigged models can take advantage of animation features like [inverse kinematics](#inverse-kinematics) to quickly and programmatically apply movement in response to environments and events. +- **R15 rigs**, rigs that incorporate the standardized [avatar character model](../characters/index.md#avatar-character-components), can use animations from Roblox's character animation library and other movement features, even if it's a player or non-player character model. + +## Animation Editor + +The [Animation Editor](../animation/editor.md) allows you to design and publish custom animations on rigs. You can move the joints that connect individual sections of a rig to create poses, and the **Animation Editor** smoothly animates the rig from pose-to-pose. As long as all moving parts are connected with `Class.Motor6D` objects, you can use the editor for both human and non-human rigs. + + + +When creating animations, Studio provides the following features to animate effectively: + +- Instantly create face and body animations through the [Animation Capture](../animation/capture.md) tool. + +- Switch to the [Curve Editor](../animation/curve-editor.md) to access the curve-based animation UI and more control over your animation tracks. + +- Make realistic animations by posing and animating `Class.Bone|Bones` of a [rigged mesh](../art/modeling/rigging.md). + +## Inverse kinematics + +You can use [inverse kinematics](../animation/inverse-kinematics.md) APIs to automatically create animations and poses based on environmental and external events. With inverse kinematics, you can procedurally generate various animation events, such as having a character's head track a bird flying in the sky, or making a character's arm automatically reach for a door knob when nearby. + +## Animation events + +An [animation event](../animation/events.md) is a specific point in an animation that triggers an action. You can define animation event markers across the **Animation Editor** timeline span, then use `Class.AnimationTrack:GetMarkerReachedSignal()` to detect those markers as the animation runs to perform specific actions, such as playing a sound effect whenever the user's foot touches the ground. diff --git a/.cursor/rules/roblox/animation/inverse-kinematics.md b/.cursor/rules/roblox/animation/inverse-kinematics.md new file mode 100644 index 00000000..ab688ba9 --- /dev/null +++ b/.cursor/rules/roblox/animation/inverse-kinematics.md @@ -0,0 +1,199 @@ +--- +title: Inverse Kinematics +description: Inverse Kinematics is a technique in computer animation to make characters move and interact with their environment. +--- + +[Inverse Kinematics](https://en.wikipedia.org/wiki/Inverse_kinematics) (IK) is a common technique in computer animation to efficiently make characters move and interact realistically with their environment. The process of creating a realistic movement for a character often requires many iterations and minor adjustments of the various joints. With IK, you can pose and animate multiple character parts by posing or adjusting a single object. + +This animation technique can provide solutions to the following examples: + + +
    + +
    Grab and pose a character's hand while automatically adjusting the related limbs, such as the wrist, elbow, and shoulder.
    +
    +
    + +
    Make a character's feet interact realistically on different surfaces and slopes.
    +
    +
    + +
    Grab and move a single target object to quickly create realistic interactions with your character and props.
    +
    +
    + +## IKControl + +You can use an `Class.IKControl` to procedurally add IK to your character rigs outside of the **Animation Editor**. Studio allows you to programmatically apply IK to all characters, such as R15, Rthro, and custom imported skinned characters, to create realistic movement and interactions in your experience. + +When adding an `Class.IKControl`, set the [required properties](#required-properties) correctly to avoid unexpected and unnatural animation results. As with all animation, [test your IKControls](#test-ikcontrols) to ensure that you achieve the desired behavior. + +### Required properties + +When adding a `Class.IKControl` to your character's `Class.Humanoid` or `Class.AnimationController`, you must set the following required properties to enable IK: + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PropertyDescription
    `Class.IKControl.Type|Type`Specifies the behavior type of the IK control. See `Enum.IKControlType` for the list of behavior options. Common behavior types are `Position` or `Transform`.
    `Class.IKControl.EndEffector|EndEffector`A `Class.BasePart` or `Class.Bone` in your character rig that tracks toward the `Class.IKControl.Target|Target`. For example, you can set a **LeftHand** bone as a `Class.IKControl.EndEffector|EndEffector` to reach a doorknob object set as the `Class.IKControl.Target|Target`.
    `Class.IKControl.Target|Target`The object the `Class.IKControl.EndEffector|EndEffector` reaches or points toward. A `Class.IKControl.Target|Target` can be any object with a world position.
    `Class.IKControl.ChainRoot|ChainRoot`Defines the chain of `Class.BasePart|BaseParts` or `Class.Bone|Bones` that the `Class.IKControl` affects. All connected parts between the `Class.IKControl.ChainRoot|ChainRoot` and the `Class.IKControl.EndEffector|EndEffector` are affected by the `Class.IKControl` using the behavior type defined.

    For example, if your character's **LeftHand** is set as the `Class.IKControl.Target|Target`, you can apply IK to the entire left arm by setting `Class.IKControl.ChainRoot|ChainRoot` to the **LeftUpperArm**. To apply IK just to the parts below the elbow, set `Class.IKControl.ChainRoot|ChainRoot` to the **LeftLowerArm**.
    + +### Test IKControls + +You can add and edit `Class.IKControl` programmatically or directly through the **Explorer**. You can even add and make changes to `Class.IKControl` during a Play test to quickly check how various properties affect a character's movements. + +To quickly test your `Class.IKControl` using an `Class.Attachment` as a target: + +1. From Studio's mezzanine, [initiate a playtest](../studio/testing-modes.md#playtesting). +2. In the **Explorer**, navigate to **Workspace** → your user's `Class.Model`. This `Class.Model` instance is named as your current Roblox account. +3. Click the **⊕** icon next to your character model's `HumanoidRootPart` and add an **Attachment**. + + + +4. Select the **Attachment** and use the **Move** tool to position the object in front of your character in the viewport. + + + +5. In the **Explorer** window, select the **⊕** icon next to your character's `Class.Humanoid` and add an **IKControl**. + + + +6. Select the `Class.IKControl` and set the following property values in the **Properties** window: + + 1. **Type**: Select `Transform` from the dropdown. + 2. **EndEffector**: Select your model's **LeftHand** `Class.MeshPart` in the **Explorer**. + 3. **Target**: Select the newly created **Attachment** object in the **Explorer**. + 4. **ChainRoot**: Select your model's **LeftUpperArm** `Class.MeshPart` in the **Explorer**. + + +
    + +
    IKControl Properties
    +
    +
    + +
    Explorer - Character Model
    +
    +
    + + Your character's left arm should now reach for the target `Class.Attachment`. You can experiment with moving the `Class.Attachment` or editing the `Class.IKControl` properties to achieve different results. + + + +### Add constraints + +You can use `Class.Constraint|Constraints` to restrict how joints can move when reaching its target. Constraints can ensure joints like the elbows and knees bend naturally, or to make the mechanical joints rotate in a specific orientation. + + +
    + +
    Elbow bending unnaturally
    +
    + +
    + +
    Elbow bending correctly
    +
    +
    + +To add constraints to your character using `Class.IKControl`, your `Class.IKControl` and constraint must meet the following conditions: + +- The attachments referenced in the constraint's `Class.Constraint.Attachment0|Attachment0`/`Class.Constraint.Attachment1|Attachment1` properties attaches to the same parts as the `Class.Motor6D` `Class.Motor6D.Part0|Part0`/`Class.Motor6D.Part1|Part1`. +- The relative positions of `Class.Constraint.Attachment0|Attachment0`/`Class.Constraint.Attachment1|Attachment1` must equal the corresponding positions of the `Class.Motor6D` `Class.Motor6D.C0|C0`/`Class.Motor6D.C1|C1` CFrames. +- The constraint and the IKControl share the same parent `Class.Model`. + +The following instructions describe the process of adding a `Class.HingeConstraint` to restrict the rotation of a character's elbow and adding a `Class.BallSocketConstraint` to the wrist to limit the rotation angle. + +#### Elbow + +Roblox R15 characters already include attachments in their joints that you can use to apply the elbow constraint. For the elbow, both the LeftUpperArm and the LeftLowerArm include a `LeftElbowRigAttachment`. Along with adding a constraint, you also need to add additional child attachments to each part's `LeftElbowRigAttachment` to specify which axis the elbow can rotate about. + +To add the `Class.HingeConstraint` and child attachments: + +1. In the **Explorer**, locate your model's **LeftLowerArm** and click the **⊕ button**. +2. Add a **HingeConstraint** with the name `LeftElbowConstraint`. +3. In the **Explorer**, navigate to the **LeftUpperArm.LeftElbowRigAttachment** and add an attachment: + + 1. Click the **⊕ button** to add an **Attachment** with the name `LeftElbowConstraintAttachment0`. + 2. In the viewport, select the attachment and use the **Rotate tool** to rotate the attachment so the yellow **PrimaryAxis** is the axis of your elbow's expected rotation. + + + + 3. Set the **LeftElbowConstraint.Attachment0** property to this new attachment. + +4. In the **Explorer**, navigate to your model's **LeftLowerArm.LeftElbowRigAttachment** add an attachment: + + 1. Click the **⊕ button** and add an **Attachment** with the name `LeftElbowConstraintAttachment1`. + 2. Set the **LeftUpperArm.LeftElbowConstraint.Attachment1** property to this new attachment. + 3. Copy the **LeftElbowConstraintAttachment0.CFrameOrientation** property and paste it as the **LeftElbowConstraint.Attachment1.CFrameOrientation** value. + + + + +If you see a red arrow on the constraint's visualization, that means your attachment orientations are violating the hinge constraint. Go back and make sure the **LeftElbowConstraintAttachment1** has the same orientation as the **LeftElbowConstraintAttachment0**. + + +Test your IKControl to verify the elbow only rotates about its hinge axis: + + +#### Wrists + +Even with the elbow constraint, the IKControl can still produce unrealistic poses with the wrists. + +
    + +
    The wrist bends unnaturally at certain orientations
    +
    + +You can improve this by adding a `Class.BallSocketConstraint` to limit the rotation of the wrist. While this is similar to the process for adding a `Class.HingeConstraint` to the elbow, you can use the `Class.BallSocketConstraint.LimitsEnabled|LimitsEnabled` property on this constraint to further control the range of motion of the wrist. + +To add a `Class.BallSocketConstraint` for the wrist: + +1. In the **Explorer**, locate your model's **LeftHand** and click the **⊕ button**. + 1. Add a **BallSocketConstraint** with the name `LeftWristConstraint`. +2. Locate your model's **LeftLowerArm.LeftWristRigAttachment** and add an attachment: + 1. Click the **⊕ button** and add an **Attachment** with the name `LeftWristConstraintAttachment0`. + 2. In the viewport, select the attachment and use the **Rotate tool** to rotate the attachment so the yellow PrimaryAxis points toward the model's fingertips. + + 3. Set the **LeftWristConstraint.Attachment0** property to the new `LeftWristConstraintAttachment0`. +3. Locate your model's **LeftHand.LeftWristRigAttachment** and add an attachment: + 1. Click the **⊕ button** and add an **Attachment** with the name `LeftWristConstraintAttachment1`. + 2. Copy the **LeftWristConstraintAttachment0.CFrameOrientation** property and paste it as the **LeftWristConstraintAttachment1.CFrameOrientation** property. + 3. Set the **LeftWristConstraint.Attachment1** property to this new **LeftWristConstraintAttachment1**. +4. In the **Explorer**, select the **LeftWristConstraint**. +5. In the **Properties** window, set the following: + 1. Enable **LimitsEnabled**. + 2. Set **UpperAngle** to `80`. This controls how much the constraint's axis can rotate, and 80 degrees is approximately how much the wrist should be able to bend. +6. Depending on your character you may want to tweak the direction the cone is pointing in. You can do this by using the **Rotate tool** to rotate the constraint's **Attachment0**. + +When selecting the **LeftWristConstraint**, a green cone appears visualizing the wrist's range of motion. + + + +With the constraint set up, test the IKControl with the hand pointing down in front of the character and the wrist should rotate and bend more realistically. + + diff --git a/.cursor/rules/roblox/animation/using.md b/.cursor/rules/roblox/animation/using.md new file mode 100644 index 00000000..a07e9f6f --- /dev/null +++ b/.cursor/rules/roblox/animation/using.md @@ -0,0 +1,538 @@ +--- +title: Use animations +description: Explains the process of playing animations through scripts, and replacing default animations. +--- + +Once you have [created an animation](../animation/editor.md), you need to use scripts to include them in your experience. You can either [play animations manually](#play-animations-from-scripts) from scripts or [replace default animations](#replace-default-animations) for player characters. + +## Play animations from scripts + +In some cases, you'll need to play an animation directly from inside a script, such as when a user presses a certain key or picks up a special item. + +### Humanoids + +To play an animation on a rig containing a `Class.Humanoid` +object, such as typical playable characters, follow this basic pattern: + +1. Ensure that the local player's `Class.Humanoid` contains an `Class.Animator` object. +2. Create a new `Class.Animation` instance with the proper `Class.Animation.AnimationId|AnimationId`. +3. Load the animation via `Class.Animator:LoadAnimation()` to create an `Class.AnimationTrack`. +4. Play the track with `Class.AnimationTrack:Play()`. + +For example, the following `Class.LocalScript`, when placed in +`Class.StarterPlayerScripts`, loads a "kick" animation onto the player's character and plays it. The script also utilizes the `Class.AnimationTrack:GetMarkerReachedSignal()|GetMarkerReachedSignal()` method to detect when a specific [animation event](../animation/events.md) occurs. + +```lua title="LocalScript - Play Custom Animation on Player Character" +local Players = game:GetService("Players") + +local player = Players.LocalPlayer +local character = player.Character or player.CharacterAdded:Wait() + +-- Ensure that the character's humanoid contains an "Animator" object +local humanoid = character:WaitForChild("Humanoid") +local animator = humanoid:WaitForChild("Animator") + +-- Create a new "Animation" instance and assign an animation asset ID +local kickAnimation = Instance.new("Animation") +kickAnimation.AnimationId = "rbxassetid://2515090838" + +-- Load the animation onto the animator +local kickAnimationTrack = animator:LoadAnimation(kickAnimation) + +-- If a named event was defined for the animation, connect it to "GetMarkerReachedSignal()" +kickAnimationTrack:GetMarkerReachedSignal("KickEnd"):Connect(function(paramString) + print(paramString) +end) + +task.wait(4) + +-- Play the animation track +kickAnimationTrack:Play() +``` + +### Non-humanoids + +To play animations on rigs that do **not** contain a `Class.Humanoid`, you must create an `Class.AnimationController` with a child `Class.Animator`. For example, the following `Class.Script` (assumed to be a direct child of the rig) loads a "kick" animation and plays it. + +```lua title="Script - Play Custom Animation on Character Rig" +local rig = script.Parent + +-- Create a new "Animation" instance and assign an animation asset ID +local kickAnimation = Instance.new("Animation") +kickAnimation.AnimationId = "rbxassetid://2515090838" + +-- Create a new "AnimationController" and "Animator" +local animationController = Instance.new("AnimationController") +animationController.Parent = rig + +local animator = Instance.new("Animator") +animator.Parent = animationController + +-- Load the animation onto the animator +local kickAnimationTrack = animator:LoadAnimation(kickAnimation) + +-- If a named event was defined for the animation, connect it to "GetMarkerReachedSignal()" +kickAnimationTrack:GetMarkerReachedSignal("KickEnd"):Connect(function(paramString) + print(paramString) +end) + +task.wait(4) + +-- Play the animation track +kickAnimationTrack:Play() +``` + +## Replace default animations + +By default, Roblox player characters include common animations like running, +climbing, swimming, and jumping. You can replace these [default animations](#default-character-animations) with animations from the [catalog](#catalog-animations) or with your own [custom](../animation/editor.md) animations. + +1. Obtain the **asset ID** of the new animation as follows: + + - For a custom animation built with the [Animation Editor](../animation/editor.md), follow the [export](../animation/editor.md#exporting-an-animation) instructions. + - Copy an appropriate ID from the [catalog animation reference](#catalog-animations) below. For example, to replace the default run animation with the Ninja Run variant, use `656118852`. + +2. In the [Explorer](../studio/explorer.md) window, add a new `Class.Script` to **ServerScriptService**. + + 1. Hover over **ServerScriptService** and click the ⊕ button. + 2. From the contextual menu, insert a **Script**. + +3. In the new script, paste the following code: + + ```lua title="Script - Replace Default Character Animations" + local Players = game:GetService("Players") + + local function onCharacterAdded(character) + -- Get animator on humanoid + local humanoid = character:WaitForChild("Humanoid") + local animator = humanoid:WaitForChild("Animator") + + -- Stop all animation tracks + for _, playingTrack in animator:GetPlayingAnimationTracks() do + playingTrack:Stop(0) + end + + local animateScript = character:WaitForChild("Animate") + --animateScript.run.RunAnim.AnimationId = "rbxassetid://" + --animateScript.walk.WalkAnim.AnimationId = "rbxassetid://" + --animateScript.jump.JumpAnim.AnimationId = "rbxassetid://" + --animateScript.idle.Animation1.AnimationId = "rbxassetid://" + --animateScript.idle.Animation2.AnimationId = "rbxassetid://" + --animateScript.fall.FallAnim.AnimationId = "rbxassetid://" + --animateScript.swim.Swim.AnimationId = "rbxassetid://" + --animateScript.swimidle.SwimIdle.AnimationId = "rbxassetid://" + --animateScript.climb.ClimbAnim.AnimationId = "rbxassetid://" + end + + local function onPlayerAdded(player) + player.CharacterAppearanceLoaded:Connect(onCharacterAdded) + end + + Players.PlayerAdded:Connect(onPlayerAdded) + ``` + +4. For each line that references a [default character animation](#default-character-animations), uncomment it and paste the replacement ID after `rbxassetid://`. For example, to change the default run animation to the Ninja Run variant: + + ```lua title="Script - Replace Default Character Animations" highlight="14" + local Players = game:GetService("Players") + + local function onCharacterAdded(character) + -- Get animator on humanoid + local humanoid = character:WaitForChild("Humanoid") + local animator = humanoid:WaitForChild("Animator") + + -- Stop all animation tracks + for _, playingTrack in animator:GetPlayingAnimationTracks() do + playingTrack:Stop(0) + end + + local animateScript = character:WaitForChild("Animate") + animateScript.run.RunAnim.AnimationId = "rbxassetid://656118852" + --animateScript.walk.WalkAnim.AnimationId = "rbxassetid://" + --animateScript.jump.JumpAnim.AnimationId = "rbxassetid://" + --animateScript.idle.Animation1.AnimationId = "rbxassetid://" + --animateScript.idle.Animation2.AnimationId = "rbxassetid://" + --animateScript.fall.FallAnim.AnimationId = "rbxassetid://" + --animateScript.swim.Swim.AnimationId = "rbxassetid://" + --animateScript.swimidle.SwimIdle.AnimationId = "rbxassetid://" + --animateScript.climb.ClimbAnim.AnimationId = "rbxassetid://" + end + + local function onPlayerAdded(player) + player.CharacterAppearanceLoaded:Connect(onCharacterAdded) + end + + Players.PlayerAdded:Connect(onPlayerAdded) + ``` + +## Set animation weights + +You can use multiple animations for the same action. For example, there +are two `idle` variations in the code sample for [replacing default animations](#replace-default-animations). + +When multiple animations exist for a character state, the **Animate** script +randomly chooses which one to play, but you can influence the outcome by +setting the animation's `Weight` value under the following formula: + +- **animation weight / total weight of all state animations** + +In the following example, `idle.Animation1` will play ⅓ of the time the character is idle, while `idle.Animation2` will play ⅔ of the time. + +```lua title="Script - Replace Default Character Animations" highlight="3,4" + animateScript.idle.Animation1.AnimationId = "rbxassetid://656117400" + animateScript.idle.Animation2.AnimationId = "rbxassetid://656118341" + animateScript.idle.Animation1.Weight.Value = 5 + animateScript.idle.Animation2.Weight.Value = 10 +``` + +## Animation references + +### Default character animations + +The following table contains all of the default character animations that you can [replace](#replace-default-animations) with [catalog](#catalog-animations) animations or your own [custom](../animation/editor.md) animations. Note that **Idle** has two variations which you can [weight](#set-animation-weights) to play more or less frequently. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Character actionAnimate script reference
    **Run**`animateScript.run.RunAnim.AnimationId`
    **Walk**`animateScript.walk.WalkAnim.AnimationId`
    **Jump**`animateScript.jump.JumpAnim.AnimationId`
    **Idle** + `animateScript.idle.Animation1.AnimationId`
    + `animateScript.idle.Animation2.AnimationId` +
    **Fall**`animateScript.fall.FallAnim.AnimationId`
    **Swim** + `animateScript.swim.Swim.AnimationId` +
    **Swim (Idle)** + `animateScript.swimidle.SwimIdle.AnimationId` +
    **Climb**`animateScript.climb.ClimbAnim.AnimationId`
    + +### Catalog animations + +When using avatar animation bundles to [replace default animations](#replace-default-animations), use the following references for the respective asset IDs. For example, if you want to apply the Ninja Jump animation, use `656117878`. Note that **Idle** has multiple variations. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + **Astronaut** + + + **Run**
    891636393
    + **Walk**
    891636393
    + **Jump**
    891627522
    + **Idle**
    891621366, 891633237, 1047759695
    + **Fall**
    891617961
    + **Swim**
    891639666
    + **Swim (Idle)**
    891663592
    + **Climb**
    891609353
    +
    +
    + **Bubbly** + + + **Run**
    910025107
    + **Walk**
    910034870
    + **Jump**
    910016857
    + **Idle**
    910004836, 910009958, 1018536639
    + **Fall**
    910001910
    + **Swim**
    910028158
    + **Swim (Idle)**
    910030921
    + **Climb**
    909997997
    +
    +
    + **Cartoony** + + + **Run**
    742638842
    + **Walk**
    742640026
    + **Jump**
    742637942
    + **Idle**
    742637544, 742638445, 885477856
    + **Fall**
    742637151
    + **Swim**
    742639220
    + **Swim (Idle)**
    742639812
    + **Climb**
    742636889
    +
    +
    + **Elder** + + + **Run**
    845386501
    + **Walk**
    845403856
    + **Jump**
    845398858
    + **Idle**
    845397899, 845400520, 901160519
    + **Fall**
    845396048
    + **Swim**
    845401742
    + **Swim (Idle)**
    845403127
    + **Climb**
    845392038
    +
    +
    + **Knight** + + + **Run**
    657564596
    + **Walk**
    657552124
    + **Jump**
    658409194
    + **Idle**
    657595757, 657568135, 885499184
    + **Fall**
    657600338
    + **Swim**
    657560551
    + **Swim (Idle)**
    657557095
    + **Climb**
    658360781
    +
    +
    + **Levitation** + + + **Run**
    616010382
    + **Walk**
    616013216
    + **Jump**
    616008936
    + **Idle**
    616006778, 616008087, 886862142
    + **Fall**
    616005863
    + **Swim**
    616011509
    + **Swim (Idle)**
    616012453
    + **Climb**
    616003713
    +
    +
    + **Mage** + + + **Run**
    707861613
    + **Walk**
    707897309
    + **Jump**
    707853694
    + **Idle**
    707742142, 707855907, 885508740
    + **Fall**
    707829716
    + **Swim**
    707876443
    + **Swim (Idle)**
    707894699
    + **Climb**
    707826056
    +
    +
    + **Ninja** + + + **Run**
    656118852
    + **Walk**
    656121766
    + **Jump**
    656117878
    + **Idle**
    656117400, 656118341, 886742569
    + **Fall**
    656115606
    + **Swim**
    656119721
    + **Swim (Idle)**
    656121397
    + **Climb**
    656114359
    +
    +
    + **Pirate** + + + **Run**
    750783738
    + **Walk**
    750785693
    + **Jump**
    750782230
    + **Idle**
    750781874, 750782770, 885515365
    + **Fall**
    750780242
    + **Swim**
    750784579
    + **Swim (Idle)**
    750785176
    + **Climb**
    750779899
    +
    +
    + **Robot** + + + **Run**
    616091570
    + **Walk**
    616095330
    + **Jump**
    616090535
    + **Idle**
    616088211, 616089559, 885531463
    + **Fall**
    616087089
    + **Swim**
    616092998
    + **Swim (Idle)**
    616094091
    + **Climb**
    616086039
    +
    +
    + **Rthro** + + + **Run**
    2510198475
    + **Walk**
    2510202577
    + **Jump**
    2510197830
    + **Idle**
    2510197257, 2510196951, 3711062489
    + **Fall**
    2510195892
    + **Swim**
    2510199791
    + **Swim (Idle)**
    2510201162
    + **Climb**
    2510192778
    +
    +
    + **Stylish** + + + **Run**
    616140816
    + **Walk**
    616146177
    + **Jump**
    616139451
    + **Idle**
    616136790, 616138447, 886888594
    + **Fall**
    616134815
    + **Swim**
    616143378
    + **Swim (Idle)**
    616144772
    + **Climb**
    616133594
    +
    +
    + **Superhero** + + + **Run**
    616117076
    + **Walk**
    616122287
    + **Jump**
    616115533
    + **Idle**
    616111295, 616113536, 885535855
    + **Fall**
    616108001
    + **Swim**
    616119360
    + **Swim (Idle)**
    616120861
    + **Climb**
    616104706
    +
    +
    + **Toy** + + + **Run**
    782842708
    + **Walk**
    782843345
    + **Jump**
    782847020
    + **Idle**
    782841498, 782845736, 980952228
    + **Fall**
    782846423
    + **Swim**
    782844582
    + **Swim (Idle)**
    782845186
    + **Climb**
    782843869
    +
    +
    + **Vampire** + + + **Run**
    1083462077
    + **Walk**
    1083473930
    + **Jump**
    1083455352
    + **Idle**
    1083445855, 1083450166, 1088037547
    + **Fall**
    1083443587
    + **Swim**
    1083464683
    + **Swim (Idle)**
    1083467779
    + **Climb**
    1083439238
    +
    +
    + **Werewolf** + + + **Run**
    1083216690
    + **Walk**
    1083178339
    + **Jump**
    1083218792
    + **Idle**
    1083195517, 1083214717, 1099492820
    + **Fall**
    1083189019
    + **Swim**
    1083222527
    + **Swim (Idle)**
    1083225406
    + **Climb**
    1083182000
    +
    +
    + **Zombie** + + + **Run**
    616163682
    + **Walk**
    616168032
    + **Jump**
    616161997
    + **Idle**
    616158929, 616160636, 885545458
    + **Fall**
    616157476
    + **Swim**
    616165109
    + **Swim (Idle)**
    616166655
    + **Climb**
    616156119
    +
    +
    diff --git a/.cursor/rules/roblox/art/accessories/accessory-fitting-tool.md b/.cursor/rules/roblox/art/accessories/accessory-fitting-tool.md new file mode 100644 index 00000000..ac158189 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/accessory-fitting-tool.md @@ -0,0 +1,277 @@ +--- +title: Accessory Fitting Tool +description: The Accessory Fitting Tool lets you adjust and test custom accessory models on different body types, animations, or custom assets. +labels: Article,Engine,Cloud API +--- + +The **Accessory Fitting Tool** (AFT) is a built-in Studio tool that allows you to test your custom models on multiple combinations of character bodies, animations, and accessories before generating the final `Class.Accessory` object. When testing your accessories, you can make minor fit and positional changes to ensure that you get the best result possible. + +The AFT automatically handles the conversion of the custom `Class.Model` or `Class.MeshPart` based on the user menu selections, allowing you to create **layerable clothing accessories** or **rigid accessories**. After generating your accessory, the AFT creates the correct `Class.Accessory` object hierarchy with any updated fit edits, sets the appropriate `AccessoryType` property, and generates any required body attachment points. + + +
    + +
    Test and edit the cages of your layered clothing assets.
    +
    +
    + +
    Test and edit the orientation and placement of your rigid assets.
    +
    +
    + + +If you are intending to sell your accessory on the Marketplace, make sure your accessory model design adheres to the [Marketplace Requirements](../../marketplace/marketplace-policy.md). + + +## Set up accessories + +The first stage of the fitting workflow allows you to configure the type of accessory to correctly populate the correct fitting tools and generate the appropriate accessory object. When selecting the type of accessory, the following options are available: + +- **Clothing**: Layerable accessories that use an inner and outer cage to stretch and wrap around a body and other clothing items. +- **Accessory**: Rigid accessories that attach to a specific attachment point of a character and remain static in that position and orientation. + +Before using the tool, ensure that you have the `Class.MeshPart` or `Class.Model` you intend to create into an accessory selectable in your project. As a reference, you can test the AFT using a reference [clothing](../../assets/accessories/reference-files/Additional-FBX-assets.zip) or [rigid accessory](../../assets/accessories/reference-files/Bow-rigid.rbxm) custom model. + +To setup your accessories: + +1. Ensure that your custom asset is selectable in your project. See [3D Importer](../../art/modeling/3d-importer.md) for instructions on importing a custom model into your experience. +2. In the toolbar's **Avatar** tab, click **Accessory** to open the AFT. +3. Select the **Part** field and click on the `Class.MeshPart` or `Class.Model` in the viewport that you intend to preview. The text field populates with the name of the object selected. + + + +4. Click **Next**. The Asset Type menu screen displays. +5. Select the correct Asset Type for your accessory. An additional dropdown displays for a specific `AssetType` selection. + + + +6. Use the dropdown to select the specific type of accessory to preview. This sets the correct `AssetType` and attachment points when creating the accessory. + + + +7. Select the expected scaling of an accessory. This only affects rigid accessories if the specific body part has a different `AvatarPartScaleType` `Class.StringValue` object. This does not affect clothing accessories. + + 1. **Classic**: Sets the scaling of the accessory to classic R15 proportions. + 2. **Proportions Slender**: Sets the `AvatarPartScaleType` value to `ProportionsSlender`. + 3. **Proportions Normal**: Sets the `AvatarPartScaleType` value to `ProportionsNormal`. + +8. Click **Next** to continue. A preview panel and workspace tools display. + + + +## Test accessories + +After you provide the initial accessory details, the tool displays a preview panel. With the preview panel, you can test how your accessory looks on different combinations of character bodies, clothing items, animations, or even custom assets in your experience. + + +At any point of the testing process, you can [initiate a playtest](../../studio/testing-modes.md#playtesting) to launch an instance of your experience where your avatar is replaced with the currently selected character body and accessories from the AFT. + + +If you notice any fitting issues with your accessory, you can use the [edit](#edit-accessory-fit) tools to make minor adjustments to your accessory. + +### With different bodies + +You can select different bodies to test the fit and wear of your accessories. The AFT supplies several default character models you can use to ensure your accessories fit as expected. + + +
    + +
    Bazooka Bones character preview
    +
    +
    + +
    Goblin character preview
    +
    +
    + +To test your accessory with a different body: + +1. In the tool's catalog, navigate to **Avatars** > **Default**. +2. Click one of the character model tiles. The preview loads with the selected character model. + 1. If two character tiles are selected, click a selected tile to deselect it. + 2. In the character preview, **click** and **drag** to rotate and **right-click** to pan to inspect your character. + +### With different clothing + +You can select different clothing accessories to test the fit and layering of your caged accessories. The AFT supplies several default character models you can use to ensure your accessories fit as expected. + + +
    + +
    Goblin character preview with reference clothing
    +
    +
    + +
    Magma Fiend character preview with reference clothing
    +
    +
    + +To test your accessory with a different accessory: + +1. In the tool's catalog, navigate to **Clothing** > **Default**. +2. Click one or more of the available catalog items. The character preview loads with the selected clothing accessory. + 1. In the catalog, click an active tile to deselect the asset. + 2. In the character preview, **drag** and **drop** the accessory boxes to change the layer order. + 3. In the character preview, **click** and **drag** to rotate and **right-click** to pan to inspect your character. + +### With animations + +You can select different animations to test the movement of your accessory asset. The AFT supplies several default animation assets you can use to ensure your accessories fit as expected when a model is performing various movements. + + +
    + +
    Walking animation reference
    +
    +
    + +
    Shy emote reference
    +
    +
    + +To test your accessory with different animations: + +1. In the tool's catalog, navigate to **Animations** > **Default**. +2. Click one of the animation asset tiles. + 1. In the catalog, press the play and pause icon to control the playback. + 2. In the character preview, **click** and **drag** to rotate and **right-click** to pan to inspect your character. + +### With custom assets + +You can add custom character models, clothing accessories, and animations that are part of your workspace to the AFT preview catalog. Use this functionality to verify that your accessory works with any other custom models or accessories they may interact with in your experience. + +To add custom assets: + +1. Click the ⊕ icon next to the catalog search. A prompt appears, allowing you to choose a supported object. + + + +2. Select any `Class.Accessory`, `Class.Model`, `Class.MeshPart`, `Class.Animation` or `Class.Folder` within the 3D viewport or **Explorer**. The asset displays in the corresponding **Custom** category. + + 1. If no selection is made, click the tool panel again to exit the prompt. + + + +## Edit accessory fit + +The AFT populates different fitting tools depending on the type of accessory being created. + +### Layered clothing + +When editing clothing items, the following tools populate in the viewport: + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    IconDescription
    Toggles the [Cage Editing](#cage-editing) interface in the viewport for making minor inner or outer cage changes to your clothing.
    Toggles [auto-skinning](../../art/accessories/automatic-skinning-transfer.md#enabling-automatic-skinning-transfer) between `EnabledPreserved` and `EnabledOverride`. Depending on the asset and skinning quality, auto-skinning may provide better results.

    EnabledPreserved uses the asset's original skinning data applied in a modeling software.
    `EnabledOverride` transfers skinning data from the avatar character instead of using the asset's original skinning data.
    Displays a button to **Bring Mannequin in View** which centers mannequin in front of the camera.
    Centers the camera on the mannequin.
    + +#### Cage editing + +When the Cage Editing interface is enabled, additional tools display in the viewport. The viewport also displays the vertices of the selected cage over the mannequin, allowing you to make positional edits to the cage and change how a clothing item can fit on a body. + + + + +You can use these Cage Editing tools for minor to moderate cage edits. If your asset requires major fit or sculpting changes, edit the cage meshes directly in a third-party modeling software, such as Blender or Maya, and import the updated model into Studio. + + +Use the following cage editing tools to help visualize and edit any cage vertices: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    IconDescription
    Toggles the selection for the inner and outer cage vertices. When selected, the vertices of that specific cage are available to edit.
    **Falloff Distance** sets the radius of influence when editing vertices of the cage mesh. When editing a cage vertex, nearby vertices follow the changes for efficient cage editing.

    A higher Falloff Distance applies influence to vertices further away from the origin.
    Displays additional buttons:
    • Bring Mannequin in View - centers camera on the mannequin.
    • Reset Inner/Outer Cage - resets any changes made to the selected cage.
    Use the slider to set the opacity of the mesh or the cage vertices. Setting the opacity allows you to better see and access certain vertices and angles of your clothing item.
    + +To make changes to the vertices of the currently selected cage: + +1. In the Studio toolbar, disable **Move** snapping. This enables you to make detailed changes to a vertex's position. +2. Select a vertex and use the **Move** tool to reposition. Changes to the cage apply immediately and display in the preview panel. + 1. Use the opacity sliders to better visualize the changes to your cage. + 2. Set the **Falloff Distance** depending on the number of vertices being adjusted at once. + + +### Rigid accessories + +When fitting rigid accessories, a bounding box appears around the mannequin indicating the possible placement of that specific type of accessory. You can **position**, **rotate**, and **scale** objects within this bounding box to ensure your accessory fits on different character models. + + +
    + +
    Adjust your rigid accessory fit within the bounding box.
    +
    +
    + +
    If the accessory is outside the appropriate space, the bounding box turns red.
    +
    +
    + +### Create accessory + +You can create the accessory at any time. The tool applies any fit changes and generates the appropriate Accessory instance in the workspace depending on the type of accessory selected and any configurations applied. + +When you are ready to generate your accessory, select **Generate MeshPart Accessory**. + + +
    + +
    Hierarchy generated for layered clothing.
    +
    +
    + +
    Hierarchy generated for rigid accessories.
    +
    +
    + +With an accessory successfully created, you can now try the following: + +- Equip the accessory on an avatar-ready character by drag and dropping the accessory on an existing model, or using [HumanoidDescription](../../characters/appearance.md#manually-modify-appearance). +- Save the accessory as an [avatar asset](../../projects/assets/index.md#for-avatars) for use in an experience later. +- If you meet certain account requirements, you can [upload your asset](../../marketplace/publish-to-marketplace.md) for moderation and start selling it on the Marketplace. diff --git a/.cursor/rules/roblox/art/accessories/automatic-skinning-transfer.md b/.cursor/rules/roblox/art/accessories/automatic-skinning-transfer.md new file mode 100644 index 00000000..f804ba97 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/automatic-skinning-transfer.md @@ -0,0 +1,183 @@ +--- +title: Automatic Skinning Transfer +description: Automatic Skinning Transfer can create deformation data for character accessories without manual skinning. +--- + +**Automatic Skinning Transfer** allows layered clothing and facial accessories to deform accurately along with the character model it's attached to without having to skin the accessory itself. Instead of the complex task of manually [rigging and skinning](../../art/modeling/rigging.md) models in 3D modeling software, you can use this feature to transfer or generate skinning data to the accessory. When using Automatic Skinning Transfer, the Roblox Engine creates and applies skinning at runtime. + +**No skinning of accessory geometry is required to use Automatic Skinning Transfer**. In fact, auto-skinned accessories work well with most characters they're attached to, even if those characters have a different number of joints, bones, or use a different kind of skinning, and the accessories move accurately with characters as they animate. + + + +Skinning is still an important concept for character creation, and if you're creating custom characters, you may want to apply skinning data to the model to create a character with more natural looking poses and animations. For information on how to skin a mesh, see [Skin a humanoid model](../../art/modeling/skin-a-humanoid-model.md). + + +Because the skinning transfer process uses a character's outer cage to help calculate skinning data to apply onto the accessory, it's important that all [layered clothing requirements](../../art/accessories/project-files.md) are still met when creating accessories. + + +## Enable Automatic Skinning Transfer + +To enable the Automatic skinning transfer process, you must enable the `Class.WrapLayer.AutoSkin|AutoSkin` property within the `Class.WrapLayer` instance of the layered `Class.Accessory` you want to automatically skin, then set it to one of the following values: + +- `Disabled`: Disables the Automatic Skinning Transfer process. This is the default value. +- `EnabledOverride`: Enables the Automatic Skinning Transfer process, and allows it to override any existing skinning information found on the accessory at runtime. +- `EnabledPreserve`: Enables the Automatic Skinning Transfer process, but doesn't allow it to override any existing skinning information found on the accessory at runtime. If there isn't any skinning to maintain, the Automatic Skinning Transfer process automatically creates new skinning data. + +When there isn't any skinning data on the accessory, or if you choose to override any existing skinning data associated with the accessory, the Roblox Engine calculates skinning data from the character's geometry and cages, then the new skinning data and rig associated with the accessory drives the accessory's deformations and motions in sync with the source geometry itself. + +## Best practices + +While Automatic Skinning Transfer often works better than manual skinning, there are some best practices to reduce unexpected behavior with the accessory skinning. Like all modeling processes, constantly test your layered clothing and facial accessories on different avatar types to achieve the results you want. + +### Special skinning transfer joints + +Automatic skinning transfer may not work well for certain detailed accessory types, like eyelashes or eyebrows. To get a more controlled skinning transfer result, you have the option to skin accessory geometry to one of two specially named joints: `RBX_Leader` and `RBX_Follower`. + + +It's best to create these joints/bones directly beneath the Root joint in your hierarchy for simplicity and clarity. These joints/bones won't be detected as a part of your character model's R15 rig on import. + + +Any vertices skinned to `RBX_Leader` will undergo the same transfer process that exists today. However, any vertices skinned to `RBX_Follower` will actually transfer based on their nearest leader vertex. This allows for better results in situations like an eyelash where the tip of an eyelash strand would normally transfer to somewhere on the brow area, rather than follow the base of the eyelash strand when moving. + +For eyelashes, good candidates for RBX_Leader are the ones that are intended to sit right on the eyelid of the character. The remaining vertices can be skinned to RBX_Follower. + + +
    + Screenshot of vertices assigned as leader. +
    Vertices of an eyelash assigned to a RBX_Leader bone vertex group.
    +
    +
    + Screenshot of vertices assigned as follower. +
    Vertices of an eyelash assigned to a RBX_Follower bone vertex group.
    +
    +
    + +For eyebrows, good candidates for RBX_Leader are vertices along the edges that span the browline. + + +
    + Screenshot of vertices assigned as leader. +
    Vertices of an eyebrow assigned to a RBX_Leader bone vertex group.
    +
    +
    + Screenshot of vertices assigned as follower. +
    Vertices of an eyebrow assigned to a RBX_Follower bone vertex group.
    +
    +
    + +In Blender, user the **Object Data Properties** > **Vertex Groups** to manage and view your vertex group assignments. + + Screenshot of properties panel with vertex group assignments + + +In Blender, vertex groups automatically created after you make a bone object. This allows you to quickly set vertices to a specific bone vertex group. + + + +
    + +
    Eyelashes without transfer joints. Notice how the upper eyelashes near the bridge of the nose doesn't follow the eyelids as expected.
    +
    +
    + +
    Eyelashes with transfer joints. All eyelashes follow the leading vertices closest to the eyes.
    +
    +
    + +No additional work is needed in Studio to support this method. If your accessory is set to `Class.WrapLayer.AutoSkin.EnabledOverride` and these joints exist with vertices assigned to them, then this skinning transfer variation will be in effect. + +If you wish to upload an accessory using these joints as a UGC item, there are a few rules to be aware of: + +- Vertices cannot be partially weighted to these joints. If you want to use them you must skin the vertex to the joint with a weight of `1.0`. +- If these joints are present in the mesh, then the accessory must be set to `WrapLayerAutoSkin.EnabledOverride`. +- Body part meshes containing these joints will be rejected by validation. + +### Modify character cages + + +You can't upload assets with a partial cage to the Marketplace. You may use partial cages for assets intended for in-experience use, but the Marketplace validation process will reject assets with partial cages. + + +You can modify character cages for the accessories to deform accurately to the expected character surfaces using the Automatic Skinning Transfer. For example, auto-skinning may cause layered clothing to deform based on an incorrect body part because the transfer process is based on the closest distance between the accessory and its inner cage. In the following instance, a beard accessory was modeled using a blocky-type full-body cage. This causes the beard to deform incorrectly because parts of the beard are closer to the character cage's upper chest instead of the chin: + + + + + +To prevent a layered accessory from using skinning data from an undesired area of the character's geometry, you can model your asset on a different character mannequin cage. For example, a blocky-type character will struggle with a beard skinning to the torso, but a character with an actual neck, like a humanoid, won't have this problem. + +Alternatively, you can remove parts of the outer cage that the layered accessory shouldn't be skinned to. **This is not a valid workflow for assets intended for the Marketplace**, but you can use this for in-experience assets or assets for other use. For example, the following image shows how the outer cage was modified so that it only includes the head geometry. With this improvement to the outer cage, when you automatically transfer skinning data, the beard and partial cage now correctly transfer skinning only from the head geometry. + + + + + +It's important to note that you could also solve the previous example's deformation issue by using a different cage altogether. For example, if you use a more humanoid cage with more space between the chest and the chin, the beard is closest to the head instead of being near the chest or neck area, so the Automatic Skinning Transfer wouldn't transfer skinning data from those regions. + + + +By modifying different regions of the character's cage, you can ensure that your layered clothing and facial accessories deform in relation to the correct region of the body or head, such as modifying the character model's arms so dresses don't incorrectly attach to them while a character is running, or modifying pants that incorrectly map to feet. The following video demonstrates how a jacket's collar incorrectly moves with the head, as the layered clothing is deforming in the collar region, which is closest to the head portion of the cage. To resolve this, you can remove the head portion of the cage so that the jacket won't incorrectly deform in relation to the head at all. Instead, it will deform in relation to the shoulder region, which is much more appropriate for this article of clothing. + + + + + + +During the asset creation process, it's important to verify what skinning solution works best for your design by testing your individual assets on multiple models and animations. You can always skin your assets manually and choose to use the Automatic Skinning Transfer later. + + +### Different accessory categories + +Automatic skinning transfer may not work well for certain accessory categories, such as hat, and glasses-type accessories. For example, hat or glasses accessories might introduce deformation in areas that should typically be rigid. In general, those accessories should remain rigid, and you shouldn't associate any skinning data with them. + +For a summary of suggested `Class.WrapLayer.AutoSkin` parameters for different accessory categories, see the following table: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Accessory CategorySuggested Parameter
    Beard`EnabledOverride`
    Eyebrow`EnabledOverride`
    Eyelash`EnabledOverride`
    Hair`Disabled`
    Hat`Disabled`
    Glasses`Disabled`
    Shirt`EnabledOverride` or `EnabledPreserve`
    Pants`EnabledOverride` or `EnabledPreserve`
    Shoes`EnabledOverride` or `EnabledPreserve`
    diff --git a/.cursor/rules/roblox/art/accessories/body-scale.md b/.cursor/rules/roblox/art/accessories/body-scale.md new file mode 100644 index 00000000..e749b708 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/body-scale.md @@ -0,0 +1,62 @@ +--- +title: Body scale and proportions +description: Avatars come in 3 different standard sizes, Classic, Rthro, Rthro Slender. +--- + +Roblox supports three common avatar sizes, known as **Classic**, **Rthro**, and **Rthro Slender**. This standard sizing helps keep avatar characters consistent, allowing developers to create experiences and environments that can fit commonly sized character models. + +When modeling rigid accessories, like a helmet that contours around a character's head, it's important to use a mannequin to help ensure your proportions fit. The asset provided in this tutorial example was originally modeled using **Rthro** proportions. Layered clothing, such as clothing, don't require body scale specification, since layered assets automatically stretch and deform over any body scale. + +If you are modeling your asset, visit the [references resources](../../avatar/resources.md#references) to download any of the following mesh mannequin: + + +
    + +
    +Classic blocky body scale.

    Roughly 4.75 studs tall. +
    +
    +
    + +
    +Normal body scale.

    Roughly 5.75-6.5 studs tall, with wider shoulders and narrower hips. +
    +
    +
    + +
    +Slender body scale.

    Roughly 5.25-6.25 studs tall, with narrower shoulders and wider hips. +
    +
    +
    + +See the [accessory apecifications](../../art/accessories/specifications.md#body-scale) and the [body specifications](../../art/characters/specifications.md#body-scale) for specific range values and other geometry requirements. + +## AvatarPartScaleType + +Roblox represents body scale in the engine by an `AvatarPartScaleType` `Class.StringValue` object within each avatar character part and associated accessory. In most cases, asset creators do not need to directly access or modify this value object since tools, such as the [Accessory Fitting Tool](../accessories/accessory-fitting-tool.md), automatically generate the appropriate value object on accessory creation. + +In cases where you may need to identify the current body scale of a body part or accessory, the following table defines the `AvatarPartScaleType` value for each type of body size. When importing your model, use the 3D Importer's [Rig Scale](../modeling/3d-importer.md#rig-general) to automatically apply a scale to your icustom asset. + + + + + + + + + + + + + + + + + + + + + + +
    Body ScaleAvatarPartScaleType value
    Classic`Classic`
    Normal`ProportionsNormal`
    Slender`ProportionsSlender`
    diff --git a/.cursor/rules/roblox/art/accessories/caging-best-practices.md b/.cursor/rules/roblox/art/accessories/caging-best-practices.md new file mode 100644 index 00000000..fef5dda8 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/caging-best-practices.md @@ -0,0 +1,276 @@ +--- +title: Caging best practices +description: In-depth description and images of various caging best practices for layered clothing. +--- + + +

    + +Caging is a complex process required to define the inner and outer surface of a layered clothing item. Properly caged assets allow your clothing items to stretch and layer in combination with each other. Cages that are improperly configured can lead to cosmetic issues with the look and feel of your clothing item. + + +
    + +
    A properly configured cage typically includes a tight layering of the inner cage, clothing mesh, and the outer cage.
    +
    + +
    + +
    The t-shirt stretches and fits naturally over a base body.
    +
    + +
    + +
    Other layered objects, such as a jacket, should stretch and fit naturally over a target body and any other caged assets.
    +
    + +
    + +In extreme cases, improper cages may interfere with gameplay or social elements on Roblox. If your asset includes improper cages, Roblox may prevent you from uploading them to the Marketplace and may remove existing assets with improper cages from the catalog. + + +Roblox is enforcing a stricter set of validation rules to improve the overall quality of layered clothing accessories in the Marketplace. + + +The following [best practices](#best-practices) and [common issues](#common-issues) is useful for 3D clothing creators of all levels and can elevate the quality of your clothing creations and save time with troubleshooting. + +## Best practices + +Always start any caging work with one of Roblox's [provided caging templates](../../assets/modeling/meshes/reference-files/Clothing_Cage_Templates.zip). These templates include an inner cage and outer cage with properly set UVs. + + +You should not edit the cage UVs since this will introduce visual artifacts. + + +When caging your clothing items, use these important universal guidelines: + +- Any clothing mesh positioned between the inner cage and outer cage will be deformed by the layering system. This is the typical configuration for nearly all layered clothing assets. + +
    + +
    The t-shirt mesh fits snugly between the inner and outer cage.
    +
    + +
    + +
    The correctly configured t-shirt naturally stretches over a target body.
    +
    + +
    + +
    Other layered assets should stretch and fit naturally over a target body and any equipped caged assets.
    +
    +
    + +- You must follow the [naming conventions](../../art/accessories/clothing-specifications.md#cage-meshes) for the clothing geometry and the cage. +- Many caging issues start from incorrect outer cage setup. See [working with outer cages](#working-with-outer-cages) for specific details. +- Do not modify areas of your cage that are unrelated to the clothing item you are caging. For example, do not modify the inner or outer cages of the lower leg areas when caging a t-shirt. +- Review any specific best practices for [form-fitting clothes](#caging-form-fitting-clothing), [bulky clothes](#caging-bulky-clothing-items), and [clothing with protrusions](#caging-protrusions). +- If troubleshooting any issues, review [common issues](#common-issues) to help identify problematic clothing items or specific validation errors. + +### Working with outer cages + +As long as the clothing mesh properly fits **over the inner cage** and **under the outer cage**, you can edit the outer cage in various ways depending on the final visual effect you intend to achieve. + +When working with the outer cage, use the following guidelines when possible: + +- Move vertices outwards in the normal's direction. + +- Keep the outer cage as close to the clothing as possible. +- Work symmetrically as much as possible to save time. +- Do not alter the UVs in any way. +- Do not stack your vertices. +
    + +
    Two vertices stacked directly over each other. This will introduce visual artifacts when layering other layered accessories on top.
    +
    + +- Keep the vertex, edge, and face count exactly the same as when you started. +- Keep your cage's edge spacing as evenly as possible. + +
    + +
    Outer cage with even spacing whenever possible on the faces.
    +
    +
    + +
    Outer cage with uneven spacing throughout the torso area. Uneven cages can create visual artifacts and uneven deformations.
    +
    +
    + +- Keep your cage's break lines between body parts lined up to the joint's position as possible. For example, try to align the elbow to where the LowerArm joint is located. + +
    + +
    Proportional changes can help improve animation and posing quality.
    +
    + +### Caging form-fitting clothing + +Form-fitting clothing, like t-shirts, yoga pants, shorts, sweaters and slim jackets, are the most common type of layered clothing. + +In this case, the outer cage needs to completely envelop the clothing accessory with minimal gaps between inner cage, clothing, and outer cage. + +- Move outer cage vertices outwards to completely cover the clothing item, while maintaining the silhouette of the clothing as much as possible. +- Do not move outer cage vertices that don't contribute to covering the clothing item. For example, don't move outer cage vertices in the lower leg when the clothing item is a t-shirt. +- The entire clothing item should be located in-between the outer and inner cages. + +### Caging bulky clothing items + +Bulky clothing items, like puffy jackets, sweat pants, and hoodies, require additional displacement of the outer cage vertices will be much larger to envelop the bulky asset. The outer cage should still completely wrap the external surface of a bulky item. + +- Pay special attention to the direction neighboring outer cage vertices are moved. +- Move along vertex normal directions as much as possible. +- Move vertices nearby each other more or less along the same directions (smooth relative displacements). +- Avoid moving vertices that are not covered by the clothing item, such as moving vertices in the arm region if you are making pants. + +### Caging protrusions + +Some clothing items may have assets that may protrude or extend past the rest of the clothing. Examples include clothing with puffy hoods, shoulder pads, and spikes. + + +
    + +
    Like all clothing, clothing with protrusions should fit over inner cages.
    +
    + +
    + +
    Setting the outer cage below the puffy hood allows the hood to be visible even when equipping other layered assets.
    +
    + +
    + +
    Setting the outer cage above the puffy hood causes additional layered assets to stretch and cover the protrusion which is often undesired.
    +
    +
    + +To ensure that the protruded region stays visible independent of the number of layers: + +- Leave the protruded region outside the outer cage. Alternatively, edit the outer cage to pass under the regions that are meant to be visible and undeformed. +- Avoid moving vertices that are not covered by the clothing item + +## Common issues + +Improper caging can cause various rendering and deformation issues. The following common examples can help diagnose and troubleshoot any caging issues you may encounter. + +### Uneven caging + +Unexpected outer cage shapes causes issues when other layered assets are equipped. While the clothing may fit correctly on a target body, any additional layers will fail to stretch and deform appropriately. + + + +
    + +
    The outer cage of the black shirt is set up with uneven vertices producing an undulated caging surface.
    +
    +
    + +
    Any layered clothing accessory fit on top will have visual artifacts even if the clothing asset itself looks fine.
    +
    +
    + +### Identical inner and outer cage + +If the inner cage and outer cage are exactly the same, the layered clothing system cannot properly determine the accessory and may not deform or deform unexpectedly. + + +
    + +
    An example of an identical inner and outer cages.
    +
    +
    + +
    The tshirt deforms in an unexpected manner and fails to render in its original shape or placement.
    +
    +
    + +### Clothing inside inner cage + +Any part of the clothing mesh positioned **inside** the **inner cage** will introduce visual artifacts when the clothing is layered on top of other clothing. You should always avoid this type of configuration. + + + +
    + +
    The clothing mesh intersects and is positioned within the inner cage at the shoulders and abdomen areas.
    +
    +
    + +
    When equipped, the t-shirt does not fit properly, exposing the problematic areas in the shoulders and abdomen.
    +
    +
    + +### Clothing partially outside outer cage + +Any part of the clothing mesh positioned **outside** the **outer cage** will not be deformed by the layered system. This configuration can sometimes be intentional for effect, such as when [caging clothing assets that include protrusions](#caging-protrusions). + + +
    + +
    The outer cage of the tshirt is positioned within the clothing mesh near the abdomen.
    +
    +
    + +
    When equipped, layered assets fail to fit properly at the affected areas.
    +
    +
    + +### Oversized outer cage + +Ensure that the gap between the layered accessory and the outer cage is not too large. This can cause severe deformation issues when combined with other layered assets. + + + +### Collapsed cage vertices + +When cage vertices are collapsed into one vertex or a small region, any additional layer placed on top of your clothing item will have weird artifacts near the collapsed region. + +
    + +
    Most 3D applications can indicate if vertices are directly overlapping
    +
    + + +This setup will be rejected during validation. + + +### Cages with missing limbs + + + +The cage is meant to match the shape of the template body used to model your clothing item. Cages without heads or missing limbs won't work properly with the layered clothing system. + + +This setup will be rejected during validation. + + +### Outer cage inside the inner cage + +Setting the outer cage inside the inner cage creates a clothing item that can't properly layer with other assets. + + + + +This setup will be rejected during validation. + + +### Mesh outside of outer cage + +Layered assets placed outside their outer cages do not deform. If the item is completely outside then it will behave similar to a rigid accessory. + + +
    + +
    Assets outside of the cage meshes are not supported.
    +
    +
    + +
    Even with a correct hierarchy, assets outside the cages will not deform.
    +
    + +
    + + +This setup will be rejected during validation. + diff --git a/.cursor/rules/roblox/art/accessories/clothing-export-settings.md b/.cursor/rules/roblox/art/accessories/clothing-export-settings.md new file mode 100644 index 00000000..3cc65f65 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/clothing-export-settings.md @@ -0,0 +1,91 @@ +--- +title: Layered clothing export settings +description: Use the appropriate export settings in Maya and Blender to generate Studio-ready .fbx files. +--- + +Export your mesh or model as a `.fbx` or `.gltf` to take advantage of all of Studio's 3D import features. When rigging or skinning a layerable model, these file types contains all the mesh and texture data, including the rig and influence data, you need to later [import](../../art/modeling/3d-importer.md) into Studio. + + +If creating other types of 3D models: +
      +
    • For generic meshes, see [general mesh specifications](../modeling/specifications.md) and [general export settings](../modeling/export-requirements.md).

    • +
    • For rigid accessories, see [accessory specifications](../accessories/specifications.md) and [accessory export settings](../accessories/export-settings.md).

    • +
    • For avatar characters, see [avatar specifications](../characters/specifications.md) and [avatar export settings](../characters/export-settings.md).
    • +
    +
    + +## Before exporting + +Before exporting, ensure that you are only exporting the Roblox supported objects related to your model. If you have any modifiers to your mesh or project objects, make sure to apply or delete them before export. + +You can export layered clothing models with the following object structure: + +Blender clothing data model example + +- Armature parent + - Bones / joints + - Primary mesh object +- Cage parent object + + - Inner cage mesh object + - Outer cage mesh object + +You can also export shoes together. Even though left and right shoes are separate accessories, you can either export the left and right shoe individually, or export both shoes at the same time using the following structure: + +Shoe clothing data model example + +- Armature parent + - Bones / joints + - Left shoe mesh object + - Right shoe mesh object +- Cage parent object + - Left shoe inner cage + - Left shoe outer cage + - Right shoe inner cage + - Right shoe outer cage + + +Each shoe must include their own inner and outer cage. + + +## Blender + +Blender allows you to export in `.fbx` or `.gltf` as well as other formats. If you are using `.fbx` export, familiarize yourself with [Blender's FBX scaling](../blender.md#adjust-scale-fbx) to ensure that you successfully import the model into Studio at the correct scale. + +### Export settings + +To export the `.fbx` file in Blender: + +1. In the topbar, click **File**. A pop-up menu displays. +2. Select **Export**, then **FBX (.fbx)**. The **Blender File View** window displays. +3. On the right-hand side, change the **Path Mode** property to **Copy**, then toggle the **Embed Textures** button. + + + +4. If your project doesn't already have `.01` scene unit scaling, set the **Transform** > **Apply Scalings** to `FBX Unit Scale`. For more details, see [Blender FBX scaling](../blender.md#adjust-scale-fbx). + + + +5. Under the **Armature** section, disable **Add Leaf Bones**. + + + +6. Click the **Export FBX** button. +7. After exporting, use Studio's [3D Importer](../../art/modeling/3d-importer.md) to import your model and the [Accessory Fitting Tool](../../art/accessories/accessory-fitting-tool.md) to convert the model into an accessory. + +## Maya export settings + +To export a mesh in Maya as a `.fbx` file: + +1. In the topbar, click **File**. A pop-up menu displays. +2. Select **Export All**. The **Export All** window displays. +3. Near the bottom of the window, click the **Files of type** dropdown, then select **FBX export**. +4. On the right-hand side of the window, navigate to the **Options...** section. +5. In the **Geometry** section, enable **Smooth Mesh** and **Referenced Asset Content**. +6. If you need to import textures as a `.png`, in the **Embed Media** section, enable **Embed Media**. +7. In the **Advanced Options** section, + - Navigate to **Units**, then enable **Automatic**. + - Navigate to **Axis Conversion**, then set the **Up Axis** property to **Y**. +8. Click the **Export All** button. + +9. After exporting, use Studio's [3D Importer](../../art/modeling/3d-importer.md) to import your model and the [Accessory Fitting Tool](../../art/accessories/accessory-fitting-tool.md) to convert the model into an accessory. diff --git a/.cursor/rules/roblox/art/accessories/clothing-specifications.md b/.cursor/rules/roblox/art/accessories/clothing-specifications.md new file mode 100644 index 00000000..074cfcbd --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/clothing-specifications.md @@ -0,0 +1,214 @@ +--- +title: Clothing specifications +description: Layered clothing specifications lists the specific technical requirements for the visible mesh, cages, and proper rigging and skinning data. +--- + +When creating clothing for Roblox, it's important to meet specific technical requirements to ensure compatibility and optimize for performance and quality. Many of these requirements must be applied when designing and modeling your asset in a third-party modeling application. + +Although [rigid accessories](../../art/accessories/specifications.md) and layerable accessories share many technical requirements, layerable clothing accessories must include additional components to ensure the accessories deform and stretch appropriately on different body scales. + +If you are intending to publish and sell these assets on the Marketplace, there are additional [Marketplace policy](../../marketplace/marketplace-policy.md) standards that you must follow for any accessory or clothing item. + +When ready to export, see [export requirements](../../art/accessories/clothing-export-settings.md) for mesh export settings for Blender and Maya. + + +If creating other types of 3D models: +
      +
    • For generic meshes, see [general mesh specifications](../modeling/specifications.md) and [general export settings](../modeling/export-requirements.md).

    • +
    • For rigid accessories, see [accessory specifications](../accessories/specifications.md) and [accessory export settings](../accessories/export-settings.md).

    • +
    • For avatar characters, see [avatar specifications](../characters/specifications.md) and [avatar export settings](../characters/export-settings.md).
    • +
    +
    + +## Geometry and Budgets + +- **Single Mesh** - Accessories must be a single mesh. +- **Budgets** - Accessories can't exceed **4k** triangles. +- **Watertight** - All geometry must be watertight without exposed holes or backfaces. +- Use **quads** whenever possible. Avoid faces with 5 or more sides. +- **Mesh Size** - Depending on the type of accessory asset, meshes must follow a standard size (in studs, centered on attachment point) depending on the [body scale](#size-requirements) it is designed for. + +### Size Requirements + +Depending on the type of layerable asset, the size requirements can't exceed the following maximum width, height, and depth (in studs). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Asset TypeWidth (X)Height (Y)Depth (Z)
    T-Shirt, Shirt, Sweater, Jacket, Pants, Shorts, Dress & Skirt888
    Hair35*
    (Not centered: 2 up, 3 down)
    3.5*
    (Not centered: 1.5 front, 2 behind)
    Eyebrow and Eyelashes1.50.50.5
    + +### Attachment Points + +`Class.Attachment` objects indicate where an accessory model attaches to a point on a character body. Whether you are creating rigid or [layered](./layered-clothing.md) accessories, Studio's [Accessory Fitting Tool](../../art/accessories/accessory-fitting-tool.md) (AFT) automatically adds and configures the appropriate `Class.Attachment` with the following specifications: + +- **One attachment** - Each accessory, including layered clothing, require at least one attachment point to its associated body part. +- **Naming Convention** - The `Class.Attachment` name must follow a specific naming convention depending on the `Class.Accessory.AccessoryType`. The AFT generates an appropriate `Class.Attachment` name automatically. + +If setting attachment names manually in Studio, use the following `Class.Attachment` name for each accessory type: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Accessory TypeAttachment Name
    Hat`HatAttachment`
    Hair`HairAttachment`
    Back`BodyBackAttachment`
    Waist`WaistFrontAttachment`, `WaistCenterAttachment`, `WaistBackAttachment`
    Shoulder`RightShoulderAttachment`, `RightCollarAttachment`, `NeckAttachment`, `LeftCollarAttachment`, `LeftShoulderAttachment`
    Face, Eyelash, Eyebrow`FaceFrontAttachment`, `FaceCenterAttachment`
    Neck`NeckAttachment`
    Front`BodyFrontAttachment`
    Layered tops (Shirt, TShirt, Sweater, Jacket)`BodyFrontAttachment`
    Layered bottoms (Pants, Shorts, DressSkirt)`WaistCenterAttachment`
    + + + The 3D Importer automatically recognizes mesh objects as attachment points if the objects include the affix `\_Att`. This only applies when importing meshes with caging data, such as clothing or bodies. + + +- **Shoulders and Collars** - Even though they are in similar locations, Shoulder and Collar attachment points interact with character rigs differently for rigid accessories. + - Items using `RightShoulderAttachment` or `LeftShoulderAttachment` move with the character's arm. + - Items using `RightCollarAttachment` or `LeftCollarAttachment` do not move with the character's arm. + +### Face Accessories + +Face accessories, such as hair, eyebrows, and eyelashes are unique accessories that you can bundle with an avatar body upload. At this time, eyebrows and eyelashes can not be uploaded as standalone accessories and must be bundled with avatar bodies. For more information on bundling your face accessories with avatar models, see [Publishing bodies with eyelashes and eyebrows](../accessories/publish-eyebrows-eyelashes.md). + +- **Naming Convention when bundled** - When including these assets with an avatar body upload, the accessory objects must use the following name conventions: + - `EyebrowAccessory` + - `EyelashAccessory` + - `HairAccessory` + +## Textures + +Textures created for accessories must meet Roblox's [texture specifications](../../art/modeling/texture-specifications.md). Keep in mind that smaller assets, such as accessories, can use smaller texture map sizes, such as **256×256px**, to optimize performance with virtually no loss in detail. + +## Layerable Properties + +Clothing and accessories that deform and fit around any characters and existing clothing items require additional configuration in a 3D modeling software such as [Blender](https://www.blender.org) or [Maya](https://www.autodesk.com/products/maya/overview). + +To achieve the layering effect, your clothing must meet the following requirements: + +- Asset must be [weighted and bound](#rigging-and-skinning) to an R15 skeleton (Maya) or armature (Blender). +- Asset must contain an [inner mesh cage](#inner-cage) and an [outer mesh cage](#outer-cage). +- Asset must continue to follow any applicable [custom mesh requirements](../../art/characters/specifications.md), such as best practices on watertightness, textures, and polycount budgets. + +See [Creating Layered Models](../../art/accessories/creating/index.md) for a basic guide on applying these requirements on a reference asset in Blender. Once the `.fbx` file is [exported](../../art/accessories/export-settings.md), see [Accessory Fitting Tool](../../art/accessories/accessory-fitting-tool.md) for instructions on creating an accessory from your model. + +### Rigging and Skinning + +Rigging and skinning a layered accessory allows the accessory to move naturally with a character body. You can perform this manually through a modeling tool, or [use automatic skinning transfer](../../art/accessories/automatic-skinning-transfer.md) to generate an accessory's skinning data at run time. + +If using modeling software to skin your accessories, keep in mind that **Joint Influences** (Maya) or **Bone Assignments** (Blender) per vertex should be limited to **4**. + +For more information on basic skinning in third-party modeling software, such as Blender's [Automatic Weights](https://docs.blender.org/manual/en/latest/animation/armatures/skinning/parenting.html#with-automatic-weights), see [Skinning a Simple Mesh](../../art/modeling/skin-a-simple-mesh.md) for instructions on rigging, applying weights, and skinning a basic mesh. + +### Cage Meshes + +**Cage meshes**, or **cages**, are invisible meshes that define the inner and outer surfaces of your asset and are fundamental to the layerable properties of clothing items. The inner cage determines the inside surface of a clothing item while the outer cage determines the outside surface of a clothing item. + + +Assets with invalid cage configurations may fail validation and are subject to moderation. See [Caging best practices](./caging-best-practices.md) for examples and instructions. + + +For a basic overview on caging, see the [Basic Clothing Tutorial](../accessories/creating/caging-setup.md) and the relevant section of the tutorial video at [8:32](https://www.youtube.com/watch?v=C-DwGRBHvmE&t=512s): + + + +#### Inner Cage + +The inner cage is the inner surface of your model and defines how the layered asset fits over another layered model. As a best practice, the shape of the inner and outer cage should match each other before editing the outer cage to completely cover your asset. + +The inner cage mesh object must have the same name as the accessory model appended with **\_InnerCage**. + + + + + +#### Outer Cage + +The outer cage defines the external surface that another item's inner cage would layer on top of. Avatar character models must have an outer cage included with its model in order to be compatible with layered clothing. All avatar models available on the [Marketplace](https://www.roblox.com/catalog) include a properly configured outer cage and are compatible with layered assets. + +The outer cage of a layered clothing asset is a mesh that precisely covers the clothing item. The outer cage included in the template files is identical to the inner cage by default and must be the only cage adjusted to fit over an accessory. + +The outer cage mesh object must have the same name as the accessory model appended with **\_OuterCage**. + + + + + + +The vertexes and UVs of the inner and outer cage meshes should not be deleted or removed, as they are used to match coordinates between other cages. + + +## Marketplace Requirements + +Your items must meet the following requirements before you upload them to the Marketplace to sell: + +- Ensure that your items adhere to the [Marketplace Program Guidelines](../../marketplace/marketplace-policy.md). +- Whenever applicable, ensure that your items adhere to Roblox's [custom mesh specifications](../../art/modeling/specifications.md) and [rigid accessory specifications](../../art/accessories/specifications.md). +- Object `Class.MeshPart.Material|Material` is set to `Plastic`. +- Object `Class.MeshPart.Transparency|Transparency` is set to 0. +- Object `Class.MeshPart.VertexColor|VertexColor` is the default `1, 1, 1`. +- Your `Class.Accessory` instance does not contain extraneous objects, like `Class.Script` or additional `Class.Part` instances. diff --git a/.cursor/rules/roblox/art/accessories/creating-rigid/converting.md b/.cursor/rules/roblox/art/accessories/creating-rigid/converting.md new file mode 100644 index 00000000..4e06fffd --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/creating-rigid/converting.md @@ -0,0 +1,42 @@ +--- +title: Use the Accessory Fitting Tool +description: Use the Accessory Fitting Tool to convert your model to an rigid accessory. +next: /art/accessories/creating-rigid/publishing +prev: /art/accessories/creating-rigid/importing +--- + +After importing your asset into Studio, you can begin **fitting** your imported object to a mannequin and **converting** the `Class.Model` object into a `Class.Accessory`. When fitting and converting your accessory it's important to use the [Accessory Fitting Tool](../../../art/accessories/accessory-fitting-tool.md) (AFT) to correctly preview the placement and apply the correct configurations to your accessory. + + + +To fit and generate your accessory: + +1. In the toolbar's **Avatar** tab, click **Accessory** to open the AFT. +2. In the new AFT panel, select the **Part** field and, in the workspace, select the accessory `Class.MeshPart` object in the workspace and press **Next**. + +3. Set **type** of asset to **Back**. Press **Next** when complete. + +4. Using both the AFT preview window and the workspace, adjust the position, scale, and rotation of the accessory. + + 1. Use the AFT preview window and your mannequin as an accurate preview of how your asset fits on the character. The clothing mannequin in the workspace does not accurately portray how rigid accessories attach. + 2. In the workspace, use the **Move**, **Scale**, and **Rotate** tools to adjust the positioning of your rigid accessory. + 3. If you accidentally select something else, click back into the AFT panel to reselect the accessory and resume your adjustments using the transformation tools. + +5. After previewing and fitting your asset, select the **dropdown** next to **Generate** button to select **Generate Legacy Accessory**. The accessory object populates in your viewport and in the **Explorer**. + + - For rigid accessories that you intend to sell on the Marketplace you must use the [generate legacy accessory](../accessory-fitting-tool.md#generate-legacy-accessory) option when creating your Marketplace accessories. + + A dropdown appears above the GenerateMeshPartAccessory when expanded, displaying a Generate Legacy Accessory option. + +6. Test your accessory by equipping it to a character and using the **Avatar Setup** tool. + + + + +After successful fitting and converting, your 3D model should populate in your project as a `Class.Accessory`. With this `Class.Accessory` you can perform any of the following: + +- [Upload the accessory](../../../art/accessories/creating-rigid/publishing.md) to the Marketplace. +- Use the accessory in your current experience by equipping it to character models with [HumanoidDescription](../../../characters/appearance.md#manually-modify-appearance), or by dragging and dropping the accessory under the appropriate character `Class.Model` object. +- Save the accessory to your [Toolbox](../../../projects/assets/toolbox.md) to share or use within any of your experiences. + + diff --git a/.cursor/rules/roblox/art/accessories/creating-rigid/exporting.md b/.cursor/rules/roblox/art/accessories/creating-rigid/exporting.md new file mode 100644 index 00000000..12812cf0 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/creating-rigid/exporting.md @@ -0,0 +1,32 @@ +--- +title: Export from Blender +description: Use Blender's .fbx exporter with the correct settings to create a Studio-ready asset. +prev: /art/accessories/creating-rigid/texturing +next: /art/accessories/creating-rigid/importing +--- + + + +After modeling and texturing your asset, you can begin the process of **exporting** your Blender project as a `.fbx` or `.gltf`. For up-to-date settings, see [Export settings](../../modeling/export-requirements.md). + + +If you are creating your own accessory object, it's important to clean up your project, which can involve deleting or removing any extra objects, such as lights, cameras, or mannequins, to ensure you only export the accessory mesh, and applying any modifiers to your mesh object. + + +To export your model as a `.fbx`: + +1. In the topbar, click **File**. +2. Select **Export**, then **FBX (.fbx)**. +3. On the right-hand side of the file view window, change the **Path Mode** property to **Copy**, then toggle the **Embed Textures** button. + + + +4. Set the **Transform** > **Scale** to `.01`. This is required to maintain scale size for `.fbx` exports. + + + +5. Click the **Export FBX** button. + + +You've completed the exporting section of this tutorial. If desired, download a [reference sample](../../../assets/art/accessories/creating-rigid/Rigid_Mask_Export.fbx) of this exported file for comparison. You can use this reference in the next importing step. + diff --git a/.cursor/rules/roblox/art/accessories/creating-rigid/importing.md b/.cursor/rules/roblox/art/accessories/creating-rigid/importing.md new file mode 100644 index 00000000..9d006840 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/creating-rigid/importing.md @@ -0,0 +1,39 @@ +--- +title: Use Studio's 3D Importer +description: Use Studio's 3D importer to import a third-party 3D model into Studio. +next: /art/accessories/creating-rigid/converting +prev: /art/accessories/creating-rigid/exporting +--- + + + +Studio's 3D Importer provides a quick and easy way to import third-party 3D `.fbx` or `.gltf` assets into your projects. The importer provides object previews and error-checking to ensure that your asset meets Studio's general 3D requirements. + +
    + +To import your asset ([downloadable reference](../../../assets/art/accessories/creating-rigid/Chest-Texturing-Complete.fbx)): + +1. From Studio's **File** menu, select **3D Importer**. +2. In the file browser, select the `.fbx` file saved locally. The 3D Importer loads a preview of the object. + 1. If textures don't load for your asset, continue to the next step and add textures manually later. +3. Select **Import**. + 1. The asset populates in your workspace as a `Class.Model` that contains a `Class.MeshPart` with the appropriate textures applied as a `Class.MeshPart.TextureID`. + 2. If textures were not imported correctly, follow the instructions below to add the file manually. + + +Add textures manually + + +If textures didn't load correctly, add them manually. You may need to save and publish your experience in order to access the [Asset Manager](../../../projects/assets/manager.md). + +1. In the **Asset Manager**, click the **Import** button. +2. Upload your image file. +3. After moderation clears for your image, select the `Class.MeshPart` parented within your imported `Class.Model`. +4. In the **TextureID** property, select the value field and add the asset ID of the texture image. + + + + + +After successful import, your model object should populate in your project as a `Class.Model` with the appropriate textures applied. See [3D Importer](../../../art/modeling/3d-importer.md) for additional information on import settings and troubleshooting. + diff --git a/.cursor/rules/roblox/art/accessories/creating-rigid/index.md b/.cursor/rules/roblox/art/accessories/creating-rigid/index.md new file mode 100644 index 00000000..4f1e0719 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/creating-rigid/index.md @@ -0,0 +1,37 @@ +--- +title: Rigid accessory creation +description: This tutorial covers the basic steps required to publish a custom asset on the Marketplace. +next: /art/accessories/creating-rigid/modeling-setup +--- + + +

    + +Rigid accessories are 3D objects that users can equip to their avatar characters in an experience or through Roblox's [Marketplace](https://www.roblox.com/catalog) and [Avatar Editor](https://www.roblox.com/my/avatar). + +Unlike clothing or bodies, rigid accessories do not require additional configuration in a third-party application beyond modeling and texturing, rigid accessories are typically the most basic type of 3D avatar item to create. + +This tutorial covers the basics of each step in the workflow to create your own simple 3D model in Blender and import it into Studio. From there, you can upload the accessory to the Marketplace to sell, save the asset to your toolbox, or use the asset in your experiences. + + +Creating, building, and sharing on Roblox is free. However, the last step of listing your item to sell requires a Premium Roblox account, an upload fee, and a publishing advance. For more information, see the [Marketplace policy](../../../marketplace/marketplace-policy.md#creator-requirements). + + + +
    + +
    + 3D mesh object created in Blender +
    +
    +
    + +
    + Mesh object equipped as an `Class.Accessory` in Studio +
    +
    +
    + + +While this content covers the Blender workflow with a provided reference example, you can apply the same concepts to other third-party modeling applications and custom assets. + diff --git a/.cursor/rules/roblox/art/accessories/creating-rigid/modeling-setup.md b/.cursor/rules/roblox/art/accessories/creating-rigid/modeling-setup.md new file mode 100644 index 00000000..193d200b --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/creating-rigid/modeling-setup.md @@ -0,0 +1,139 @@ +--- +title: Box modeling +description: Create your basic rigid accessory model in Blender. +next: /art/accessories/creating-rigid/texturing +prev: /art/accessories/creating-rigid/ +--- + +A screenshot of blender showing the final 3d shape of a treasure chest in the viewport + +**Modeling** is the process of creating and shaping the 3D geometry of an object. **Box modeling** is a fundamental technique in 3D modeling combining basic shapes and steps to create a more complex object. + +The following instructions are based off of the [Box Modeling 101 staff article](https://devforum.roblox.com/t/modeling-101-in-blender-box-modeling/2963814). The original article includes additional information, as well as Blender setup instructions, best practices, and advanced modeling examples that are not included in this accessory tutorial. + + +Whether you are using an existing shape or creating your own 3D object, it's important to consider [technical requirements](../../../art/accessories/specifications.md), such as keeping your geometry within a polycount budget, and [policy requirements](../../../marketplace/marketplace-policy.md), such as ensuring your design does not infringe on other creator's IP both within and outside of the Roblox ecosystem. + + +## General shape + + + +In a new Blender file, delete everything except the starter cube, then create the basic shape of the treasure chest. + +1. In a new project, select the non-cube objects and press X to delete. +2. Select the cube and press S for scale. + 1. Press Y to lock scaling to the y-axis. + 2. Drag with the mouse to create a rectangle. +3. Switch to Edit mode (Tab). +4. Near the Edit mode dropdown, select the Face selection. +5. Select the top face of the box and press E to extrude. +6. Drag your mouse to extrude the lid. Extend the lid to about half the height of the main body. + +## Rounded lid + + +Create the rounded lid shape using segmentation: + +1. Near the Edit mode dropdown, select the Line selection. +2. Holding Shift, click the top front and back lines of your chest. +3. With both lines selected, press CtrlB/⌘B to bevel. +4. In the context menu at the bottom right, set the number of segments to `6` and enable **Clamp Overlap**. + +### Merge vertices + +Sometimes tools like the **Bevel** tool may move vertices very close to each other without merging them. Use the Merge Vertices function to ensure that your object shares vertices wherever possible. + +1. Near the Edit mode dropdown, select the Vertices selection. +2. Press A to select all vertices. +3. Right-click and select **Merge Vertices by Distance**. +4. In the pop-up modal, set the distance to `.01`. + +## Side insets + + + +Create the left and right insets of your chest: + +1. Near the Edit mode dropdown, select the Face selection. +2. Hold Shift and click both sides of your shape. This selects both the left and right faces. +3. Press I for inset. Drag the mouse to adjust the amount of inset for the new face. + 1. Set the inset about the size of your bevel segmentations. +4. With your new insets selected, right-click and select **Extrude Along Normals**. +5. Use the mouse to drag and adjust the distance of extrusion into the chest. + +## Front insets + +Create the front and back insets of your chest by creating new lines and then extruding your faces between those lines. + +### Vertical loop cuts + + + +To create your vertical loop cuts: + +1. Near the Edit mode dropdown, select the Line selection. +2. Press A to select the entire chest. +3. Use CtrlR/⌘R to create a loop cut. +4. Using your mouse, hover over the object until the highlighted cut is vertical. Click to confirm. +5. In the context menu, set the number of cuts to `2`. +6. With the new lines selected, press S to scale and Y to scale within the y-axis. +7. Use the mouse to drag the lines until they nearly reach the edges of your chest. Click to confirm. + +### Horizontal loop cuts + + + +To create your horizontal loop cuts: + +1. Select the chest, and press CtrlR/⌘R to loop cut. +2. Using the mouse, click to confirm a horizontal cut. +3. Using the context menu, set the number of cuts to `2`. +4. To straighten each line across your object, select the one of your new lines: + 1. Press S for scale. + 2. Press Z to scale within the z-axis. + 3. Press 0 to set the scale value to `0` across the z-axis. +5. Repeat step 4 with the other line. +6. Position the top line near the top below the segmentations. +7. Position the bottom line near the bottom. + 1. Enable **Magnet Snapping** so the bottom line merges with the existing vertices and lines from the side insets. + +### Extrusions + +Create the extrusions for the front, top, and back of the chest. + +1. Near the Edit mode dropdown, select the Face selection. +2. Hold Alt/⌥ and click on your front faces to select the front, top, and back faces. +3. With the faces selected, hold Shift and click on the metal borders to deselect them. The front and back faces, and the top segmentations, should remain selected. +4. Right click and select **Extrude Faces Along Normals**. Drag the mouse to extrude the faces about the same width as the metal borders. + +## Complete border + + + +The chest is almost ready, but is still missing the continuous metal border across the top edge. Remove the existing faces and add new geometry to the treasure chest. + +### Delete faces + +Delete the faces of the top side metal borders: + +1. Near the Edit mode dropdown, select the Face selection. +2. Starting on any side, shift click the three faces of the top metal border. +3. Press X to delete. +4. Repeat steps 2-3 on the other side. + +### Add faces + +Add new faces to the sides that complete the geometry of the treasure chest box. + +1. Near the Edit mode dropdown, select the Line selection. +2. Starting with any side, Hold Shift and click the two top corner edges of the missing face. +3. Right click and select **New Face from Edges** to create a top face. +4. Repeat steps 2-3 with the bottom corner edges to create a bottom face. +5. On the other side of the chest, repeat steps 2-4 to complete the metal border. + + +You've completed the modeling section of this tutorial. If desired, download a [reference version](../../../assets/art/accessories/creating-rigid/Chest-Modeling-Complete.blend) of this stage of the project for comparison. + +This tutorial represents an extremely basic overview of the 3D modeling process. Tools like Blender offer many features, workflows, and techniques to create unique and complex models. Check out Blender's official and community tutorials for additional instructional content. + diff --git a/.cursor/rules/roblox/art/accessories/creating-rigid/publishing.md b/.cursor/rules/roblox/art/accessories/creating-rigid/publishing.md new file mode 100644 index 00000000..af7e3823 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/creating-rigid/publishing.md @@ -0,0 +1,46 @@ +--- +title: Upload and publish +description: Before selling your accessory, upload the accessory for validation and moderation. +prev: /art/accessories/creating-rigid/converting +--- + +After generating your `Class.Accessory` item, you can now begin the process of **publishing** the asset to the Marketplace. This step is optional and only applicable for creators who intend to sell their asset. + + +Users must meet [creator requirements](../../../marketplace/marketplace-policy.md#creator-requirements) to be eligible to sell assets on the Marketplace. Creators must also provide an upload fee and a payment advance during the upload and publishing process. + + +Adding your asset to the Marketplace involves 2 steps: + +1. **Uploading** - Uploading the asset to Roblox servers for moderation. +2. **Publishing** - Listing the item on sale on the Marketplace. + + + +## Upload + +To upload your accessory: + +1. In the **Explorer**, right-click your accessory object and select **Save to Roblox…** from the contextual menu. +2. In the **Asset Configuration** window, set the **Content Type** to **Avatar Item**. +3. Complete the following fields (you can adjust these later): + + 1. **Title**: The name of your accessory. + 2. **Description**: A short description of your asset. + 3. **Asset Category**: The type of accessory. This should match the Accessory Type selected during the [fitting and conversion](../../../art/accessories/creating-rigid/converting.md) process. + 4. **Creator**: Use the dropdown to select if you'd like to publish this asset as an individual or as part of an associated group. + +4. After you select the **Asset Category**, Studio begins validating the asset to ensure that it matches Roblox's accessory technical requirements. +5. If the validation is successful, you can submit the asset to the upload and moderation queue for a fee. See [Fees and commissions](../../../marketplace/marketplace-fees-and-commissions.md) for current fee information. + +## Publish + +After uploading your accessory, the asset is added to the moderation queue and may take up to 24 hours to clear. + +You can check your accessory's moderation status in the [Creator Hub](https://create.roblox.com/dashboard/creations). + +After moderation completes, your item's publishing details become available to edit and enable for sale. See the following for an overview on the various sale options available: + + +
    +After listing an asset to the Marketplace, you can return to this page to edit your item's sale details, or take the item offsale. diff --git a/.cursor/rules/roblox/art/accessories/creating-rigid/texturing.md b/.cursor/rules/roblox/art/accessories/creating-rigid/texturing.md new file mode 100644 index 00000000..f2918a8d --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/creating-rigid/texturing.md @@ -0,0 +1,81 @@ +--- +title: Texture painting +description: Covers the process of associating PBR textures to rigid accessories in Blender. +prev: /art/accessories/creating-rigid/modeling-setup +next: /art/accessories/creating-rigid/exporting +--- + +A screenshot of blender showing the final 3d shape and color of a treasure chest in the viewport + +**Texturing** is the process of applying a surface appearance to a 3D object. **Texture painting** is a technique that allows you to digitally brush your surface colors onto your 3D object, or onto the 2D image that represents the surface of your object. + +This tutorial covers basic texture painting in Blender. Common workflows in the industry utilize additional third-party tools to create textures, especially high-definition PBR textures that mimic realistic lighting and texture properties. + + +While PBR textures are not required for accessories and is not covered in this tutorial, adding PBR textures can add extra visual flair and realism to elevate your creations. This typically requires additional software.

    For more information, see [PBR textures](../../modeling/surface-appearance.md). +
    + +## UV projecting + + + +Use Blender's automatic UV Project feature to "unwrap" your 3D object onto a 2D plane. This allows you to associate a 2D image to the 3D surface of your object. + +1. In Edit mode, press A to select your object. +2. In the top UV menu, select **Smart UV Project**. +3. Set Island Margin to `.02`. + +## Add new material + + + +Add a new material for Blender to associate this new texture, and assign it to a new blank 2D image. + +1. In the bottom right panel, select the red **Materials** tab. +2. Select the **+ New** button. Additional material options display below. +3. In **Base Color**, select the dot. A dropdown appears. + 1. Select **Image Texture**. +4. Under Base Color, select the **+ New** button. + 1. Name the texture image file. Using an affix like "\_TXT" can help organize your files later. + 2. Select the color and pick a color. This tutorial recommends using a metallic color for your metal borders to save time. + +## Texture painting + +Texture painting allows you to paint directly on the 3D object or the 2D mapping of the surface. + +Since Blender automatically mapped the 2D atlas of the texture, it's not easy to tell what parts of the 2D image maps to the 3D object. First mark the sections of the 3D object you want to paint solid before completing your texture by painting the 2D map. + + +There are many ways to texture within Blender. To keep this process simple, the tutorial used Blender's [Smart UV Project](https://docs.blender.org/manual/en/2.79/editors/uv_image/uv/editing/unwrapping/mapping_types.html), but there are many ways to manually create your 2D texture islands and organize your mesh and texture. + + +### Mark 3D object + + + +Switch to Texture Paint mode and use the paintbrush to track the "wood" parts of the treasure chest. + +1. In Edit mode, select your object. +2. Switch to **Texture Paint** mode. A side-by-side panel displays with your 2D atlas on the left and the 3D object on the right. +3. Expand the Tool submenu in the top-right of either window. +4. Select your brush settings and mark the wooden areas of your chest. + 1. Use CtrlZ/⌘Z to undo any accidental brushes on the metal border. + 2. Hold F and drag the mouse to adjust brush size. + +### Paint 2D map + + + +With all of the wooden areas of your chest marked, you can now quickly texture your 2D atlas. First adjust your brush settings to have a hard edge and then begin painting the 2D image. + +1. On the left window, access to **Tool** menu in the top right of the window. + 1. Set the **Falloff** shape to the flattest icon to ensure the edges are sharp. + 2. Set the color or any other brush settings here. +2. In the left window, begin coloring in each island of your texture. You can quickly preview the changes on your 3D object on the right side. + 1. Use CtrlZ/⌘Z to undo any accidental brushes on the metal border. + 2. Hold F and drag the mouse to adjust brush size. +3. After completion, navigate to **Image** > **Save** to save your image file. + + +You've completed the texturing section of this tutorial. If desired, download a [reference version](../../../assets/art/accessories/creating-rigid/Chest-Texturing-Complete.blend) of this stage of the project for comparison. + diff --git a/.cursor/rules/roblox/art/accessories/creating/armature-setup.md b/.cursor/rules/roblox/art/accessories/creating/armature-setup.md new file mode 100644 index 00000000..7ddd4cc3 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/creating/armature-setup.md @@ -0,0 +1,65 @@ +--- +title: Armature setup +description: Transfer and parent an armature template to your custom clothing Blender project. +next: /art/accessories/creating/test-poses +prev: /art/accessories/creating/texture-painting +--- + +**Rigging** is the process that enables the clothing object to move and deform with a Roblox character's R15 rig. In this tutorial, you'll parent the clothing item to Roblox's provided R15 armature and verify the Automatic Skinning Transfer data. After rigging, be sure to test out some basic poses to ensure that your clothes move and stretch correctly with any character body. + + +
    + +
    Clothing mesh with no rigging data
    +
    +
    + +
    Clothing mesh with rigging data performing pose tests
    +
    +
    + +The rigging process requires the following: + +1. Download and append an R15 armature to your project. +2. Parent the rig with Blender's automatic weights. +3. Test poses. + +## Transfer armature + +Roblox provides an R15 base armature that you can import into your own project. While it is possible to create your own R15 armature rig, importing a premade rig saves you time and reduces the potential for error. + +To import the R15 character armature into your file: + +1. Download Roblox's [Rig_and_Attachments_Template.blend](../../../assets/modeling/meshes/reference-files/Rig_and_Attachments_Templates.zip). Do not open this project. +2. In your current clothing project, return to **Object Mode**. +3. Navigate to **File** > **Append**, and select the saved **Rig_And_Attachment.blend** file. An additional folder structure appears. + + + +4. Select **Armature** > **Armature** and press **Append**. An armature object is added to your workspace. + + + +5. The armature may need reorientation with the following steps: + + 1. With the armature selected, open the **Item tool** sidebar. + 2. Adjust the rotation so the armature is correctly aligned with your mesh. + 3. After alignment, navigate to **Object** > **Apply** > **All Transforms** to freeze your new rotation values. + + + + + +## Parent armature + +With the armature rig in place, you can use Blender's **Parent with Automatic Weights** functionality to quickly set your clothing mesh as a child of the armature. This feature also applies vertex weighting, or **skinning**, automatically to your mesh, which can save you significant time over skinning your clothing manually. + +To parent the clothing to the rig: + +1. Select the clothing mesh object. +2. Hold shift and click the **Armature** object. Ensure that the armature object is the last object selected. +3. Right-click and select **Parent** > **With Automatic Weights**. + + + + diff --git a/.cursor/rules/roblox/art/accessories/creating/caging-setup.md b/.cursor/rules/roblox/art/accessories/creating/caging-setup.md new file mode 100644 index 00000000..cf72363b --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/creating/caging-setup.md @@ -0,0 +1,40 @@ +--- +title: Caging setup +description: Isolate your outer cage meshes and hide extra objects before modifying your clothing cage. +next: /art/accessories/creating/modify-cage +prev: /art/accessories/creating/test-poses +--- + +**Caging** is the process of setting the clothing's interior and exterior surfaces, referred to as the inner and outer cages respectively. This enables your clothing to layer over existing clothing and bodies, and additional clothes to layer on top. + +Since the shirt in this tutorial was created using the cage templates as a mannequin, there is no need to adjust the inner cage where your clothing asset already fits over. **Only the outer cage needs to be adjusted** to fit over the new clothing item. + + +
    + +
    Clothing and cage meshes before caging
    +
    +
    + +
    Outer cage mesh after caging process
    +
    +
    + +The caging process uses the following steps: + +1. Set up your project by isolating the outer cage and the clothing mesh in your project. +2. Modify the outer cage to wrap over the clothing mesh using sculpting tools. + +To set up your project: + +1. Switch to **Object mode**. +2. In the Outliner: + 1. Hide the Armature. + 2. Unhide your LongSleeve_OuterCage object. +3. In the Outliner, navigate to **Armature** > **Long Sleeve** and toggle the **Disable Selection** icon. This prevents accidental edits to the clothing mesh. + + +4. Select the OuterCage object, and navigate to Object Properties and enable **Wireframe**. This helps easily visualize and access the mesh. + + + diff --git a/.cursor/rules/roblox/art/accessories/creating/converting.md b/.cursor/rules/roblox/art/accessories/creating/converting.md new file mode 100644 index 00000000..138087b7 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/creating/converting.md @@ -0,0 +1,35 @@ +--- +title: Convert +description: Use the Accessory Fitting Tool to convert a Model object to an Accessory. +prev: /art/accessories/creating/importing +--- + +With the `Class.Model` in your project, the last step in the process of clothing creation requires you to convert this object to a standard `Class.Accessory` that avatars can equip. Using the [Accessory Fitting Tool](../../../art/accessories/accessory-fitting-tool.md) (AFT), convert the model object to a `Class.Accessory` that you can then use in your experience or publish to the Marketplace. + +To generate the accessory object: + +1. In the toolbar's **Avatar** tab, click **Accessory** to open the AFT. +2. Select the `Class.Model` of the clothing item in the viewport. The tool's text field populates with the name of the object selected. Alternatively, you can select the object within the **Explorer** window. +3. Test out various sample characters, clothing, and animations. See [Test accessories](../../../art/accessories/accessory-fitting-tool.md#test-accessories) for additional information. + - If required, make minor cage adjustments using the editing features. Larger cage changes may require returning to your third-party modeling software and re-exporting the asset. +4. When ready to generate your accessory, click **Generate MeshPart Accessory**. The accessory object with your model populates in your workspace. + + +
    + +
    Clothing accessory in viewport
    +
    +
    + +
    Clothing accessory in Explorer
    +
    +
    + + +Congratulations, you've completed your clothing tutorial. With this accessory, you can: + +- Equip the accessory on an avatar-ready character by drag and dropping the accessory on an existing model, or using [HumanoidDescription](../../../characters/appearance.md#manually-modify-appearance). +- Save the accessory as an [avatar asset](../../../projects/assets/index.md#for-avatars) for use in an experience later. +- If you meet certain account requirements, you can [upload your asset](../../../marketplace/publish-to-marketplace.md) for moderation and start selling it on the Marketplace. + + diff --git a/.cursor/rules/roblox/art/accessories/creating/exporting.md b/.cursor/rules/roblox/art/accessories/creating/exporting.md new file mode 100644 index 00000000..e5a1a3be --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/creating/exporting.md @@ -0,0 +1,34 @@ +--- +title: Export +description: Use Blender's FBX export with specific settings when exporting a clothing asset. +prev: /art/accessories/creating/modify-cage +next: /art/accessories/creating/importing +--- + +It's important to follow the Blender export settings to ensure a Studio-compatible `.fbx` file. Before exporting your file, ensure that you've removed extra objects, such as lights, cameras, or mannequins, and applied or removed any active modifiers. + +To export your file from Blender: + +1. In the topbar, click **File**. A pop-up menu displays. +2. Select **Export**, then **FBX (.fbx)**. The **Blender File View** window displays. +3. On the right-hand side, change the **Path Mode** property to **Copy**, then toggle the **Embed Textures** button. + + + +4. If your project doesn't have .01 scene unit scaling, set the **Transform** > **Scale** to `.01`. + + + +5. Under the **Armature** section, disable **Add Leaf Bones**. + + + +6. Disable **Bake Animation**. + +
    + +7. Click the **Export FBX** button. + + +You've completed the exporting section of this tutorial. If desired, download a [reference sample](../../../assets/art/accessories/creating/Long_Sleeve_Export.fbx) of this exported file for comparison. You can use this reference in the next importing step. + diff --git a/.cursor/rules/roblox/art/accessories/creating/importing.md b/.cursor/rules/roblox/art/accessories/creating/importing.md new file mode 100644 index 00000000..9b091fb8 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/creating/importing.md @@ -0,0 +1,16 @@ +--- +title: Import +description: Use the 3D Importer to import your custom accessory into Studio. +prev: /art/accessories/creating/exporting +next: /art/accessories/creating/converting +--- + +After creating the clothing item in your third-party modeling tool, import the `.fbx` using Studio's 3D Importer tool to add the object to your project as a `Class.Model`. + +Use the 3D Importer to import your `.fbx` into Studio: + +1. From Studio's **File** menu, select **Import 3D**. +1. Select your exported `.fbx` and verify any possible warnings or errors. + 1. Warnings or errors related to the clothing mesh may require returning to Blender to resolve. +1. Select **Import** to add the model to your workspace. + diff --git a/.cursor/rules/roblox/art/accessories/creating/index.md b/.cursor/rules/roblox/art/accessories/creating/index.md new file mode 100644 index 00000000..f2634801 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/creating/index.md @@ -0,0 +1,38 @@ +--- +title: Basic clothing creation +description: This tutorial covers the basic steps required in Blender to Studio-ready clothing assets from scratch. +next: /art/accessories/creating/modeling-setup +--- + + +

    + +You can create your own custom avatar clothing using Blender and Roblox's downloadable project templates. These project templates include [components required for layered clothing](../../../art/accessories/layered-clothing.md#components-of-a-layered-clothing-accessory), and can double as a mannequin to quickly begin shaping and sculpting your clothing assets. By the end of this tutorial, you will have a clothing asset that contains all the required components for a layered clothing accessory on the Marketplace. + + +While this content and the provided examples cover the Blender workflow and tools, you can apply the same concepts to other third-party modeling applications. + + + +
    + +
    Provided Blender mannequin template
    +
    +
    + +
    Final Studio-ready clothing asset
    +
    +
    + +This tutorial is intended for creators with moderate Blender experience and uses the following processes to create a clothing item: + +1. Modeling basic clothing using an existing mannequin shape. +2. Texturing your mesh to change its surface appearance and color. +3. Caging your clothing mesh using Roblox's template cages. +4. Rigging your clothing mesh using Roblox's armature templates. +5. Exporting your asset from Blender. +6. Importing and converting the model to an accessory in Studio. + + +This tutorial covers a **basic workflow** for 3D clothing creation. There are many external resources for different techniques, processes, and refinements you can incorporate for creating clothing, such as using Blender's various sewing and cloth simulation tools and PBR textures. + diff --git a/.cursor/rules/roblox/art/accessories/creating/modeling-setup.md b/.cursor/rules/roblox/art/accessories/creating/modeling-setup.md new file mode 100644 index 00000000..190beb88 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/creating/modeling-setup.md @@ -0,0 +1,71 @@ +--- +title: Modeling setup +description: Setup your Blender environment with the correct files and templates to model efficiently. +next: /art/accessories/creating/trimming +prev: /art/accessories/creating/ +--- + +Modeling, sometimes known as **sculpting**, is the process of shaping 3D geometry. In this tutorial, use one of Roblox's template files to create the initial shape of the clothing and add unique and clothing-specific modifications to its geometry. You can further apply the techniques and processes in this tutorial to create any other type of clothing, such as pants, skirts, shoes, and more. + + +
    + +
    Base Mannequin using Roblox provided cage meshes
    +
    +
    + +
    Sculpted clothing mesh for a long sleeve shirt
    +
    +
    + +This modeling tutorial covers the following processes: + +1. Setting up your project and creating your base mesh. +2. Clearing the duplicated mesh of extra attributes. +3. Trimming the shape to match the desired clothing type. +4. Adding and smoothing the vertices of your clothing shape. +5. Scaling and positioning the clothes onto the mannequin. +6. Sculpting fabric and other details onto the mesh object. +7. Closing the holes in your mesh, making it watertight. + +## Set up mesh + +To get your project started, download and open Roblox's [Clothing_Cage.blend](../../../assets/modeling/meshes/reference-files/Clothing_Cage_Templates.zip) project and begin setting up your basic project objects. + + +
    + +
    3D viewport - duplicated cage mesh object
    +
    +
    + +
    Outliner - duplicated object named "LongSleeve"
    +
    +
    + +To set up your project and your initial mesh object: + +1. Download the [Clothing_Cage.blend](../../../assets/modeling/meshes/reference-files/Clothing_Cage_Templates.zip) project. This project includes the inner and outer cage mesh that you will use as temporary mannequins. +2. Open this file, click **Save As**, and save the project with a new name. This will be your main Blender project for the clothing accessory. +3. In the Outliner, copy and paste **InnerCage** object to duplicate it. +4. With the duplicated object highlighted, right-click in the viewport and select **Parent** > **Parent and Keep Transformation**. +5. In the Outliner, right-click and delete the extra **Cage.001 data object**. +6. Rename the duplicated object as "LongSleeve". +7. Rename the original cages as "LongSleeve_OuterCage" and "LongSleeve_InnerCage", respectively. +8. **Hide** the original \_OuterCage and \_InnerCage objects. You use these later in the Caging step. + + + +## Clear extra attributes + +The cage mesh objects in the template include some helper vertex color properties that need to be removed from your clothing mesh. If left in, the vertex colors may clash with the texture of the object after importing in Studio. + +To remove extra attribute data: + +1. With the LongSleeve object selected, navigate to the **Properties** panel > **Object Data Properties** > **Color Attributes**. + + + +2. With **colorSet1** selected, remove it by pressing the **–** button. + + diff --git a/.cursor/rules/roblox/art/accessories/creating/modify-cage.md b/.cursor/rules/roblox/art/accessories/creating/modify-cage.md new file mode 100644 index 00000000..b7531515 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/creating/modify-cage.md @@ -0,0 +1,33 @@ +--- +title: Modify outer cage +description: Modify the outer cage to fit tightly over your clothing item. +next: /art/accessories/creating/exporting +prev: /art/accessories/creating/caging-setup +--- + +With your project environment set, you can now adjust your outer cage using sculpting and editing tools. Set your outer cage as close as possible to your clothing mesh to ensure the best deformation and layering effects. + + +**Do not delete any vertices or faces of the provided cages.** Destructive modification of the cages can cause import issues and prevent the clothing from importing and displaying as expected. + + +To modify your outer cage: + +1. With the OuterCage mesh selected, switch to **Sculpt Mode**. +2. Enable **X Axis Symmetry**. +3. Switch to **Inflate tool**. +4. Press F to adjust the radius of the brush. +5. Starting with one side, expand the outer cage to fit precisely over the mesh +6. After expanding the cage mesh over a majority of the mesh, disable **X Axis Symmetry** and address individual spots. Keep the following in mind: + 1. Your outer cage should always cover your clothing mesh. + 2. Your outer cage should be as close to the clothing mesh as possible to ensure accurate layering. + 3. For small angular areas, like the armpit, you may need to switch back to **Edit Mode** and grab the individual vertices to avoid crowding your cage mesh vertices. + +7. Perform additional passes in **Edit Mode** with wireframe enabled to ensure your outer cage vertices fit as closely as possible. A tight fit ensures that your clothing item layers as accurately as possible. + + + +You've completed the caging section of this tutorial. + +If desired, download a [reference sample](../../../assets/art/reference-files/checkpoint/4_LongSleeve-Caging-Complete.blend) of this project for comparison before exporting your project and bringing it into Studio. + diff --git a/.cursor/rules/roblox/art/accessories/creating/sculpting.md b/.cursor/rules/roblox/art/accessories/creating/sculpting.md new file mode 100644 index 00000000..888d9c22 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/creating/sculpting.md @@ -0,0 +1,37 @@ +--- +title: Sculpt detail +description: Use Blender's sculpting and simulation tools to add detail to your clothing shape. +next: /art/accessories/creating/watertight +prev: /art/accessories/creating/trimming +--- + +After scaling and positioning your clothing mesh, begin applying sculpting detail to add cloth and fabric detail to your mesh. While there are many ways to sculpt an object in Blender, this tutorial primarily uses the **Elastic Deform**, **Inflate**, and **Clothing** tools to make your mesh look more like realistic clothing. + +
    +
    + +
    Clothing mesh after sculpting details
    +
    +
    + +To add clothing details: + +1. With the shirt highlighted, switch to **Sculpt Mode**. +2. Disable **X-Ray mode**, if required. +3. Enable **X Mirror** to perform symmetrical edits. +4. Select the **Elastic Deform** tool at `.5` strength to stretch parts of vertices to completely cover the mannequin. + + 1. Use F to change the radius of the brush. + 2. You can hide the mannequin to access hard-to-reach areas. + + + +5. Select the **Cloth** tool. +6. Disable **X Mirror**. The cloth tool can produce unexpected results with symmetry enabled. +7. Using the Cloth tool, click and drag on your mesh to add a cloth-like surface to your mesh. Adjust the settings to change the strength of the deformations. + + + +8. Using the **Elastic Deform**, **Inflate**, and **Cloth** tools, make the final adjustments to your mesh so that it sits on top of the mannequin with the final desired shape. + + diff --git a/.cursor/rules/roblox/art/accessories/creating/test-poses.md b/.cursor/rules/roblox/art/accessories/creating/test-poses.md new file mode 100644 index 00000000..2d6681c5 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/creating/test-poses.md @@ -0,0 +1,41 @@ +--- +title: Test poses +description: Test your poses after rigging a clothing item to ensure the clothes bend and deform correctly. +next: /art/accessories/creating/caging-setup +prev: /art/accessories/creating/armature-setup +--- + +With the clothing mesh parented to an armature, you can now perform quick tests to verify that your clothing deforms correctly. + + +If you see issues with the deformation of your clothing, you may need to correct the issue with weight-painting, a technique for manually applying skinning data to your meshes. + +This tutorial doesn't cover the process of weight-painting. For additional resources on manually weight painting and instructions on updating skinning data on meshes, see the following resources: + +- [Skin a simple mesh](../../modeling/skin-a-simple-mesh.md) +- [Skin a humanoid mesh](../../modeling/skin-a-humanoid-model.md) + + + +To test your clothing's movement: + +1. With your armature selected, navigate to the **Properties** panel > **Armature properties**. +2. In **Viewport Display** > **Show**, enable **In Front**. The **In Front** property enables you to easily see and access the bones for posing. + + + +3. In the viewport, select your armature and navigate to **Pose** mode. +4. Click on various bones and press R to rotate and set a pose. After pressing R: + + 1. Click to save the rotation. + 2. Right-click to cancel an unsaved rotation. + 3. If you have saved a rotation, reset your pose in the viewport with right-click and select **Clear User Transforms**. + +5. Try various natural poses of your character to ensure that your clothing stretches and fits correctly. + + + + +You've completed the rigging section of this tutorial. If desired, download a [reference sample](../../../assets/art/reference-files/checkpoint/3_LongSleeve-Rigging-Complete.blend) of this project for comparison. + + diff --git a/.cursor/rules/roblox/art/accessories/creating/texture-map.md b/.cursor/rules/roblox/art/accessories/creating/texture-map.md new file mode 100644 index 00000000..540850b3 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/creating/texture-map.md @@ -0,0 +1,25 @@ +--- +title: Create texture map +description: Generate a 2D texture map image that you can save your texture painting to. +prev: /art/accessories/creating/unwrapping +next: /art/accessories/creating/texture-painting +--- + +Creating seams and unwrapping tells Blender how to project the 3D surface of the clothing item in 2D. Before you can apply any texture appearance changes, you need to create a texture map, which is the specific 2D image you apply and save your textures to. + +To create a new texture map: + +1. With the clothing mesh selected, navigate to the **Properties** panel > **Material Preview** tab. + + +2. Select the **+ New** button. +3. Next to Base Color, select the **yellow dot** and click **Image Texture**. + +4. Click the **+ New** button. + + 1. Name the texture image the same as your clothing mesh with a `_TXT` affix. + 2. Set the color to black, or any base color of your preference. + 3. Keep the rest of the default settings. + 4. Press **OK** when completed. + + diff --git a/.cursor/rules/roblox/art/accessories/creating/texture-painting.md b/.cursor/rules/roblox/art/accessories/creating/texture-painting.md new file mode 100644 index 00000000..e035f7dc --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/creating/texture-painting.md @@ -0,0 +1,22 @@ +--- +title: Texture painting +description: Use Blender's Texture Painting tools to apply a surface appearance to your clothing item. +prev: /art/accessories/creating/texture-map +next: /art/accessories/creating/armature-setup +--- + +With a new image ready to apply textures to, use Blender's Texture Paint mode to quickly brush texture colors onto your mesh: + +1. Navigate to **Texture Paint mode**. +2. On the viewport, select the clothing object. +3. Open up the sidebar tools to access brush settings. +4. Select a color, brush size, and falloff to apply. You might need to adjust settings, depending on the modifications you intend to apply. +5. Draw on either the UV 2D map, or the 3D mesh. +6. Save the `.png` of your texture map by selecting **Image** > **Save**. + + + +You've completed the texturing section of this tutorial. If desired, download a [reference sample](../../../assets/art/reference-files/checkpoint/2_LongSleeve-Texturing-Complete.blend) of this project and texture image for comparison. + +There are a lot of ways to texture and apply a unique appearance to your meshes. For additional suggestions, try utilizing alpha transparencies, unique seams, [PBR textures](../../modeling/surface-appearance.md), or Blender's other texturing tools and techniques. + diff --git a/.cursor/rules/roblox/art/accessories/creating/trimming.md b/.cursor/rules/roblox/art/accessories/creating/trimming.md new file mode 100644 index 00000000..f305d77a --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/creating/trimming.md @@ -0,0 +1,72 @@ +--- +title: Trim clothing shape +description: Create the general shape of your clothing item by removing unnecessary sections of your duplicated mesh. +next: /art/accessories/creating/sculpting +prev: /art/accessories/creating/modeling-setup +--- + +With a clean mesh object to work with, cut the basic shape of the type of clothing item you intend to create and prepare the mesh for additional sculpting detail. In this tutorial, you create a long-sleeve shirt shape by removing the leg, arm, and head sections, smoothing out the mesh to create a flat canvas, and repositioning the mesh onto your temporary mannequin. + +
    + +
    Long-sleeve trimming of the full-body mesh.
    +
    + +## Trim clothing shape + +Create the general shape of your clothing type by trimming sections of your duplicated mannequin mesh. + +To trim your clothing shape: + +1. Select the **LongSleeve** object. +2. Switch to **Edit Mode**. +3. Enable **X-Ray mode** in the top right corner of the viewport. +4. Click and drag over parts of the mesh that you do not want to include in your shirt. +5. Press X and select **Vertices** to delete these sections of your mesh. +6. **Repeat step 4** until you reach your desired clothing shape. + + + +## Add and smooth vertices + +With the basic shape created, subdivide the surface of your clothing mesh to add vertices and smooth out the mesh. This process removes the grid-like surface and allows you to apply more complex sculpting detail later. + + +
    + +
    Before applying Subdivision modifier and Shade Smooth
    +
    +
    + +
    After applying Subdivision modifier and Shade Smooth
    +
    +
    + +To add and smooth your vertices: + +1. Switch back to **Object Mode**. +2. With the clothing mesh selected, navigate to the **Modifier Properties** panel. +3. Select **Add Modifier** > **Subdivision Surface Modifier** and click **Apply** with the default settings. +4. In the viewport, right-click the object and select **Shade Smooth** to eliminate the creases on your clothing article. + + + +## Scale and position + +With your base clothing shape created, the next steps are to scale out the mesh and reposition it on top of the mannequin. + +
    + +
    Clothing mesh should fit over mannequin after applying a reposition and scale
    +
    + +To set up and scale your clothing to your mannequin: + +1. Return to **Object Mode**. +2. **Unhide** one of your original cage meshes. +3. In the filter dropdown, enable **Selectable** toggles, and set your body mesh to unselectable. Disabling the **Selectable** toggle prevents accidental edits to your mannequin. +4. Select your shirt mesh and lightly **scale** and **position** your asset to rest over the mannequin. +5. Press S and use your mouse to scale. In most cases, the scaling should be a small change. +6. Press G and click to grab your shirt, make sure the shirt rests loosely over the mannequin. The shirt does not need to fit perfectly at this point. + + diff --git a/.cursor/rules/roblox/art/accessories/creating/unwrapping.md b/.cursor/rules/roblox/art/accessories/creating/unwrapping.md new file mode 100644 index 00000000..6681699a --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/creating/unwrapping.md @@ -0,0 +1,61 @@ +--- +title: Create seams and unwrap +description: Use Blender's seams and unwrapping functionality to project your 3D surface on a 2D texture plane. +prev: /art/accessories/creating/watertight +next: /art/accessories/creating/texture-map +--- + +**Texturing** is the process of customizing the color, tone, and shading of your model's surface. Custom meshes and models use a 2D image, known as a texture map, to project various surface appearance elements onto your 3D object. In this tutorial, apply a complete color to your shirt and add a smaller design using Blender's Texture Paint mode. + + +This tutorial does not cover [PBR textures](../../modeling/surface-appearance.md), which are advanced textures that can replicate real-world texture properties, like reflectivity and surface roughness, and are recommended to give your clothing items an extra dimension of creativity and visual pop. PBR textures often require a third-party application such as Substance Painter. + + + +
    + +
    Clothing mesh after sculpting
    +
    +
    + +
    Clothing mesh after texturing
    +
    +
    + +The texturing process requires the following steps: + +1. Create seams in your mesh to define how Blender unwraps your 3D object. +2. Unwrap the UV of your model, creating a distinct front and back 2D surface to apply textures on based on your seams. +3. Create a new texture image to save as your 2D map. +4. Paint a custom texture using Blender's Texture Paint tools. + +## Create seams + +To begin texturing, you must first generate a **UV map**, or 2D projection, of the surface of your mesh. To set up this UV map, you tell Blender which edges of your mesh to use as seams when creating the projection. + +To create seams that naturally separate the front and back of the shirt: + +1. With your clothing object selected, switch to **Edit mode**. +2. In the top-left, navigate to the Select modes and select **Edge select**. +3. Hold Alt and click on the center vertical edges of your shirt. The detected edge highlights. +4. Whenever a complete edge is selected, **right-click** and select **Make Seam**. The edge highlights to indicate the seam in your model. +5. **Repeat steps 3-4** to create a continuous seam across your mesh. + + +## UV unwrap + +After applying the seams, Blender now knows how to "unwrap" the mesh surface onto a 2D plane as a front and back surface. + +
    + + +
    UV-mapping of your 3D clothing mesh.
    +
    + +To UV Unwrap your object by your selected seams: + +1. While in Edit mode, press A to highlight all vertices. +2. At the top of the viewport, select **UV** > **Unwrap**. +3. Switch to **Texture Paint** mode, your UVs display on the left window when your object is selected. + + diff --git a/.cursor/rules/roblox/art/accessories/creating/watertight.md b/.cursor/rules/roblox/art/accessories/creating/watertight.md new file mode 100644 index 00000000..2181b6dc --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/creating/watertight.md @@ -0,0 +1,41 @@ +--- +title: Make mesh watertight +description: Seal off your geometry to ensure that there are no angles where the interior backfaces of your object are exposed. +next: /art/accessories/creating/unwrapping +prev: /art/accessories/creating/sculpting +--- + +With the shirt shape finalized, make your mesh **watertight** by "sealing" the holes at the neck, waist, and wrist. A watertight shape ensures that only the top visible surface of the mesh is exposed at any angle. If an asset is not watertight, it may expose backfaces, or single sided faces, that could affect the rendering of your asset and performance when equipped. + + +
    + +
    Watertight top view
    +
    +
    + +
    Watertight bottom view
    +
    +
    + +To make your mesh watertight: + +1. Select your mesh and switch to **Edit Mode**. +2. Starting with any hole in the mesh, hold Alt and click the **last edge** on the mesh. The entire edge highlights. +3. Press E to extrude the mesh and click after a small length is added. +4. With the new edge still selected, right-click and select **Merge Vertices** > **At Center**. +5. Press G to grab the new vertex and reposition it within your clothing mesh. +6. **Repeat steps 2-5** until all the interior-exposing holes of your mesh are closed. + + + + +You've completed the modeling section of this tutorial. If desired, download a [reference project](../../../assets/art/reference-files/checkpoint/1_LongSleeve-Modeling-Complete.blend) of this stage and compare it against your work. + +There are a lot of techniques to create clothing. Try experimenting with the following techniques, tools, and processes to create additional unique assets: + +- Making asymmetrical clothing. +- Blender's [cloth simulation](https://docs.blender.org/manual/en/latest/physics/cloth/examples.html#using-simulation-to-shape-sculpt-a-mesh) and other sculpting tools. +- Various community sewing and fabric techniques for creating clothing on Blender. + + diff --git a/.cursor/rules/roblox/art/accessories/export-settings.md b/.cursor/rules/roblox/art/accessories/export-settings.md new file mode 100644 index 00000000..e99ea657 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/export-settings.md @@ -0,0 +1,57 @@ +--- +title: Rigid accessory export settings +description: Use the appropriate export settings in Maya and Blender to generate Studio-ready .fbx files. +--- + +Export your rigid accessory model as a `.fbx` or `.gltf` file to take advantage of all of Studio's 3D import features. These file types contains mesh and texture data you need to later [import](../../art/modeling/3d-importer.md) into Studio. + + +If creating other types of 3D models: +
      +
    • For generic meshes, see [general mesh specifications](../modeling/specifications.md) and [general export settings](../modeling/export-requirements.md).

    • +
    • For layered accessories, see [layered accessory specifications](../accessories/clothing-specifications.md) and [layered export settings](../accessories/clothing-export-settings.md).

    • +
    • For avatar characters, see [avatar specifications](../../art/characters/specifications.md) and [avatar export settings](../characters/export-settings.md).
    • +
    +
    + + +If you have any modifiers to your mesh or project objects, make sure to apply +or delete them before export. + + +## Blender + +Blender allows you to export in `.fbx` or `.gltf` as well as other formats. If you are using `.fbx` export, familiarize yourself with [Blender's FBX scaling](../blender.md#adjust-scale-fbx) to ensure that you successfully import the model into Studio at the correct scale. + +### Export settings + +To export the `.fbx` file in Blender: + +1. In the topbar, click **File**. A pop-up menu displays. +2. Select **Export**, then **FBX (.fbx)**. The **Blender File View** window displays. +3. On the right-hand side, change the **Path Mode** property to **Copy**, then toggle the **Embed Textures** button. + +4. Set **Transform** > **Apply Scalings** to **Unit Scale**. For more information, see [scaling and scene units](../blender.md#adjust-scale-fbx). + +5. Click the **Export FBX** button. +6. After exporting, use Studio's [3D Importer](../../art/modeling/3d-importer.md) to import your model and the [Accessory Fitting Tool](../../art/accessories/accessory-fitting-tool.md) to convert the model into an accessory. + +## Maya export settings + +To export a mesh in Maya as a `.fbx` file: + +1. In the topbar, click **File**. A pop-up menu displays. +2. Select **Export All**. The **Export All** window displays. +3. Near the bottom of the window, click the **Files of type** dropdown, then select **FBX export**. +4. On the right-hand side of the window, navigate to the **Options...** section. +5. In the **Geometry** section, enable **Smooth Mesh** and **Referenced Asset Content**. +6. In the **Animation** section, disable **Animation**. +7. If you need to import textures as a `.png`, in the **Embed Media** section, enable **Embed Media**. +8. In the **Advanced Options** section, + - Navigate to **Units**, then enable **Automatic**. + - Navigate to **Axis Conversion**, then set the **Up Axis** property to **Y**. +9. Click the **Export All** button. + + + +10. After exporting, use Studio's [3D Importer](../../art/modeling/3d-importer.md) to import your model and the [Accessory Fitting Tool](../../art/accessories/accessory-fitting-tool.md) to convert the model into an accessory. diff --git a/.cursor/rules/roblox/art/accessories/from-existing.md b/.cursor/rules/roblox/art/accessories/from-existing.md new file mode 100644 index 00000000..1a1b758d --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/from-existing.md @@ -0,0 +1,205 @@ +--- +title: Accessories from an existing model +description: This tutorial covers the basic steps required to publish a custom asset on the Marketplace. +--- + +In many cases, you may want to convert a premade model from your modeling +software into an accessory on Roblox. If you are looking to create your +accessory from scratch, see [Create accessories](./creating-rigid/index.md). + +Using a provided 3D reference file, this tutorial covers each step in the workflow to properly configure and export a 3D model with PBR textures from Blender and generate your own **rigid accessory** in Studio. After you create the accessory, you can upload it to the Marketplace, save it to your toolbox, and use it in your own experiences. + + +This tutorial only covers rigid accessories, and does not cover the process of converting more advanced clothing or character body models. + + + +
    + +
    + Mask asset as an untextured mesh object in Blender +
    +
    +
    + +
    + Mask asset equipped as an `Class.Accessory` in Studio +
    +
    +
    + +Using a provided reference 3D asset, this tutorial covers the following rigid accessory workflow: + +1. Modeling overview and requirements in Blender. +2. Texturing setup using PBR textures in Blender. +3. Exporting your asset as a `.fbx` from Blender. +4. Importing the asset into Studio. +5. Fitting and converting the imported model to an `Class.Accessory` object. +6. Publishing and validating the accessory for Marketplace upload. + + +While this content covers the Blender workflow with a provided reference example, you can apply the same concepts to other third-party modeling applications and custom assets. + + +## Setup model + +Whether you are using an existing shape or creating your own 3D object, it's important to consider [technical requirements](../../art/accessories/specifications.md), such as keeping your geometry within a polycount budget, and [policy requirements](../../marketplace/marketplace-policy.md), such as ensuring your design does not infringe on other creator's IP both within and outside of the Roblox ecosystem. + +Correctly setting up your asset in Blender helps reduce importing and rendering issues later in Studio. When importing Roblox-related `.fbx` files, such as the provided [mask asset](../../assets/art/accessories/creating-rigid/Rigid_Mask_Model-Only.fbx), you might discover that your asset imports at a 1/100 scale due to the `.fbx` conversion. In your Blender project, you can quickly reset the scale to make the asset easier to work with in the Blender environment. + + +If you are creating your own rigid accessory from scratch, it's important to understand Roblox's [standard avatar sizes](../../art/accessories/body-scale.md), especially for rigid accessories that contour around a body part, such as a hat or bangle. + + +Using the [Sci Fi Mask](../../assets/art/accessories/creating-rigid/Rigid_Mask_Model-Only.fbx) reference as an example, use the following instructions to import and set up your rigid accessory model in Blender: + +1. Open a new Blender project. +2. Press A to highlight all and X to delete the default starting cube and cameras. +3. Navigate to **File** > **Import** > **FBX** and select the downloaded reference model. +4. If the object imports at a small scale, **select** the object and navigate to the **Properties** panel > **Object Properties** > **Transform** and adjust the **X**, **Y**, **Z** to `1.000`. + + + + + +5. If you are sculpting your asset from scratch, orient the object in your workspace. If you are importing, you may not need to make any adjustment. + 1. Make sure your asset is facing **-Y forward**. + 2. Ideally your accessory should be moved to `0`,`0`,`0` in the world to ensure it imports at the center of the camera in Studio. + + +You've completed the modeling section of this tutorial. If desired, download a [reference version](../../assets/art/accessories/creating-rigid/Rigid_Mask_Texturing-Completed.blend) of this stage of the project for comparison. + +There are many tools and workflows to create your own unique asset. For additional suggestions, try creating different asset types, such as shoulder pads or belts, or importing a reference model into Blender as a mannequin to sculpt and shape your cosmetics from scratch. + + +## Apply texture + +**Texturing** is the process of applying a surface appearance to a 3D object. Blender provides various tools and features to create and connect your own texture maps to your asset, allowing you to preview your model's final appearance and link the texture images to your exported file. + +The mask example asset uses [physically-based rendering (PBR) textures](../../art/modeling/surface-appearance.md), which are advanced textures that create realistic surfaces under different lighting environments. PBR textures use multiple image files, or **maps**, to represent the various surface properties of your 3D object. + + +
    + +
    +Color (Albedo) Map +
    +
    +
    + +
    +Normal Map +
    +
    +
    + +
    +Roughness Map +
    +
    +
    + +
    +Metalness Map +
    +
    +
    + +This tutorial doesn't cover the PBR texture creation process, which typically involves using third-party software such as ZBrush or Substance 3D Painter. Instead, this section goes over the process of bringing premade PBR image files into Blender and properly associating them to your asset on export. + + +While PBR textures are not required for accessories, adding PBR textures can add extra visual flair and realism to elevate your creations. For an example on using Blender to create a basic, non-PBR texture, see [Texture basic clothing](../../art/accessories/creating/unwrapping.md). + + +To configure and link your PBR textures to your model: + +1. Download [Rigid_Mask_Textures.zip](../../assets/art/accessories/creating-rigid/Rigid_Mask_Textures.zip) and unzip the textures images locally in the same directory as your Blender project. +2. In Blender, navigate to the **Shading** tab. Ensure that your object is selected. + + 1. If you don't see the **PrincipledBSDF node**, select the **+New** button to create a new material. + + + + + +3. From your file browser, drag and drop your texture `.png` files into the node section. A new image node appears with each file. +4. In the newly created node, click and drag the following image nodes to their appropriate connection on the Principled BSDF main node: + + 1. **\_ALB texture**: Connect the **Color** node to **Principled BSDF** > **Base Color**. + + 2. **\_MTL texture**: Connect the **Color** node to **Principled BSDF** > **Metallic**. + + 3. **\_RGH texture**: Connect the **Color** node to **Principled BSDF** > **Roughness**. + + 4. **\_NOR texture**: + 1. Click **Add** > **Vector** > **Normal Map** to generate a NormalMap node. This node is required to convert Normal PBR image maps. + 2. Connect the \_NOR node's **Color** to the NormalMap node's **Color** connection. + 3. Connect the NormalMap's **Normal** to the **Principled BSDF** > **Normal**. + + +5. Test your textures by changing the viewport viewing mode to **Viewport Shading > Material Preview Mode**. + + + +You've completed the texturing section of this tutorial. If desired, download a [reference sample](../../assets/art/accessories/creating-rigid/Rigid_Mask_Texturing-Completed.blend) of this stage of the project for comparison. + +If you are creating your own PBR textures, check out [Material references](../../art/modeling/material-reference.md) for various PBR material examples you can apply to your next accessory. + + +## Clean up + +After modeling and texturing your asset, you can begin the process of **exporting** your Blender project as a `.fbx`. The start of this process includes cleaning up your project, which can involve deleting or removing any extra objects, such as lights, cameras, or mannequin meshes, to ensure you only export the accessory mesh, and applying any modifiers to your mesh object. + +An often forgotten cleanup step involves **applying your transformations**, also known as **freezing your transforms**, by setting your orientation, rotation, and scale deltas to zero. Failure to apply any transformations can result in unexpected behavior and orientation when importing the mesh in Studio. + +To freeze your transforms: + +1. In Object mode, select your mesh object. +2. Navigate to **Object** > **Apply** > **All Transforms**. + + + +## Export from modeling tool + +After modeling and texturing your asset, you can begin the process of **exporting** your Blender project as a `.fbx`. The start of this process includes cleaning up your project, which can involve deleting or removing any extra objects, such as lights, cameras, or mannequins, to ensure you only export the accessory mesh, and applying any modifiers to your mesh object. + +For the latest export settings for Blender, see [rigid accessory export settings](./export-settings.md). + + +You've completed the exporting section of this tutorial. If desired, download a [reference sample](../../assets/art/accessories/creating-rigid/Rigid_Mask_Export.fbx) of this exported file for comparison. You can use this reference in the next importing step. + + +## Import to Studio + +Studio's 3D Importer provides a quick and easy way to import third-party 3D assets into your projects. The importer provides object previews and error-checking to ensure that your asset meets Studio's general 3D requirements. + +To import your asset, check out the latest information on [importing rigid accessories](./importing.md). + +## Convert + +After importing your asset into Studio, you can begin **fitting** your imported object to a mannequin and **converting** the `Class.Model` object into a `Class.Accessory`. When fitting and converting your accessory it's important to use the [Accessory Fitting Tool](../../art/accessories/accessory-fitting-tool.md) (AFT) to correctly preview the placement and apply the correct configurations to your accessory. + +To convert your asset into a `Class.Accessory`, check out the latest information on [converting rigid accessories](./importing.md#convert-rigid-accessories). + +## Upload and publish + +After generating your `Class.Accessory` item, you can now begin the process of **publishing** the asset to the Marketplace. This step is optional and only applicable for creators who intend to sell their asset. + +For additional information and instructions on this process, see [uploading and publishing instructions](../../marketplace/publish-to-marketplace.md). + + +
    + +You now have your accessory added to the Marketplace catalog! Use the item's Marketplace link to view your listing at any time, or to send to your connections and followers for additional engagement. + + + + +See the following resources for additional Marketplace policy and related information: + +- [Marketplace policy](../../marketplace/marketplace-policy.md) +- [Fees and commissions](../../marketplace/marketplace-fees-and-commissions.md) +- [Intellectual property](../../marketplace/intellectual-property.md) +- [Moderation](../../marketplace/moderation.md) + + diff --git a/.cursor/rules/roblox/art/accessories/import-clothing.md b/.cursor/rules/roblox/art/accessories/import-clothing.md new file mode 100644 index 00000000..f3e3df92 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/import-clothing.md @@ -0,0 +1,92 @@ +--- +title: Import clothing accessories +description: Use the 3D Importer to add third-party models to Studio before using the Accessory Fitting Tool to convert the model to an Accessory. +--- + +Use the following instructions to [import](#import-3d-assets) your `.fbx` or `.gltf` third-party model into Studio and [convert](#convert-layered-accessories) the asset to a clothing `Accessory` object that you can save to use in your experience, share with others, or upload to the Marketplace. + + +The following asset example and instructions are part of the [Clothing accessory tutorial](../accessories/creating/index.md) which covers the process of converting a model from Blender to publishing the asset to the Marketplace. + + +## Import 3D assets + +Studio's 3D Importer provides a quick and easy way to import third-party 3D assets into your projects. The importer provides object previews and error-checking to ensure that your asset meets Roblox's [general 3D requirements](../modeling/specifications.md). + +Keep in mind, your 3D layered accessory must also follow Roblox's [clothing specifications](../accessories/clothing-specifications.md) to eventually use this asset as a layered `Class.Accessory`, or you may experience errors later in the workflow. + +To import your asset: + +1. From Studio's **File** menu, select **3D Importer**. +2. In the file browser, select the `.fbx` or `.gltf` file saved locally. The 3D Importer loads a preview of the object. + + - If textures don't load for your asset, you can manually import your textures later. + - See [3D Importer](../../art/modeling/3d-importer.md) for additional information on import settings and troubleshooting. + +3. Select **Import**. The asset populates in your workspace as a `Class.Model` with the appropriate textures applied as a `Class.SurfaceAppearance` or `Class.MeshPart.TextureID`. + + +Manually add textures + + If textures didn't load correctly, add them manually. You may need to save and publish your experience in order to access the [Asset Manager](../../projects/assets/manager.md). + +1. In the **Asset Manager**, click the **Import** button. +2. Upload your image files. +3. After moderation clears for your image, select the `Class.MeshPart` parented within your imported `Class.Model`. +4. If you are using a single basic texture, set the `Class.MeshPart.TextureID` property to your uploaded texture image. +5. If you are using PBR textures: + + 1. Add a `Class.SurfaceAppearance` child to your `Class.MeshPart`. + + + + 2. In the `Class.SurfaceAppearance` properties, click each property value and assign the appropriate texture image from the asset dropdown: + + 1. Set the **ColorMap** to the **\_ALB** texture image. + 2. Set the **MetalnessMap** to the **\_MTL** texture image. + 3. Set the **NormalMap** to the **\_NOR** texture image. + 4. Set the **RoughnessMap** to the **\_RGH** texture image. + + + + + + + +After successful import, your model object should populate in your project as a `Class.Model` with the appropriate textures applied. See [3D Importer](../../art/modeling/3d-importer.md) for additional information on import settings and troubleshooting. + + +## Convert layered accessories + +With the `Class.Model` in your project, the last step in the process of clothing creation requires you to use the [Accessory Fitting Tool](../../art/accessories/accessory-fitting-tool.md) (AFT) to convert this object to a standard `Class.Accessory` that avatar characters can equip. + + +For shoes, you must convert the left shoe and the right shoe as separate accessories. Use the following instructions for each shoe before grouping both shoe accessories as a `Class.Model` when [saving to Roblox](../../marketplace/publish-to-marketplace.md#upload-an-asset). + + +To generate the accessory object: + +1. In the toolbar's **Avatar** tab, click **Accessory** to open the AFT. +2. Select the `Class.Model` of the clothing item in the viewport. The tool's text field populates with the name of the object selected. Alternatively, you can select the object within the **Explorer** window. +3. Test out various sample characters, clothing, and animations. See [Test accessories](../../art/accessories/accessory-fitting-tool.md#test-accessories) for additional information. + - If required, make minor cage adjustments using the editing features. Larger cage changes may require returning to your third-party modeling software and re-exporting the asset. +4. When ready to generate your accessory, click **Generate MeshPart Accessory**. The accessory object with your model populates in your workspace. + + +
    + +
    Clothing accessory in viewport
    +
    +
    + +
    Clothing accessory in Explorer
    +
    +
    + +After successful fitting and converting, your 3D model should populate in your project as an `Class.Accessory`. With this `Class.Accessory` you can perform any of the following: + +- Begin the process of [uploading and publishing](../../marketplace/publish-to-marketplace.md#upload-an-asset) the clothing accessory to the Marketplace. + +- Use the accessory in your current experience by equipping it to character models with [HumanoidDescription](../../characters/appearance.md#manually-modify-appearance), or by dragging and dropping the accessory under the appropriate character `Class.Model` object. + +- Save the accessory to your [Toolbox](../../projects/assets/toolbox.md) or make it public on the [Creator Store](../../production/creator-store.md) to share or use within any of your experiences. diff --git a/.cursor/rules/roblox/art/accessories/importing.md b/.cursor/rules/roblox/art/accessories/importing.md new file mode 100644 index 00000000..841a6679 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/importing.md @@ -0,0 +1,100 @@ +--- +title: Import rigid accessories +description: Use the 3D Importer to add third-party models to Studio before using the Accessory Fitting Tool to convert the model to an Accessory. +--- + +Use the following instructions to [import](#import-3d-assets) your `.fbx` or `.gltf` third-party model into Studio and [convert](#convert-rigid-accessories) the asset to an `Accessory` object that you can save to use in your experience, share with others, or upload to the Marketplace. + + +The following asset example and instructions are part of the [Rigid accessory tutorial](../accessories/creating-rigid/index.md) which covers the process of converting a model from Blender to publishing the asset to the Marketplace. + + +## Import 3D assets + +Studio's 3D Importer provides a quick and easy way to import third-party 3D assets into your projects. The importer provides object previews and error-checking to ensure that your asset meets Roblox's [general 3D requirements](../modeling/specifications.md). + +Keep in mind, the model that you intend to create as a rigid accessory must also follow Roblox's [accessory specifications](../accessories/specifications.md) to eventually use this asset as an `Class.Accessory`, or you may experience errors later in the workflow. + +To import your asset: + +1. From Studio's **File** menu, select **3D Importer**. +2. In the file browser, select the `.fbx` or `.gltf` file saved locally. The 3D Importer loads a preview of the object. + + + + - If textures don't load for your asset, you can manually import your textures later. + - See [3D Importer](../../art/modeling/3d-importer.md) for additional information on import settings and troubleshooting. + +3. Select **Import**. The asset populates in your workspace as a `Class.Model` with the appropriate textures applied as a `Class.SurfaceAppearance` or `Class.MeshPart.TextureID`. + + +Manually add textures + + +If textures didn't load correctly, add them manually. You may need to save and publish your experience in order to access the [Asset Manager](../../projects/assets/manager.md). + +1. In the **Asset Manager**, click the **Import** button. +2. Upload your image files. +3. After moderation clears for your image, select the `Class.MeshPart` parented within your imported `Class.Model`. +4. Add a `Class.SurfaceAppearance` child to your `Class.MeshPart`. + + + +5. In the `Class.SurfaceAppearance` properties, click each property value and assign the appropriate texture image from the asset dropdown: + + 1. Set the **ColorMap** to the **\_ALB** texture image. + 2. Set the **MetalnessMap** to the **\_MTL** texture image. + 3. Set the **NormalMap** to the **\_NOR** texture image. + 4. Set the **RoughnessMap** to the **\_RGH** texture image. + + + + + + + +After successful import, your model object should populate in your project as a `Class.Model` with the appropriate textures applied. See [3D Importer](../../art/modeling/3d-importer.md) for additional information on import settings and troubleshooting. + + +## Convert rigid accessories + +After importing your asset into Studio, you can begin **fitting** your imported object to a mannequin and **converting** the `Class.Model` object into a `Class.Accessory`. When fitting and converting your accessory it's important to use the [Accessory Fitting Tool](../accessories/accessory-fitting-tool.md) (AFT) to correctly preview the placement and apply the correct configurations to your accessory. + +To fit and generate your accessory: + +1. In the toolbar's **Avatar** tab, click **Accessory** to open the AFT. +2. In the tool's panel, select the **Part** field and, in the workspace, select the accessory `Class.MeshPart` object in the workspace and press **Next**. + + + +3. On the Asset Type page, select the **type** of asset and the expected **body scale**. Press **Next** when complete. + + 1. This example uses a **Hat** asset with an **Proportions Normal** scale. + 2. Body scale is typically set based on the original sculpting and sizing of the asset. See [Body Scale](../../art/accessories/body-scale.md) for additional information on rigid accessory scaling. + + + +4. On the preview screen, select one of the humanoid characters as a mannequin: + + 1. In the Avatars section, select a humanoid base body character. + 2. In the preview panel, deselect the previous selection. Only the humanoid body displays in the preview window. + + + +5. Using both the AFT preview window and the workspace, adjust the position, scale, and rotation of the accessory. + + 1. Use the AFT preview window and your mannequin as an accurate preview of how your asset fits on the character. The clothing mannequin in the workspace does not accurately portray how rigid accessories attach. + 2. In the workspace, use the **Move**, **Scale**, and **Rotate** tools to adjust the positioning of your rigid accessory. + 3. If you accidentally select something else, click back into the AFT panel to reselect the accessory and resume your adjustments using the transformation tools. + + + +6. After previewing and fitting your asset, select **Generate MeshPart Accessory** to create the Accessory and add it to your explorer. + +After successful fitting and converting, your 3D model should populate in your project as an `Class.Accessory`. With this `Class.Accessory` you can perform any of the following: + +- Begin the process of [uploading and publishing](../../marketplace/publish-to-marketplace.md#upload-an-asset) the accessory to the Marketplace. + +- Use the accessory in your current experience by equipping it to character models with [HumanoidDescription](../../characters/appearance.md#manually-modify-appearance), or by dragging and dropping the accessory under the appropriate character `Class.Model` object. + +- Save the accessory to your [Toolbox](../../projects/assets/toolbox.md) or make it public on the [Creator Store](../../production/creator-store.md) to share or use within any of your experiences. diff --git a/.cursor/rules/roblox/art/accessories/index.md b/.cursor/rules/roblox/art/accessories/index.md new file mode 100644 index 00000000..32d10b8d --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/index.md @@ -0,0 +1,164 @@ +--- +title: Rigid accessories +description: Rigid accessories are basic 3D cosmetics users can equip and wear on their avatar character. +--- + + + + + +
    + +
    + +A high-level overview of accessories on Roblox. + + +
    +
    + + + + +
    + +
    + +Create and sell your first basic accessory. + +
    +
    +
    + +Rigid accessories are the most basic 3D cosmetic items that users can equip and wear on their avatar character, such props, weapons, hats, and more. Unlike [clothing accessories](../accessories/layered-clothing.md) that stretch and fit over a character body, rigid accessories attach to a specific point on an avatar character and don't deform or wrap over a target. + +To create a custom Roblox accessory for your own experience or to sell on the Marketplace, it's important to start with the following: + +- A basic background with 3D modeling tools such as [Blender](https://www.blender.org/) or [Maya](https://www.autodesk.com/products/maya/overview). +- An understanding of the [components that make up a rigid accessory](#components-of-a-rigid-accessory). +- An understanding of the general [accessory creation process](#creation-process). +- Review Roblox's official tutorials to create your own accessories: + - [Rigid accessory creation tutorial](../../art/accessories/creating-rigid/index.md) - covers each process required for converting a 3D model to a rigid accessory and publishing it to the Marketplace. + - [Clothing creation tutorial](../../art/accessories/creating/index.md) - a step-by-step process of creating your own avatar-ready clothing from scratch in Blender. +- [Additional tools, resources, and guides](#resources) provided by Roblox to standardize and expedite the creation process. + +## Components of a rigid accessory + +All accessory models are made up of the same base components of a [mesh object](#mesh-part), [textures](#textures), and [attachment](#attachments). + +When [creating accessories](#creation-process), most of these components are created first in your modeling software, then converted to their appropriate Roblox Studio instance on import. + +### Mesh part + + +
    Bow rigid accessory mesh object
    + +
    T-shirt layered clothing mesh object
    +
    + + +Clothing, such as the t-shirt, require [additional clothing components](../accessories/layered-clothing.md) to apply the layerable effect to the 3D object. + + +All accessories require a single mesh object that represents the geometry of the accessory object. In Studio, this mesh object is represented as a `Class.MeshPart` nested under a single `Class.Model`. + +### Textures + + +
    2D texture map for the t-shirt model
    + +
    T-shirt model with texture applied
    +
    + +Textures are 2D image files that define the surface appearance of your 3D object. You can create textures within a texture painting program or a 3D modeling software. + +In Studio, textures images are imported as image assets and are set to `Class.MeshPart` objects by a child `Class.SurfaceAppearance` object or a `Class.MeshPart.TextureID` property. + +### Attachments + + +
    Attachment geometry defines where the attachment connects with the character
    + +
    Geometry with the "_Att" suffix automatically convert to `Class.Attachment` objects in Studio
    +
    + +Attachment points define where accessories attach to a character's body. In Studio, attachments are represented by `Class.Attachment` objects. + +## Creation process + +Custom accessories are first created in 3D modeling programs, such as [Blender](https://www.blender.org/) or [Maya](https://www.autodesk.com/products/maya/overview), before importing the `.fbx` or `.gltf` model into Studio. +To get started creating your first avatar asset, see the [avatar tutorials](../../avatar/tutorials.md). + +Depending on the type of asset you are creating, the creation process follows these high-level workflows: + + + +
    Rigid Accessory Workflow
    + +
    Layered Accessory Workflow
    +
    + + +Since 3D creation isn't a linear process and always requires reiteration and testing, the process of creating an accessory can differ between individuals and various creation workflows. + + +## Resources + +There are a variety of resources available for creators of all backgrounds to get started with accessory creation. + +If you are interested in specific avatar creation topics, use the following table to find guides and resources that best match your needs: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TopicResources
    Tutorials[Rigid accessory creation](../../art/accessories/creating-rigid/index.md)

    [Basic clothing creation](../../art/accessories/creating/index.md)
    Reference files[Accessory and clothing reference files](../../art/modeling/project-files.md)
    Technical specs[.FBX export settings](../../art/modeling/export-requirements.md)

    [General mesh specifications](../../art/modeling/specifications.md)

    [Accessory specifications](../../art/accessories/specifications.md)

    [Marketplace policy](../../marketplace/marketplace-policy.md)
    Cosmetic creation[Accessories overview](../../art/accessories/specifications.md)

    [Layered clothing overview](../../art/accessories/layered-clothing.md)


    [Accessory Fitting Tool](../../art/accessories/accessory-fitting-tool.md)

    [Accessory specifications](../../art/accessories/specifications.md)

    [Marketplace requirements](../../marketplace/marketplace-policy.md)
    Texturing[Texturing requirements](../../art/modeling/texture-specifications.md)

    [PBR textures](../../art/modeling/surface-appearance.md)
    Rigging and skinning[Rigging and skinning overview](../../art/modeling/rigging.md)

    [Humanoid rig requirements](../../art/characters/specifications.md#rigging)

    [Rig facial bones](../../art/characters/facial-animation/create-basic-heads.md#rigging)

    [Automatic Skin Transfer](../../art/accessories/automatic-skinning-transfer.md)

    [Skin facial bones](../../art/characters/facial-animation/create-basic-heads.md#skin-face-bones)
    Publishing and Marketplace[Uploading to Marketplace](../../marketplace/publish-to-marketplace.md)

    [Marketplace Policy](../../marketplace/marketplace-policy.md)

    [Fees and commissions](../../marketplace/marketplace-fees-and-commissions.md)
    diff --git a/.cursor/rules/roblox/art/accessories/layered-clothing.md b/.cursor/rules/roblox/art/accessories/layered-clothing.md new file mode 100644 index 00000000..2f8ab953 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/layered-clothing.md @@ -0,0 +1,201 @@ +--- +title: Layered clothing +description: Layered clothing are cosmetic accessories that stretch, fit, and layer over any body type simulating real-life clothing. +--- + + + + + +
    + +
    + +A high-level overview of 3D clothing on Roblox. + + +
    +
    + + + + +
    + +
    + +Create and sell your first basic layered clothing. + +
    +
    +
    + +Layered clothing accessories are 3D cosmetic items that users can equip and wear on their avatar body, such as pants, t-shirt, jackets, dresses, and more. Unlike [rigid accessories](../../art/accessories/index.md) that only attach to a specific point on a character, layered clothing stretches and fits over any body type and existing clothing. + +To create a custom Roblox accessory for your own experience or to sell on the Marketplace, it's important to start with the following: + +- A general background with 3D modeling tools such as [Blender](https://www.blender.org/) or [Maya](https://www.autodesk.com/products/maya/overview). +- An understanding of the [components that make up a layered accessory](#components-of-a-layered-clothing-accessory). +- An understanding of the general [clothing creation process](#creation-process). +- Review Roblox's official tutorials to create your own accessories: + - [Rigid accessory creation tutorial](../../art/accessories/creating-rigid/index.md) - covers each process required for converting a 3D model to a rigid accessory and publishing it to the Marketplace. + - [Clothing creation tutorial](../../art/accessories/creating/index.md) - a step-by-step process of creating your own avatar-ready clothing from scratch in Blender. +- [Additional tools, resources, and guides](#resources) provided by Roblox to standardize and expedite the creation process. + + +If you are a developer and are looking for information on manually equipping or configuring layered clothing accessories within an experience, including implementing layered clothing on a non-standard character model, see [Character appearance](../../characters/appearance.md). + + +Roblox also supports [classic clothing](#classic-clothing), 2D images that can be applied to your character's surface. + +## Components of a layered clothing accessory + +All accessory models are made up of the same base components of a [mesh object](#mesh-part), [textures](#textures), and [attachment](#attachments). Layered clothing requires additional components, such as a [poseable rig](#rigging-armature), and an [inner and outer cage](#inner-and-outer-cages), to allow the asset to stretch, fit, and layer over a target character and existing clothing items. + +When [creating accessories](#creation-process), all of the components are created first in your modeling software, then converted to their appropriate Roblox Studio instance on import. + +### Mesh part + + + +
    T-shirt clothing mesh object
    + +
    Bow accessory mesh object
    +
    + + +Simple accessories, such as the bow, are [rigid accessories](../../art/accessories/index.md) do not require the rigging and caging components that allow it to stretch and fit over a target. + + +All accessories require a single mesh object that represents the geometry of the accessory object. In Studio, this mesh object is represented as a `Class.MeshPart` nested under a single `Class.Model` + +### Textures + + +
    2D texture map for the t-shirt model
    + +
    T-shirt model with texture applied
    +
    + +Textures are image files that define the surface appearance of your accessory. You can create textures within a texture painting program or a 3D modeling software. In Studio, textures images are imported as image assets and are set to `Class.MeshPart` objects by a child `Class.SurfaceAppearance` object or a `Class.MeshPart.TextureID` property. + +### Attachments + + +
    Attachment geometry defines where the attachment connects with the character
    + +
    Geometry with the "_Att" suffix automatically convert to `Class.Attachment` objects in Studio
    +
    + +For layered clothing, the attachment point is used to associate with the correct body part when the body ragdolls or is dismembered. In Studio, attachments are represented by `Class.Attachment` objects. + +Attachments for clothing items are automatically generated in Studio using the [Accessory Fitting Tool](../../art/accessories/accessory-fitting-tool.md). + +### Rigging armature + + +
    To ensure natural movement of the clothing item, it must be weighted to a character rig
    + +
    When the rig is properly set up, the layered model can move and bend with the character rig
    +
    + +A rigging armature defines how a layered asset can move with a character model. Using rigging and skinning techniques, you can set the areas of your clothes to move naturally with a character model's joints, such as ensuring a shirt sleeve correctly follows the movement of the elbow and shoulder. In Studio, this rigging and skinning data is saved to the mesh geometry. + +### Inner and outer cages + + +
    The inner cage defines the inner surface of the clothing item where the clothes wrap over
    + +
    The outer cage defines the outer surface of the clothing item where any additional clothes can wrap and layer over
    +
    + +Cage meshes indicate the inner and outer surfaces of a layered accessory. The inside cage of a t-shirt defines how the t-shirt stretches and fits over a character body. The outer cage of a t-shirt defines how additional layered clothing fit over the t-shirt. In Studio, these cages are represented by `Class.WrapLayer` objects. + +## Creation process + +Custom accessories are first created in 3D modeling programs, such as [Blender](https://www.blender.org/) or [Maya](https://www.autodesk.com/products/maya/overview), before importing the `.fbx` or `.gltf` model into Studio. +To get started creating your first avatar asset, see [Avatar Tutorials](../../avatar/tutorials.md). + +Depending on the type of asset you are creating, the creation process follows these high-level workflows: + + +
    Layered Accessory Workflow

    + +
    Rigid Accessory Workflow

    + +
    + + +Since 3D creation isn't a linear process and always requires reiteration and testing, the process of creating an accessory can differ between individuals and various creation workflows. + + +## Resources + +There are a variety of resources available for creators of all backgrounds to get started with accessory creation. + +If you are interested in specific avatar creation topics, use the following table to find guides and resources that best match your needs: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TopicResources
    Tutorials[Rigid accessory creation](../../art/accessories/creating-rigid/index.md)

    [Basic clothing creation](../../art/accessories/creating/index.md)
    Reference files[Accessory and clothing reference files](../../art/modeling/project-files.md)
    Technical specs[.FBX export settings](../../art/modeling/export-requirements.md)

    [General mesh specifications](../../art/modeling/specifications.md)

    [Accessory specifications](../../art/accessories/specifications.md)

    [Marketplace policy](../../marketplace/marketplace-policy.md)
    Cosmetic creation[Accessories overview](../../art/accessories/specifications.md)

    [Layered clothing overview](../../art/accessories/index.md)

    [Create face accessories](../../art/characters/facial-animation/create-face-accessories.md)

    [Accessory Fitting Tool](../../art/accessories/accessory-fitting-tool.md)

    [Accessory specifications](../../art/accessories/specifications.md)

    [Marketplace requirements](../../marketplace/marketplace-policy.md)
    Texturing[Texturing requirements](../../art/modeling/texture-specifications.md)

    [PBR textures](../../art/modeling/surface-appearance.md)
    Rigging and skinning[Rigging and skinning overview](../../art/modeling/rigging.md)

    [Humanoid rigging requirements](../../art/characters/specifications.md#rigging)

    [Rigging facial bones](../../art/characters/facial-animation/create-basic-heads.md#rigging)

    [Auto skin transfer](../../art/accessories/automatic-skinning-transfer.md)

    [Skin facial bones](../../art/characters/facial-animation/create-basic-heads.md#skin-face-bones)
    Testing and validation[Calisthenics tool](../../art/modeling/calisthenics-tool.md)

    [Clothing validation tool](../../art/accessories/validation-tool.md)
    Publishing and Marketplace[Upload to Marketplace](../../marketplace/publish-to-marketplace.md)

    [Marketplace policy](../../marketplace/marketplace-policy.md)

    [Fees and commissions](../../marketplace/marketplace-fees-and-commissions.md)
    + +## Classic clothing + +Classic clothing assets are 2D images that you can apply to the surface of an avatar body as t-shirts, shirts, or pants. You can design these assets in any image processing software, test the textures in Studio, and then upload the designs to the Marketplace to sell. See [Classic clothing](../../art/classic-clothing.md) for more information on creating, uploading, and selling these assets. + + diff --git a/.cursor/rules/roblox/art/accessories/project-files.md b/.cursor/rules/roblox/art/accessories/project-files.md new file mode 100644 index 00000000..a81f455b --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/project-files.md @@ -0,0 +1,136 @@ +--- +title: Accessory project files and references +description: Download various accessory-related project files and reference files. +--- + + +See [Resources](../../avatar/resources.md) for a complete list of avatar-related downloadable content. + + +The following `.fbx`, `.blend`, and `.ma` project files are available to use as templates or as reference: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FileDescription
    Tshirt-model.fbxUncaged example clothing ready for caging in a 3D modeling software.
    Additional-FBX-assets.zipCaged 3D accessory models ready for import into Studio or in a modeling tool.
    Additional-FBX-assets.zipAdditional caged clothing items from How to cage Roblox's [3D clothing video guide](https://www.youtube.com/watch?v=QwZaA9Gc-WQ).
    ClassicMannequin.fbxA [Classic body](../../art/characters/specifications.md#classic) type blank mannequin to use in Studio or your modeling application.
    ClassicMannequin_With-CagesA [Classic](../../art/characters/specifications.md#classic) body type blank mannequin with **body cages** to use in Studio or your modeling application for clothing design. Due to unconfigured cage objects, this file may not import correctly into Studio until modified.
    RthroMannequin.fbxAn [Rthro Normal](../../art/characters/specifications.md#normal) body type blank mannequin to use in Studio or your modeling application.
    RthroMannequin_With-Cages.fbxAn [Rthro Normal](../../art/characters/specifications.md#normal) body type blank mannequin with **body cages** to use in Studio or your modeling application to use in Studio or your modeling application for clothing design. Due to unconfigured cage objects, this file may not import correctly into Studio until modified.
    RthroSlenderMannequin.fbxAn [Rthro Slender](../../art/characters/specifications.md#slender) body type blank mannequin to use in Studio or your modeling application.
    RthroSlenderMannequin_With-Cages.fbxAn [Rthro Slender](../../art/characters/specifications.md#slender) body type blank mannequin with **body cages** to use in Studio or your modeling application to use in Studio or your modeling application for clothing design. Due to unconfigured cage objects, this file may not import correctly into Studio until modified.
    +
    + + + + + + + + + + + + + + + + + + + + + + +
    FileDescription
    Rig_and_Attachments_Template.blendStarting armature rig template for Blender. Contains an armature with correct R15 naming conventions and attachment points. Use this template for rigging bodies and clothing items.
    Clothing_Cage_Template.blendStarting template for Blender that includes a full-body inner and outer cage mesh for creation of layered clothing. Use this template for caging your clothing accessories.
    Combined-Template.blendTemplate file containing all content from previous templates, includes rig skeleton, body cages, attachment points. Use this template to rig and cage bodies and accessories.
    + +
    + + + + + + + + + + + + + + + + + + + + + + + +
    FileDescription
    Rig_and_Attachments_Template.maStarting armature rig template for Maya. Contains an armature with correct R15 naming conventions and attachment points. Use this template for creating bodies and clothing items.
    Clothing_Cage_Template.maStarting template for Maya, includes a full-body inner and outer cage mesh for creation of layered clothing. Use this template for caging your clothing accessories.
    Combined-Template.maTemplate file containing all content from previous templates, includes rig skeleton, body cages, attachment points. Use this template to rig and cage bodies and accessories.
    + +
    + + + The following `.fbx` files were exported from Maya for use in modeling applications. If you are using Blender or Maya in your workflow, use the specific template files for those programs instead of the following files. + + + + + + + + + + + + + + + + + + + +
    FileDescription
    Rig_and_Attachments_Template.fbxStarting armature rig template for general modeling software. Contains an armature with correct R15 naming conventions and attachment points. Use this template for creating bodies and clothing items.
    Clothing_Cage_Template.fbxStarting template for general modeling software, includes a full-body inner and outer cage mesh for creation of layered clothing. Use this template for caging your clothing accessories.
    +
    +
    diff --git a/.cursor/rules/roblox/art/accessories/publish-eyebrows-eyelashes.md b/.cursor/rules/roblox/art/accessories/publish-eyebrows-eyelashes.md new file mode 100644 index 00000000..7d68f306 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/publish-eyebrows-eyelashes.md @@ -0,0 +1,62 @@ +--- +title: Publish bodies with eyelashes and eyebrows +description: Eyelashes and eyebrows are optional accessory items you can equip to an avatar to publish in the Marketplace. +--- + +Eyelashes and eyebrows are cosmetics that can help emphasize facial features and create a unique way of customizing a character. Similar to clothing, eyelashes and eyebrows are [3D layered clothing](../../art/accessories/layered-clothing.md) that can stretch and fit over different face shapes and can deform and stretch with character face animations. + + +
    + +
    Character body without eyelashes and eyebrows
    +
    +
    + +
    Character body with eyelashes and eyebrows
    +
    +
    + +
    Standalone eyelashes and eyebrows
    +
    +
    + +When publishing eyelashes and eyebrows, you must parent these `Class.Accessory` objects under the avatar character's `Class.Model` prior to uploading the character `Model` to the Marketplace. These `Accessory` face objects must adhere to Roblox's accessory requirements and include layered components such as caging, rigging, and skinning components. For an overview on creating your own eyelashes and eyebrows, see [Create face accessories](../../art/characters/facial-animation/create-face-accessories.md). + + +At this time, you can only bundle **eyelashes**, **eyebrows**, and **hair** with your body on Marketplace upload. Other facial accessories, such as horns, makeup, glitter, or other cosmetics are not acceptable. See [Marketplace policy](../../marketplace/marketplace-policy.md) for specific information on allowable cosmetics and other policy regulations and guidelines. + + +## Configure eyelash and eyebrow accessories + +Use the following steps to import your face accessory and body assets into Studio. After converting the eyelashes and eyebrows to `Accessory` objects, parent the `Accessory` objects within the character `Model` before uploading the character to the Marketplace. + +You can download reference `.fbx` models of [eyelashes](../../assets/art/reference-files/Eyelashes.fbx), [eyebrows](../../assets/art/reference-files/Eyebrows.fbx), and an [avatar body](../../assets/art/reference-files/AnimeFemale-Studio-Ready.fbx) to follow along this process. + +1. In the [3D Importer](../../art/modeling/3d-importer.md), import the `.fbx` files of your face accessory and body. The eyelashes, eyebrows, and body each populate in your Workspace as a `Model`. + 1. If you are using the reference body, set **Rig General** > **Rig Type** to **Rthro**. +2. Use the [Accessory Fitting Tool](../../art/accessories/accessory-fitting-tool.md) and select the **Eyelash** or **Eyebrow** model and click **Next**. + + + +3. Select the appropriate **Accessory** > **Eyelash** or **Accessory** > **Eyebrow** asset type and click **Next**. +4. (Optional) Preview the fit of your face accessory. + 1. If the face accessory was modeled on a specific character body, you may want to import that character body into Studio and use it as a mannequin in the fitting tool's preview. See [Accessory Fitting Tool](../../art/accessories/accessory-fitting-tool.md) for more information on adding custom characters. + 2. If using the provided reference body, you can continue to step 5. +5. Click **Generate MeshPart Accessory** to create your MeshPart. +6. **Repeat steps 2-5** for the other face accessory. +7. In the Outliner, **drag and drop** the face `Accessory` objects within the character `Model` instance. The accessories automatically equip and attach to the correct areas of your avatar character. + + +
    + +
    Workspace preview of body with face accessories
    +
    +
    + +
    Outliner hierarchy
    +
    +
    + +8. If required, rename the accessory objects to `EyelashAccessory` or `EyebrowAccessory` accordingly. + +9. Once you are ready to upload the avatar model with your face accessories, see [Upload an asset](../../marketplace/publish-to-marketplace.md#upload-an-asset) for instructions on uploading and publishing your avatar body with eyelashes and eyebrows to the Marketplace. diff --git a/.cursor/rules/roblox/art/accessories/rig-and-cage-existing-models.md b/.cursor/rules/roblox/art/accessories/rig-and-cage-existing-models.md new file mode 100644 index 00000000..253b2e30 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/rig-and-cage-existing-models.md @@ -0,0 +1,136 @@ +--- +title: Rigging and caging models (Blender) +description: Convert a 3D model into a layered 3D model in Blender before importing and converting the model into Studio as an Accessory. +--- + +You can use a third party modeling tool, such as [Blender](https://www.blender.org) or [Maya](https://www.autodesk.com/products/maya/overview), to modify an existing 3D object into a layerable 3D model that you can [import and convert](../../art/accessories/accessory-fitting-tool.md) into Studio as an `Class.Accessory`. To create a layered model, you must **parent** (Blender) or **bind** (Maya) a 3D model to a mannequin armature and then modify two additional meshes to fit around the inner and outer surface of the accessory model. + +This guide covers the basic workflow for converting a 3D model into a layerable model in Blender using the following steps: + +1. [Importing](#import) a 3D asset into a template Blender project file. +2. [Parenting](#parent-and-weight) the imported mesh object to the project file's armature rig with Blender's Automatic Weights feature. + 1. Manual skinning is not covered, see [Skin a simple mesh](../modeling/skin-a-simple-mesh.md) for an overview of manual skinning. +3. [Editing](#edit-inner-and-outer-cage-meshes) the Inner and Outer Cage meshes to represent the inner and outer surface of the model. + +A full list of asset requirements for a layered model can be found in [Layered model specifications](../../art/accessories/specifications.md). + + +This guide uses Blender version 3.0. If you are +using another version of Blender, there may be minor differences in UI and +settings. + + +## Import + +Set up the project by opening the [rig template project](../../assets/modeling/meshes/reference-files/Rig_and_Attachments_Templates.zip) and importing the [sample accessory model](../../assets/accessories/reference-files/Tshirt-model.fbx). + +To import and parent the accessory model: + +1. In Blender, open the [rig template project](../../assets/modeling/meshes/reference-files/Rig_and_Attachments_Templates.zip). This file contains the default armature required for layered clothing. + + Blender Mannequin Template Project + +2. In the Outliner, toggle the Hide icon to visually remove any non-armature objects in your workspace, such as Attachments. + + + +3. In the File Menu, select **Import** and click **FBX (.fbx)**. Select the accessory model file you intend to fit onto the mannequin. The accessory populates in the workspace and, depending on how the asset was modeled, may need resizing or adjustment to fit on the mannequin. + + + +## Parent and weight + +For this basic accessory, parent the imported mesh to the template mannequin armature using Blender's [Automatic Weights](https://docs.blender.org/manual/en/latest/animation/armatures/skinning/parenting.html#with-automatic-weights) feature. Parenting the accessory model mesh to the armature in this way enables the 3D model to move and deform naturally with the character in Studio. + + +Complex clothing and accessory items with moving parts may require more precise skinning with Blender's Weight Painting or other skinning tools. See [Skin a simple mesh](../modeling/skin-a-simple-mesh.md) for an example of manual skinning. + + +To parent the mesh object with the mannequin armature: + +1. In the Outliner, temporarily hide both of the Cage objects to expose the Armature by toggling the Hide icon. + +2. In the Workspace, click the mesh object, then hold Shift and **click** the mannequin's armature. + +3. Right click, or use CtrlP (⌘P) to parent the accessory to the armature by selecting **Automatic Weights**. + + + +4. Reduce visual clutter by hiding all objects except the **cages** and **model**. Click on the symbol next to the object in the Outliner panel. + + + +## Edit inner and outer cage meshes + +After parenting and weighting your clothing item, you can start adding the cage meshes to your clothing to indicate the inner and outer surfaces of your clothing. + +When setting up the cages, the accessory model needs to fit on top of the inner cage and then the outer cage must be adjusted to fit tightly over the model object. + +You can quickly add these two full-body meshes from the [Clothing_Cage_Template.blend](../../assets/modeling/meshes/reference-files/Clothing_Cage_Templates.zip) into your existing project. + + +Don't delete vertices or alter the UVs on the Inner or Outer Cages as this can cause errors when importing in Studio or when equipping onto a character. + + +To quickly add clothing cages to your project: + +1. Download the [Clothing_Cage_Template.blend](../../assets/modeling/meshes/reference-files/Clothing_Cage_Templates.zip) project. +2. In your current Blender project, switch to Object Mode and navigate to **File** > **Append**. A file browser displays. + + + +3. Click on the Clothing_Cage_Template.blend file and navigate to the **Object** folder. + + + +4. In the Object folder, hold Shift and select both `YourClothingName_InnerCage` and `YourClothingName_OuterCage` and click **Append**. The two cage mesh objects populate in your project. + + + +To modify cages for your accessory model: + +1. In the Outliner panel, rename the **\_InnerCage** and **\_OuterCage** meshes to match the imported mesh object (ex. Tshirt_InnerCage, Tshirt_OuterCage). Make sure this exactly matches the mesh name that you imported. + + + +2. In the Outliner window, select the \_OuterCage mesh and switch to **Edit Mode** Tab. + +3. In the Viewport, enable **X-Ray** view and **Materials View** to improve visibility and access to the vertices of the outer cage mesh. + + + +4. While in Edit Mode, adjust the vertices with the Edit Mode tools so that the Outer Cage completely covers the top of the accessory. + + + When manipulating vertices, try to keep each face (the space between vertices) consistently sized and retain symmetry wherever possible. Use the symmetry toggles on the top right of the Viewport when applicable. + + + + +A finished outer cage should completely cover the accessory with minimal extra space. For comparison, you can download a completed caged version of the Tshirt model [here](../../assets/accessories/reference-files/Tshirt-caged.fbx). + + + +When finished with the caging and modeling of your asset, see [Exporting requirements](../../art/modeling/export-requirements.md#blender) for details on exporting the model from Blender. + +After exporting, see [Accessory Fitting Tool](../../art/accessories/accessory-fitting-tool.md) and [Converting clothing accessories tutorial](../accessories/creating/converting.md) for instructions on importing and converting the model into a usable accessory. + +## Tips for editing cages + +The following tips may be helpful when manipulating your cage vertices: + +- On the top-right of the Viewport, toggle different [Viewport Shading](https://docs.blender.org/manual/en/latest/editors/3dview/display/shading.html) options, such as **Material Preview** and **X-Ray**, when necessary to better access vertices and view your caging progress. +- You can hide vertices you're currently not adjusting by using **Hide** (H) and **Unhide** (AltH; ⌥H). +- Multiple vertices can be selected and adjusted at the same time. Use **Move**, **Scale**, or any other Blender tools to make adjustments to multiple vertices at once. + + diff --git a/.cursor/rules/roblox/art/accessories/specifications.md b/.cursor/rules/roblox/art/accessories/specifications.md new file mode 100644 index 00000000..8cb5da65 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/specifications.md @@ -0,0 +1,357 @@ +--- +title: Rigid accessory specifications +description: Rigid accessory specifications lists the specific technical requirements for basic avatar accessories. +--- + +When creating rigid accessories for Roblox, it's important to meet specific technical requirements to ensure compatibility and optimize for performance and quality. Many of these requirements must be applied when designing and modeling your asset in a third-party modeling application. + +Although rigid accessories and layerable clothing accessories share many technical requirements, layerable accessories must include [additional components](../../art/accessories/clothing-specifications.md) to ensure the accessories deform and stretch appropriately on different body scales. + +If you are intending to publish and sell these assets on the Marketplace, there are additional [Marketplace policy](../../marketplace/marketplace-policy.md) standards that you must follow for any accessory or clothing item. + +When ready to export, see [Export requirements](../../art/accessories/export-settings.md) for mesh export settings for Blender and Maya. + + +If creating other types of 3D models: +
      +
    • For generic meshes, see [general mesh specifications](../modeling/specifications.md) and [general export settings](../modeling/export-requirements.md).

    • +
    • For layered accessories, see [layered accessory specifications](../accessories/clothing-specifications.md) and [layered export settings](../accessories/clothing-export-settings.md).

    • +
    • For avatar characters, see [avatar specifications](../characters/specifications.md) and [avatar export settings](../characters/export-settings.md).
    • +
    +
    + +## Geometry and budgets + +- **Single Mesh** - Accessories must be a single mesh. +- **Budgets** - Accessories can't exceed **4k** triangles. +- **Watertight** - All geometry must be watertight without exposed holes or backfaces. +- Use **quads** whenever possible. Avoid faces with 5 or more sides. +- **Mesh Size** - Depending on the type of accessory asset, meshes must follow a standard size (in studs, centered on attachment point) depending on the [body scale](#body-scale) it is designed for. + +### Body scale + +Roblox supports 3 types of body scales: `Classic`, `Normal`, and `Slender`. When designing your accessory, the size of your accessory cannot exceed the following sizes based on body scale and accessory asset type. Accessory size is measured based on attachment orientation. + +See [Body scale](../accessories/body-scale.md) for more information on the different types of body proportions Roblox supports. + + +You can use tools like the [Accessory Fitting Tool](../../art/accessories/accessory-fitting-tool.md) to help visualize and adjust the scale of your mesh on a mannequin within a visualized boundary before uploading and publishing the asset. + + +#### Classic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Asset TypeWidth (X)Height (Y)Depth (Z)
    Hat343
    Hair35*
    (Not centered: 2 up, 3 down)
    3.5*
    (Not centered: 1.5 front, 2 behind)
    Face322
    Eyebrow and Eyelashes1.50.50.5
    Neck332
    Shoulder (attached to NeckAttachment)733
    Shoulder (other)333
    Front333
    Back1074.5*
    (Not centered: 1.5 front, 3 behind)
    Waist43.5*
    (Not centered: 1.5 up, 2 down)
    7
    + +#### Normal + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Asset TypeWidth (X)Height (Y)Depth (Z)
    Hat1.872.51.87
    Hair1.873.12*
    (Not centered: 1.25 up, 1.875 down)
    2.18*
    (Not centered: 0.9375 front, 1.25 behind)
    Face1.871.251.25
    Eyebrow and Eyelashes1.50.50.5
    Neck2.953.682.16
    Shoulder (attached to NeckAttachment)6.903.683.24
    Shoulder (attached to RightCollarAttachment, LeftCollarAttachment)2.953.683.24
    Shoulder (attached to RightShoulderAttachment, LeftShoulderAttachment)2.674.403.09
    Front2.953.683.24
    Back9.868.594.87*
    (Not centered: 1.623 front, 3.246 behind)
    Waist3.944.29*
    (Not centered: 1.842 up, 2.457 down)
    7.57
    + +#### Slender + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Asset TypeWidth (X)Height (Y)Depth (Z)
    Hat1.782.51.78
    Hair1.783.12*
    (Not centered: 1.25 up, 1.875 down)
    2.08*
    (Not centered: 1.892 front, 1.189 behind)
    Face1.781.251.18
    Eyebrow and Eyelashes1.50.50.5
    Neck2.593.391.92
    Shoulder (attached to NeckAttachment)6.053.392.88
    Shoulder (attached to RightCollarAttachment, LeftCollarAttachment)2.593.392.88
    Shoulder (attached to RightShoulderAttachment, LeftShoulderAttachment)2.373.962.75
    Front2.593.392.88
    Back8.647.914.32*
    (Not centered: 1.443 front, 2.886 behind)
    Waist3.763.29*
    (Not centered: 1.414 up, 1.885 down)
    6.73
    + +## Textures + +Textures created for accessories must meet Roblox's [texture specifications](../../art/modeling/texture-specifications.md). + +- Non-albedo maps (RGH, MTL, NOR) for rigid accessories cannot exceed 256x256. + +## Attachment points + +`Class.Attachment` objects indicate where an accessory model attaches to a point on a character body. Whether you are creating rigid or [layered](./layered-clothing.md) accessories, Studio's [Accessory Fitting Tool](../../art/accessories/accessory-fitting-tool.md) (AFT) automatically adds and configures the appropriate `Class.Attachment` with the following specifications: + +- **One attachment** - Each accessory, including layered clothing, require at least one attachment point to its associated body part. +- **Naming Convention** - The `Class.Attachment` name must follow a specific naming convention depending on the `Class.Accessory.AccessoryType`. The AFT generates an appropriate `Class.Attachment` name automatically. + +If setting or configuring attachments manually in Studio, use the following names for your `Class.Attachment` object depending on the accessory type: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Accessory typeAttachment name
    Hat`HatAttachment`
    Hair`HairAttachment`
    Back`BodyBackAttachment`
    Waist`WaistFrontAttachment`, `WaistCenterAttachment`, `WaistBackAttachment`
    Shoulder`RightShoulderAttachment`, `RightCollarAttachment`, `NeckAttachment`, `LeftCollarAttachment`, `LeftShoulderAttachment`
    Face, Eyelash, Eyebrow`FaceFrontAttachment`, `FaceCenterAttachment`
    Neck`NeckAttachment`
    Front`BodyFrontAttachment`
    + + + Importing attachment objects from a third-party tool is not supported for rigid accessories, but is supported for [character bodies](../characters/specifications.md#attachments). + + +- **Shoulders and Collars** - Even though they are in similar locations, Shoulder and Collar attachment points interact with character rigs differently for rigid accessories. + - Items using `RightShoulderAttachment` or `LeftShoulderAttachment` move with the character's arm. + - Items using `RightCollarAttachment` or `LeftCollarAttachment` do not move with the character's arm. + +## Layered properties + +Accessories, such as clothing items, which stretch and fit around any character body type, must include additional configurations to achieve the layering effect. See [Clothing specifications](../../art/accessories/clothing-specifications.md) for specifications required to create layerable accessories. + +## Marketplace requirements + +Your items must meet the following requirements before you upload them to the Marketplace to sell: + +- Ensure that your items adhere to the [Marketplace program guidelines](../../marketplace/marketplace-policy.md). +- Whenever applicable, ensure that your items adhere to Roblox's [custom mesh specifications](../../art/modeling/specifications.md). +- Object `Class.MeshPart.Material|Material` is set to `Plastic`. +- Object `Class.MeshPart.Transparency|Transparency` is set to 0. +- Object `Class.MeshPart.VertexColor|VertexColor` is the default `1, 1, 1`. +- Your `Class.Accessory` instance does not contain extraneous objects, like `Class.Script` or additional `Class.Part` instances. diff --git a/.cursor/rules/roblox/art/accessories/validation-tool.md b/.cursor/rules/roblox/art/accessories/validation-tool.md new file mode 100644 index 00000000..ca7798b2 --- /dev/null +++ b/.cursor/rules/roblox/art/accessories/validation-tool.md @@ -0,0 +1,157 @@ +--- +title: Clothing Validation Tool +description: The Layered Clothing Validation Tool checks for common clothing creation issues in Blender or Maya before exporting. +--- + +The **Layered Clothing Validation Tool** is a supplemental tool you can install in either [Blender](https://www.blender.org/download/releases/3-0/) or [Maya](https://www.autodesk.com/products/maya/overview) to help quickly identify and fix common issues with layered clothing assets before you export them. + + +
    + +
    Blender Validation Tool
    +
    +
    + +
    Maya Validation Tool
    +
    +
    + +While this tool can save you time in the typical iteration process between your 3D modeling program and Studio, the tool doesn't provide comprehensive verification of all aspects of layered clothing assets. You must ensure your layered clothing model meets both the [general mesh requirements](../../art/modeling/specifications.md) and Roblox-specific [layered clothing requirements](../../art/accessories/specifications.md#layered-requirements) prior to importing it into Studio. + +## Install the Clothing Validation Tool + +There are two separate installation files and instructions for Blender and Maya. + + +The Layered Clothing Validation Tool is designed for both [Blender 3.0](https://www.blender.org/download/releases/3-0/) and [Maya 2022](https://www.autodesk.com/products/maya/overview). You can download and modify the tool for any use. + + +### Blender + +To install the Clothing Validation Tool in Blender: + +1. Download [ValidationTool_Blender.zip](../../assets/accessories/validation-tool/ValidationTool_Blender.zip) and save the `.zip` file locally. +2. In Blender, navigate to **Edit** > **Preferences**. +3. In Preferences, go to the **Add-Ons** section on the left side-bar. + + + +4. Click the **Install...** button. A file browser displays. +5. Select the downloaded `.zip` file and click **Install Add-On**. +6. In the **Add-Ons section**, find the **Validation Tool** and **enable the add-on**. + + + +7. Return to your workspace and **expand the side toolbar** in the Viewport to access the add-on. + + +
    + +
    Sidebar indicator
    +
    +
    + +
    Expanded sidebar
    +
    +
    + +### Maya + +Before you begin the process of installing the Validation Tool in Maya, you must install [Python 3.0](https://www.python.org/downloads/) or higher. If you already have Python installed, you can proceed to installing the Validation Tool. + +To install Python 3.0+ on your device: + +1. Download the appropriate installer from the official [Python website](https://www.python.org/downloads/). +2. Open the installer and follow the installation instructions. + + - Enable **Add Python ### to PATH** before selecting **Install Now**. + + + +To install the Clothing Validation Tool in Maya: + +1. Download [ValidationTool_Maya.zip](../../assets/accessories/validation-tool/ValidationTool_Maya.zip) and unzip the content in a local directory. +2. Open the contents of the `.zip` file in a file browser. + + - If on Windows, **double-click** `install.bat`. This runs a batch script that enables you to quickly run the Validation Tool in Maya. + - If on Mac, **right-click** the `install.command` file and select **Open With** > **Terminal**. This runs a terminal script that enables you to quickly run the Validation Tool in Maya. + + + + + If on Mac, you may need to adjust the read/write permissions for the `install.command` file to run successfully. This step requires administrator access. + + To allow the `install.command` file to have full read and write access: + + 1. Open **terminal** and use the `cd` command to navigate to the directory of the saved `install.command` file. + 2. Type the command `chmod 777 install.command` and press **Enter**. This should enable all read and write privileges for this file. + + + +3. When prompted, type your Maya version and press **Enter**. For example, if using Maya 2020, input **2020** as your version. + + +4. When installation is successful, the following message displays: + + +5. Open Maya and navigate to **Windows** > **General Editors** > **Script Editor**. + +6. When using the plugin for the first time, in the Script Editor, type `import ValidationTool` then press the **Play** button in the top bar of the Script Editor. The plugin UI displays. + + + - When using the plugin after the initial launch, launch the plugin by typing `ValidationTool.validationTool()` and clicking the **Play** button. + - Alternatively, you can set up a shortcut from the plugin UI after initial launch by clicking the **Create shortcut button on Maya shelf** button. + + + +## Validate assets + +With the plugin active and a layered asset in your workspace, you can begin validating content. After the check, results with issues change to **red** (Blender) or **yellow** (Maya). You can resolve some failed checks by clicking the check button. See [Checks and Troubleshooting Steps](#checks-and-troubleshooting-steps) for details on each validation check. + + +
    + +
    Checks without issues display as grey (Blender) or green (Maya).
    +
    +
    + +
    In this example, potential intersection issues are highlighted in the Viewport.
    +
    +
    + +To use the Validation Tool on your asset: + +1. **Select** the object in your scene. +2. Open the Validation Tool and click **Check Assets**. After a few moments, the UI updates and produces an output message. +3. Results with issues are highlighted with red or yellow. Some issues can be automatically corrected by clicking the highlighted button. + + +This Validation Tool only checks for common clothing creation issues. Ensure your layered clothing model meets both the [general mesh specifications](../../art/modeling/specifications.md) and Roblox-specific [layered clothing specifications](../../art/accessories/specifications.md#layered-requirements) before uploading to Studio. + + +## Checks and troubleshooting steps + +Refer to the table below for details on the specific checks and troubleshooting steps: + +
    +
    **Layers**
    +
    Checks for extra layers in the scene. Automatic fix attempts to remove extra layers.

    If the automatic fix fails, manually remove extra layers.

    + +

    **Transforms**
    +
    Checks that geometry location, rotation, and scale are frozen (`0`,`0`,`0`). Automatic fix attempts to freeze the transforms. This may cause changes to your rig.

    If the automatic fix fails, manually freeze your geometry.

    + +

    **Unused Material**
    +
    Checks for any unused data in the scene, such as [orphan data](https://docs.blender.org/manual/en/latest/editors/outliner/interface.html?highlight=orphan) (Blender) or [construction history](https://knowledge.autodesk.com/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2022/ENU/Maya-Basics/files/GUID-503E227B-EF49-4A78-B3CA-7EAC588017C9-htm.html) (Maya), or unused materials. Automatic fix attempts to remove extra data.

    If automatic fix fails, manually remove unnecessary data and objects.

    + +

    **Keyframes**
    +
    Checks for any unnecessary keyframes. Automatic fix attempts to remove keyframes.

    If automatic fix fails, manually remove keyframe data.

    + +

    **Attachment Points**
    +
    Checks that attachment points are present and use the correct naming convention. Automatic fix attempts to parent any unexpected attachment points.

    + +

    **Intersection**
    +
    Checks for any intersection between character geometry and the inner/outer cage mesh geometry. In Blender, clicking the button switches to **Edit Mode** and highlights vertices that are intersecting the inner or outer mesh.

    Some edges, such as edges of the holes for the sleeves, neck and torso edges, may be highlighted by default behavior and can be ignored.

    + +

    **Texture Format**
    +
    Checks that textures match texture requirements, such as resolution size. Users can also select an external image file. Refer to the output messages to manually resolve any texture related issues.
    +
    diff --git a/.cursor/rules/roblox/art/blender.md b/.cursor/rules/roblox/art/blender.md new file mode 100644 index 00000000..eecf8f27 --- /dev/null +++ b/.cursor/rules/roblox/art/blender.md @@ -0,0 +1,865 @@ +--- +title: Blender +description: Learn about Blender tools. +--- + +Blender is a free, open-source 3D creation suite with a broad range of modeling, sculpting, texturing, and animation tools. Running on Linux, macOS, and Windows systems, this cross-platform application is a popular choice for creators who want to make avatars, accessories, and 3D objects for Roblox experiences. + +While this is by no means an exhaustive list, the following guide offers high-level information on essential Blender tools and features for 3D creation, as well as best practice guidance on designing 3D art between Blender and Studio. + + +To download the latest version of Blender, visit [Blender.org](https://www.blender.org/download/). + + +## File setup + +Before you begin creating 3D art on Blender for the Roblox platform, it's important to configure both Blender and Studio settings so that your 3D objects maintain the same position, orientation, and scale as you iterate and move them between the two applications. + +### Configure units + +By default, Blender and Studio use different primary units to measure length: Blender defaults to the metric scale, and Studio defaults to [studs](../physics/units.md). To ensure that your 3D objects retain the same measurements when you move or scale them in either application, you must configure Blender's units to be consistent with studs. + +To set Blender units to be compatible with Roblox's stud units: + +1. Navigate to the **Properties editor**, then in the left-hand navigation, select the **Scene** tab. + + Blender's Properties editor with the Scene tab highlighted. + +1. Click the **Units** dropdown menu to expand the container, then: + 1. Set **Unit System** to **None**. + 1. Set **Rotation** to **Degrees**. + +### Import settings + +3D software and applications use coordinate systems to represent the position and orientation of objects in the 3D space. These coordinate systems typically consist of three axes: + +- One axis represents horizontal position (left and right movement). +- One axis represents vertical position (up and down movement). +- One axis represents depth (forward and backward movement). + +Blender and Studio use **different** coordinate systems, specifically for the axis that represents the "up" direction. Like other modeling software, Blender uses the **Z** axis because 3D objects move up out of the 2D plane to become a 3D object; conversely, like other engines, Studio uses the **Y** axis because characters move on the ground plane and jump up for vertical movement. + +This difference is important to keep in mind as you import your 3D art into Blender or Studio because you must make adjustments to the import settings to ensure your object maintains the correct orientation in either application. + + +
    + +
    Blender's Navigation Gizmo
    + +
    +
    + +
    Studio's View Selector
    +
    +
    + +#### Studio to Blender + +To set Blender import settings for 3D objects from Studio: + +1. In the top left-hand corner, click the hamburger menu. A popup menu displays. +1. Navigate to **File** > **Import** > **Wavefront (.obj)**, **FBX (.fbx)**, or **glTF 2.0 (.glb/.gltf)**. The **Blender File View** window displays. +1. Select one or multiple `.obj`, `.fbx`, or `.gltf` files that you want to import. +1. In the right-hand panel, navigate to the **General** section: + + 1. Set **Scale** to **1** to keep the same scale from Studio. + 1. Set **Forward Axis** to **Z** to keep the same "forward" axis as Studio. + 1. Set **Up Axis** to **Y** to keep the same "up" axis as Studio. + + The Blender File View window with the General section highlighted. + +1. In the bottom right-hand corner, click the **Import** button. + +#### Blender to Studio + +To set Studio import settings for 3D objects from Blender: + +1. Navigate to **File** > **Import 3D**. Your local file browser displays. +1. Select and then confirm the 3D object's `.obj`, `.fbx`, or `.gltf` file(s) you want to import from your local system. The 3D Importer's **Import Preview** window displays. +1. In the right-hand panel, navigate to the **File General** section, then: + + 1. Enable **Import Only as a Model** if you have multiple objects that you want to group into a `Class.Model` object. + 1. Enable **Upload to Roblox** if you want to create an asset with an asset ID that you can reference across projects. + 1. Set **Creator** to **Me** if you are the only one who needs to access the object, or to the group that owns the project you're working on. This latter setting ensures all eligible group members have permission to use the 3D object within the project. + 1. Enable **Insert Using Scene Position** so that the object retains the position you set in Blender. + + The Import Preview window with the File General section highlighted. + +1. Navigate to the **File Transform** section, then set the following settings so that the object retains the same orientation from Blender: + 1. Set **World Forward** to **Front** to keep the same "forward" axis as Blender. + 1. Set **World Up** to **Top** to keep the same "up" axis as Blender. +1. Navigate to the **File Geometry** section, then set **Scale Unit** to **Stud** to keep the same scale from Blender. +1. At the bottom of the window, click the **Import** button. Your 3D object imports with the same scale and orientation from Blender. + +### Export settings + +Similar to the previous file setup section, it's important to consider Blender and Studio's different coordinate systems when you are ready to export your 3D art from Blender. By taking a little extra time in configuring your export settings, you can ensure your 3D objects maintain the correct orientation, scale, and position when you import them into Studio. + + +Avatar items, or other assets using specialized components, require unique export settings. See the following links for additional information: + +
      +
    • For rigid accessories, see [accessory specifications](../art/accessories/specifications.md) and [accessory export settings](../art/accessories/export-settings.md).

    • +
    • For layered accessories, see [layered accessory specifications](../art/accessories/clothing-specifications.md) and [layered export settings](../art/accessories/clothing-export-settings.md).

    • +
    • For avatar characters, see [avatar specifications](../art/characters/specifications.md) and [avatar export settings](../art/characters/export-settings.md).
    • +
    +
    + +To set Blender settings for exporting 3D objects for Studio: + +1. In the top left-hand corner, click the hamburger menu. A popup menu displays. +1. Navigate to **File** > **Export** > **Wavefront (.obj)**, **FBX (.fbx)**, or **glTF 2.0 (.glb/.gltf)**. The **Blender File View** window displays. +1. In the right-hand panel, navigate to the **Include** section, then enable **Limit to Selected Objects** to only export your selected objects. + + The Blender File View window with the General section highlighted. + +1. In the **Transform** section + 1. If exporting `.fbx`, set **Apply Scalings** to **FBX Unit Scale** so that your object(s) keep the same scale in Studio. For more scaling information, see [Adjust scale](#adjust-scale-fbx). + 1. Set **Forward** to **Z Forward** to keep the same "forward" axis as Blender. + 1. Set **Up** to **Y Up** to keep the same "up" axis as Blender. +1. In the bottom right-hand corner, click the **Export** button. Your 3D object is now ready to [import into Studio](#blender-to-studio). + +### Adjust scale (FBX) + +The FBX (`.fbx`) file format is widely used in 3D workflows due to its broad support across modeling tools and engines. However, when exporting from Blender using its default `.fbx` settings, models often import at an unexpectedly large scale in Roblox Studio. + +Roblox Studio also supports GLTF (`.gltf`) formats which do not require these additional scaling configurations. + +Two default Blender cubes imported in Studio with different scales. + +If you rely on `.fbx` in your workflow, proper export settings or project settings are essential to ensure that your models appear at the correct size and maintain their intended proportions across platforms. + +There are many ways to configure your model so your `.fbx` model scales as expected in Studio. See the following popular settings to manage scaling: + + + + + + + + + + + + + + + + + + + + + + + + + +
    Blender settingUIDescription
    During export, set **Transform** > **Apply Scaling** to **FBX Unit Scale**.Two default Blender cubes imported in Studio with different scales.Models exported with this setting import into Studio or back into Blender at the same scale.

    Make sure all other scaling values in project or export settings are set to default (`1.0`).

    + This is the recommended way to export `.fbx` files at the same scale.
    During export, set **Transform** > **Scale** to **.01**.Two default Blender cubes imported in Studio with different scales.This scales down your export so that the model imports into Studio at the expected scale.

    If you intend on importing this model back in Blender or any non-Studio tool, you might need to scale up the model on import, otherwise the model will import unexpectedly small.
    In the **Scene Properties** panel, set **Units** > **Unit Scale** to .**01**. Two default Blender cubes imported in Studio with different scales.This scales down your entire scene so that the model imports into Studio at the expected scale. If you adjusted your scene units, you can export models using default settings into Studio.

    Working on models at `.01` scale can cause unexpected Blender issues, such as camera difficulties, issues with modifiers, or other complications.

    If you intend on importing this model back in Blender, you might need to scale up the model on import, otherwise the model will import unexpectedly small.
    + + Note on existing resources
    Many reference files, demo projects, and downloadable assets may use older or inconsistent scale settings. Likewise, tutorials and guides might recommend different approaches for handling scale between Blender and Studio.

    Always test and validate any external resources to ensure they work correctly with your current export workflow.
    + +## Fundamentals + +Before you take a look at all of the common modeling, sculpting, and texturing tools for making 3D art for Studio, let's review Blender's fundamental interface elements that are important for navigating through the application and finding the appropriate menus and controls for your specific 3D creation task. + +### Workspaces + +Blender's UI with workspaces highlighted. + +**Workspaces** are preset window layouts with specialized UI configurations and tooling for different 3D creation work like modeling, sculpting, or texturing. You can use these workspace configurations as-is, or you can customize them to work for you as you quickly swap between different tasks. + + +For information on additional workspaces, see Blender's official [Workspaces](https://docs.blender.org/manual/en/2.81/interface/window_system/workspaces.html) documentation. + + +There are many default workspaces, but the following are the most common for creating 3D art for the Roblox platform. + + + + +Blender's Topbar with the Layout workspace highlighted. + +The **Layout** workspace is the default workspace when you load a Blender file, and it provides basic tools for previewing and transforming your 3D objects, such as the Move, Scale, and Rotate tools. The default layout of this workspace includes the following UI for easy access as you set up your 3D art: + +- [3D Viewport](https://docs.blender.org/manual/en/latest/editors/3dview/introduction.html) - Displays the entire scene. +- [Outliner](https://docs.blender.org/manual/en/latest/editors/outliner/introduction.html) - Displays all objects in the scene, comparable to Studio's **Explorer** window. +- [Properties Editor](https://docs.blender.org/manual/en/latest/editors/properties_editor.html) - Displays editable data for the active object, comparable to Studio's **Properties** window. +- [Timeline Editor](https://docs.blender.org/manual/en/latest/editors/timeline.html) - Displays all animation keyframes, comparable to the **Animation Editor** timeline. + + + + +Blender's Topbar with the Modeling workspace highlighted. + +The **Modeling** workspace is very similar to the **Layout** workspace, but it offers more space for the 3D viewport so that you can focus on modifying the geometry of your 3D objects. If you swap between the Modeling and Layout workspaces, you can see the **Properties Editor** expand, the **Outliner** shrink in size, and the **Timeline Editor** disappear altogether. + +The default layout of this workspace includes the following UI for modeling your 3D art: + +- [3D Viewport](https://docs.blender.org/manual/en/latest/editors/3dview/introduction.html) - Displays the entire scene. +- [Outliner](https://docs.blender.org/manual/en/latest/editors/outliner/introduction.html) - Displays all objects in the scene, comparable to Studio's **Explorer** window. +- [Properties Editor](https://docs.blender.org/manual/en/latest/editors/properties_editor.html) - Displays editable data for the active object, comparable to Studio's **Properties** window. + +The most common Roblox creator use case for this workspace is to create the geometrical shape of the 3D art before texturing or animating the geometry. + + + + +Blender's Topbar with the Sculpting workspace highlighted. + +The **Sculpting** workspace provides sculpting tools for modifying meshes with over 20 unique brush types, such as Clay, Inflate, Smooth, and Flatten. Like other common sculpting software, this workspace also provides tooling to mask specific geometry so you can focus on sculpting specific areas without affecting the rest of the mesh. + +The default layout of this workspace includes the following UI for sculpting your 3D art: + +- [3D Viewport](https://docs.blender.org/manual/en/latest/editors/3dview/introduction.html) - Displays the entire scene. +- [Outliner](https://docs.blender.org/manual/en/latest/editors/outliner/introduction.html) - Displays all objects in the scene, comparable to Studio's **Explorer** window. +- [Properties Editor](https://docs.blender.org/manual/en/latest/editors/properties_editor.html) - Displays editable data for the active object, comparable to Studio's **Properties** window. + +The most common Roblox creator use case for this workspace is to create organic 3D art like humans, animals, and plants. + + + + +Blender's Topbar with the UV Editing workspace highlighted. + +The **UV Editing** workspace provides tools for UV mapping texture coordinates to 3D surfaces. The most striking visual change in this workspace is the addition of the UV Editor to allow you to view both your texture and your object on the same screen as you unwrap and adjust UVs. + +The default layout of this workspace includes the following UI for UV mapping your 3D art: + +- [UV Editor](https://docs.blender.org/manual/en/latest/editors/uv/introduction.html) - Displays the image texture that you're mapping onto your 3D object. +- [3D Viewport](https://docs.blender.org/manual/en/latest/editors/3dview/introduction.html) - Displays the entire scene. +- [Outliner](https://docs.blender.org/manual/en/latest/editors/outliner/introduction.html) - Displays all objects in the scene, comparable to Studio's **Explorer** window. +- [Properties Editor](https://docs.blender.org/manual/en/latest/editors/properties_editor.html) - Displays editable data for the active object, comparable to Studio's **Properties** window. + +The most common Roblox creator use case for this workspace is to create and use trim sheets that you can apply to multiple 3D objects at once. This allows you to add significantly more visual complexity to your experiences without having to import additional textures, saving you a negative impact on memory. For more information on this process, see [Develop polished assets - Trim sheets](../tutorials/curriculums/environmental-art/develop-polished-assets.md#trim-sheets) in the Environmental art curriculum. + + +For more information on UV unwrapping, see Blender's official [Unwrapping Introduction](https://docs.blender.org/manual/en/latest/modeling/meshes/uv/unwrapping/introduction.html) documentation. + + + + + +Blender's Topbar  with the Texture Painting workspace highlighted. + +The **Texture Paint** workspace provides tools for coloring image textures onto geometry. Similar to the UV Editing workspace, the most striking visual change in this workspace is the addition of the Image Editor in Paint mode to allow you to view both your texture and your object on the same screen as you paint. + +The default layout of this workspace includes the following UI for texture painting your 3D art: + +- [Image Editor](https://docs.blender.org/manual/en/latest/editors/image/introduction.html) - Displays tools to create, view, and edit images that you can apply to the active object. +- [3D Viewport](https://docs.blender.org/manual/en/latest/editors/3dview/introduction.html) - Displays the entire scene. +- [Outliner](https://docs.blender.org/manual/en/latest/editors/outliner/introduction.html) - Displays all objects in the scene, comparable to Studio's **Explorer** window. +- [Properties Editor](https://docs.blender.org/manual/en/latest/editors/properties_editor.html) - Displays editable data for the active object, comparable to Studio's **Properties** window. + +The most common Roblox creator use case for this workspace is to create a unique texture for characters, accessories, or important 3D objects that players regualarly interact with in experiences. + + +For more information on texture painting, see Blender's official [Texture Paint Introduction](https://docs.blender.org/manual/en/latest/sculpt_paint/texture_paint/introduction.html) documentation. + + + + + +### 3D Viewport + +Blender's UI with the 3D Viewport highlighted. + +Comparable to Studio's viewport, the **3D Viewport** lets you view and interact with your 3D objects as they exist in the 3D space. You can navigate through the scene, transform objects with your mouse, and see your changes in real time as you design your 3D art. + + +For more information, see Blender's official [3D Viewport](https://docs.blender.org/manual/en/latest/editors/3dview/introduction.html) documentation. + + +### Modes + +Blender's UI with the Modes selector highlighted. + +**Modes** offer additional tooling for editing 3D objects in the 3D Viewport. When you select a new mode from the Modes selector: + +- The Header displays new menu options. +- The Toolbar displays a new set of tools. +- Editors and their buttons and panels enable or disable appropriately. + +Depending on which mode is active, your cursor can change into a brush, such as in paint or sculpt modes, and the 3D Viewport can change how it displays objects for that particular task, such as darkening an object so you can more easily see your paint strokes. As you learn Blender, it's useful to experiment with different modes to see what tools are available for your particular 3D creation task. + + +For more information on modes, see Blender's official [Object Modes](https://docs.blender.org/manual/en/latest/editors/3dview/modes.html) documentation. + + + + + +Blender's Modes selector with the Object Mode menu item highlighted. + +**Object mode** is the default mode, and it provides tooling that's available for all object types, such as positioning vertices, edges, and faces, rotating and scaling objects, and measuring distance and angles. This mode is useful for high-level object transformations. + + + + +Blender's Modes selector with the Edit Mode menu item highlighted. + +**Edit mode** provides tooling for editing an object's shape. This mode is useful for more detailed object transformations, such as insetting faces, extruding regions, creating loop cuts, and beveling. + + + + +Blender's Modes selector with the Sculpt Mode menu item highlighted. + +**Sculpt mode** provides tooling for editing a mesh's shape. This mode is useful for creating more organic 3D art, such as humans, animals, and plants. + + + + +Blender's Modes selector with the Vertex Paint Mode menu item highlighted. + +**Vertex Paint** mode provides tooling to set a mesh's vertices to specific colors. This mode is useful for when you want to paint the object itself instead of applying a texture onto the geometry. + + + + +Blender's Object Mode dropdown with the Weight Paint Mode menu item highlighted. + +**Weight Paint** mode provides tooling for vertex group weight painting. This mode is useful when you're creating avatars because it allows you to specify which parts of their body are influenced by parts of their armature. + + + + +Blender's Object Mode dropdown with the Texture Paint Mode menu item highlighted. + +**Texture Paint** mode provides tooling to paint a texture directly on a 3D object. This mode is useful for when you want to apply a texture onto the geometry instead of painting the object's vertices. + + + + +### Toolbar + +Blender's UI with the Toolbar highlighted. + +The **Toolbar** is a vertical menu of tools on the left-hand side of the 3D Viewport. Each time you switch modes, the Toolbar responds by displaying a new unique set of tools for that particular mode. + + +For more information on the Toolbar, see Blender's official [Toolbar](https://docs.blender.org/manual/en/latest/editors/3dview/toolbar/index.html) documentation. + + +### 3D Cursor + +Blender's UI with the 3D Cursor highlighted. + +The **3D Cursor** is a moveable reference point in the 3D space that has both location and rotation data. While this tool has many different uses, the most common are using its position and orientation to: + +- Create precise transformations. +- Place new objects into the scene. +- Move objects or their vertices to new points in the 3D space. +- Reposition pivot point locations. + + +For more information on the 3D Cursor, see Blender's official [3D Cursor](https://docs.blender.org/manual/en/latest/editors/3dview/3d_cursor.html) documentation. + + +## Modeling tools + +Now that you know how to navigate the user interface and change tools according to your specific 3D creation task, let's take a closer look at the most common modeling tools that allow you to change the shape of 3D objects by either impacting the entire mesh or one of the three basic elements of meshes: + +- **Vertex** - A single point on the mesh. +- **Edge** - A line that connects two vertices. +- **Face** - A surface area between three or more vertices. + +Each of the following sections details how you can use each tool for objects and/or mesh elements, the hotkeys you can use to activate the tool, and their most common use cases for creating 3D art for the Roblox platform. + + +
    + A single active vertex on a cube mesh. +
    Vertex
    +
    +
    + A single active edge on a cube mesh. +
    Edge
    +
    +
    + A single active face on a cube mesh. +
    Face
    +
    +
    + + +For more information on any of these mesh elements, see Blender's official [Mesh Structure](https://docs.blender.org/manual/en/latest/modeling/meshes/structure.html) documentation. + + +### Grab + + + +The **Grab** tool lets you move objects, vertices, edges, and faces from the 3D space, and it's one of the most essential tools for positioning objects or mesh elements in a scene. Many Roblox creators use this tool for editing purposes, such as positioning vertices, edges, and faces to a particular stud unit in the 3D space. + +To use the Grab tool: + +1. In either **Object** or **Edit** mode, select one or multiple objects, vertices, edges, or faces. +1. Press G to activate the tool. +1. Move the mouse to reposition your selection. For further precision: + - Press X, Y, or Z after you press G to constrain movement to the **X**, **Y**, or **Z** axis, respectively. + - Double-press an axis key to slide vertices or edges along their natural path. + - Hold Shift while moving your mouse to slow down movement for fine adjustments. +1. Left-click or press Enter to confirm the new position. + + +For more information on this tool, see Blender's official [Move](https://docs.blender.org/manual/en/latest/scene_layout/object/editing/transform/move.html) documentation. + + +### Snap + + + +The **Snap** tool lets you align objects and mesh elements by snapping them to other objects, mesh elements, or the 3D space's grid. Many Roblox creators use this tool to precisely position multiple objects together in the scene so that they can evaluate how they work together in an environment, particularly in regard to position, orientation, and scale. + +To use the Snap tool: + +1. In **Object** or **Edit** mode, navigate to the header, then click the **Snapping** button. A contextual menu displays. + +Blender's header with the Snapping button highlighted. + +1. In the contextual menu, + 1. Set **Snap Base** to one of the following: + - **Closest** - Snaps using the vertex that's closest to the target. + - **Center** - Snaps using the pivot point. + - **Median** - Snaps using the median of the selection. + - **Active** - In Object mode, this setting snaps using the origin of the active element; in Edit mode, this setting snaps using the center of the active element. + 1. Set **Snap Target** to one of the following: + - **Increment** - Snaps to grid points from the selection's location. + - **Grid** - Snaps to the grid in the 3D viewport. + - **Vertex** - Snaps to the vertex that's closest to the mouse cursor. + - **Edge** - Snaps to the edge that's closest to the mouse cursor. + - **Face** - Snaps to the face that's closest to the mouse cursor. + - **Volume** - Snaps the selection to a depth that's centered inside the object under the cursor. + - **Edge Center** - Snaps to the centerpoint of the edge that's closest to the mouse cursor. + - **Edge Perpendicular** - Snaps to a specific point on the edge so that the line from the selection's original location to its new location is perpendicular to that edge. + 1. Set **Affect** to one of the following: + - **Move** - Snaps while moving the selection. + - **Rotate** - Snaps while rotating the selection. + - **Scale** - Snaps while scaling the selection. +1. Press ShiftTab to activate the tool. +1. For further precision, hold Shift to snap the selection in finer increments. +1. Move, rotate, or scale an object or mesh element according to your settings. + + +For more information on this tool, see Blender's official [Snapping](https://docs.blender.org/manual/en/latest/editors/3dview/controls/snapping.html) documentation. + + +### Inset + + + +The **Inset** tool lets you create an inset with adjustable thickness and depth from a face or group of faces. Many Roblox creators use this tool to create uniform fine details in their meshes while maintaining a clean edge flow for their topology. + +To use the Inset tool: + +1. In **Edit** mode, select one or multiple faces. +1. Press I to activate the tool. +1. Move the mouse to adjust your inset's size. For further precision: + - Hold Ctrl to adjust the depth of the inset. + - Hold Shift while moving your mouse to slow down movement for fine adjustments. + - Press I again to inset each active face. +1. Left-click or press Enter to confirm your inset(s). + + +For more information on this tool, see Blender's official [Inset Faces](https://docs.blender.org/manual/en/latest/modeling/meshes/editing/face/inset_faces.html) documentation. + + +### Extrude + + + +The **Extrude** tool lets you create new geometry by pulling out new faces, edges, or vertices from existing geometry. Many Roblox creators use this tool to create depth, volume, and complex shapes from Blender's primitive meshes. + +To use the Extrude tool: + +1. In **Edit** mode, select one or multiple vertices, edges, or faces. +1. Press E to activate the tool. +1. Move the mouse to adjust your extrusion's length. For further precision, press X, Y, or Z after you press E to constrain movement to the **X**, **Y**, or **Z** axis, respectively. +1. Left-click or press Enter to confirm your extrusion(s). + + +For more information on this tool, see the following official Blender documentation: +- [Extrude](https://docs.blender.org/manual/en/latest/modeling/meshes/editing/mesh/extrude.html) +- [Extrude Vertices](https://docs.blender.org/manual/en/latest/modeling/meshes/editing/vertex/extrude_vertices.html) +- [Extrude Edges](https://docs.blender.org/manual/en/latest/modeling/meshes/editing/edge/extrude_edges.html) +- [Extrude Faces](https://docs.blender.org/manual/en/latest/modeling/meshes/editing/face/extrude_faces.html) + + +### Subdivide + + + +The **Subdivide** tool lets you cut edges or faces into smaller divisions, a process that adds new vertices and resolution to your meshes. Many Roblox creators use this tool to create smooth curves, add fine details to surfaces, and prepare meshes before applying additional modifiers. + +To use the Subdivide tool: + +1. In **Edit** mode, select one or edges or faces. +1. Right-click to display a contextual menu for your active edges or faces, then select **Subdivide** to activate the tool. The Subdivide panel displays. +1. Set **Number of Cuts** to the number of subdivisions you want for your edges or faces. + + The Subdivide panel with the Number of Cuts setting highlighted. + +1. Left-click to confirm your subdivision(s). + + +For more information on this tool, see Blender's official [Subdivide](https://docs.blender.org/manual/en/latest/modeling/meshes/editing/edge/subdivide.html) documentation. + + +### Bridge Edge Loops + + + +The **Bridge Edge Loops** tool lets you connect multiple edge loops with faces. Many creators use this tool to fill gaps without manually creating new faces, merge complex sections of their meshes, and maintain clean topology for smooth deformations. + +To use the Bridge Edge Loops tool: + +1. In **Edit** mode, select two or more edge loops that you want to connect. +1. Press CtrlE/⌘E to display a contextual menu for your active edge loops, then select **Bridge Edge Loops** to activate the tool.The **Bridge Edge Loops** panel displays. +1. Set **Number of Cuts** to the number of subdivisions you want for your new bridge. +1. **(Optional)** For further precision for curved bridges, increase **Smoothness** to create a more rounded bridge. +1. Left-click to confirm your bridge. + + +For more information on this tool, see Blender's official [Bridge Edge Loops](https://docs.blender.org/manual/en/latest/modeling/meshes/editing/edge/bridge_edge_loops.html) documentation. + + +### Fill + + + +The **Fill** tool lets you create triangular faces between any active edges or vertices, as long as they form one or more complete perimeters. Many Roblox creators use this tool to close gaps in their meshes so that they're watertight, or without exposed holes. + +To use the Fill tool: + +1. In **Edit** mode, select at least three vertices or two or more edges that form at least one complete perimeter. +1. Press AltF/⌥F to activate the tool. +1. **(Optional)** In the **Fill** panel, enable **Beauty** to arrange the triangles nicely. +1. Left-click to confirm your new face. + + +For more information on this tool, see Blender's official [Fill](https://docs.blender.org/manual/en/latest/modeling/meshes/editing/face/fill.html) documentation. + + +### New Faces from Edges + + + +The **New Faces from Edges** tool lets you either create an edge if only two vertices are active, otherwise it creates a face between the active mesh elements. Many Roblox creators use this tool to close many gaps at once in their meshes so that the meshes are watertight, or to create geometry between many solitary vertices. + +To use the New Faces from Edges tool: + +1. In **Edit** mode, select at least three vertices, or two or more edges that form one or more complete perimeters. +1. Press F to activate the tool. +1. Left-click to confirm your new face. + + +For more information on this tool, see Blender's official [New Edge/Face from Vertices](https://docs.blender.org/manual/en/latest/modeling/meshes/editing/vertex/make_face_edge.html) documentation. + + +### Dissolve + + + +The **Dissolve** tool lets you remove geometry without leaving holes in your meshes. Many Roblox creators use this tool to optimize their 3D art, merge geometry, or remove unnecessary mesh elements while retaining the overall structure of the mesh. + +To use the Dissolve tool: + +1. In **Edit** mode, select the vertices, edges, or faces that you want to remove from your mesh. +1. Right-click to display a contextual menu for your active mesh elements, then: + 1. If your selection is made up of vertices, select **Dissolve Vertices** to remove the active vertices and merge their neighboring edges. + 1. If your selection is made up of edges, select **Dissolve Edges** to remove the active edges and join the surrounding faces to maintain the edge's outline. + 1. If your selection is made up of faces, select **Dissolve Faces** to remove the active face(s) and fill the gap with a new face, if necessary. + + +For more information on this tool, see Blender's official [Deleting & Dissolving](https://docs.blender.org/manual/en/latest/modeling/meshes/editing/mesh/delete.html#dissolve) documentation. + + +### Delete + + + +The **Delete** tool lets you completely remove geometry from your meshes, leaving one or many holes wherever geometry was removed. Many Roblox creators use this tool instead of the Dissolve tool whenever they want to restructure their meshes during the iteration process. + +To use the Delete tool: + +1. In **Edit** mode, select the vertices, edges, or faces that you want to remove from your mesh. +1. Press X to display a contextual menu for your selection. +1. Choose one of the following menu items: + 1. Select **Vertices** to delete all active vertices, removing any faces or edges they are connected to. + 1. Select **Edges** to delete all active edges, removing any faces that the edge shares with it. + 1. Select **Faces** to remove all active faces, removing any edges they are connected to. + 1. Select **Only Edges and Faces** to remove only the active edges and adjacent faces. + 1. Select **Only Faces** to remove all active faces without also affecting active edges in the selection. + + +For more information on this tool, see Blender's official [Deleting & Dissolving](https://docs.blender.org/manual/en/latest/modeling/meshes/editing/mesh/delete.html#delete) documentation. + + +### Mirror Modifier + + + +The **Mirror modifier** lets you mirror geometry across one or multiple axes so that you can create symmetrical 3D art with minimal effort. Many Roblox creators use this tool while modeling avatars or architectural objects that are important to be perfectly symmetrical. + +To use the Mirror modifier: + +1. In **Object** mode, select the object that you want to mirror. +1. Navigate to the **Properties editor**, then in the lefthand navigation, select the **Modifiers** tab. + + Blender's Properties editor with the Modifiers tab highlighted. + +1. Click the **Add Modifier** button, then insert the **Mirror** modifier. +1. Set **Axis** to **X**, **Y**, and/or **Z** to mirror along one or many axes. +1. In **Edit** mode, modify your object or any of its mesh elements to see your modifications mirror along an axis or multiple axes. + +## Texturing tools + +After you finish modeling your 3D object, it's time to apply a texture to your mesh so that it has additional visual characteristics, such as color, depth, and roughness through a [texture map](../art/modeling/surface-appearance.md). These are details that modeling alone can't provide, transforming your object from a blank shape to something that looks either realistic or stylized according to your experience's art requirements. + + +
    + +
    Model without a texture
    + +
    +
    + +
    Model with a texture
    +
    +
    + +Each of the following sections details how you can use each tool for either UV editing or vertex painting objects, the hotkeys you can use to activate the tool, and their most common use cases for texturing 3D art for the Roblox platform. + +### UV editing + +UV editing is the process of unwrapping your 3D object's faces and mapping them onto a 2D image texture. This process allows you to use a single texture to apply visual characteristics to multiple objects in Blender, saving you a negative impact on memory in Studio. For example, the following door frame, ceiling, and card reader meshes in the [Laser Tag](../resources/templates.md#laser-tag) template all use the same UV map to add metal adornments. + + +
    + An doorway with trim sheet textures applied. +
    +
    + A group of ceiling tiles with trim sheet textures applied. +
    +
    + A futuristic card reader with trim sheet textures applied. +
    +
    + +The "UV" in UV editing stands for the axes on the 2D image map that you use during the mapping process: + +- U axis - The horizontal position (left and right movement). +- V axis - The vertical position (up and down movement). + +Because 3D objects use the X, Y, and Z axes in the 3D space, 3D creation applications typically use U and V to avoid confusion when referring to coordinates in 2D image space. That being said, many Blender UI workflows still use X and Y, so it's helpful to know the 2D space equivalent axis. + +When you unwrap a 3D object, all active faces flatten into the 2D space in the UV Editor to make up the **UV map**, and different sections of the model split into separate groupings, commonly referred to as **UV islands**. For example, if you were to unwrap a standard Blender cube, each face would become its own UV island in the UV map. + + +
    + A UV map of a 3D cube. +
    UV map in the UV Editor
    +
    +
    + The 3D cube that is being unwrapped. +
    Cube in the 3D Viewport
    +
    +
    + +Every point, line, and face in the UV map corresponds to a vertex, edge, and face in the mesh. This means that when you move UV islands to different parts of the texture, their corresponding vertices, edges, and faces update to reflect the area of the texture that they now overlap. + +Blender often creates UV islands along **seams**, or connected edges, to minimize distortion and make it easier for you to apply your texture. While this default UV island configuration is a great place to start, it's almost always necessary to modify each island's position, orientation, and scale to overlap the area of the texture you want to project, or mark your own seams to focus on texturing specific areas at a time. + +By investing the time to unwrap, arrange, and map your UV islands, you can improve your texture quality and reduce stretching or distortion on all of your 3D art. The following subsections highlight the most common tools for this process, specifically in regards to unwrapping and mapping your objects. + + +For more high-level information on this process, see Blender's official [UV Editor](https://docs.blender.org/manual/en/latest/editors/uv/introduction.html) and [Getting Started with UVs](https://docs.blender.org/manual/en/latest/modeling/meshes/uv/unwrapping/introduction.html#getting-started) documentation. + + +#### Mark Seam + +The **Mark Seam** tool lets you manually break up a 3D object's UV map into smaller, manageable sections. While this step in the unwrapping process is technically optional, many Roblox creators find it useful for concentrating on collections of related faces for complex objects that require a lot of detailed texture work. + +For example, the following rivet gun requires a metal texture for the barrel, and a leather texture for the grip. To make it easier to texture this object, you can mark the seams of the grip, unwrap just the faces between those seams, then map it to a leather texture image. + + +
    + A UV map of a grip on a rivet gun. +
    Grip UV map in the UV Editor
    +
    +
    + The marked seams and enclosed faces on the rivet gun that are being unwrapped. +
    Marked seams in the 3D Viewport
    +
    +
    + +To use the Mark Seam tool: + +1. Open the **UV Editing** workspace. The UV Editor displays on the lefthand side of the screen, and the 3D viewport displays on the righthand side of the screen in Edit mode. +1. In the **3D Viewport**, navigate to your 3D object, then select the edges where you want to create seams. +1. Press CtrlE/⌘E to open the **Edge** contextual menu. +1. Select **Mark Seam**. The seam turns red and is ready for the Unwrap tool. + +When you are ready to unwrap your object, Blender will unwrap the enclosed faces of the seam as its own island. + + +For more information on this tool, see Blender's official [Seams](https://docs.blender.org/manual/en/latest/modeling/meshes/uv/unwrapping/seams.html) documentation. + + +#### Unwrap + +The **Unwrap** tool lets you unwrap and clean up the UV map of any marked seams or active faces of a 3D object so that you have a solid foundation of UV islands to work with. This can quickly take UV coordinates from being a complete mess to something more manageable. + +Many Roblox creators use this tool for complex shapes that they need full control over when applying textures, such as characters, clothes, and curvy objects, because it works quickly and avoids stretching and distortion. + + +
    + A chaotic with disorganized islands. +
    Before using the Unwrap tool
    +
    +
    + A clean UV map with organized islands. +
    After using the Unwrap tool
    +
    +
    + +To use the Unwrap tool: + +1. Open the **UV Editing** workspace. The UV Editor displays on the lefthand side of the screen, and the 3D viewport displays on the righthand side of the screen in Edit mode. +1. In the **3D Viewport**, navigate to your 3D object, then either use the **Mark Seam** tool to create seams, and/or select the specific faces you want to texture. +1. Press U to open the **UV Mapping** contextual menu. +1. Select **Unwrap**. Your selection's UV islands display neatly in the UV Editor. +1. In the **UV Editor**, move, scale, or rotate UV islands to the appropriate position, orientation, and scale on your texture. + + +For more information on this tool, see Blender's official [UV Operators - Unwrap](https://docs.blender.org/manual/en/latest/modeling/meshes/editing/uv.html#Unwrap) documentation. + + +#### Follow Active Quads + +The **Follow Active Quads** tool lets you generate clean and organized UV islands according to the UV coordinates of a previously unwrapped active face. This is particularly useful for grid-like topology, such as when you're unwrapping walls, floors, or mechanical parts using trim sheets. + +Many Roblox creators use this tool to apply a consistent texture to curved 3D objects, such as sidewalks for experiences or belts for accessories. + + + +To use the Follow Active Quads tool: + +1. Open the **UV Editing** workspace. The UV Editor displays on the lefthand side of the screen, and the 3D viewport displays on the righthand side of the screen in Edit mode. +1. In the **3D Viewport**, navigate to your 3D object, then unwrap every face you want to texture using an active face. +1. **(Optional)** Configure your active face. + 1. In the **UV Editor**, select the face you want to be your active face, then press AltM/⌥M to open the **Split** contextual menu. + 1. Select **Selection**. The active face separates from the UV island. + 1. Move, scale, or rotate your active face to the appropriate position, orientation, and scale that you want other faces in the UV map to follow. +1. In the **UV Editor**, select all faces you want to follow the active face. Make sure to select your active face last so that Blender knows to use its layout as the guide. +1. Press U to open the **Unwrap** contextual menu, then select **Follow Active Quads**. Blender aligns your selection's UV coordinates to match the active face's shape and orientation. + + +For more information on this tool, see Blender's official [UV Operators - Follow Active Quads](https://docs.blender.org/manual/en/latest/modeling/meshes/editing/uv.html#follow-active-quads) documentation. + + +#### Projection + +Projection tools are tools that project a 3D object's surface onto the 2D image texture plane. Each projection tool controls how the object's shape unwraps and maps onto the 2D texture: + +- **Cube Projection** - Projects the object's faces onto all six sides of a cube; useful for boxy shapes like crates. +- **Sphere Projection** - Projects the object's surface onto a sphere; useful for round shapes like eyes. +- **Cylinder Projection** - Projects the object onto a cylindrical shape; useful for tubes, pipes, and limbs. +- **Project from View** - Projects the object's selected faces according to the current camera or viewport angle; useful for flat surfaces and decals. +- **Smart UV Project** - Automatically unwraps the model and generates islands according to a set angle between faces. + +It's useful to consider how you can utilize projection tools to save time in the texturing process, especially for simple objects that require repetitive textures. For example, many Roblox creators strategically use these tools to efficiently create UV islands for basic geometric shapes without needing to mark seams from edges. + + +
    + A UV map using Smart UV Project. +
    A UV map using Smart UV Project.
    +
    +
    + A UV map using Cube Projection. +
    A UV map using Cube Projection.
    +
    +
    + +To use a projection tool: + +1. Open the **UV Editing** workspace. The UV Editor displays on the lefthand side of the screen, and the 3D viewport displays on the righthand side of the screen in Edit mode. +1. In the **3D Viewport**, navigate to your 3D object, then select every face. +1. Press U to open the **UV Mapping** contextual menu, then select one of the following options: + - **Cube Projection** + - **Sphere Projection** + - **Cylinder Projection** + - **Project from View** + - **Smart UV Project** + + +For more information, see the following official Blender documentation: +- [Cube Projection](https://docs.blender.org/manual/en/latest/modeling/meshes/editing/uv.html#cube-projection) +- [Sphere Projection](https://docs.blender.org/manual/en/latest/modeling/meshes/editing/uv.html#sphere-projection) +- [Cylinder Projection](https://docs.blender.org/manual/en/latest/modeling/meshes/editing/uv.html#cylinder-projection) +- [Project from View](https://docs.blender.org/manual/en/latest/modeling/meshes/editing/uv.html#project-from-view) +- [Smart UV Project](https://docs.blender.org/manual/en/latest/modeling/meshes/editing/uv.html#smart-uv-project) + + +### Vertex painting + +Vertex painting is the process of storing color information directly on the vertices of your 3D object rather than through traditional textures or materials. In this approach, each vertex holds color data that Blender interpolates across the faces of a mesh, creating either smooth gradients or solid blocks of color without the need for UV mapping or image textures. + +Vertex painting is useful for adding color variation to your assets in a lightweight, efficient way, especially in stylized workflows or experiences where performance is a concern, as it can reduce texture memory usage and draw calls. Many Roblox creators use vertex painting in conjunction with Studio's default materials, `Class.MaterialVariant` objects, and `Class.SurfaceAppearance` objects to create visual complexity on otherwise simple 3D objects. + + +
    + A rocket launcher object in Blender without any color. +
    Object without color
    +
    +
    + A rocket launcher object in Blender with vertex paint on the handle. +
    Object with vertex paint
    +
    +
    + A rocket launcher object in Studio with vertex paint and a SurfaceAppearance texture +
    Object with vertex paint and image texture
    +
    +
    + +To vertex paint: + +1. Add a color attribute to store color information to your object's vertices. + + 1. In the **3D Viewport**, select your 3D object. + 1. Navigate to the **Properties editor**, then in the left-hand navigation, select the **Data** tab. + + Blender's Properties editor with the Data tab highlighted. + + 1. Click the **Color Attributes** dropdown menu to expand the container, then click the **+** button. The **Add Color Attribute** contextual menu displays. + 1. Set **Domain** to **Vertex**, **Data Type** to **Color**, then click the **Add** button. Your object now has a color attribute. + +1. Configure the 3D Viewport to display your color attribute. + + 1. In the **3D Viewport**, navigate to the top right-hand corner **Viewport Shading** options, then click the button for the **Solid** shading mode. + + Blender's Viewport Shading options with the Solid shading mode highlighted. + + 1. Click the **Viewport Shading** dropdown arrow, then in the contextual menu, set **Color** to **Attribute**. The 3D Viewport updates to display your color attribute on your object. + + Blender's Viewport Shading dropdown menu with the dropdown arrow and Color settings highlighted. + +1. Select a color for your brush. + + 1. In **Vertex Paint** mode, navigate to the top left-hand corner, then click on the active color swatch. A contextual menu displays. + 1. Select your color on the color wheel, or with a RGB, HSV, or Hex code. + + Blender's active swatch UI highlighted. + +1. Apply color to your object. + 1. To apply color to individual vertices: + 1. In the **3D Viewport**, click and drag over your object's vertices to apply your color with a smooth gradient. + 1. For further precision, press [ or ] to increase or decrease the brush size, respectively. + 1. To flood fill your color, + 1. In **Edit** mode, select the vertices or faces that you want to apply your color. + 1. In **Vertex Paint** mode, press CtrlX/⌘X. Your selected vertices or faces display the new color. + + +For more information on this process, see Blender's official [Vertex Paint](https://docs.blender.org/manual/en/latest/sculpt_paint/vertex_paint/index.html) documentation. + diff --git a/.cursor/rules/roblox/art/characters/creating/blender-configurations.md b/.cursor/rules/roblox/art/characters/creating/blender-configurations.md new file mode 100644 index 00000000..74965fe1 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/creating/blender-configurations.md @@ -0,0 +1,130 @@ +--- +title: Blender configuration +description: Roblox avatar template projects have several helper configurations and settings to help expedite the character creation process. +next: /art/characters/creating/modeling-best-practices +prev: /art/characters/creating/head-objects +--- + +The Blender project files of each template include additional helper configurations that are not included in the raw `.fbx` template files. If you intend on using Blender for your character creation process, it's important to understand the additions included in the `.blend` versions of the template and what they do. + +### Hierarchy + +The following is a breakdown of what is included in each Blender template file: + + +
    +- **Cage**: Contains the character's 15 outer body cage meshes. +- **Joints**: The parent armature object that includes the following objects: + - The **bones** that make up the character's rigging armature. + - The **_Geo** mesh objects that make up the avatar appearance. + - The **_Att** attachment objects that define where accessories attach when equipped. + - The **animation data** for saving facial animation data and poses. +- **Fill** and **Sun**: These objects are used to provide lighting, allowing you to preview your characters in a neutral lighting similar to a Studio baseplate. These are not part of the avatar character. +
    + +
    Head-Related Meshes
    Blender Project Hierarchy
    +
    + +### Disabled objects + +When using the template project files for Blender, you might notice some objects, like attachment objects, are permanently hidden in the Viewport even when toggling the **Hide In Viewport** icon . Since attachment objects are often not modified until the end of the character creation process, these objects have **Disable In Viewport** enabled to make the organization of your project more efficient, especially when bulk toggling object visibility. + +If you need access to disabled objects, use the following instructions to access the **Disable In Viewport** toggle: + +1. In your Outliner, click the **Filter** dropdown. + + + +2. Enable the **Disable In Viewport** filter. + + + +3. The **Disable In Viewport** icon now appears next to every object in the Outliner. Toggle the icon to change the Disabled status for your objects. + + +### Custom skin tones + +The Blender project files include a shader configuration that allows you to preview custom skin tones, similar to how they display in Roblox if users customize their skin tones. + +Textures with full or partial transparency allow the underlying `Class.Part.Color` to reveal through the applied texture, enabling a user to personalize their avatar character with custom skin tones. + + +
    A texture map example that uses low opacity to reveal underlying skin color and full opacity to apply a fully-opaque color to the undergarments, eyebrows, mouth, and eyes.
    + +
    The same avatar character using the same texture map. Each model has different underlying part colors except where the texture map applies a full color.
    +
    + +#### Preview skin tones + + +You must use **Blender 3.4+** to ensure that the helper shader configurations render correctly. If you are using a previous version of Blender, textures may not render as expected. + + +The Blender project file includes shader configurations that allow you to preview custom skin tones similar to how they appear in Studio. These custom colors do not export with the model, but can provide you a quick visual reference for how a custom skin color and texture might look in Roblox. + +For this Blender shader configuration, keep in mind the following requirements: + +- You must switch to **Viewport Shading** mode for textures to render as expected. + +- When swapping out textures, the normal map's colorspace reverts to **SRGB** instead of **NonColor**. If this occurs, you might need to change it back in order for the normal map to render correctly. + +To preview your character's skin tone in Blender: + +1. In **Layout**, select any geometry object, such as **Head_Geo**. +2. Go to the **Shading** tab. +3. In the Node panel, ensure **Object** is selected. +4. Find the **PartColor** node that is attached to the **Mix** node. +5. Pick a color and value on the node to apply a reference custom skin tone. + + +#### Export setup + +While the skin tone preview is a critical element to verifying your templates color and tone compatibility in Roblox, it prevents your color texture map from automatically being packaged with the final `.fbx` file. There are two ways to resolve this before exporting your model: + +1. In the Shading tab, disconnect the **Mix** node and replace it with the **ColorMap** node. +2. Export your textures manually as separate image files and add them later in Studio. + +For instructions on how to perform either export workflow, see [Export textures](../../../art/characters/creating/export-textures.md). + +### Scene scale + + +You can skip this section if you are using the Blender downloadable templates. The `.blend` versions of the templates which already contain many of the project settings required when setting up a Blender project configuration. + + +When creating Roblox assets in a modeling application, it's important to ensure your `.fbx` exports scale correctly. The `.fbx` file type scales objects by `100`, meaning that you have to modify your working scale by `.01`. The template files already apply this scaling. + +There are two ways to perform this scaling. You can modify your scene scale properties in your project with the following steps: + +1. In the **Properties** window, navigate to the **Scene Properties** tab. + +2. In the Units section, change the **Unit Scale** to `0.01` and the **Length** to **Centimeters**. + +Alternatively, you can modify your scaling when exporting your files: + +1. Navigate to **File** > **Export** > **FBX (.fbx)**. +2. Set **Transform** > **Scale** to `.01`. + + +### Animation range + + +You can skip this section if you are using the Blender downloadable templates. The `.blend` versions of the templates which already contain many of the project settings required when setting up a Blender project configuration. + + +For custom characters with facial animation, ensure that the timeline range is set between 0 and 330: + +1. In the top right of the Animation Panel, click and set **Start** to `0`. +2. In the top right of the Animation Panel, click and set **End** to `330`. + + + + +After you change your project settings, you can set these as your default Blender project settings by navigating to **File** > **Defaults** > **Save Startup File**. + diff --git a/.cursor/rules/roblox/art/characters/creating/caging.md b/.cursor/rules/roblox/art/characters/creating/caging.md new file mode 100644 index 00000000..93eef9f0 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/creating/caging.md @@ -0,0 +1,60 @@ +--- +title: Caging character head +description: Cage your avatar characters in Blender to support layerable accessories and clothing. +next: /art/characters/creating/combine-head-geometry +prev: /art/characters/creating/texturing-pbr +--- + +**Caging** is the process of updating the [cage mesh component](../../../art/characters/index.md#cage-meshes) of your avatar character. To allow your character to correctly wear layered clothing and accessories, you must update the default template cage mesh object to match the sculpting changes you made to your custom character. + +Since this tutorial only applies modeling changes to the head, the caging instructions below only apply to the **Head_OuterCage** object. If you make geometry changes to other parts of the character, you must also adjust those specific **\_OuterCage** objects to match your sculpting changes. + + +Do not delete any vertices or faces of the provided cages. Destructive modification of the cages can cause import issues and prevent the character model from equipping clothing and cosmetics. + + + +
    Default head cage mesh no longer fits over sculpted head
    + +
    Head cage mesh after adjustment
    +
    + + +If your character body shape incorporates many changes with different body parts, it may be more efficient to use the [Blender Cage Template](../../../assets/modeling/meshes/reference-files/Body_Cage_Templates.zip). This Blender project file includes a helper full-body `std_cage_deformable` mesh to automatically apply vertex changes to the individual body-part cages at the same time. + + +To begin caging your character: + +1. Starting from the Layout Tab, hide everything in the Outliner except the **Head_OuterCage** and the **Head_Geo** objects. + + + + +2. With the **Head_OuterCage** selected, navigate to **Object Properties** > **Viewport Display** and set the **Display As** to **Wire**. Toggle this setting back to **Solid** when you are finished. + +3. Click on the **Head_OuterCage** object and switch to **Edit Mode**. +4. Enable **X-Axis symmetry** and **Topology Mirror** to ensure you are making symmetrical vertex changes to your cage. + + + +5. Switch to **Edit Mode**. +6. Using the **Grab tool** (G), click and grab parts of the cage mesh and align it to fit tightly over the goblin head mesh. Keep the following in mind: + + 1. **Never delete any of the cage vertices.** Missing vertices can cause errors and issues with equipping clothing accessories. + 2. If editing the base of your head cage, ensure that the base of the Head cage aligns with the top of the UpperTorso cage. + 3. In different Select modes, hold Shift and click multiple vertices/edges/faces to select and edit the geometry. + 4. You can verify a tight fit by grabbing vertices and moving them into the Head_Geo mesh to check where the meshes intersect and moving the cage vertices until the cage mesh just covers the head mesh. + + + + 5. Toggle visibility on your different mesh objects to improve visibility and access to vertices. + 6. After the wireframe is tightly fitted over the head mesh, set the **Display As** back to **Solid** and spot check and fix any intersecting vertices. + + +Your final product should feature a cage mesh that sits directly over the head mesh without any of the Head_Geo geometry intersecting through the solid sections of the cage. + + + + +For a comparison reference, you can download [this version of the tutorial project with caging completed](../../../assets/art/reference-files/checkpoint/3_Goblin-caged.blend). + diff --git a/.cursor/rules/roblox/art/characters/creating/combine-head-geometry.md b/.cursor/rules/roblox/art/characters/creating/combine-head-geometry.md new file mode 100644 index 00000000..0138bd83 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/creating/combine-head-geometry.md @@ -0,0 +1,41 @@ +--- +title: Combine head geometry +description: When creating characters in Blender, you must combine the head geometry to a single object. +next: /art/characters/creating/remove-extra-bones +prev: /art/characters/creating/caging +--- + +Whenever you are ready to export your model, it's important to clean up your project to ensure that your model is ready to export. This includes the following tasks that ensure the customized template model and all of the avatar components can import into Studio successfully: + +- Combining extra head geometry +- Removing extra head bones +- Verifying attachment points +- Final technical checks + + +Failure to combine head geometry and [remove head bones](../../characters/creating/remove-extra-bones.md) will cause issues with validation, as the character will no longer adhere to the expected R15 geometry and joint hierarchy. + + +## Combine head geometry + +At this point, you should also combine the separate head and face objects within the single Head_Geo object. Some templates don't include some face objects, like lashes. To combine the head and face meshes: + +1. In the Outliner, hold Ctrl/⌘ and click following objects, ending with the Head_Geo: + + 1. UpperTeeth_Geo + 2. LowerTeeth_Geo + 3. Tongue_Geo + 4. RightLash_Geo + 5. RightEye_Geo + 6. LeftLash_Geo + 7. LeftEye_Geo + 8. Head_Geo + + + + + When selecting multiple head objects, make sure that the **Head_Geo** is highlighted as yellow, indicating it as the main object that the others merge into. This correctly preserves the custom properties stored in the head mesh. You can achieve this by selecting the head last in the Outliner. + + +2. While in Object mode, right-click in the Viewport and select **Join**. The objects combine as a single **Head_Geo**. + diff --git a/.cursor/rules/roblox/art/characters/creating/export-character.md b/.cursor/rules/roblox/art/characters/creating/export-character.md new file mode 100644 index 00000000..75bbd910 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/creating/export-character.md @@ -0,0 +1,37 @@ +--- +title: Export character model +description: Export your character model from Blender using the correct settings and processes. +prev: /art/characters/creating/export-textures +--- + + +It's important to test your assets multiple times at every point of the asset creation process, whether it is within Blender or after importing into Studio. See [Test characters](../../../art/characters/testing/index.md) for more information. + + +Whether you are exporting your character for testing, or are performing a final export out of Blender, you must apply the appropriate export settings to ensure that Blender exports the proper character data. + +To export your character: + +1. In the topbar, click **File** > **Export** > **FBX (.fbx)**. The Blender file browser window displays. +2. Set **Path Mode** to **Copy** and enable the **Embed Textures** icon. +3. In the Include section, enable **Custom Properties**. +4. Expand the Armature section and uncheck **Add Leaf Bones**. +5. Enable **Bake Animation**. +6. Expand Bake Animation and **uncheck NLA Strips**, **All Actions**, and **Force Start/End Keyframes**. +7. In Bake Animation, set **Simplify** to **0.0**. +8. Click the **Export FBX** button. Save the `.fbx` to the directory of your choice. + + + + +After exporting your .fbx file, see [Test characters](../../../art/characters/testing/index.md) for steps on importing your character model into a test place and verifying your avatar and related components. + + + +After importing the `Class.Model` character to Studio, you can now perform the following with this asset: + +- [Upload the character](../../../art/accessories/creating-rigid/publishing.md) to the Marketplace. +- Use the humanoid character on an existing experience by applying a [HumanoidDescription](../../../characters/appearance.md#manually-modify-appearance)to the `Class.Model` object. +- Save the asset to your [Toolbox](../../../projects/assets/toolbox.md) to share or use within any of your experiences. + + diff --git a/.cursor/rules/roblox/art/characters/creating/export-textures.md b/.cursor/rules/roblox/art/characters/creating/export-textures.md new file mode 100644 index 00000000..0970ecff --- /dev/null +++ b/.cursor/rules/roblox/art/characters/creating/export-textures.md @@ -0,0 +1,54 @@ +--- +title: Export textures +description: Export your character textures from Blender using the correct settings and processes. +next: /art/characters/creating/export-character +prev: /art/characters/creating/final-checks +--- + + +It's important to test your assets multiple times at every point of the asset creation process, whether it is within Blender or after importing into Studio. See [Test characters](../../../art/characters/testing/index.md) for more information. + + +Whether you are exporting your character for testing, or are performing a final export out of Blender, you must apply the appropriate export settings to ensure that Blender exports the proper character data. + +## Export textures + +Including the default PBR textures, your template character includes four separate image maps that make up its surface appearance. Depending on your workflow, you can choose to embed the image maps to your export file or export the textures separately as image files. Both methods have advantages: + +- [Embedding textures](#embed-textures) simplifies your export by packing all of your textures within the single `.fbx` file. +- [Exporting texture images](#export-textures) directly allows you direct access to the image textures, so you can test and swap them more quickly. + +### Embed textures + +Embedding the texture maps to your `.fbx` export can simplify the Blender export and Studio import process. When embedding your textures with Roblox's template files, you need to make a quick adjustment to custom skin tone shader nodes in the Blender file. + + +
    Default node configuration: Mix node connected to Base Color
    +
    Exportable node configuration: Color node connected directly to Base Color
    +
    + +To prepare your textures to embed with export: + +1. In Object mode, select any part of the character. +2. Navigate to the **Shading** tab. +3. Ensure the **Type of Data** dropdown is set to **Object**. + + +4. Find the node that connects to the **Principled BSDF's Base Color**. + +5. Click and drag the line from **Base Color** to disconnect the node. + +6. Find the **file26** node with the color texture map and click and drag the **Color** to **Principled BSDF's color** node. + + + +### Unpack image files + +As an alternative to embedding textures, you can export your texture files as separate `.png` image files, which allows you to quickly access and swap image texture maps. + +To export your texture image files: + +1. Navigate to **File** > **External Data** > **Unpack Resources**. +2. Select **Use files in current directory** to save in the same directory as your project. Blender exports your image files to a textures directory in your project's parent directory. + diff --git a/.cursor/rules/roblox/art/characters/creating/final-checks.md b/.cursor/rules/roblox/art/characters/creating/final-checks.md new file mode 100644 index 00000000..a720a239 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/creating/final-checks.md @@ -0,0 +1,12 @@ +--- +title: Final checks +description: Before exporting, verify that your model meets Studio's requirements. +next: /art/characters/creating/export-textures +prev: /art/characters/creating/verify-attachments +--- + +Depending on the types of customizations you made to your template project or model, the following are additional tasks to look out for when cleaning up your project: + +- Ensure that your project doesn't contain additional mesh objects that aren't part of your character model geometry. +- Verify that there isn't additional animation data, such as additional keyframes or saved poses and orientations that are not related to the original facial animation data. +- Double-check that your geometry, rig, and texture adhere to the [avatar technical specifications](../../../art/characters/specifications.md). diff --git a/.cursor/rules/roblox/art/characters/creating/head-objects.md b/.cursor/rules/roblox/art/characters/creating/head-objects.md new file mode 100644 index 00000000..1fd19954 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/creating/head-objects.md @@ -0,0 +1,52 @@ +--- +title: Template head structure +description: Each Roblox avatar template contains modular separate pieces that must later be combined or removed. +next: /art/characters/creating/blender-configurations +prev: /art/characters/creating/template-files +--- + +In each template file, each avatar body includes extra head mesh objects and face armature bones. Separating these objects within the templates allow you to make easier changes to each of these separate objects, as demonstrated during the texturing step. + +To avoid validation errors, you must [join](../../../art/characters/creating/combine-head-geometry.md) and [remove](../../../art/characters/creating/remove-extra-bones.md) these extra objects during the cleanup process prior to exporting. + +The extra head mesh objects are the following: + + +
    + - Head_Geo + - UpperTeeth_Geo + - LowerTeeth_Geo + - Tongue_Geo + - RightLash_Geo + - RightEye_Geo + - LeftLash_Geo + - LeftEye_Geo +
    + +
    Head-Related Meshes
    Extra head-related meshes in Blender's Outliner
    +
    + +

    + +The extra head bone children are the following and may differ between templates: + + + +

    + - Tongue + - LowerTeeth + - UpperTeeth + - LeftEye + - RightEye +
    + +
    Head-Related Meshes
    Extra head-related bones in Blender's Outliner
    + + +While these extra objects exist to aid the creation and modification process, leaving them in your project on final export will cause validation issues when uploading these assets to the Marketplace. diff --git a/.cursor/rules/roblox/art/characters/creating/index.md b/.cursor/rules/roblox/art/characters/creating/index.md new file mode 100644 index 00000000..72ac1f95 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/creating/index.md @@ -0,0 +1,28 @@ +--- +title: Create with templates +description: Use Roblox's supplied template models to create your own unique avatar character in Blender. +next: /art/characters/creating/template-files +--- + +You can create your own custom avatar character using Blender and one of Roblox's downloadable template models. Using templates can save you a lot of time by skipping the complex processes of setting up your armature, rigging, skinning, and configuring your character for face animations. + +This tutorial is intended for creators of all skill levels with moderate Blender experience to create a unique character by: + +1. Selecting a base template that include time-saving Blender configurations. +2. Modeling using non-destructive sculpting workflows +3. Texturing using Blender's texture paint tools +4. Caging an asset by editing the template's cage mesh objects +5. Cleaning and prepping the project for export +6. Exporting your asset for use or testing in Studio + + +
    Starting template model
    + +
    Example model after modifications
    +
    + + +This guide uses [Blender 3.4+](https://www.blender.org/download/releases/3-4/) as a practical example for customizing a character template. Before you begin, you should have a basic knowledge using Blender's interface, tools, and viewing controls. + +If you are using another program, you can still apply the general workflow of this tutorial with your program's similar tools. + diff --git a/.cursor/rules/roblox/art/characters/creating/modeling-best-practices.md b/.cursor/rules/roblox/art/characters/creating/modeling-best-practices.md new file mode 100644 index 00000000..1427a696 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/creating/modeling-best-practices.md @@ -0,0 +1,99 @@ +--- +title: Modeling best practices +description: Understand important modeling concepts to prevent major issues before any modeling steps. +next: /art/characters/creating/modeling-tips +prev: /art/characters/creating/blender-configurations +--- + +Modeling, sometimes known as **sculpting**, is the process of shaping the geometry of your model or mesh. This guide covers important concepts and tips you should review before creating your own unique character shape. + +By understanding how to make non-destructive sculpting changes to the head, the character part that contains the most complex components, you can continue to apply these techniques and concepts to other parts of the character model body. + + +
    Starting template model
    + +
    Model after custom sculpting
    +
    + + +When editing templates, **don't delete or add vertices to your character body**. This ensures that your character's skinning and facial animation data remains unaltered and fully functional. + + +## Non-destructive modeling + +Non-destructive modeling means using a process that doesn't alter the physical shape or construction of the base mesh object. When modifying a template model, don't use tools or functions that delete or add vertices to your meshes. Instead, use Blender's sculpting tools to alter the shape of your character by **only changing the position of existing vertices**. This ensures that vertices and faces that have skinning or animation data associated with them retain that important character data. + + +Extreme geometric changes, even if the vertices are not deleted, can still adversely affect your rigging and skinning. It's important to choose a starting template file close to your final design and to make consistent and proportional changes when sculpting. + + +## Edge flow + +Edge flow is a common modeling concept of ensuring that the vertices of your model naturally follow the organic curvature of your model's shape. When making changes to your model's topography, you should maintain a natural edge flow by ensuring that your vertices remain a proportionate distance from each other and follow the common muscle groups and contours of your model. + +Even when maintaining edge flow, you should avoid sculpting certain regions of the character model. The following are examples of important sections of the face that follow a natural edge flow and should be kept in a similar shape: + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Round head regionEdge flow notes
    + + + + + + + **Forehead Wrinkles and Nasolabial Edges**: The edge lines for the forehead wrinkles and nasolabial edges are vital for various expressions involving the mouth, forehead furrowing, eyebrow movement and cheeks. If you modify these sections of your topography, ensure that you retain the original shape whenever possible, and that they maintain a similar relative relationship to each other.
    + + + + + + + **Mouth and Lip Edges**: The topography surrounding the lips and mouth have circular mesh structures for the mouth to open and close. This structure can fold the mesh to shape the lips to naturally visualize *a*, *e*, *i*, *o*, and *u* vowel sounds. The neutral shape is a closed mouth, and the edge flows around the mouth in a continuous line to accurately fold and deform the expected mouth shapes.

    In this tutorial, we don't recommend modifying this area of the facial topography because of the risk of adversely affecting the underlying tongue, upper and lower jaw, and saved facial data. You can use a sculpting mask to ensure that this area is not affected by any modeling changes.
    + + + + + + + **Eyes**: The eyelids have enough mesh lines on the eyelids to close the eyes. The continuous lines on the eyelids enable the eyelids to deform and fold as expected when blinking or widening.

    In this tutorial, it isn't recommended to modify this area of the facial topography because of the risk of adversely affecting the underlying eyeball meshes and saved facial data that contribute to accurate expressions. You can use a sculpting mask to ensure that this area is not affected by any modeling changes.
    + + + + + + + **Eyelids and Eyebrows**: The eyelids and eyebrows require adequate space between the two regions.

    If modifying the topography above the eyes, keep in mind that the eyelids and eyebrows require a natural space between the two regions. Both the eyelids and eyebrows can shift and change positions with various facial expressions and, if improperly modeled, can clash into each other during a facial pose.
    + +Not following edge flow concepts can result in the topology of your model conflicting with each other during animations, sometimes known as crashing. + +
    +
    In this example, the top of the eyelid and bottom eyelid travel past each other when closing causing jagged artifacts where the vertices collide and crash.
    +
    + +By carefully sculpting your template mesh, you can avoid having to correct these topology collisions later, which can often require manually correcting rig, skinning, and/or facial animation data. diff --git a/.cursor/rules/roblox/art/characters/creating/modeling-tips.md b/.cursor/rules/roblox/art/characters/creating/modeling-tips.md new file mode 100644 index 00000000..94e83c23 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/creating/modeling-tips.md @@ -0,0 +1,27 @@ +--- +title: Modeling tips +description: Use these Blender modeling tips to expedite your character creation. +next: /art/characters/creating/sculpting +prev: /art/characters/creating/modeling-best-practices +--- + +There are many tips and tricks during the modeling process that can save you time and prevent major issues in your workflow. There are many resources online that can help you make your modeling process more efficient. The following are various beginner-friendly tips and settings in Blender that allow you to visualize and configure objects efficiently in your project. + +### Hide inactive objects + +In your Outliner, hide objects you aren't editing by enabling the **Hide In Viewport** icon . This cleans up your workspace and helps ensure you don't make unintentional changes to another object or collection. + +You can quickly bulk hide and unhide any parent and child objects that are not [disabled](../../../art/characters/creating/index.md#disabled-objects). To bulk hide objects: + +1. In the Outliner, navigate to a parent object, such as **Cage** or **Joints**. +2. Hold Shift and click the **Hide In Viewport** icon to toggle the object's visibility. + +### Enable wireframe view + +Whenever you use a modeling application, switch between different viewport options, like X-Ray and Wireframe, to gain a better perspective on your vertices and shapes. This tutorial uses a wireframe view over the mesh shape, and many examples use various material settings and viewport options. + +Enable wireframes on your material view by setting the following: + +1. Select the **Head_Geo**. +2. In the **Properties** panel, navigate to **Object Properties** . +3. In Viewport Display, enable **Wireframe**. diff --git a/.cursor/rules/roblox/art/characters/creating/remove-extra-bones.md b/.cursor/rules/roblox/art/characters/creating/remove-extra-bones.md new file mode 100644 index 00000000..f45a8b8a --- /dev/null +++ b/.cursor/rules/roblox/art/characters/creating/remove-extra-bones.md @@ -0,0 +1,26 @@ +--- +title: Remove extra bones +description: When creating characters in Blender, you must remove the extra head bones included in the template. +next: /art/characters/creating/verify-attachments +prev: /art/characters/creating/combine-head-geometry +--- + +The helper bones used to help place the head geometries also require removal to validate correctly. While these extra bones do not include any skinning data, do not delete any of the facial animation bones parented within DynamicHead, as these include important skinning data that drives facial animation. + + +Failure to [combine head geometry](../../characters/creating/combine-head-geometry.md) and remove head bones will cause issues with validation, as the character will no longer adhere to the expected R15 geometry and joint hierarchy. + + +Remove the additional head bones by selecting them and deleting them in edit mode: + +1. If required, toggle visibility on your **Armature** object. The bones display in the viewport. +2. In the Outliner, expand the character's armature object and find the **Joints** object that parents the bone structure of the character. + + + +3. Expand the Joints hierarchy by holding **shift** and clicking the expansion dropdown. +4. In the viewport, select any bone and switch to **Edit Mode**. + +5. Under the Head joint, hold **shift** and select all the head children joints except DynamicHead. +6. With the extra head bones selected, right click in the viewport and select **Delete Selected Bones**. + diff --git a/.cursor/rules/roblox/art/characters/creating/sculpting.md b/.cursor/rules/roblox/art/characters/creating/sculpting.md new file mode 100644 index 00000000..a6b43008 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/creating/sculpting.md @@ -0,0 +1,57 @@ +--- +title: Sculpt the head +description: Use Blender's sculpting tools to make unique changes to the shape of your character. +next: /art/characters/creating/texturing-setup +prev: /art/characters/creating/modeling-tips +--- + +After reviewing the modeling best-practices and sculpting tips, you can begin sculpting your character. This tutorial demonstrates sculpting changes to the [RoundMale template](../../../assets/art/reference-files/RoundMale.zip), creating a goblin-like character. + +The sculpting instructions utilize the following Sculpting tools: + +- **Grab** - Selects and pulls a group of vertices. +- **Smooth** - Eliminates irregularities in the area of the brush's influence. +- **Flatten** - Averages out the vertices within the brush's influence on a common plane. +- **Elastic Deform** - Similar to Grab, but adds an organic stretch and elasticity to the neighboring vertices. + + +You can use Blender's other sculpting tools, though it's important to use a tool that aligns with the [Non-Destructive Modeling](./modeling-best-practices.md#non-destructive-modeling) concepts to preserve the vertices of the model. + + +To begin sculpting the head: + +1. With the template project opened, hide the other Geo objects to isolate the head mesh. +2. Select the **Head_Geo** mesh object and switch to **Sculpting** mode. +3. At the top right of the viewport, set the following options: + 1. Enable **X-Axis Symmetry**. + 2. Enable **Wireframe** view. + +4. Using the **Mask** tool, paint over the mouth and eyes where you do not want to sculpt unexpectedly. + +5. With the **Grab** and **Smooth** tools, make the following edits to your template head: + + 1. Reshape the head, flattening and enlarging the top. + + 2. Elongate the ears. + + 1. Expand the surface near the ear to broaden the base + 2. Grab and extend each ear, ensuring it connects smoothly to the base and vertices remain proportionally spaced when possible. + 3. Try the Flatten tool to straighten and align a region. + 4. Use the Elastic Deform tool to stretch and pull multiple vertices. + + + 3. Extend the bridge of the nose and expand the size of the brow + + + 4. Broaden the chin so it prominently protrudes. + + +6. Perform a refinement pass to add final details, polish, and accentuate your main features, such as: + - Adding details in the outer and inner ears + - Adding more detail to chin and cheeks + - Improving edge lines and spacing in areas with crowded vertices + + + +For a comparison reference, you can download [this version of the tutorial project with sculpting completed](../../../assets/art/reference-files/checkpoint/1_Goblin-sculpted.blend). + diff --git a/.cursor/rules/roblox/art/characters/creating/template-files.md b/.cursor/rules/roblox/art/characters/creating/template-files.md new file mode 100644 index 00000000..e2eefb1b --- /dev/null +++ b/.cursor/rules/roblox/art/characters/creating/template-files.md @@ -0,0 +1,109 @@ +--- +title: Template files +description: Roblox provides template models to create your own unique avatar character in Blender. +next: /art/characters/creating/head-objects +prev: /art/characters/creating/ +--- + +Each template comes pre-baked with the [necessary components of an avatar character](../../../art/characters/index.md#components-of-an-avatar) to save you time and effort in creating a custom avatar character. When creating characters from scratch, these individual components typically take a lot of time and a deep technical background in your modeling application. Templates allow you to skip several steps and work from a variety of base character shapes. + + + + + + + + + + + + + + + + + + + + + +
    Template prototypeSample customizations
    +
    Muzzle head template
    +
    + +
    +
    +
    Round head template
    +
    + +
    +
    + +You can choose from a variety of templates that best match your final design and save time on creating the technical components. The examples in the template tutorials utilize the [Round Blender template](../../../assets/art/reference-files/RoundMale.zip). Experiment with other templates to create your own unique character and final result. + +Each `.zip` contains a `.blend`, `.fbx`, and PBR texture `.png` files for that template model. If using Blender or following the [template creation guides](../../../art/characters/creating/index.md), use the `.blend` project. + + + + +
    Round
    +
    +

    + Female: RoundFemale.zip
    + Male: RoundMale.zip +
    +
    + +
    Square
    +
    +

    + Female: SquareFemale.zip
    + Male: SquareMale.zip +
    +
    + +
    Muzzle
    +
    +

    + Female: MuzzleFemale.zip
    + Male: MuzzleMale.zip +
    +
    +
    + + +
    Realistic
    +
    + Female: SemiRealisticFemale.zip
    + Male: SemiRealisticMale.zip +
    +
    +
    + + +
    Anime
    +
    + Female: AnimeFemale.zip
    + Male: AnimeMale.zip +
    +
    +
    + + +
    Stylized
    +
    + Single body: Stylized.zip +
    +
    +
    + + +
    Caricature
    +
    + Single body: Caricature.zip +
    +
    +
    +
    + +After downloading your template file, review the [unique head object structure](../../../art/characters/creating/head-objects.md) and [additional Blender settings](../../../art/characters/creating/blender-configurations.md) that require adjustment before exporting. It's crucial to understand these concepts prior to committing to any alterations as these can conflict with Roblox's avatar requirements if not addressed. diff --git a/.cursor/rules/roblox/art/characters/creating/texturing-eyes.md b/.cursor/rules/roblox/art/characters/creating/texturing-eyes.md new file mode 100644 index 00000000..20677092 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/creating/texturing-eyes.md @@ -0,0 +1,72 @@ +--- +title: Texturing eyes +description: Use Blender's texture painting tools to apply a custom surface appearance on your character's eyes. +next: /art/characters/creating/texturing-face +prev: /art/characters/creating/texturing-setup +--- + +You can apply a fully opaque texture to the eyes to achieve a more non-human visual effect for your character. Before editing the eye textures, join the two eye objects to texture them both at the same time. Then texture paint the entire eye, starting with the outer eye, moving to the inner eye, and finishing with the pupil. + +To texture your eye mesh objects: + +1. Increase the texture image resolution. +2. In the Outliner, toggle the **Hide in Viewport** option for the **Head_Geo**, **LowerTeeth_Geo**, **Tongue_Geo**, and **UpperTeeth_Geo**. Leave the eye mesh objects visible. + +3. In Object Mode, hold Shift and click on both the **LeftEye_Geo** and the **RightEye_Geo**. Then right-click and select **Join** (CtrlJ; ⌘J) to join the objects. The two objects merge using the name of the last object selected. + +4. Switch to **Texture Paint** mode. +5. With the Draw tool active, set the following brush settings for the outer eye shadow: + + 1. In Brush Settings, set **Radius** to **50px** and **Strength** to **1.0**. + 2. In Color Picker, select **black**. + + + +6. In the Texture Paint **3D view window**, completely paint the eye objects black. This serves as the basis for the outer-eye shadow. + +7. With the Draw tool active, set the following brush settings for the outer eye shadow: + + 1. In Brush Settings, set **Radius** to **75px** and **Strength** to **1.0**. + 2. In Color Picker, select a **deep yellow**. + + + +8. In the Texture Paint **2D view window**, line up your cursor to the center of the UV map that corresponds to the eye texture. Click 4-6 times on the center of each eye to create an outer eye color over the base shadow. + + +9. For visibility, enable Head_Geo visibility and reorient the camera to a front-facing view. +10. Paint the inner eye color using the following suggestions: + + 1. Click the **X Symmetry** button to enable symmetry. Toggle this off if creating asymmetrical assets. + + + + 2. In the Overlay view options, **enable Wireframe geometry view**. You can toggle this overlay off when spot checking your visual elements. + + + + + 3. Update your brush settings for the inner eye: + + 1. In Brush Settings, set **Radius** to **5px**. You can quickly change this radius as you paint by holding F. + 2. In Color Picker, select a strong **red** shade for the inner eye. + + + + + + 4. Periodically make the head mesh visible to ensure your eye texture works with the rest of the model. + +11. Update your brush settings for the pupil: + + 1. In Brush Settings, set Radius to **5px**. You can quickly change this radius as you paint by holding F. + 2. In Color Picker, select a bright **red** shade for the pupils. + + + +12. Using the Brush tool, paint the pupils of your model. + +13. After completing your texture painting, switch back to **Edit Mode**. +14. Shift click both of your eye objects, and press P and select **By Loose Parts** to separate the two meshes. +15. Rename your remaining mesh to the original **RightEye_Geo** or **LeftEye_Geo** name. + diff --git a/.cursor/rules/roblox/art/characters/creating/texturing-face.md b/.cursor/rules/roblox/art/characters/creating/texturing-face.md new file mode 100644 index 00000000..1ab1f7cc --- /dev/null +++ b/.cursor/rules/roblox/art/characters/creating/texturing-face.md @@ -0,0 +1,48 @@ +--- +title: Texturing face +description: Use Blender to apply a custom surface appearance on your character's face. +next: /art/characters/creating/texturing-pbr +prev: /art/characters/creating/texturing-eyes +--- + +After texturing the eyes, you can begin texturing the face. The concepts are similar to texturing the eyes, though you only use an opaque texture to ensure that the custom skin tone can remain visible. + +To texture the face: + +1. In the Texture Paint tab, resize your texture resolution to **2048** or **4098**: + 1. In the left Paint window, select **Image** > **Resize**. + 2. Set the texture size to **2048 x 2048**. +2. In the Tool sidebar, update your brush settings for the facial features. + + 1. In Brush Settings, start with the following Brush recommendations: + + 1. **Radius** to **5px**. You can change this radius as you paint. + 2. **Strength** to **0.300**. Modify this value when applicable. + 3. In Symmetry, enable **X Axis Mirroring**. + + + + 2. In Color Picker, select a neutral **dark** shade for the shadows. + +3. Apply texture to your character's face features, such as the nostrils, wrinkles, ears, and chin. Keep in mind that the painted textures will look softer and blended with the surface once the texture resolution is resized. + + +4. When complete, resize your texture resolution back to **1024 x 1024**: + 1. In the left Paint window, select **Image** > **Resize**. + 2. Set the texture size back to **1024 x 1024**. + + +Your final result should include various facial textures that help accentuate the features of your character and work well with any custom skin tone. Try exploring various amounts of texturing and the types of surfaces you could expect on skin, such as wrinkles, scars, or dirt/grunge. You should also verify your textures between several skin tones to ensure that your texturing looks acceptable with various skin types. + + +
    Default Green
    + +
    Pink
    + +
    Blue
    + +
    + + +For a comparison reference, you can download [this version of the tutorial project with texturing completed](../../../assets/art/reference-files/checkpoint/2_Goblin-textured.blend). + diff --git a/.cursor/rules/roblox/art/characters/creating/texturing-pbr.md b/.cursor/rules/roblox/art/characters/creating/texturing-pbr.md new file mode 100644 index 00000000..41e07c4d --- /dev/null +++ b/.cursor/rules/roblox/art/characters/creating/texturing-pbr.md @@ -0,0 +1,16 @@ +--- +title: PBR textures (optional) +description: PBR textures are high-definition texture maps that can elevate your custom characters. +next: /art/characters/creating/caging +prev: /art/characters/creating/texturing-face +--- + +Physically-based rendering (PBR) textures use multiple texture maps to define how a surface reacts under different lighting and environmental conditions. PBR textures can elevate the look and feel of your assets, including your avatar, accessories, and clothing. Typically, PBR textures are created in a texturing tool, such as [Substance 3D](https://www.adobe.com/products/substance3d-painter) or [ZBrush](https://www.maxon.net/en/zbrush). Many third-party 3D models available online include PBR textures. + + +
    Characters and accessories can make use of PBR textures to apply visual pop and material realism.
    + +
    PBR textures allow for virtually any type of material surface, such as leather and denim.
    +
    + +Although each template includes PBR textures, for the purpose of demonstrating the basic texturing process within Blender, this tutorial doesn't cover the PBR texturing process. For more information and references on advanced texturing, see [PBR textures](../../../art/modeling/surface-appearance.md). diff --git a/.cursor/rules/roblox/art/characters/creating/texturing-setup.md b/.cursor/rules/roblox/art/characters/creating/texturing-setup.md new file mode 100644 index 00000000..1993c2a1 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/creating/texturing-setup.md @@ -0,0 +1,44 @@ +--- +title: Texturing setup +description: Set up Blender to optimize your project for texturing the eyes and face of your template. +next: /art/characters/creating/texturing-eyes +prev: /art/characters/creating/sculpting +--- + +**Texturing** is the process of customizing the color, tone, and shading of your model's surface. Custom meshes and models use a 2D image, known as a texture map, to project various surface appearance elements onto your 3D object. + + +
    Model after custom sculpting
    + +
    Model after texturing
    +
    + +Each template comes with a color texture map, which you can alter and modify using Blender's texture editing tools. Since most Roblox avatars can take advantage of custom skin tones, it's important to understand how to [preview custom skin tones](../../../art/characters/creating/index.md#preview-skin-tones) in Blender to verify how your final asset will look in a Roblox experience. + +For the purpose of demonstrating the basic texturing process, this tutorial goes over basic texture painting setup, applies a completely opaque texture over parts of the character eyes, and partially opaque details over the face. You can apply these same techniques to other parts of your character geometry. + + +When texturing parts of your character model's body, ensure that your character model includes a modesty layer over sensitive regions. See [Community Standards](../../../marketplace/marketplace-policy.md) for more information on Roblox's policies. + + +## Set texture resolution + +Roblox Studio supports a texture resolution of **1024 x 1024** for albedo texture maps. When using applications like Blender or Maya to texture paint directly on a model, extremely fine details may not paint as expected due to the resolution and level of detail of the painting. + + +
    Texture painting at 1024 x 1024 resolution
    + +
    Texture painting at 2048 x 2048 resolution
    +
    + +When adding fine details to your texture, increase the image resolution of your texture map temporarily to **2048 x 2048** or **4096 x 4096**. After completing your texturing, change the image resolution back to **1024 x 1024** to bake in the changes. + +To change your texture image resolution: + +1. Starting from Layout mode, select the **Head_Geo**. +2. Switch to **Texture Paint** mode. +3. In the left Paint window, select **Image** > **Resize**. +4. Set the texture size: + 1. Use **2048** or **4096** for a higher res for detailed texture work. + 2. Use **1024** for the default Roblox-supported resolution. + diff --git a/.cursor/rules/roblox/art/characters/creating/verify-attachments.md b/.cursor/rules/roblox/art/characters/creating/verify-attachments.md new file mode 100644 index 00000000..f290d2f8 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/creating/verify-attachments.md @@ -0,0 +1,30 @@ +--- +title: Verify attachment placement +description: When creating characters in Blender, the character model requires minor attachment adjustments to be Studio-ready. +next: /art/characters/creating/final-checks +prev: /art/characters/creating/remove-extra-bones +--- + +Attachment points are non-rendered objects of your avatar where rigid accessories attach to. Each template includes the required attachments at their expected locations ending with **\_Att**. Before exporting, it's important to verify the attachment position and, if necessary, adjust the location if you made any changes to the shape of your model. + + +
    Original template attachment positions
    + +
    Attachments after adjustment
    +
    + +Center attachment points at their respective locations. Each attachment should overlap approximately halfway with the character's mesh. + +This tutorial only changes the head of your model, so you only need to adjust the **Hat**, **Hair** and **FaceFront** attachments. To enable visibility and verify your head attachment point: + +1. If you haven't already, enable [disabled objects](../../../art/characters/creating/index.md#disabled-objects) in your Outliner. +2. In the Outliner, find the Joints parent object. +3. Hold Shift and click the **Hide** icon for the Joints object to hide everything. +4. Expand the Joints object and un-hide the Head_Geo and Hat_Att and Hair_Att. + 1. If required, disable **Disable In Viewport** next to the \_Att objects. +5. Toggle Visibility for the **Hat_Att**, **Hair_Att**, and **FaceFront_Att**. +6. Verify the placement of the attachments. The goblin's head is shorter than the starting template, so the attachments require minor vertical adjustment. +7. Select the attachments +8. Switch to **Edit** Mode. +9. Using the Grab tool, position the attachments vertically along the y-axis until they are about halfway embedded in the head. + diff --git a/.cursor/rules/roblox/art/characters/export-avatar-animations-from-maya.md b/.cursor/rules/roblox/art/characters/export-avatar-animations-from-maya.md new file mode 100644 index 00000000..d1ba6740 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/export-avatar-animations-from-maya.md @@ -0,0 +1,152 @@ +--- +title: Export avatar animations from Maya +description: Explains the process for exporting avatar animations from Maya. +--- + +**Avatar animations** are animations that you can create and assign to play for any avatar action, such as walking, swimming, or dancing. In addition to using the [Animation Editor](../../animation/editor.md) or [Animation Capture](../../animation/capture.md) tools within Studio, you can create avatar animations through third-party modeling and animation tools like [Maya](https://www.autodesk.com/products/maya/overview), then import your avatar animations directly into Studio to apply to any avatar with Roblox. By using this guide as a checklist of the specific settings your rig and animation must meet for the export process, you can ensure that your animations import successfully. + + +
    + A humanoid mannequin in Maya with IK controls. +
    R15 mannequin reference
    +
    +
    + +
    Example walking animation
    +
    +
    + + + This guide uses a downloadable [R15-Mannequin-Rig.ma](../../assets/animation/exporting-avatar-animations-from-maya/R15-Mannequin-Rig.ma) file that contains an R15 mannequin that you can use as a reference to create and export animations. If you choose to animate on your own R15 rig, the same rig configuration and export settings apply. + + +## Configure the rig + +Before you export your avatar animation from Maya, you must configure your rig to be compatible with Studio's import requirements, including making sure that the rig follows a specific hierarchy and naming conventions so that Studio is able to recognize the file as an avatar animation, and that the rig's translation channel is muted so that the root node doesn't move with the animation. + +### Hierarchy and naming conventions + +Studio requires a specific hierarchy and naming conventions for a humanoid rig's internal joint structure so that it can recognize what you're importing as an avatar animation. If you aren't using the downloadable R15 mannequin reference rig to create your animations, make sure your rig uses the following joint hierarchy and naming convention exactly as it is: + +- Root +- HumanoidRootPart +- LowerTorso +- UpperTorso +- Head (representing the base of the neck) +- LeftUpperArm +- LeftLowerArm +- LeftHand +- RightUpperArm +- RightLowerArm +- RightHand +- LeftUpperLeg +- LeftLowerLeg +- LeftFoot +- RightUpperLeg +- RightLowerLeg +- RightFoot + +### Mute the translation channel + +Roblox avatar animations cannot move a character when they play; instead, avatar animations animate rigs at their world position. If your avatar animation is a locomotion-type of animation where the root node moves in space, such as a character that moves forward as their walk animation plays, you must mute the rig's translation channel so that the animation plays without moving the rig on export. + +To mute the translation channel: + +1. Open the **Graph Editor**. + + 1. In the menu bar, click **Windows**. A contextual menu displays. + 1. Hover over **Workspaces**, then click **Animation**. The **Graph Editor** displays. + + A close up view of the Windows dropdown menu in Maya. The Workspaces menu item is highlighted, as well as the Animation submenu. + +1. Move the **Time Marker** to frame 0. + + A close up view of the Graph Editor in Maya. The Time marker for a character's right hand is at frame 0, and is highlighted. + +1. In the **Outliner**, select the root node. If you are using the reference file, this is **TSM3_root**. +1. In the **Channel Box**, right-click on the **Translate Z** value. A contextual menu displays. +1. Select **Mute Selected**. The Translate Z value's channel box color changes to orange to confirm that it's muted. + + +
    + A close up view of the Channel Box in Maya. The Mute Selected menu item in the contextual menu from step 4 is highlighted. +
    +
    + A close up view of the Channel Box in Maya. The Translate Z property channel box color is orange to signify it is muted. The rest of the values are in cyan blue to signify that they remain unmuted. +
    +
    + +When you play the animation, the character's root node doesn't move in space anymore, and the character animates in place at the origin of the scene. + +## Export the animation + +Now that your rig animates in place and has a hierarchy and naming data that is compatible with Studio, you can export the animation into a `.fbx` format. Maya doesn't load this capability by default, so you need to enable an FBX plugin to gain the additional settings necessary to export the file in a format Studio can recognize. + +To export your avatar animation from Maya: + +1. Install the FBX plugin. + + 1. In the menu bar, click **Windows**. A contextual menu displays. + 1. Hover over **Settings/Preferences**, then click **Plug-in Manager**. The **Plug-in Manager** window displays. + + A close up view of the Windows dropdown menu in Maya. The Settings/Preferences menu item is highlighted, as well as the Plug-in Manager submenu. + + 1. In the search field, input **fbxmaya**. The **fbxmaya.mll** plugin displays. + 1. Enable the **Loaded** and **Auto load** options. + + The Plug-in Manager with a close up view of the fbxmaya file. Its Loaded and Auto load settings are highlighted. + +1. In the menu bar, click **File**. A contextual menu displays. +1. Select **Export All**. The **Export All** window displays. + + A close up view of the File dropdown menu in Maya. The Export All menu item is highlighted. + +1. At the bottom of the window, + + 1. In the **File name** field, input a name for your avatar animation. + 1. Click the **Files of Type** dropdown menu, then select **FBX export**. The **Options pane** updates its settings. + +1. In the **Options** pane, click the **Animation** dropdown for additional animation settings, then in the **Bake Animation** section, + + 1. Enable **Bake Animation**. + 1. Verify that the **Start** and **End** fields correlate to the frames you want to export for your animation loop. + 1. Set **Step** to **1**. + + A close up view of the Options pane. The Bake Animation settings are highlighted. + +1. Click the **Advanced Options** dropdown for additional export settings, then in the **FBX File Format** section, + + 1. Set **Type** to **Binary**. + 1. If required, set **Version** to **FBX 2020**. + + A close up view of the Options pane. The FBX File Format settings are highlighted. + +1. In the bottom right corner, click the **Export All** button. After a moment, the avatar animation `.fbx` file displays in your file browser. + +## Test the animation in Studio + +Once you have your avatar animation `.fbx` file, you can test it within Studio to make sure that the animation plays without any errors. + +To test the animation in Studio: + +1. Open a pre-built character rig. + + 1. From the toolbar's **Avatar** tab, click **Character**. + 1. Select any rig you want to use as a test. The rig displays within the viewport. + +1. Connect the rig to the **Animation Editor**. + + 1. From the toolbar's **Avatar** tab, click **Animation**. The [Animation Editor](../../animation/editor.md) window displays. + 1. In the viewport, click your rig. A dialog displays in the editor. + 1. In the **Animation Name** field, enter a new animation name, then click the **Create** button. The editor window displays the media and playback controls, timeline, and track list. + +1. Import your avatar animation into the rig. + + 1. Navigate to the **Media and Playback Controls** and click the **⋯** button. A contextual menu displays. + 1. Hover over **Import**, then select **From FBX Animation**. A file browser displays. + + A close up view of the Animation Editor window. The ellipsis contextual menu displays, and the From FBX Animation submenu item is highlighted. + + 1. Select the FBX animation you just exported from Maya, then click **Open**. The animation's keyframes load into the **Animation Editor**. + +1. Navigate to the **Media and Playback Controls** and click the **Play button** to play the avatar animation. diff --git a/.cursor/rules/roblox/art/characters/export-settings.md b/.cursor/rules/roblox/art/characters/export-settings.md new file mode 100644 index 00000000..800e2c61 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/export-settings.md @@ -0,0 +1,101 @@ +--- +title: Character body export settings +description: Use the appropriate export settings in Maya and Blender to generate Studio-ready .fbx files. +--- + + +It's important to test your assets multiple times at every point of the asset creation process, whether it is within your modeling application or after importing into Studio. See [Test characters](../../art/characters/testing/index.md) for more information. + + +Export your model as a `.fbx` or `.gltf` to take advantage of all of Studio's 3D import features. When rigging or skinning a layerable model, these file types contains all the mesh and texture data, including the rig and influence data, you need to later [import](../../art/modeling/3d-importer.md) into Studio. + +Check that your model meets Roblox's [avatar character specifications](../../art/characters/specifications.md) before exporting to ensure Studio compatibility. + + +If creating other types of 3D models: +
      +
    • For generic meshes, see [general mesh specifications](../modeling/specifications.md) and [general export settings](../modeling/export-requirements.md).

    • +
    • For rigid accessories, see [accessory specifications](../accessories/specifications.md) and [accessory export settings](../accessories/export-settings.md).

    • +
    • For layered accessories, see [layered accessory specifications](../accessories/clothing-specifications.md) and [layered export settings](../accessories/clothing-export-settings.md).

    • +
    +
    + + +If you are using Roblox's avatar template files, you must perform the [cleanup steps](../../art/characters/creating/combine-head-geometry.md) in order for the assets to properly validate. + + +## Before exporting + +Before exporting, ensure that you are only exporting the Roblox supported objects related to your model. If you have any modifiers to your mesh or project objects, make sure to apply or delete them before export. + +Use the following guidance before exporting: + +- While your mesh objects must be parented within an armature object, you can also parent your outer cage objects to a single empty object to simplify your workspace. + + Screenshot of a Blender project Outliner with parent objects collapsed. + +- In the cage parent object, ensure you have an [outer cage](../characters/specifications.md#outer-cages) for each of your 15 body parts with appropriate naming affix. + + Screenshot of the 15 outer cage meshes that you must include with a character export. + +- In the armature object, ensure that you include the all [15 mesh objects](../characters/specifications.md#body-parts) and [19 attachments](../characters/specifications.md#attachments) with the appropriate naming affix. + + Screenshot of 15 child objects parented within an Armature object. + + +For more information on supported modeling objects and proper configuration, see [Character specifications](../characters/specifications.md). + + +- When exporting characters with animation or FACS animation, ensure that your animation timeline **Start** and **End** include the entire range of your animations. + +Zoom-in of Blender animation track indicating a Start value of 0 and End value of 308. + +## Blender + +Blender allows you to export in `.fbx` or `.gltf` as well as other formats. If you are using `.fbx` export, familiarize yourself with [Blender's FBX scaling](../blender.md#adjust-scale-fbx) to ensure that you successfully import the model into Studio at the correct scale. + +### Export settings + +1. In the topbar, click **File** > **Export** > **FBX (.fbx)**. The Blender file browser window displays. +2. Set **Path Mode** to **Copy** and enable the **Embed Textures** icon. +3. In the Include section, enable **Custom Properties**. +4. If your project doesn't already have `.01` scene unit scaling, set the **Transform** > **Apply Scalings** to `FBX Unit Scale`. For more details, see [Blender FBX scaling](../blender.md#adjust-scale-fbx). +5. Expand the Armature section and uncheck **Add Leaf Bones**. +6. Enable **Bake Animation**. +7. Expand Bake Animation and **uncheck NLA Strips**, **All Actions**, and **Force Start/End Keyframes**. + 1. Ensure your project animation timeline has the correct **Start** and **End** range of all your keyframes. +8. In Bake Animation, set **Simplify** to **0.0**. +9. Click the **Export FBX** button. Save the `.fbx` to the directory of your choice. + +Screenshot of Blender export settings + +## Maya export settings + +To export a mesh in Maya as a `.fbx` file: + +1. In the topbar, click **File**. A pop-up menu displays. +2. Select **Export All**. The **Export All** window displays. +3. Near the bottom of the window, click the **Files of type** dropdown, then select **FBX export**. +4. On the right-hand side of the window, navigate to the **Options...** section. +5. In the **Geometry** section, enable **Smooth Mesh** and **Referenced Asset Content**. +6. In the **Animation** section, enable **Animation**. Avatar characters with [facial animation data](../../art/characters/facial-animation/index.md) require animation data. +7. Enable **Bake Animation**. +8. If you need to import textures as a `.png`, in the **Embed Media** section, enable **Embed Media**. +9. In the **Advanced Options** section, + - Navigate to **Units**, then enable **Automatic**. + - Navigate to **Axis Conversion**, then set the **Up Axis** property to **Y**. +10. Click the **Export All** button. + + Screenshot of Maya export settings for exports with animation. + +11. After exporting, use Studio's [3D importer](../../art/modeling/3d-importer.md) to import your model. See [Test characters in Studio](../../art/characters/testing/studio.md) for additional importing and testing information. + + +After importing the `Class.Model` character to Studio, you can now perform the following with this asset: + +- [Test your character model](../../art/characters/testing/index.md) in Studio using various tools and workflows. +- [Upload the character](../../art/accessories/creating-rigid/publishing.md) to the Marketplace. +- Use the humanoid character on an existing experience by applying a [HumanoidDescription](../../characters/appearance.md#manually-modify-appearance)to the `Class.Model` object. +- Save the asset to your [Toolbox](../../projects/assets/toolbox.md) to share or use within any of your experiences. + + diff --git a/.cursor/rules/roblox/art/characters/facial-animation/animate-heads.md b/.cursor/rules/roblox/art/characters/facial-animation/animate-heads.md new file mode 100644 index 00000000..4203b9b8 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/facial-animation/animate-heads.md @@ -0,0 +1,102 @@ +--- +title: Animate heads +description: You can create facial animations for a character with live heads using the Animation Editor. +--- + +You can use the [Animation Editor](../../../animation/editor.md) to animate supported heads in the following ways: + +- You can manually set values to each facial pose on separate [animation tracks](#use-animation-tracks). +- You can use the [Face Animation Editor](#use-the-face-animation-editor) to access facial sliders that let you quickly create and save unique expressions on the timeline. +- You can use the [Animation Capture for Faces](../../../animation/capture.md#face) extension to automatically track and record facial movements with a webcam that converts your movement into keyframes on the timeline. + +In all methods, creating and combining multiple facial expressions over a duration of time results in a face animation. Since you cannot import face animations, these methods are the only ways to create and utilize them. + +After you create and publish a head that supports facial animation to Roblox, you can play the animation from a script or replace a character's default animation with your new animation. These animations can make your characters feel more expressive and full of life, such as playing a silly expression when a character walks, or an annoyed expression when a character is idle. + +A view of Studio where the Face Animation Editor, Animation Editor, and viewport are visible. The viewport shows a close up view of a blocky male avatar blinking with his left eye. + +## Create animations + +After you have [opened](../../../animation/editor.md#open-the-animation-editor) the **Animation Editor** and selected the character model with a head you want to create an animation for, you can either create a head animation by using animation tracks or the **Face Animation Editor**. + +For details on using Animation Capture to track facial movement as keyframes, see [Animation Capture - Face](../../../animation/capture.md#face). + +### Use animation tracks + +Similar to inserting other objects like `Class.MeshPart|MeshParts` or `Class.Bone|Bones` as animation tracks, you can manually add one FACS value at a time to the track list to manipulate a single body part, such as the character's eyes, jaw, or tongue. The [Animation Editor](../../../animation/editor.md) represents FACS values as a percentage between 0 and 1, and these values map directly to `Class.FaceControls` values. While this process provides precise control over individual values, the [Face Animation Editor](#use-the-face-animation-editor) enhances this workflow and lets you quickly change values to multiple facial features at once on the animation timeline. + +To create an animation by inserting individual FACS values: + +1. In the **track list** of the **Animation Editor**, click the **plus icon**. A contextual menu displays additional tracks you can add to the track list. +2. Hover over **Brows**, **Eyes**, **Jaw**, **Mouth**, or **Tongue**. A contextual menu displays all mapped FACS poses for that region of the face. + + A close up view of the Animation Editor with the contextual menu and its submenu expanded. The plus icon is highlighted to signify how to open the contextual menu. + +3. Select a FACS pose. An animation track for that FACS pose displays in the track list. +4. In the values input, enter a number between **0** and **1** to manipulate the body part into a new position. For example, if you change `LeftEyeClosed` to 1, the character's left eye closes. + + A close up view of the track list in the Animation Editor. The values input is highlighted. + +### Use the Face Animation Editor + +The **Face Animation Editor** is an intuitive, visual way to automatically create keyframes as you adjust **sliders** to achieve your desired facial expression. For example, when you drag the thumb of the `LeftEyeClosed` slider all the way down, the character's left eye closes and a new animation track for `LeftEyeClosed` displays with a value of `1` within the track list. + + + +Some sliders affect multiple FACS values in the same region depending on the value of the slider you are adjusting. For example, when you adjust the thumb of the `LeftEyeClosed` slider all the way up to have a value of `0`, a new animation track for `LeftEyeUpperLidRaiser` displays in the track list with a value of `1`. This allows you to manipulate the eye from closed to open, while also raising the upper lid of the eye, all within a single slider. + +You can set multiple sliders to create a complete face expression, then create multiple expressions at different frames of the timeline to create complex animations. For example, you can combine `LeftEyeClosed` and `RightEyeClosed` together to have the character slowly blink, or `LeftLipCornerPuller` or `RightLipCornerPuller` for a smile on one side of the face. + +When you click and drag the thumb of the drag box between the eyes, you can control the direction the character's eyes look at. This creates several FACS property tracks in the track list depending on how you adjust the eyes. + +At the bottom-left of the panel, the **Face Animation Editor** also includes the following controls: + + + + + + + + + + + + + + + + + + + + + + +
    ControlDescription
    Symmetry ToggleLets you use a slider on one side of the face to also adjust the corresponding slider on the other side of the face to the same value. This is useful to create symmetric facial expressions, such as a full smile.
    Focus Face ToggleFocuses the viewport on the face of the avatar without having to manually adjust the camera. This is useful when your camera is either far away from the avatar you want to animate, or if you are navigating from animating one avatar to another.
    Reset All ButtonResets all FACS pose values at your current frame position back to their default value of 0. This is useful when you want to quickly reanimate a single frame.
    + +To create an animation for your head using the **Face Animation Editor**: + +1. In the **track list** of the **Animation Editor**, click the **Face** button. The **Face Animation Editor** displays to the left of the track list. + + A close up view of the track list in the Animation Editor. The Face button is highlighted. + +2. In the **Face Animation Editor**, adjust sliders for the body parts you want to manipulate. Animation tracks for each facial part you manipulate automatically display in the track list along with keyframes for your current position in the timeline. The character's face also updates in the viewport. + + - To undo a step on a slider, press CtrlZ (⌘Z). + - To redo a step on a slider, press CtrlY (⌘Y). + - To reset a slider to its default value, right click on the slider. A contextual menu displays. Select **Reset Selected**. + +3. (Optional) Adjust the scrubber to a new position further along the timeline, then navigate back to the **Face Animation Editor** and adjust sliders to create a new facial expression. When you play the animation, the first facial expression will ease into the second facial expression. +4. When you are finished creating your animation, navigate to the **Media and Playback Controls** and click the **…** button. A pop-up menu displays. +5. Select **Save** or **Save As** to save the animation. The animation displays in the **Explorer** window as a child of the **AnimSaves** object (itself a child of the rig). + +## Export animations + +When you export a head that supports animation to Studio, it becomes available for use in all of your experiences. This means that you only need to create a head animation once, then you can reuse it as many times for as many characters as you want as long as the character has an [animatable head](../../../art/characters/facial-animation/use-heads-in-studio.md). + +You can export head animations using the same workflow outlined for [exporting animations](../../../animation/editor.md#export-an-animation). + +## Script animations + +Once you have created an animation, you need to use a script to play it in your experience. Like generic animations, you can either play animations for heads manually from your scripts or automatically by replacing default animations for player characters. For more information, see [Use animations](../../../animation/using.md). diff --git a/.cursor/rules/roblox/art/characters/facial-animation/create-basic-heads.md b/.cursor/rules/roblox/art/characters/facial-animation/create-basic-heads.md new file mode 100644 index 00000000..8097d475 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/facial-animation/create-basic-heads.md @@ -0,0 +1,463 @@ +--- +title: Create basic heads +description: The process of creating a basic animatable head in Blender. +--- + + + This guide covers advanced topics. Before you begin, you should have prior knowledge on modeling, UV mapping, rigging, animation, and how to set up a character in [Blender](https://www.blender.org) or [Maya](https://www.autodesk.com/products/maya/overview). + + +You can create or modify an existing model to support animated heads in a third-party modeling software, such as [Blender](https://www.blender.org) or [Maya](https://www.autodesk.com/products/maya/overview). When creating a head, your character model must meet the following requirements: + +- The model follows standard [modeling requirements](#modeling-requirements), and includes head geometry, such as eyes, a mouth, and teeth. +- The model's head must include a [rig](#rigging), or internal bone structure. These bones drive the various deformation of vertices to create facial expressions. You can create a [control system](#add-controls) to simplify the posing process. +- The model has facial poses [saved to the animation timeline](#pose) and [mapped to the head mesh](#map). Typical animatable heads include [50 standard base poses](../../../art/characters/facial-animation/facs-poses-reference.md) that allow for a diverse range of expressions. + +To meet these requirements, you can apply the steps in this guide when designing and posing your own head. This guide covers the basic processes of adding facial bones, posing, and mapping 5 basic FACS poses in Blender on a simplified reference character (Cubie), then exporting the model. + + + For reference, this guide uses Blender version 3.0. If you are using another version of Blender, there might be minor differences in UI and settings. + + +## Reference files + +The following are head reference files, including all example files from this guide: + + +The reference character model provided is meant for educational purposes and does not meet the avatar character [technical specifications](../../../art/characters/specifications.md) for general use. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Reference filesDescription
    [Cubie-Model-Only.blend](../../../assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Model-Only.blend)A Blender project file containing a R15 Cubie character model without facial data.
    [Cubie-Eye-Bones-Skinned.blend](../../../assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Eye-Bones-Skinned.blend)A Blender project file containing the example Cubie character model with skinned eye bones without posing or mapping data.
    [Cubie-Eye-Poses-Mapped.blend](../../../assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Eye-Poses-Mapped.blend)A Blender project file containing the Cubie character model with the 5 example poses saved and mapped.
    [Cubie-Complete.fbx](../../../assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Complete.fbx)A Cubie character model with a fully rigged face and over 50 poses saved and mapped. You can import this file into Studio, or open the file in your preferred 3D modeling software.
    Cubie-Texture_ALB.pngA Cubie texture image file. After you import the Cubie model into Studio, you can add this file as the head part's TextureID.
    [Cubie-Complete.ma](../../../assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Complete.ma)A Cubie Maya project provided as additional reference.
    + +## Modeling requirements + +Many character models already include a head with distinct facial features, but they might require minor modeling adjustments for head compatibility. When modeling a character with a head, ensure the head mesh meets the [Avatar character specifications](../../../art/characters/specifications.md) for Studio import, as well as the following requirements: + +- **Face parts** - Ensure that you include distinct face features, such as eyes, upper teeth, lower teeth, and a tongue. +- **Lip vertices** - If you want your character to use its mouth, separate the lip vertices so that the mouth can open. +- **Inner components** - If your character has inner mouth components, such as a tongue and teeth, model a mouth bag within the head mesh to contain these features. If your character uses eye sockets, model a similar eye bag to contain these features. +- **No extra data** - Ensure that all children face parts of the Head_Geo don't contain history or frozen transformations. +- **Outer cage** - Make sure the character model has an outer cage to support face accessories and layered clothing. For more information, see [Cage Mesh Requirements](../../../art/characters/specifications.md#inner-and-outer-cages). + +You can follow along the rest of this head creation process using a [rigged Cubie character](../../../assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Model-Only.blend) that meets these modeling requirements. This version doesn't include any facial rigging or pose data so you can use it as reference in this guide. + +## Rigging + +Your character must have an internal bone structure to drive the vertices of the face geometry and make facial poses. Unlike [rigging a humanoid model](../../../art/modeling/rig-a-humanoid-model.md), Studio doesn't require a specific bone hierarchy for a head. However, in order for the facial rig to work properly, the rig must include a [RootFaceJoint](#rootfacejoint) bone and [additional face bones](#face-bones). + +### RootFaceJoint + +The **RootFaceJoint** is a bone that is parented under the standard R15 head bone. This root bone must parent all other face bones. In Blender, you can quickly add a bone by **extruding** a child bone from the head bone and then map the bone name as a property in the Head_Geo mesh. The RootFaceJoint bone object is commonly named "DynamicHead" in the reference templates and examples, but you can use any name as long as you [map the root bone](#map) in custom properties. + +To add a RootFaceJoint bone: + +1. In Blender, open the **Cubie-Model-Only.blend** project. + + +2. Click on any bones to select the armature, then switch to **Edit Mode**. +3. In the **Outliner**, click on the **Head** bone. +4. In the **Viewport**, press E and drag your mouse up to extrude an additional child bone from the **Head** bone. +5. In the **Outliner**, rename this bone **DynamicHead**. You will reference this bone by name later in the [mapping](#map) section. + + + + + You must map the RootFaceJoint so Studio can properly locate that joint and hide all of the children joints and their bones within the `Class.FaceControls` instance on import. + + +### Face bones + +Face bones drive the bending and deformation of the face geometry. Each poseable face feature of your head typically requires at least one bone. Complex features, such as eyes and mouth, might require several bones to make certain poses possible. + +The rigging and skinning process depends on the character model and differs between tools and modelers. It's important to plan out the full range of facial poses your character requires to avoid additional adjustments to your head bones later. + +The following instructions describe a basic process of [adding face bones](#add-face-bones) and [skinning](#skin-face-bones), or applying influences, to the reference model's **eyes** and **eyelids**. You can continue to apply this technique to the rest of the facial features that need articulation, such as the character's mouth, cheeks, and jaw. After adding your bones and applying influences, you can create [controls](#add-controls) that can help make the next posing process more efficient. + + + You can download a [reference Cubie model](../../../assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Complete.fbx) with a completed rig with 30+ facial bones added and skinned. You can use this for a reference for unique bone placements not covered in this guide, such as cheeks, lips, and jaws. + + See [Use heads in Studio](../../../art/characters/facial-animation/use-heads-in-studio.md) for download links of more complex characters. + + +#### Add face bones + +The specific head bones your character requires depend on the poses you intend for it to use. The following examples cover the process for adding 1 bone for each eye and 4 bones for the eyelids to allow for blinking, winking, and gaze direction. + +When creating a face rig, use less than 50 face bones where possible and keep the bones organized and specific for their associated facial features. In general, high numbers of vertices and joints can impact your experience's performance. + +##### Eyes + +Each eye requires one bone each, though you might opt to create a controller bone later that can control both eyes at the same time. To ensure that you position your bones symmetrically, you can enable **X-Axis Mirror** in the top-right of the Viewport. This moves bones that share the same name with opposing suffixes along the X-axis. + +To add bones to the character eyes: + +1. In **Object Mode**, select the **armature** and switch to **Edit Mode**. +2. Click **Add**, then **Single Bone**. Do this twice. +3. Rename one bone **LeftEye**, and rename the other **RightEye**. + + + +4. Enable **X-Axis Mirror**. +5. Position the left or right bone centered at the model's eyes. +6. Adjust the bones horizontally and front-facing. A quick method for setting bones horizontally: + + 1. In the top right of the **Viewport**, extend the **Tool Panel** to the **Transform** section. + 2. With the bones selected, copy the **Head Y** location to the **Tail Y** location. + 3. Set the **Tail Z** to **0.2** centimeters. This sets the Tail Z coordinates 0.2 centimeters offset from the Head Z coordinates. + + + +7. Hold Shift and click both **Eye** bones. +8. While still holding Shift, click the **Face** bone. +9. Right-click in the viewport. A contextual menu displays. +10. Select **Parent**, **Make**, then **With Offset**. + + + +##### Eyelids + +When adding bones, you can quickly create bones parented under the Face bone by selecting existing facial bones and duplicating them. This automatically creates bones parented under the Face bone. + +To add bones to the character eyelids: + +1. In **Edit Mode**, hold Shift and click both **eye bones** to select them. +2. Press ShiftD and click to duplicate the bones in the same position. Do this four times to create 8 total new bones. +3. With **X-Axis mirror enabled**, position each bone at the corners of the eyes. + + + +4. In the **Outliner**, rename all bones to reflect their specific position. Use the following names: + + 1. LeftUpperOuterEyelid + 2. RightUpperOuterEyelid + 3. LeftLowerOuterEyelid + 4. RightLowerOuterEyelid + 5. LeftUpperInnerEyelid + 6. RightUpperInnerEyelid + 7. LeftLowerInnerEyelid + 8. RightLowerInnerEyelid + + + +#### Skin face bones + +You can apply [skinning](../../../art/modeling/rigging.md) to a character rig using several methods. The following example uses Blender's **Weight Paint** mode to paint which vertices a single bone can control. Skinning is typically a time consuming step for complex characters and a background in skinning and facial posing is recommended. + +When applying detailed or shared influences for complex models, it's recommended to enable [Auto Normalize](../../../art/modeling/skin-a-simple-mesh.md#auto-normalize) to prevent influence conflicts between bones. + + + When parenting bones to the character using Automatic Weights, some of your vertices might already have influences applied. Always test your influences to make sure influence assignments are correct. + + +##### Eyes + +Both eyes in the example project require full influences on the pupil within the eye geometry. Depending on the design of the eyes, you might need to adjust influences to create realistic eye poses. + +To add influence to the LeftEye: + +1. In **Object Mode**, click the head mesh, then hold Shift and click any bone to select the armature. +2. Switch to **Weight Paint Mode**. +3. Toggle to **X-Ray viewing mode** or **Material Preview Mode** to better visualize the vertices. +4. Hold Shift and click the **LeftEye** bone to select it. The name of the currently selected bone displays on the top left of the Viewport. +5. Paint influence on the vertices within the eye. For this example, ensure that the pupils are red, or fully influenced by the selected bone. + + + +6. Switch to **Object Mode**, then click on any bone to select the armature. +7. Switch to **Pose Mode** with the armature selected. +8. Test the influences of the eye bone by grabbing the bone and moving it. The mesh below should follow. + + + +9. Repeat these steps for the right eye. + + + +##### Eyelids + +Eyelid bones require their own separate influences. While the example poses only manipulate the top eyelids, being able to control the bottom corners of the eyelids is important for other poses, such as `LeftCheekRaiser` and `RightCheekRaiser`. + +To add influence to the left eyelid: + +1. In **Object Mode**, click the head mesh, then hold Shift and click any bone. +2. Switch to **Weight Paint Mode**. +3. Switch to **X-Ray viewing mode** or **Material Preview Mode** to better visualize the vertices. +4. Paint influences on the closest vertices to the bone. +5. When complete, hold Shift and click another bone to begin applying influences to the closest vertices. Perform this step for each eyelid bone. + + + +6. Switch to **Object Mode**, select the character mesh, then switch to **Pose Mode** to test. + + + +You can download [a version of this project](../../../assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Eye-Bones-Skinned.blend) with the bones skinned up to this point as reference. + +#### Add controls + +Since creating heads requires saving several poses consecutively, while not required, controls can help you pose your bones quickly and effectively. You can create controls by adding external controller bones that influence the internal ones, making it easier to access and pose as well as reset to a neutral transformation. + +You can create controls in many different ways. The following example uses **Bone Constraints** and simple geometrical shapes included in the reference Blender project to quickly set up easy-to-access controller bones for the character's facial bones. For more information on rigging and constraints, see Blender's documentation for additional details on [character rigging](https://www.youtube.com/watch?v=-gIL6VZ-bkE) and [object constraints](https://www.youtube.com/watch?v=fx33sPEAZEk). + + + Some facial features, such as lips, jaws, and tongue, might require a single controller bone that controls several facial bones at once. See the complete reference file for an example of this type of implementation. + + +To start creating face bone controls: + +1. In **Object Mode**, select the Joints armature and press ShiftD to duplicate the Joints armature object. +2. Rename the new armature to **Controller**. +3. In **Edit Mode**, select all non-face bones, right click and select **Delete Selected Bones**. +4. Rename the bones to include **\_Con**, to denote them as controller bones. You can batch rename them with the following process: + 1. In the **Outliner**, hold Shift and click all the controller bones. + 2. Navigate to **Edit** > **Batch Rename**. A rename modal displays. + 3. Set to **Selected** and use the dropdown to set to **Bones**. + 4. Set **Type** to **Set Name**. + 5. Set **Method** to **Suffix**. + 6. In **Name**, add **\_Con**. + 7. Click the **OK** button. + +5. Switch to **Object Mode** and select the original **Joints armature** object. +6. Switch to **Pose Mode**. +7. Click on the original joint bones, such as **LeftEye**, then navigate to the **Bone Constraints Property Panel**. +8. Add **Copy Location** and **Copy Rotation**, then set each original bone's constraint to target their corresponding Controller Bone, such as **LeftEye_Con**. +9. In the **Copy Rotation** constraint, set the following properties: + 1. In **Axis**, disable the **X**, **Y**, and **Z**. + 2. In **Inverted Axis**, enable the **X**, **Y**, and **Z**. + 3. Set **Mix** to **Offset** (Legacy). + +10. Perform steps 7-9 for each facial bone that requires a controller. + +To create custom bone shapes for easier control bone access: + +1. Switch to **Object Mode** and select the **Controller** armature object. +2. Switch to **Pose Mode**. +3. Select a controller bone, such as **LeftEye_Con**. +4. Switch to the **Bones Properties** panel and expand the **Viewport Display** section. +5. Select one of the custom shapes included in the project. In the reference project, the shape objects share similar names to the face bones. +6. Set the **X** rotation to **-90**. Set any additional scaling if required. + + + +7. Perform steps 3-6 for all your controller bones. You can hide the original face bones at this point. +8. (Optional) Set up **Bone Groups** to assign colors to your controller bones: + + 1. Navigate to the **Object Data Properties** panel. + 2. Create a new bone group. + 3. Change **Color Set** to a color theme of your choice. + 4. Click **Assign** to assign the currently selected controller that color. You can perform this step in batches. + + + +9. Test your controllers in **Pose Mode**. + + + +## Pose + +**Posing** is the process of manipulating the bones of your head mesh into a specific position per animation frame. After the model's head has been rigged, you can begin the process of saving poses to the timeline. This data enables Studio to access each facial movement and animate or blend facial poses to create dynamic expressions. + +When posing the bones of your character's head mesh to new positions, follow the [Facial Action Coding System](../../../art/characters/facial-animation/facs-poses-reference.md) (FACS) as a reference for your facial expression poses. FACS is a comprehensive, anatomically-based system for describing all visually discernible facial movement, and it allows for all facial animations to be shareable between characters. This means that once you create a facial animation, you can reuse it for any character with an [animatable head](../../../art/characters/facial-animation/use-heads-in-studio.md) with a `Class.FaceControls` instance. + +Each frame within your modeling software's animation timeline can contain one unique FACS pose, so when you want to create multiple FACS poses, you must save each FACS pose to a different frame. You must also include a frame with your character having a neutral face with the face controllers and bones set to their default values. This ensures that Studio can calculate the bone position differences between your character's neutral expression and each FACS pose. For this reason, set Frame 0 as your character's neutral expression, and save FACS poses starting at Frame 1. + +The following image is an example of Blender's animation timeline with 5 frames. Frame 0 has the character's neutral expression, and frames 1-4 have FACS pose data. + + +There are [50 base poses](./facs-poses-reference.md) that you can use in Roblox to portray a wide range of face emotions for your characters. When you are deciding which poses you need, remember that FACS pose names are always based on the orientation of the character, not the camera. For example, `LeftEyeClosed` closes the character's left eye, which is to the right of the camera view. + + +If you intend to sell your character head to the Marketplace, you must include the minimum 17 base [FACS poses](./facs-poses-reference.md). + + +You might not require all 50 base poses for your character. For example, a simple robot that opens its mouth and blinks can just have `JawDrop`, `LeftEyeClosed`, and `RightEyeClosed`. Therefore, the more expressive you want your character to be, the more FACS poses you need to include in your animation timeline. It's recommended to save the base poses that you intend to use with your head in alphabetical order, then use any frames afterwards for [combination poses](#combination-poses). + +The following steps outline the process of posing 5 poses with the facial bones created in our reference, but you can apply these steps for any additional poses for a more expressive head. To pose your face bones in Blender: + +1. Ensure that the animation timeline playhead is set to the correct frame. + 1. If you are setting the character's **Neutral pose**, set it to **frame 0**. + 2. If you are posing `EyesLookLeft`, set it to **frame 1**. + 3. If you are posing `EyesLookRight`, set it to **frame 2**. + 4. If you are posing `LeftEyeClosed`, set it to **frame 3.** + 5. If you are posing `RightEyeClosed`, set it to **frame 4**. +2. In **Pose Mode**, set the pose to the maximum position you want your pose to realistically use: + 1. If you are setting the character's `Neutral` pose, set the face controllers and bones to their default values, + 2. If you are posing `EyesLookLeft`, select both eye controller bones and drag the eyes to the character's left. + 3. If you are posing `EyesLookRight`, select both eye controller bones and drag the eyes to the character's right. + 4. If you are posing `LeftEyeClosed`, select both eye controller bones and drag the left eyelids down to meet the bottom eyelids. + 5. If you are posing `RightEyeClosed`, select both eye controller bones and drag the right eyelids down to meet the bottom eyelids. +3. In the **Viewport**, press A to select all bones. +4. Right-click and select **Insert Keyframe** > **Location and Rotation**. This ensures that each frame contains the positional and rotational information for all bones. + + + +When all the poses are saved in your timeline, set the Start and End of the animation timeline to represent the number of frames with saved poses. Always set **Start** to **0** and, in this specific example, you can set the **End** to **4** if you are only mapping the 4 non-neutral example poses. + + + +### Combination poses + +You can combine 2-3 base FACS poses in a single animation frame to display complex facial expressions. However, when you combine FACS poses that control the **same** facial regions, the facial features might either collide or disfigure the character. + +For example, both `LeftEyeClosed` and `LeftCheekRaiser` control movement around the character's left eye: `LeftEyeClosed` closes the eye, and `LeftCheekRaiser` lifts the cheek up and pushes the lower eyelid up, causing a squint-like effect. When you combine both poses with one or more at 100% of their values, the lower eyelid collides with the upper eyelid: + + +
    + +
    Both FACS poses concurrently ease to 100% of their default values.
    +
    +
    + +
    LeftEyeClosed eases to 100% of its default value, and LeftCheekRaiser starts at 100%.
    +
    +
    + +
    LeftCheekRaiser eases to 100% of its default value, and LeftEyeClosed starts at 100%.
    +
    +
    + +A **combination pose**, or **corrective**, is the combination of 2-3 FACS poses that control the same facial features in a single animation frame with a **corrective difference from 100% of their default values**. By defining and mapping a combination pose to your head, you can correct how you want the two or more FACS poses to combine. For example, if you add a corrective for each of the previous use cases, the lower and upper eyelids make contact with each other without colliding: + + +
    + +
    Using a corrective pose, both FACS poses concurrently ease to 100% of their default values.
    +
    +
    + +
    LeftEyeClosed eases to 100% of its default value, and LeftCheekRaiser starts at 100%.
    +
    +
    + +
    LeftCheekRaiser eases to 100% of its default value, and LeftEyeClosed starts at 100%.
    +
    +
    + +On import, Studio calculates and stores the corrective difference for combination poses in the head's `Class.FaceControls` instance, and the `Class.FaceControls` instance corrects the base poses values as they combine in the [Animation Editor](../../../animation/editor.md). + +## Map + +After you finish posing each FACS pose that your character needs, you must map, or link, **each animation frame that you pose** to its corresponding FACS base or combination pose name. Mapping stores the bone positions and translations within the head `Class.MeshPart`, and when you begin to animate your head within the **Animation Editor**, the `Class.FaceControls` instance uses this stored data to transform your character's facial features to the applicable FACS pose. + + +If you intend to sell your character head to the Marketplace, you must include the minimum 17 base [FACS poses](./facs-poses-reference.md). + + +Aside from mapping each pose to its proper pose name, you also need to map the [RootFaceJoint](#rootfacejoint) so that Studio can properly locate that joint and hide all of the children joints and their bones within the `Class.FaceControls` instance on import. + + + If you are using Maya, you can map the RootFaceJoint and facial pose data using the **Extra Attributes** in a similar format as Blender's Custom Properties. To add attributes: + 1. Select the **Head_Geo** object and navigate to the Attribute Editor. + 2. Under the Attributes dropdown, select **Add Attributes...**. + + + + If you leave any empty strings, or try to import the head into Studio with multiple frames per FACS pose name, the head will fail the [import process](../../../art/characters/facial-animation/use-heads-in-studio.md#import-heads). + + +To map your saved poses and the RootFaceJoint: + +1. Switch to **Object Mode**. +2. Select the **Head_Geo mesh**. +3. In the **Object Properties** tab of the **Properties Editor**, navigate to the **Custom Properties** section, then click the **New** button. A new custom property displays underneath the **New** button. + + + +4. To the right of the new custom property, click the **Gear Icon**. The **Edit Property** pop-up displays. + + + +5. Click the **Type** dropdown, then select **String**. +6. In the **Property Name** field: + 1. If you are mapping a pose, input the **frame number** you are mapping, **Frame0** for example. + 2. If you are mapping the RootFaceJoint, input **RootFaceJoint**. +7. Leave the **Default Value** and **Description** fields empty. +8. Click the **OK** button. The new custom property updates with your new property name. +9. In the field to the right of the custom property name: + 1. If you're mapping a base pose, input the corresponding [FACS base pose](./facs-poses-reference.md) or combination pose name exactly as it is spelled. + 2. If you're mapping a combination pose, input each base pose you are combining separated by an underscore, such as **Funneler_JawDrop_Pucker**. + 3. If you're mapping the RootFaceJoint, input the name of the face root bone, commonly **DynamicHead**. +10. Press **Enter**. + + + + + +As you repeat this process, every additional custom property you create displays in the **Custom Properties** section of the **Object Properties** tab within the **Properties Editor**. + + + +You can download a [version of this project](../../../assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Eye-Poses-Mapped.blend) with the poses saved and mapped up to this point as reference. If importing a head `.fbx` with saved animation data into Blender, make sure to set the **Animation Offset** in the .FBX Import window to **0** to include the Frame 0 of the timeline. + + + +## Export + +After you finish posing and mapping your head for your character, you can export the character model as a `.fbx` to import into Studio, allowing you to access the 4 eye poses using the `Class.FaceControls` instance in Studio. You can also reference the fully configured Cubie head `.fbx` to access all 50+ base poses. + +The export settings for animatable heads differ slightly from [standard third-party modeling export settings](../../../art/modeling/export-requirements.md). To export the basic head model as a `.fbx`: + +1. In the topbar, click **File**. A pop-up menu displays. +2. Select **Export**, then **FBX (.fbx)**. The **Blender File View** window displays. +3. Expand **Include** and enable **Limit To > Active Collection**. Note that this step is optional if you do not have additional collections in your Blender project. +4. In the **Include** section, enable **Custom Properties**. +5. Expand the **Armature** section and uncheck **Add Leaf Bones**. +6. Enable **Bake Animation**. +7. Expand **Bake Animation** and uncheck **NLA Strips**, **All Actions**, and **Force Start/End Keyframes**. +8. Click the **Export FBX** button. Save the FBX to the directory of your choice. + +At this point, you can now import the `.fbx` into Studio as a character with a supported animatable head. For model import and usage instructions, see [Use heads in Studio](../../../art/characters/facial-animation/use-heads-in-studio.md). + + + When importing Cubie into Studio, make sure to also save the head texture Cubie-Texture_ALB.png which you can apply to the head mesh of the imported character as a TextureID. + diff --git a/.cursor/rules/roblox/art/characters/facial-animation/create-face-accessories.md b/.cursor/rules/roblox/art/characters/facial-animation/create-face-accessories.md new file mode 100644 index 00000000..b5cf3b77 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/facial-animation/create-face-accessories.md @@ -0,0 +1,181 @@ +--- +title: Create face accessories +description: Face accessories are 3D accessories that move and animate with a live head. +--- + + + This guide covers advanced topics. Before you begin, you should have prior knowledge on modeling, UV mapping, rigging, animation, and how to set up a character in [Blender](https://www.blender.org) or [Maya](https://www.autodesk.com/products/maya/overview). + + +A face accessory is a cosmetic `Class.Accessory` that attaches to the head and can include items such as hair, eyebrows, glasses, and facial hair. To create a face accessory that is compatible with animatable heads, you use a similar design process as [layered clothing](../../../art/accessories/index.md#creation-process) to allow your accessory model to deform and stretch on a head when the head is posed or animated. + +To create a face accessory, use a third-party modeling tool, such as [Blender](https://www.blender.org) or [Maya](https://www.autodesk.com/products/maya/overview), to create a 3D model with the following requirements: + +- The accessory model must meet Studio's [mesh requirements](../../../art/characters/specifications.md). +- The model must be parented (Blender) or bound (Maya) to an R15 character rig. +- The model must include an inner and outer cage. + +This guide covers the basic process in Blender for applying rigging and cage data to a basic reference model using the Cubie model referenced in [Create basic heads](../../../art/characters/facial-animation/create-basic-heads.md). + + + This guide uses Blender version 3.0. If you are using another version of Blender, there might be minor differences in UI and settings. + + +## Reference files + +The following are face accessory reference files, including all example files from this guide: + + +The reference character model provided is meant for educational purposes and does not meet the avatar character [technical specifications](../../../art/characters/specifications.md) for general use. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameDescription
    Cubie-Complete.fbxThe complete Cubie reference character, from Creating Basic Heads. This file is ready for import into Studio.
    Cubie-Cage-Only.fbxThe full body cage mesh of the Cubie reference character. This includes the inner and outer cage meshes.
    Cubie-Eyebrow-Geo.fbxA standalone eyebrow model, designed for the Cubie model.
    Cubie-Eyebrow-Rigged-And-Caged.fbxThe Cubie eyebrow model, correctly rigged and caged following the instructions in this guide. This file is ready for import into Studio.
    Cubie-Hawk-Hair.fbxA hair model reference, designed for the Cubie model.
    Creating-Face-Accessories-Reference-Files.zipA collection of all the provided reference files.
    + +## Modeling + +This guide uses a simple eyebrow reference as a demonstration for creating a face accessory. If rigging and caging a different model, ensure that your model meets the [character specifications](../../../art/characters/specifications.md) for Studio import. + + + +If creating your own model, consider the following guidelines: + +- Model your accessory with your character model for best results and fit. +- When possible, try to match up the edges of your model geometry with the edges/vertices of the underlying head topology. This improves the deformation of the accessory with the underlying head model. +- Some accessories, like eyebrows, can extrude or slightly intersect the character model mesh to achieve a certain cosmetic look. +- When working with an accessory with multiple pieces, such as eyebrows, combine the meshes to a single mesh once the modeling and fitting is completed. +- Face accessory meshes do not require a **\_Geo** naming convention. + +## Rigging + +You must [rig](../../../art/modeling/rigging.md) your accessory to the character's bone structure so the accessory can bend and deform along with your character's facial poses. After rigging, you can skin your model in your modeling tool, or you can transfer skinning data from your character to the accessory at runtime by using [Automatic skinning transfer](../../../art/accessories/automatic-skinning-transfer.md). + +### Project setup + +As an example in this guide, we are using the completed [basic Head model](../../../assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Complete.fbx) from [Create a basic head](../../../art/characters/facial-animation/create-basic-heads.md) and a [simple eyebrow model](../../../assets/avatar/dynamic-heads/creating-face-accessories/reference-files/CubieEyebrow_Geo.fbx) in a new Blender project. + +To set up your Blender project: + +1. Open a new **General** project in Blender. +2. Select the default shape, camera, and lights, then press Delete. +3. In the left-hand navigation of the **Properties Editor**, navigate to **Scene Properties**. + + + +4. In the Units section, change the **Unit Scale** to `0.01` and the **Length** to **Centimeters**. + + + +5. Import the character rig you intend to parent the accessory to, in this example: [Cubie-Complete.fbx](../../../assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Complete.fbx). + + + +6. To simplify the workspace, you can delete the R15 inner and outer cage mesh objects since you will later import a full-body cage in the [Caging](#caging) step. + + + +7. Import your accessory model, in this example: [CubieEyebrow_Geo.fbx](../../../assets/avatar/dynamic-heads/creating-face-accessories/reference-files/CubieEyebrow_Geo.fbx). + + 1. If required, reposition the accessory model on the face. + 2. You can hide the armature temporarily to verify model placement. + + + +### Parent armature + +Connect the mesh object to the character's armature by parenting the armature to the mesh object. To parent the armature: + +1. In Object Mode, hold Shift and **click** the accessory model and then any of the character bones. +2. Right click and select **Parent**, then select **With Automatic Weights**. + + + +Parenting with Automatic Weights automatically applies some influences to your model which can save some time during the [optional skinning](#optional-skinning) step. You can alternatively **Parent** with **Empty Weights** to not apply any skinning influence to your accessory mesh. See Blender's documentation on [Automatic Weights](https://docs.blender.org/manual/en/latest/animation/armatures/skinning/parenting.html#with-automatic-weights) for more information. + + +### Optional skinning + +In many cases, you can skip the [skinning](../../../art/modeling/rigging.md) process for your accessory and use Roblox's [automatic skinning transfer](../../../art/accessories/automatic-skinning-transfer.md) instead. You can still apply manual skinning through a modeling software and opt to use automatic skinning transfer later. With automatic skinning transfer, your end result and quality may vary. + +If you do not intend to apply skinning manually, continue directly to [caging](#caging). + + +If you are skinning your accessory in your modeling software on a character model with a fully posed head, you can test the accessory on various FACS poses saved to the timeline within your modeling software before importing into Studio. + + +## Caging + +The caging process for face accessories is similar to caging layered clothing accessories and shares the same modeling and caging requirements. After rigging, import a full-body inner and outer cage to your project, rename the cages, then stretch the vertices of the Outer Cage to cover the accessory model with minimal space. + +To cage the eyebrow accessory: + +1. With Blender's .fbx importer, import [`Cubie-Cage-Only.fbx`](../../../assets/avatar/dynamic-heads/creating-face-accessories/reference-files/Cubie-Cage-Only.fbx). This includes a single full-body inner and outer cage mesh for the Cubie model. + +2. Rename cages to begin with "CubieEyebrow" before the **\_InnerCage** and **\_OuterCage** affix. +3. In Edit mode, extend the outer cage to fit over the accessory with minimal space. Use various material and viewing options to easily manipulate the correct vertices on the outer cage. + + + +If you are using automatic skinning transfer, you can ensure that automatic skinning transfer only applies to specific parts of the accessory by removing unnecessary sections of the cage. For more information, see [Modifying Character Cages](../../../art/accessories/automatic-skinning-transfer.md#modify-character-cages). + +## Export + +Export your model when ready to test your accessory model in Studio or when setting up for final export. When exporting face accessories, keep in mind the following guidelines: + +- Ensure that the final accessory model follows [Studio's Modeling Requirements](../../../art/characters/specifications.md), including properly named mesh and cage objects. +- Do not export any unnecessary data, such as animation data, or light and camera objects. +- If exporting PBR textures, follow [texture modeling requirements](../../../art/characters/specifications.md#surfaceappearance) when exporting texture images from your texture software. + +To export: + +1. Ensure only the **accessory mesh**, **armature object** and **cages meshes** are exported. Delete all other objects in the workspace. + + 1. You can quickly filter out **Geo** and **Att** named objects in your workspace to quickly delete them. + + + +2. Follow Studio's [Export Requirements for Blender](../../../art/accessories/export-settings.md) and save the file to your preferred location. The final export of the eyebrow `.fbx` is available for reference. + +## Test in Studio + +To use your exported model into Studio as an `Class.Accessory`, use the [Accessory Fitting Tool](../../../art/accessories/accessory-fitting-tool.md) to test and generate the accessory object. At this point, you can equip the accessory to a humanoid character. If you intend to transfer skinning data from your character to the accessory model at runtime, you can enable [automatic skinning transfer](../../../art/accessories/automatic-skinning-transfer.md) for your accessory. + + +If following the references provided by this guide, only **EnabledOverride** applies the skinning transfer in Studio, since some skinning data will have been applied to the model during the [parenting](#parent-armature) process. + diff --git a/.cursor/rules/roblox/art/characters/facial-animation/facs-poses-reference.md b/.cursor/rules/roblox/art/characters/facial-animation/facs-poses-reference.md new file mode 100644 index 00000000..d58b5ff2 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/facial-animation/facs-poses-reference.md @@ -0,0 +1,539 @@ +--- +title: FACS poses reference +description: The Facial Action Coding System (FACS) ensures that all face animations have a common pose reference and can create similar face animations. +--- + +The [Facial Action Coding System](https://en.wikipedia.org/wiki/Facial_Action_Coding_System) (FACS) is a comprehensive, anatomically-based system for describing all visually discernible facial movement. This system breaks down all facial expressions into individual types of muscle movement, such as `LeftEyeClosed` or `MouthLeft`. You can [configure](../../../art/characters/facial-animation/create-basic-heads.md#pose) and store these muscle movements, or **poses**, within the head model through a third-party modeling software, such as [Blender](https://www.blender.org) or [Maya](https://www.autodesk.com/products/maya/overview). When you import the head model into Studio, you can then access and [animate](../../../art/characters/facial-animation/animate-heads.md) these poses to create lively facial expressions. + +The following is a list of 50 base poses that you can use in Roblox to portray a wide range of face emotions. Except for the first neutral pose, the order of poses you save to your character model doesn't matter since this information is set during the [mapping](../../../art/characters/facial-animation/create-basic-heads.md#map) process as a custom property. + + +If you intend to publish your avatar to the Marketplace, your avatar head must include the required [17 facial base poses](../../../art/characters/specifications.md#facial-animations). Marketplace validation rejects assets that do not include these 17 required base poses. + + +You can combine multiple FACS base poses together in one animation frame to create complex facial expressions. However, some combinations of poses might collide unless you also add a [corrective](../../../art/characters/facial-animation/create-basic-heads.md#combination-poses) to their full default values. + +## EyesLookDown + + + If publishing to the Marketplace, your avatar asset must include this pose. + + +`Class.FaceControls.EyesLookDown|EyesLookDown` makes the eyes gaze down. + + + + + + +## EyesLookLeft + + + If publishing to the Marketplace, your avatar asset must include this pose. + + +`Class.FaceControls.EyesLookLeft|EyesLookLeft` makes the eyes gaze left. + + + + + + +## EyesLookRight + + + If publishing to the Marketplace, your avatar asset must include this pose. + + +`Class.FaceControls.EyesLookRight|EyesLookRight` makes the eyes gaze right. + + + + + + +## EyesLookUp + + + If publishing to the Marketplace, your avatar asset must include this pose. + + +`Class.FaceControls.EyesLookUp|EyesLookUp` makes the eyes gaze up. + + + + + + +## JawDrop + + + If publishing to the Marketplace, your avatar asset must include this pose. + + +`Class.FaceControls.JawDrop|JawDrop` lowers the jaw downward, opening the mouth. + + + + + + +## LeftEyeClosed + + + If publishing to the Marketplace, your avatar asset must include this pose. + + +`Class.FaceControls.LeftEyeClosed|LeftEyeClosed` closes the character's left eyelid. + + + + + + +## LeftLipCornerPuller + + + If publishing to the Marketplace, your avatar asset must include this pose. + + +`Class.FaceControls.LeftLipCornerPuller|LeftLipCornerPuller` raises the corners of the mouth upwards in a smile. + + + + + + +## LeftLipStretcher + + + If publishing to the Marketplace, your avatar asset must include this pose. + + +`Class.FaceControls.LeftLipStretcher|LeftLipStretcher` stretches the corners of the mouth apart. + + + + + + +## LeftLowerLipDepressor + + + If publishing to the Marketplace, your avatar asset must include this pose. + + +`Class.FaceControls.LeftLowerLipDepressor|LeftLowerLipDepressor` lowers the lower lip downwards away from the upper lip, revealing the lower teeth. + + + + + + +## LeftUpperLipRaiser + + + If publishing to the Marketplace, your avatar asset must include this pose. + + +`Class.FaceControls.LeftUpperLipRaiser|LeftUpperLipRaiser` raises the character's left upper lip away from the lower lip revealing the upper teeth. + + + + + + +## LipsTogether + + + If publishing to the Marketplace, your avatar asset must include this pose. + + +`Class.FaceControls.LipsTogether|LipsTogether` brings the character's lips together. However, if the character's mouth is closed, their lips are already together and they collide. + + + + + + +This pose's main use case is in connection with the [`JawDrop`](#jawdrop) property. If you set [`JawDrop`](#jawdrop) and `Class.FaceControls.LipsTogether|LipsTogether` to 100% of their default values, the character's lips stay together as the jaw drops. + + + + + + +In addition, if you set [`JawDrop`](#jawdrop) to 100% of its default value, and ease `Class.FaceControls.LipsTogether|LipsTogether` in and out of 100% of its default value, the character's lips open and close. + + + + + + +## Pucker + + + If publishing to the Marketplace, your avatar asset must include this pose. + + +`Class.FaceControls.Pucker|Pucker` makes a kiss-like shape with the mouth. + + + + + + +## RightEyeClosed + + + If publishing to the Marketplace, your avatar asset must include this pose. + + +`Class.FaceControls.RightEyeClosed|RightEyeClosed` closes the character's right eyelid. + + + + + + +## RightLipCornerPuller + + + If publishing to the Marketplace, your avatar asset must include this pose. + + +`Class.FaceControls.RightLipCornerPuller|RightLipCornerPuller` raises the corners of the mouth upwards in a smile. + + + + + + +## RightLipStretcher + + + If publishing to the Marketplace, your avatar asset must include this pose. + + +`Class.FaceControls.RightLipStretcher|RightLipStretcher` stretches the corners of the mouth apart. + + + + + + +## RightLowerLipDepressor + + + If publishing to the Marketplace, your avatar asset must include this pose. + + +`Class.FaceControls.RightLowerLipDepressor|RightLowerLipDepressor` lowers the lower lip down away from the upper lip revealing the lower teeth. + + + + + + +## RightUpperLipRaiser + + + If publishing to the Marketplace, your avatar asset must include this pose. + + +`Class.FaceControls.RightUpperLipRaiser|RightUpperLipRaiser` raises the right upper lip away from the lower lip, revealing the upper teeth. + + + + + + +## ChinRaiser + +`Class.FaceControls.ChinRaiser|ChinRaiser` raises the chin up; moves the lower lip upwards. + + + + + + +When you use `Class.FaceControls.ChinRaiser|ChinRaiser` and the character's mouth is closed, the character's lower lip collides with their upper lip. When you need to keep the mouth closed while raising the chin, use [`ChinRaiserUpperLip`](#chinraiserupperlip) and `Class.FaceControls.ChinRaiser|ChinRaiser` together to raise both the lower and upper lip, and avoid a collision. Note that if you use this method, you must set both `Class.FaceControls.ChinRaiser|ChinRaiser` and [`ChinRaiserUpperLip`](#chinraiserupperlip) to the same value so the lips move the same distance upwards. + +## ChinRaiserUpperLip + +`Class.FaceControls.ChinRaiserUpperLip|ChinRaiserUpperLip` raises the upper lip up when ChinRaiser is engaged and it is touching the upper lip. + + + + + + +## FlatPucker + +`Class.FaceControls.FlatPucker|FlatPucker` brings the corners of the mouth inward and presses the lips back against the teeth. This pose is also known as lip tightener. + + + + + + +## Funneler + +`Class.FaceControls.Funneler|Funneler` makes an 'O' shape with the mouth. + + + + + + +## LowerLipSuck + +`Class.FaceControls.LowerLipSuck|LowerLipSuck` rolls the lower lip up over the teeth. + + + + + + +## LipPresser + +`Class.FaceControls.LipPresser|LipPresser` presses the lips together. + + + + + + +## MouthLeft + +`Class.FaceControls.MouthLeft|MouthLeft` moves the mouth to the character's left. This property doesn't move the character's jaw, teeth, or tongue, only their mouth. If you want to move those additional facial features, use [`JawLeft`](#jawleft) instead. + + + + + + +## MouthRight + +`Class.FaceControls.MouthRight|MouthRight` moves the mouth to the character's right. This property doesn't move the character's jaw, teeth, or tongue to the right, only their mouth. If you want to move those additional facial features, use [`JawRight`](#jawright) instead. + + + + + + +## UpperLipSuck + +`Class.FaceControls.UpperLipSuck|UpperLipSuck` rolls the upper lip around the teeth. + + + + + + +## LeftCheekPuff + +`Class.FaceControls.LeftCheekPuff|LeftCheekPuff` puffs up the character's left cheek. + + + + + + +## LeftDimpler + +`Class.FaceControls.LeftDimpler|LeftDimpler` moves the corners of the left side of the mouth back toward the teeth. + + + + + + +## LeftLipCornerDown + +`Class.FaceControls.LeftLipCornerDown|LeftLipCornerDown` lowers the corners of the mouth downwards in a frown. + + + + + + +## RightCheekPuff + +`Class.FaceControls.RightCheekPuff|RightCheekPuff` puffs up the character's right cheek. + + + + + + +## RightDimpler + +`Class.FaceControls.RightDimpler|RightDimpler` moves the corners of the right side of the mouth back toward the teeth. + + + + + + +## RightLipCornerDown + +`Class.FaceControls.RightLipCornerDown|RightLipCornerDown` lowers the corners of the mouth downwards in a frown. + + + + + + +## JawLeft + +`Class.FaceControls.JawLeft|JawLeft` moves the character's jaw, teeth, tongue, and lower lip to their left. If you just want to move the character's mouth to their left, use [`MouthLeft`](#mouthleft) instead. + + + + + + +## JawRight + +`Class.FaceControls.JawRight|JawRight` moves the character's jaw, teeth, tongue, and lower lip to their right. If you just want to move the character's mouth to their right, use [`MouthRight`](#mouthright) instead. + + + + + + +## Corrugator + +`Class.FaceControls.Corrugator|Corrugator` brings the left and right brows inward together. + + + + + + +## LeftBrowLowerer + +`Class.FaceControls.LeftBrowLowerer|LeftBrowLowerer` lowers the character's left brow down. + + + + + + +## LeftOuterBrowRaiser + +`Class.FaceControls.LeftOuterBrowRaiser|LeftOuterBrowRaiser` raises the outer part of the character's left brow upwards. + + + + + + +## LeftNoseWrinkler + +`Class.FaceControls.LeftNoseWrinkler|LeftNoseWrinkler` raises the character's left nostril, pulls the brow down slightly, and wrinkles the left side of the nose. + + + + + + +## LeftInnerBrowRaiser + +`Class.FaceControls.LeftInnerBrowRaiser|LeftInnerBrowRaiser` raises the interior half of the character's left brow upwards. + + + + + + +## RightBrowLowerer + +`Class.FaceControls.RightBrowLowerer|RightBrowLowerer` lowers the character's right brow down. + + + + + + +## RightOuterBrowRaiser + +`Class.FaceControls.RightOuterBrowRaiser|RightOuterBrowRaiser` raises the outer part of the character's right brow upwards. + + + + + + +## RightInnerBrowRaiser + +`Class.FaceControls.RightInnerBrowRaiser|RightInnerBrowRaiser` raises the interior half of the character's right brow upwards. + + + + + + +## RightNoseWrinkler + +`Class.FaceControls.RightNoseWrinkler|RightNoseWrinkler` raises the character's right nostril, pulls the brow down slightly, and wrinkles the right side of the nose. + + + + + + +## LeftCheekRaiser + +`Class.FaceControls.LeftCheekRaiser|LeftCheekRaiser` squints the character's left eye. + + + + + + +## LeftEyeUpperLidRaiser + +`Class.FaceControls.LeftEyeUpperLidRaiser|LeftEyeUpperLidRaiser` raises the character's left eyelid upwards to reveal more of the eye white above the iris. + + + + + + +## RightCheekRaiser + +`Class.FaceControls.RightCheekRaiser|RightCheekRaiser` squints the character's right eye. + + + + + + +## RightEyeUpperLidRaiser + +`Class.FaceControls.RightEyeUpperLidRaiser|RightEyeUpperLidRaiser` raises the character's right eyelid upwards to reveal more of the eye white above the iris. + + + + + + +## TongueDown + +`Class.FaceControls.TongueDown|TongueDown` bends the tongue down. This pose is only visible if you combine it with [`TongueOut`](#tongueout), otherwise the tongue only bends down within the character's mouth. + + + +## TongueOut + +`Class.FaceControls.TongueOut|TongueOut` sticks the tip of the tongue out of the mouth. + + + +## TongueUp + +`Class.FaceControls.TongueUp|TongueUp` bends the tongue up. This pose is only visible if you combine it with [`TongueOut`](#tongueout), otherwise the tongue only bends up within the character's mouth. + + diff --git a/.cursor/rules/roblox/art/characters/facial-animation/index.md b/.cursor/rules/roblox/art/characters/facial-animation/index.md new file mode 100644 index 00000000..0f21e900 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/facial-animation/index.md @@ -0,0 +1,55 @@ +--- +title: Facial animation +description: Facial animations enable avatars to create dynamic facial expressions. +--- + +A head part that supports facial animation is a specialized skinned head `Class.MeshPart`. This type of body part allows you to: + +- Set default custom facial expressions. +- Trigger emotes that combine both face and body animations. +- Equip face accessories that deform with your facial expressions. For example, facial hair moves accordingly when the character changes facial expressions. + + + +An animatable head model contains an internal facial [rig](../../../art/modeling/rigging.md), or bone structure, that drives the deformation of the viewable geometry. When creating a dynamic head in a 3D modeling software, modelers save these bone deformations as individual **poses**. + +When importing a head that supports facial animation into Studio, Studio creates a `Class.FaceControls` instance you can use to access and combine these individual poses to create expressions and animations. Unlike typical rigged models, you cannot access the facial `Class.Bone|Bones` of a head mesh directly in Studio. + +For information on implementing heads in Studio, including information on how to import custom heads and face accessories in addition to a reference experience and example model files, see [Use heads in Studio](../../../art/characters/facial-animation/use-heads-in-studio.md). + + +
    + +
    Goblin Reference
    +
    +
    + +
    Blocky Reference
    +
    +
    + +## Animate heads + +You can [animate any supported head](../../../art/characters/facial-animation/animate-heads.md) through the [Animation Editor](../../../animation/editor.md) by manually setting poses on the animation track, using the **Face Animation Editor** to quickly create complex expressions, or using the [Animation Capture Tool](../../../animation/capture.md) to automatically track facial movements from your webcam. + +After you create, save, and publish a head animation to Roblox, you can play the animation from a script or replace a character's default animation with your new animation. + + + +## Create basic heads + +Using third-party modeling tools, you can either modify a rigged character model to meet head requirements, or create a head from scratch. For step-by-step instructions on how to add face bones, apply skinning, posing, and mapping poses on a head model in Blender, see [Create basic heads](../../../art/characters/facial-animation/create-basic-heads.md). This guide includes several reference files you can use to compare and track your progress. + +## Create face accessories + +Similar to creating heads, you can design and model face accessories using a third-party modeling software and import the models as a cosmetic `Class.Accessory` in Studio. When created correctly, equipped accessories stretch and deform as the head animates and emotes. + +See [Create face accessories](../../../art/characters/facial-animation/create-face-accessories.md) for step-by-step instructions on setting up a reference model as a face accessory. This guide includes several project files you can use for reference and covers details on time-saving steps, such as auto-skin transfer. + +## FACS poses reference + +Animatable heads use the Facial Action Coding System (FACS) as a universal system that allows modelers and animators to reference similar facial features and head mesh across different head models. + +When creating your head in a third-party modeling software, see [FACS poses reference](../../../art/characters/facial-animation/facs-poses-reference.md) for a list of the base facial poses, their descriptions, and video examples. diff --git a/.cursor/rules/roblox/art/characters/facial-animation/moods.md b/.cursor/rules/roblox/art/characters/facial-animation/moods.md new file mode 100644 index 00000000..5461d8cf --- /dev/null +++ b/.cursor/rules/roblox/art/characters/facial-animation/moods.md @@ -0,0 +1,130 @@ +--- +title: Moods +description: Moods are a type of facial animation that loop indefinitely, allowing users to express persistent facial emotion. +--- + +A **mood** is a type of [facial animation](../../../art/characters/facial-animation/index.md) for animatable heads that loops indefinitely, allowing users to express themselves and react to others with a persistent facial emotion. Moods play simultaneously with other character [default animations](../../../animation/using.md#default-character-animations), such as walking, climbing, and swimming, and if the default animation has a facial animation, the default animation blends with the character's mood. + + +
    + +
    Default mood
    +
    +
    + +
    Open mouth mood
    +
    +
    + + + A mood is a type of facial animation, but not all facial animations are moods. While a mood refers to a specific animation slot that belongs to each character, a facial animation refers to **any** animation that modifies the face channels. + + +## Create moods + +If you have a character model with an animatable head, you can create any mood animation you can think of using the [Face Animation Editor](../../../art/characters/facial-animation/animate-heads.md#use-the-face-animation-editor). If you don't want to use the [Blocky](../../../assets/avatar/dynamic-heads/reference-files/BlockyCharacter.fbx) or [Goblin](../../../assets/avatar/dynamic-heads/reference-files/GoblinCharacter.zip) reference character models, you can create or modify an existing model to support animated heads in a third-party modeling software, such as Blender or Maya. For information on how to create an animatable head, see [Create basic heads](../../../art/characters/facial-animation/create-basic-heads.md). + +To create a mood: + +1. Add a character model with an animatable head to the viewport. +1. Open the **Face Animation Editor**. + + 1. From the toolbar's **Avatar** tab, click **Animation**. The [Animation Editor](../../../animation/editor.md) window displays. + 1. In the viewport, select your character model with an animatable head. A dialog displays. + + + + 1. In the **Animation Name** field, enter a new animation name, then click the **Create** button. The **Animation Editor** window displays the **media and playback controls**, **timeline**, and **track list**. + 1. In the editor's **track list**, click the **Face** button. The **Face Animation Editor** displays to the left of the track list. + +1. In the **Face Animation Editor**, adjust sliders for the facial parts you want to manipulate. Animation tracks for each facial part you manipulate automatically display in the track list along with keyframes for your current position in the timeline. The character's face also updates in the viewport. + + - To undo a step on a slider, press CtrlZ (⌘Z). + - To redo a step on a slider, press CtrlY (⌘Y). + - To reset a slider to its default value, right click on the slider. A contextual menu displays. Select **Reset Selected**. + +1. When you are finished creating your animation, navigate to the **Media and Playback Controls** and click the **…** button. A pop-up menu displays. + + + +1. Select **Save** or **Save As** to save the mood animation. The animation displays in the **Explorer** window as a child of the **AnimSaves** object (itself a child of the rig). + + + +1. **(Optional)** To assign an asset ID to your mood animation and save it to the [Toolbox](../../../projects/assets/toolbox.md) to use across your experiences, + + 1. In the **Explorer** window, right-click on your new mood animation. A contextual menu displays. + 1. Select **Save to Roblox**. The **Asset Configuration** window displays. + 1. Fill in the following fields: + + - **Title**: A name for your plugin. + - **Description**: A description that describes what a potential user should expect the plugin to do. + - **Creator**: The creator you'd like to attribute as the creator of the plugin. + + 1. Click the **Submit** button. After a moment, the Asset Configuration dialog displays your mood's `Class.Animation.AnimationID` that you can use to set the mood to characters within your experiences. + + + +## Set moods + +Every character with an animatable head has a child **Animate** `Class.LocalScript` with a child **mood** `Class.StringValue` that contains the mood animation that plays on the character's head. The mood animation's default `Class.Animation.AnimationID` plays a smiling animation, but you can change the character's mood to something else by either directly editing the `Class.Animation.AnimationID` within the mood `Class.StringValue`, or using the `Class.HumanoidDescription` system. + + + + + The code for playing moods doesn't occur in the **Animate** `Class.LocalScript`, but in a hidden, internal Roblox script. While you can't edit this internal script, the **mood** `Class.StringValue` allows you to interact with it in order to customize moods within your experiences. + + +### Edit AnimationIds + +You can set a specific mood for each character within your experience by editing their mood's `Class.Animation.AnimationID` whenever a user triggers an event. For example, the following `Class.Script` edits any previously set mood to an animation that [opens the character's mouth](https://www.roblox.com/library/7715145252/moods-11-FaceAnimation) as soon as the user enters the experience: + +```lua +local Players = game:GetService("Players") + +local function onCharacterAdded(character) + local humanoid = character:WaitForChild("Humanoid") + local animateScript = character:WaitForChild("Animate") + animateScript.mood.Animation1.AnimationId = "rbxassetid://7715145252" -- Mood +end + +local function onPlayerAdded(player) + player.CharacterAppearanceLoaded:Connect(onCharacterAdded) +end + +Players.PlayerAdded:Connect(onPlayerAdded) +``` + +### Use the HumanoidDescription + +You can also use the `Class.HumanoidDescription` system to find user characters and edit their `Class.Animation.AnimationID|AnimationIDs` for any default animation. For example, the following `Class.Script` edits any previously set mood to an animation that gives the character a [half-smile](https://www.roblox.com/catalog/10725833199/Chiseled-Good-Looks-Mood) on the left-side of their face whenever their character is idling: + +```lua +local humanoid = player.Character and player.Character:FindFirstChildWhichIsA("Humanoid") +if humanoid then + local descriptionClone = humanoid:GetAppliedDescription() + descriptionClone.IdleAnimation = 10725833199 + -- Apply modified "descriptionClone" to humanoid + humanoid:ApplyDescription(descriptionClone) +end +``` + +## Disable moods + +To disable moods from your experience, you can delete the mood object underneath the **Animate** `Class.LocalScript`. For example, the following `Class.Script` removes every character's **mood** `Class.StringValue` as soon as they join the experience: + +```lua +local Players = game:GetService("Players") + +local function onCharacterAdded(character) + local humanoid = character:WaitForChild("Humanoid") + local animateScript = character:WaitForChild("Animate") + animateScript.mood:Destroy() +end + +local function onPlayerAdded(player) + player.CharacterAppearanceLoaded:Connect(onCharacterAdded) +end + +Players.PlayerAdded:Connect(onPlayerAdded) +``` diff --git a/.cursor/rules/roblox/art/characters/facial-animation/use-heads-in-studio.md b/.cursor/rules/roblox/art/characters/facial-animation/use-heads-in-studio.md new file mode 100644 index 00000000..545c7499 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/facial-animation/use-heads-in-studio.md @@ -0,0 +1,218 @@ +--- +title: Use heads in Studio +description: If you have a model with a live head, you can import the model into Studio, equip face accessories, and create and save animations. +--- + +You can import character models with animatable heads into Studio and use the automatically generated `Class.FaceControls` instance to pose or animate the face. + +To set up heads with facial animation in your experience: + +1. [Import a model with an animatable head](../../../art/characters/testing/studio.md#import). You can either create your own or use one of the provided reference model files. +2. (Optional) [Import face accessories](#import-face-accessories) you want to deform with the facial expressions of your head. You can either create your own or use one of the provided reference accessory files. +3. [Animate the head](#animate-heads) in the **Animation Editor** by either adding in individual animation tracks, or by using the **Face Animation Editor**. + +If you want to experiment with pre-made heads before [making your own](../../../art/characters/facial-animation/create-basic-heads.md), Roblox has a reference experience you can access to see how heads interact with Studio's interface, as well as two reference models and accessories you can import directly into your own experience: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Reference filesDescription
    [Head Animation In-Experience Editor](../../../assets/avatar/dynamic-heads/reference-files/Dynamic-Head-Editor.rbxl)A reference experience that allows you to preview a Goblin and Blocky head with various accessories using an editor.
    [Head Schema Reference](../../../assets/avatar/dynamic-heads/reference-files/Dynamic-Head-Schema.rbxl)A reference experience with a head Blocky model with `Class.FaceControls`.
    [Goblin Character Model](../../../assets/avatar/dynamic-heads/reference-files/GoblinCharacter.zip)A Goblin character model with an animatable head.
    [Blocky Character Model](../../../assets/avatar/dynamic-heads/reference-files/BlockyCharacter.fbx)A Blocky character model with an animatable head.
    [Blocky Face Accessories and Clothing](../../../assets/avatar/dynamic-heads/reference-files/Blocky-Face-Accessories.zip)A `.zip` file of Blocky-specific accessories, including:
    • Angled Eyebrows
    • Round Eyebrows
    • Straight Eyebrows
    • Long Eyelashes
    • Short Eyelashes
    • Long Ducktail Beard
    • Mutton Chops Beard and Hair
    • Shirt and Pants
    + +## Import face accessories + +You can import and equip face accessories that you want to deform with the facial expressions of your head. For example, when you import and equip eyebrows as a face accessory, you can animate the eyebrows to move with the character's eyes. + +By default, when you import a face accessory, it imports as a `Class.MeshPart` object. Using the [Accessory Fitting Tool](../../../art/accessories/accessory-fitting-tool.md) (AFT), you can convert the `Class.MeshPart` into an `Class.Accessory` instance that is compatible with the head. + +To import a face accessory: + +1. From Studio's **File** menu, use the [3D Importer](../../../art/modeling/3d-importer.md) to import the custom model into the workspace. + + + +2. Using the AFT, convert the `Class.MeshPart` into an `Class.Accessory` instance. + + 1. In the toolbar's **Avatar** tab, click **Accessory** to open the AFT. + 2. In the **Explorer** window, select the **MeshPart** you imported as a face accessory. Its name displays in the **Part** field. + 3. Click the **Next** button. + 4. In the **Clothing** category, select **Face**, then click the **Next** button. + 5. (Optional) In the **Edit** panel, use the adjustment options to ensure the accessory fits your model. + 6. In the **Preview** panel, preview the new facial accessory on your head, then click the **Next** button. The tool transforms the `Class.MeshPart` into an `Class.Accessory` instance, and it displays in the **Explorer** window. + +You can preview the accessory on your imported model by making the `Class.Accessory` instance a child of your character `Class.Model`. You can only equip character-specific face accessories with their designed character. + + +
    + +
    Equipped accessory in viewport
    +
    +
    + +
    Equipped Accessory in Explorer
    +
    +
    + +You can also save the `Class.Accessory` instance to your toolbox and use the asset ID at any time in your experiences. For information on equipping accessories by applying a `Class.HumanoidDescription`, see [Customize characters with humanoid description](../../../characters/appearance.md#set-multiple-accessories). + +### AutoSkin property + +You can enable the `Class.WrapLayer.AutoSkin` property in the accessory's `Class.WrapLayer` instance to apply the skinning of the head to the face accessory. This allows a face accessory to fit and follow a character's expressions without having to apply any skinning influences to it during the 3D modeling process. + +The following options are available for the `Class.WrapLayer.AutoSkin` property: + +- **Disabled**: Disables the Automatic Skinning Transfer process. This is the default value. +- **EnabledOverride**: Enables the Auto-Skin Transfer process and allows Studio to override any existing skinning information found on the accessory. Choose this setting when you want to set or replace the existing skinning of an accessory using the Auto-Skin Transfer version. +- **EnabledPreserve**: Enables the Automatic Skinning Transfer process but **doesn't** allow it to override any existing skinning information found on the accessory. Choose this setting when you want to preserve and maintain any existing skinning of an accessory. If there isn't any skinning to maintain, the Auto-Skin Transfer creates new skinning automatically. + +## Animate heads + +Animatable head `Class.MeshPart|MeshParts` include a `Class.FaceControls` instance which allows you to access your facial pose properties. + + +
    + +
    FaceControls in Explorer
    +
    +
    + +
    FaceControls Property Panel
    +
    +
    + +You can adjust these properties in the **Animation Editor** to animate your head. For more information, see [Animate heads](../../../art/characters/facial-animation/animate-heads.md). + +## Troubleshooting + +When importing custom head models, the [Output window](../../../studio/output.md) displays an error or warning message if there were any issues during the configuration process. + +### Error messages + +Error messages indicate a failure to properly import a model with a head. Reference the following table for a summary of all head error messages and troubleshooting tips: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Error messageTroubleshooting
    Failed importing head with facial animation.The .fbx file is corrupted.
    Found more than one joint named X. All joints must have unique names.Ensure that every joint that you import has a unique name.
    Failed importing head with facial animation: Correctives can be for at most 3 control names.Studio found a corrective with more than 3 corrective poses. This isn't supported, so you need to delete the corrective.
    Failed importing head with facial animation: Unrecognized FACS control name X.X is an unrecognized FACS pose name. Ensure that X is renamed to one of the [standard FACS poses](../../../art/characters/facial-animation/facs-poses-reference.md).
    Failed importing head with facial animation: Invalid corrective name X: Neutral cannot be part of a corrective.X is an invalid corrective name. Ensure you are following the correct naming format for correctives.
    Failed importing head with facial animation: Found duplicate FACS control name X for corrective Y.X is an invalid corrective name. You can only include a base pose that is listed as part of a corrective once in the corrective name.
    Failed importing head with facial animation: Couldn't parse the frame number in Extra Attribute named X.You must name any extra attributes "Frame0", "Frame1", etc.
    Failed importing head with facial animation: Empty value found for Extra Attribute named X.The extra attribute X has no value. Add a base pose name or corrective, or delete the extra attribute.
    Failed importing head with facial animation: Duplicate control name found.You set a FACS pose or corrective to multiple frames. Ensure that each FACS pose or corrective is set to only a single frame.
    Failed importing head with facial animation: Head_Geo has no Extra Attributes that map FACS controls to animation frames.The "Head_Geo" mesh in the FBX file must have extra attributes in order to animate facial expressions. The imported avatar will not animate facial expressions.
    Failed importing head with facial animation: No frame was set to "Neutral" in animation.Must have one frame set to "Neutral" in the animation timeline.
    Failed importing head with facial animation: X has not been specified. This is needed for corrective Y.All base poses for a corrective must be set in the extra attributes. For example, if the Funneler_JawDrop corrective is set, then there must be poses for Funneler and JawDrop alone.
    Failed importing head with facial animation: Missing key frame X for Y.There is an extra attribute "FrameX" set to Y, but the animation timeline has no frame X.
    Failed importing head with facial animation: No joints were found under DynamicHead.The .fbx file doesn't have any joints under the RootFaceJoint joint.
    Could not load FACS control data.There are corrupted joint parameters in the .fbx file.
    + +### Warning messages + +Warning messages indicate a potential issue with an imported head model. Reference the following table for a summary of all head warning messages and troubleshooting tips: + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Error messageTroubleshooting
    You have corrective X, but missing corrective Y to support it. This may cause odd deformations.You set a 3-corrective without setting the base 2-corrective. The imported head will animate, but there might be strange deformations.
    Skipping attribute X: YStudio found an extra attribute named X, but since it didn't match the format of "Frame#", it was ignored.
    Control X is nearly identical to Neutral.The pose for X is very similar to Neutral. Studio reports this in case this was a mistake, but the import will be successful as long as there are no other failures.
    Found only N base poses. Your character may not be able to express itself.You only defined a subset of base poses in the .fbx file. The import will still be successful as long as there are no other failures.
    diff --git a/.cursor/rules/roblox/art/characters/import.md b/.cursor/rules/roblox/art/characters/import.md new file mode 100644 index 00000000..11a2e1be --- /dev/null +++ b/.cursor/rules/roblox/art/characters/import.md @@ -0,0 +1,88 @@ +--- +title: Import character bodies +description: Use the 3D Importer to add third-party models to Studio before testing, using, or uploading the character model. +--- + +Use the following instructions to import a full character body model into Studio as a `Model` object that you can save to use in your experience, share with others, or upload to the Marketplace. + + +If you are using a single-mesh character body for the Roblox Auto-Setup tool, see [Avatar auto-setup](../../avatar-setup/). + + +Studio's 3D Importer provides a quick and easy way to import third-party 3D assets into your projects. The importer provides object previews and error-checking to ensure that your asset meets Roblox's [general 3D requirements](../modeling/specifications.md). + +Keep in mind, your character model must also follow Roblox's [avatar character specifications](../characters/specifications.md) to use or sell this asset as an avatar-ready character model, or you may experience errors later in the workflow. + +To import your asset: + +1. From Studio's **File** menu, select **3D Importer**. +2. In the file browser, select the `.fbx` or `.gltf` file saved locally. The 3D Importer loads a preview of the object. + + + + - If textures don't load for your asset, you can manually import your textures later. + - See [3D importer](../../art/modeling/3d-importer.md) for additional information on import settings and troubleshooting. + +3. To begin body validation after import, enable **Validate UGC Body**. This can save you time if you intend on uploading your body to the Marketplace. +4. Set the **Rig Scale** to the appropriate [Body Scale](../characters/specifications.md#body-scale) of your character. + + +5. Select **Import**. The asset populates in your workspace as a `Class.Model` with the appropriate textures applied as a `Class.SurfaceAppearance` or `Class.MeshPart.TextureID`. + + +Manually add textures + + If textures didn't load correctly, add them manually. You may need to save and publish your experience in order to access the [Asset Manager](../../projects/assets/manager.md). + +1. In the **Asset Manager**, click the **Import** button. +2. Upload your image files. +3. After moderation clears for your image, select the `Class.MeshPart` parented within your imported `Class.Model`. +4. If you are using a single basic texture, set the `Class.MeshPart.TextureID` property to your uploaded texture image. +5. If you are using PBR textures: + + 1. Add a `Class.SurfaceAppearance` child to your `Class.MeshPart`. + + + + 2. In the `Class.SurfaceAppearance` properties, click each property value and assign the appropriate texture image from the asset dropdown: + + 1. Set the **ColorMap** to the **\_ALB** texture image. + 2. Set the **MetalnessMap** to the **\_MTL** texture image. + 3. Set the **NormalMap** to the **\_NOR** texture image. + 4. Set the **RoughnessMap** to the **\_RGH** texture image. + + + + + + + +After successful import, your model object should populate in your project as a `Class.Model` with the appropriate textures applied. + + +After successful fitting and converting, your 3D model should populate in your project as an `Class.Model`. + + +
    + +
    Avatar-ready character model in Workspace
    +
    +
    + +
    Avatar-ready character model in Explorer
    +
    +
    + + +Character creation is a complex process that requires lots of testing and iteration. See [Test characters](../../art/characters/testing/index.md) for steps on importing your character model into a test place and verifying your avatar and related components. + + +With this new character `Class.Model`, you can perform any of the following: + +- Begin the process of [uploading and publishing](../../marketplace/publish-to-marketplace.md#upload-an-asset) the character model to the Marketplace. This involves some additional validation and moderation steps. + +- Use the model in your current experience and modify the model's appearance with [HumanoidDescription](../../characters/appearance.md#manually-modify-appearance). + + - Playtest as the character by renaming the `Class.Model` to `StarterCharacter` and moving the `Class.Model` to the `Class.StarterPlayer` folder in the **Explorer** before play testing. + +- Save the model to your [Toolbox](../../projects/assets/toolbox.md) or make it public on the [Creator Store](../../production/creator-store.md) to share or use within any of your experiences. diff --git a/.cursor/rules/roblox/art/characters/index.md b/.cursor/rules/roblox/art/characters/index.md new file mode 100644 index 00000000..ae2e483d --- /dev/null +++ b/.cursor/rules/roblox/art/characters/index.md @@ -0,0 +1,187 @@ +--- +title: Avatar characters +description: All Roblox users are represented by an avatar character which can be customized with body parts, accessories, and clothes from the Marketplace or within experiences. +--- + + + +

    + +Every Roblox user is represented by a customizable character called an **avatar**. Avatars are character models with many specialized features that allow users to interact with the world and customize themselves with a wide range of clothing and accessories from the Marketplace. + +Custom avatars are first created in 3D modeling programs, such as [Blender](https://www.blender.org/) or [Maya](https://www.autodesk.com/products/maya/overview), before importing into Studio. To create a custom Roblox avatar character for your own experience, it's important to start with the following: + +- An advanced background with 3D modeling tools such as [Blender](https://www.blender.org/) or [Maya](https://www.autodesk.com/products/maya/overview). +- An understanding of the [components that make up an avatar character](#components-of-an-avatar). +- An understanding of the general [character creation process](#creation-process). +- Review the [basic character creation tutorial](../characters/creating/index.md) to get started on creating your first avatar character using Roblox's templates. +- [Various tools, resources, and guides](#resources) provided by Roblox to standardize and expedite the creation process. + +## Components of an avatar + +All avatar character models are made up of several fundamental components that provide users the functionality and flexibility to interact with their world. Many of these components are never made visible to the user, but they enable powerful avatar features that enhance social and environmental interactions. When creating avatar characters, all of these components are typically created first in your modeling software and then converted to their appropriate Roblox Studio instance on import. + +Each avatar character is made up of the following rendered and non-rendered components: + + + + +
    15 body part meshes make up the physical aspects of the character model
    + +
    Texture image maps apply a surface color and appearance. Transparency allows underlying part colors to be exposed, such as custom skin tones.
    + +
    +
    + + +
    A rigging armature allows the body parts to properly connect with each other, driving movement, expressions, and animations
    + +
    Facial animation data allows avatars to express virtually all types of facial expressions for chatting and socializing
    +
    + +
    Cage meshes set the outer boundary of the character, defining the surface where clothing and other layerable items can wrap and stretch over.
    + +
    Attachment points define where rigid accessories attach to a character
    + +
    +
    +
    + +### Body parts + + +
    Each avatar character is made up of 15 separate mesh objects
    + +
    These meshes must follow a standard naming convention
    +
    + +Roblox avatar characters are made up of 15 body parts, pieces of geometry that define the shape and contours of your avatar character. In Studio, these geometries are represented as `Class.MeshPart` objects and are nested under a single `Class.Model`. + +### Textures + + +
    Textures apply color and surface details to your character model.
    + +
    A texture image map's opacity can combine with the `Class.MeshPart.Color` to apply custom skin tones to characters.
    +
    + +Textures are image files that define the surface appearance of your character. You can create textures using a texture painting program or a 3D modeling software. In Studio, you must import textures as image files and access them through the `Class.SurfaceAppearance` instance, or set as a `Class.MeshPart.TextureID` property. + + +When texturing parts of your character model's body, ensure that your character model includes a modesty layer over sensitive regions. See [Community Standards](https://en.help.roblox.com/hc/en-us/articles/203313410#safety) for more information on Roblox's policies. + + +### Rigging armature + + +
    The armature is made up of 16 bones, 1 for each body part geometry and a root bone
    + +
    Bones must follow a specific hierarchy and naming convention
    +
    + +An armature allows each character to articulate its limbs and move naturally through the environment. Often referred to as bones or joints, this rigging character information includes skinning data which allows connected limbs, like the knees or elbows to bend organically. In Studio, each bone of the character armature is represented by `Class.Bone` objects that connect the character `Class.MeshPart` objects together. + +### Face animation data + + +
    Each avatar character face is rigged and skinned to create various expressions
    + +
    Each pose is mapped to a pose name within the Custom Properties (Extra Attributes in Maya) of the Head_Geo object
    +
    + +
    Each required face pose is saved as a keyframe in the animation timeline.
    +Facial animation data allow each character to use global facial expressions. Each character includes facial bones and skinning, animation timeline data, and mapped pose data that allows it. In Studio, these facial animation elements are represented by a `Class.FaceControls` instance. + +### Cage meshes + + +
    Head and Upper Torso cage mesh objects (wireframe)
    + +
    Cage objects must exist for each of the 15 body parts
    +
    + +This outer cage sets the invisible surface on which layerable accessories, such as clothing, will stretch and fit over the body. These cage meshes allow clothes to fit over models of different shapes and sizes without having to remodel the clothing item. In Studio, outer cage mesh objects are represented by a `Class.WrapTarget` instance. + +If you are caging your own non-template character model, it's important to use one of Roblox's body cage [project files](../../avatar/resources.md#mannequin-models) to ensure you are using a Roblox standard cage mesh. Removing or adding vertices from this standard mesh can cause issues with clothing fit and import. + +### Attachments + + +
    Each character has common attachment points for equipping rigid cosmetics
    + +
    Each avatar character must include their associated 19 attachment points
    +
    + +Attachment points define where rigid 3D accessories and equipables attach to the character's body. These are not rendered to the end-user but are represented as sphere geometries in 3D modeling software and, when imported into Studio, these geometries are created as `Class.Attachment` instances using the standardized names. + +When wearing layered clothing, the clothing isn't attached directly to the attachment, but it does reference the associated attachment point during ragdoll and dismemberment animations. + +## Creation process + +When designing an avatar model, you must export all of the avatar components in a single `.fbx` or `.gltf` for import into Studio. Since 3D creation isn't a linear process and always requires reiteration and testing, the process of creating an avatar character model can differ between individuals and various creation workflows. + +In general, the creation process follows these typical workflows: + + +
    Basic Creation with Templates
    Customize a Roblox template character that already includes all the necessary components. See [Create with templates](../characters/creating/index.md) for guides and instructions.
    + +
    Advanced Creation from Scratch
    Create characters from scratch, allowing full customization of the avatar character's components.
    +
    + + +Ensure that all assets you create follow any applicable [Marketplace policies](../../marketplace/marketplace-policy.md) and [Roblox Community Standards](https://en.help.roblox.com/hc/en-us/articles/203313410-Roblox-Community-Standards). + + +## Resources + +There are a variety of resources available for creators of all backgrounds to get started with character creation. + +If you are interested in specific avatar creation topics, use the following table to find guides and resources that best match your needs: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TopicResources
    Tutorials[Basic character creation tutorial](../accessories/creating/index.md)
    Reference files[Avatar references and project files](../characters/project-files.md)

    [Example mesh/model objects](../modeling/project-files.md)
    Technical specs[.FBX export settings](../characters/export-settings.md)

    [Avatar specifications](../characters/specifications.md)

    [General mesh specifications](../modeling/specifications.md)

    [Accessory specifications](../accessories/specifications.md)

    [Marketplace policy](../../marketplace/marketplace-policy.md)
    Cosmetic creation[Accessories overview](../accessories/index.md)

    [Creating face accessories](../characters/facial-animation/create-face-accessories.md)

    [Accessory Fitting Tool](../accessories/accessory-fitting-tool.md)

    [Accessory specifications](../accessories/specifications.md)

    [Marketplace requirements](../../marketplace/marketplace-policy.md)
    Texturing[Texturing requirements](../modeling/texture-specifications.md)

    [PBR textures](../modeling/surface-appearance.md)
    Rigging and skinning[Rigging and skinning overview](../modeling/rigging.md)

    [Humanoid rig requirements](../characters/specifications.md#rig)

    [Rigging facial bones](../characters/facial-animation/create-basic-heads.md#rig)

    [Automatic Skinning Transfer](../accessories/automatic-skinning-transfer.md)

    [Skinning facial bones](../characters/facial-animation/create-basic-heads.md#skin-face-bones)
    Facial animation and live heads[Basic head creation](../characters/facial-animation/create-basic-heads.md)

    [Face accessory creation](../characters/facial-animation/create-face-accessories.md)

    [FACS pose references](../characters/facial-animation/facs-poses-reference.md)
    Testing and validation[Calisthenics Tool](../modeling/calisthenics-tool.md)

    [Clothing Validation Tool](../accessories/validation-tool.md)
    Publishing and Marketplace[Uploading to Marketplace](../../marketplace/publish-to-marketplace.md)

    [Marketplace policy](../../marketplace/marketplace-policy.md)

    [Fees and commissions](../../marketplace/marketplace-fees-and-commissions.md)
    diff --git a/.cursor/rules/roblox/art/characters/project-files.md b/.cursor/rules/roblox/art/characters/project-files.md new file mode 100644 index 00000000..faf52935 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/project-files.md @@ -0,0 +1,216 @@ +--- +title: Avatar project files and references +description: Download various character-related project files and reference files. +--- + + +See [Resources](../../avatar/resources.md) for a complete list of avatar-related downloadable content. + + +## Project files + +The following `.fbx`, `.blend`, and `.ma` project files are available to use as examples, boilerplate, or reference: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FilenameDescription
    Lola.fbxA skinned R15 character created from the Skin a humanoid model guide. Since this reference model doesn't yet have [inner and outer cage mesh data](../../art/characters/specifications.md#inner-and-outer-cages), this model can't equip layered clothing or accessories.
    Fish-Person.zipA rigged and skinned humanoid character model with a full body cage, facial animation rig, and associated PBR texture maps.
    BlockyCharacter.fbxA Blocky character model with an [animatable head](../../art/characters/facial-animation/index.md) and a full body cage.
    GoblinCharacter.zipA Goblin character model with an [animatable head](../../art/characters/facial-animation/index.md) and a full body cage.
    ClassicMannequin.fbxA [classic body](../../art/characters/specifications.md#classic) type blank mannequin to use in Studio or your modeling application.
    ClassicMannequin_With-CagesA [classic](../../art/characters/specifications.md#classic) body type blank mannequin with **body cages** to use in Studio or your modeling application for clothing design. Due to unconfigured cage objects, this file may not import correctly into Studio until modified.
    RthroMannequin.fbxAn [Rthro Normal](../../art/characters/specifications.md#normal) body type blank mannequin to use in Studio or your modeling application.
    RthroMannequin_With-Cages.fbxAn [Rthro Normal](../../art/characters/specifications.md#normal) body type blank mannequin with **body cages** to use in Studio or your modeling application for clothing design to use in Studio or your modeling application. Due to unconfigured cage objects, this file may not import correctly into Studio until modified.
    RthroSlenderMannequin.fbxAn [Rthro Slender](../../art/characters/specifications.md#slender) body type blank mannequin to use in Studio or your modeling application.
    RthroSlenderMannequin_With-Cages.fbxAn [Rthro Slender](../../art/characters/specifications.md#slender) body type blank mannequin with **body cages** to use in Studio or your modeling application to use in Studio or your modeling application for clothing design. Due to unconfigured cage objects, this file may not import correctly into Studio until modified.
    +
    + + + + + + + + + + + + + + + + + + + + + + +
    FileDescription
    Rig_and_Attachments_Template.blendStarting armature rig template for Blender. Contains an armature with correct R15 naming conventions and attachment points. Use this template for rigging bodies and clothing items.
    Body_Cage_Template.blendStarting template for Blender, includes individual body part cages for each 15 humanoid parts. Use this template for caging your avatar bodies.

    To save time, edit the full-body `std_cage_deformable` mesh to automatically apply vertex changes to the individual body-part meshes. When importing the `.fbx` into Studio, you can remove this helper mesh.
    Combined-Template.blendTemplate file containing all content from previous templates, includes rig skeleton, body cages, attachment points. Use this template to rig and cage bodies and accessories.
    + +
    + + + + + + + + + + + + + + + + + + + + + + + +
    FileDescription
    Rig_and_Attachments_Template.maStarting armature rig template for Maya. Contains an armature with correct R15 naming conventions and attachment points. Use this template for creating bodies and clothing items.
    Body_Cage_Template.maStarting template for Maya, includes individual body part cages for each 15 humanoid parts. Use this template for caging your avatar bodies.

    To save time, edit the full-body `std_cage_deformable` mesh to automatically apply vertex changes to the individual body-part meshes. When importing the `.fbx` into Studio, you can remove this helper mesh.
    Combined-Template.maTemplate file containing all content from previous templates, includes rig skeleton, body cages, attachment points. Use this template to rig and cage bodies and accessories.
    + +
    + + + The following `.fbx` files were exported from Maya for use in modeling applications. If you are using Blender or Maya in your workflow, use the specific template files for those programs instead of the following files. + + + + + + + + + + + + + + + + + + + +
    FileDescription
    Rig_and_Attachments_Template.fbxStarting armature rig template for general modeling software. Contains an armature with correct R15 naming conventions and attachment points. Use this template for creating bodies and clothing items.
    Body_Cage_Template.fbxStarting template for general modeling software, includes individual body part cages for each 15 humanoid parts. Use this template for caging your avatar bodies.

    To save time, edit the full-body `std_cage_deformable` mesh to automatically apply vertex changes to the individual body-part meshes. When importing the `.fbx` into Studio, you can remove this helper mesh.
    +
    +
    + +## Templates + +If you are creating character models, you can choose from a variety of starting templates that best match your final design and save time on creating the [avatar components](../../art/characters/index.md#components-of-an-avatar). See [Create with templates](../../art/characters/creating/index.md#template-files) for important information on using these template files. + +Each `.zip` contains a `.blend`, `.fbx`, and PBR texture `.png` files for that template model. If using Blender or following the [template creation guides](../../art/characters/creating/index.md), use the `.blend` project. + + +If you are using Roblox's avatar template files, you must perform the [cleanup steps](../../art/characters/creating/combine-head-geometry.md) in order for the assets to properly validate before publishing to the Marketplace. + + + + + +
    Round
    +
    +

    + Female: RoundFemale.zip
    + Male: RoundMale.zip +
    +
    + +
    Square
    +
    +

    + Female: SquareFemale.zip
    + Male: SquareMale.zip +
    +
    + +
    Muzzle
    +
    +

    + Female: MuzzleFemale.zip
    + Male: MuzzleMale.zip +
    +
    +
    + + + +
    Realistic
    +
    + Female: SemiRealisticFemale.zip
    + Male: SemiRealisticMale.zip +
    +
    +
    + + +
    Anime
    +
    + Female: AnimeFemale.zip
    + Male: AnimeMale.zip +
    +
    +
    + + +
    Stylized
    +
    + Single body: Stylized.zip +
    +
    +
    + + +
    Caricature
    +
    + Single body: Caricature.zip +
    +
    +
    +
    diff --git a/.cursor/rules/roblox/art/characters/specifications.md b/.cursor/rules/roblox/art/characters/specifications.md new file mode 100644 index 00000000..b5318be6 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/specifications.md @@ -0,0 +1,738 @@ +--- +title: Character specifications +description: Character specification lists the specific technical requirements for custom characters created outside of Studio. +--- + +Character models require a specific set of components and configuration standards to ensure all avatar features work as expected. Check that your model meets the following modeling specifications and guidelines before exporting to ensure Studio compatibility. + +When ready to export, see the [export requirements](../../art/characters/export-settings.md) for mesh export settings for Blender and Maya. + + +If creating other types of 3D models: +
      +
    • For generic meshes, see [general mesh specifications](../modeling/specifications.md) and [general export settings](../modeling/export-requirements.md).

    • +
    • For rigid accessories, see [accessory specifications](../accessories/specifications.md) and [accessory export settings](../accessories/export-settings.md).

    • +
    • For layered accessories, see [layered accessory specifications](../accessories/clothing-specifications.md) and [layered export settings](../accessories/clothing-export-settings.md).

    • +
    +
    + +## Geometry + +Avatar character models are made up of 15 separate mesh objects and require additional geometry requirements to import into Studio and publish successfully. In addition to the body [types](#body-scale), [parts](#body-parts), and [budget](#triangle-budgets) specifications, ensure that your models also fulfill the following general requirements when modeling: + +- **Watertight** - All geometry must be watertight without exposed holes or backfaces. Meshes used as outer cages do not need to be watertight. +- **No N-gons** - Model your assets in quads where possible. +- **Transformations** - All translation, rotation, and scale values must be frozen and pivots set to `0`, `0`, `0`. +- **Orientation** - Characters must face positive Z and stand up in positive Y. +- **Pose** - Before exporting, set your character to an I-Pose, A-Pose, or T-Pose when possible. + +### Body scale + +Roblox supports 3 standards of body scales: **Normal**, **Slender**, and **Classic**. These standards allow developers to create experiences and spaces with consistent body sizes for standardizing movement and interaction. You can select a body scale on import using [Rig Scale options](../modeling/3d-importer.md#rig-general), or modify the [body scale manually](../../art/accessories/body-scale.md). Body scale persists when the asset is [uploaded to the Marketplace](../../marketplace/publish-to-marketplace.md#upload-an-asset). + +
    +
    + +
    +A visualization of how Roblox combines the 15 body parts into 6 distinct assets. +
    +
    +
    + + +Since body assets partially overlap with each other, the total body dimensions do not represent the sum of the avatar's asset dimensions. The total body dimension is the most important factor of each body scale to ensure a standard avatar size and scale. + + +#### Normal + +
    +
    + +
    +A Rthro Normal body scale [downloadable mannequin](../../avatar/resources.md#references). +
    +
    +
    + +In the [3D importer](../../art/modeling/3d-importer.md#avatar-general), use **Rig Type** > **Rthro** to import your model as a Normal body scale. + +
    + + +
    +
    Minimum (in studs)
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PartX (width)Y (height)Z (depth)
    Head.5.5.5
    Arm.251.5.25
    Torso.851.7.7
    Leg.251.4.5
    **Total****1.35****3.6****.7**
    +
    +
    +
    Maximum (in studs)
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PartX (width)Y (height)Z (depth)
    Head322
    Arm24.52
    Torso4.63.52.25
    Leg1.542
    **Total****8.6****9.5****2.25**
    +
    +
    + +#### Slender + +
    +
    + +
    +A Rthro Slender (Narrow) body scale [downloadable mannequin](../../avatar/resources.md#references). +
    +
    +
    + +In the [3D importer](../../art/modeling/3d-importer.md#avatar-general), use **Rig Type** > **Rthro Narrow** to import your model as a Slender body scale. + +
    + + +
    +
    Minimum (in studs)
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PartX (width)Y (height)Z (depth)
    Head.5.5.5
    Arm.251.5.25
    Torso.851.7.7
    Leg.251.4.5
    **Total****1.35****3.6****.7**
    +
    +
    +
    Maximum (in studs)
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PartX (width)Y (height)Z (depth)
    Head222
    Arm1.542
    Torso33.52
    Leg1.542
    **Total****6****9.5****2**
    +
    +
    + +#### Classic + +
    +
    + +
    +A Classic body scale [downloadable mannequin](../../avatar/resources.md#references). +
    +
    +
    + +In the [3D Importer](../../art/modeling/3d-importer.md#avatar-general), use **Rig Type** > **Default** to import your model as a Classic body scale. + +
    + + +
    +
    Minimum (in studs)
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PartX (width)Y (height)Z (depth)
    Head.5.5.5
    Arm.251.5.25
    Torso.851.7.7
    Leg.251.4.5
    **Total****1.35****3.6****.7**
    +
    +
    +
    Maximum (in studs)
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PartX (width)Y (height)Z (depth)
    Head1.51.82
    Arm232
    Torso43.82
    Leg1.53.52
    **Total****8****9.1****2**
    +
    +
    + +### Triangle budgets + +Although model geometries are typically created using quads, the Roblox Engine converts imported assets into tris. Each asset of your character model must not exceed our maximum tri budget. To quickly get the number of expected tris in your third-party modeling application, you can double the number of quads in your model. + +When character models are uploaded to Studio and created into assets for the Marketplace, the body is split into 6 individual assets: **DynamicHead**, **Torso**, **LeftArm**, **RightArm**, **LeftLeg**, **RightLeg**. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Asset typeIncluded mesh objectsMaximum triangles
    DynamicHeadHead4000
    TorsoUpperTorso, LowerTorso1750
    LeftArm LeftUpperArm, LeftLowerArm, LeftHand1248
    Right ArmRightUpperArm, RightLowerArm, RightHand1248
    LeftLeg LeftUpperLeg, LeftLowerLeg, LeftFoot1248
    Right LegRightUpperLeg, RightLowerLeg, RightFoot1248
    TotalHead, UpperTorso, LowerTorso, LeftUpperArm, LeftLowerArm, LeftHand, RightUpperArm, RightLowerArm, RightHand, LeftUpperLeg, LeftLowerLeg, LeftFoot, RightUpperLeg, RightLowerLeg, RightFoot10,742
    + +### Body parts + +See the following specifications for the individual mesh objects that make up a character model: + +- **Naming Convention** - Limbs must all be specifically named: + - UpperTorso_Geo + - LowerTorso_Geo + - LeftUpperArm_Geo + - LeftLowerArm_Geo + - LeftHand_Geo + - RightUpperArm_Geo + - RightLowerArm_Geo + - RightHand_Geo + - LeftUpperLeg_Geo + - LeftLowerLeg_Geo + - LeftFoot_Geo + - RightUpperLeg_Geo + - RightLowerLeg_Geo + - RightFoot_Geo + - Head_Geo +- **Caps** - Limbs must be capped, so that they form a full watertight mesh when separated from the body. Caps can be rounded or flat depending on design. + + + +### Face accessories + +Face accessories, such as hair, eyebrows, and eyelashes are unique accessories that you can bundle with an avatar body upload. At this time, eyebrows and eyelashes can not be uploaded as standalone accessories and must be bundled with an avatar body. See [Accessory specifications](../accessories/specifications.md#face-accessories) for additional information on face accessories. + +### Visibility + +To ensure that avatar sizes are visually consistent, you must standardize body part visibility with the following requirements: + +- **Opacity** - Body parts must be fully opaque. +- **Bounding Boxes** - Body part assets must take up a significant visible portion of their bounding box in a front, side, and back view. + - Body parts, such as Torso, Left Arm, Right Leg, must take up at least 50% of body part's bounding box. + - The head part must take up at least 50% of the mesh's bounding box. + +
    + +
    An acceptable head mesh example that takes up a majority of the bounding box in the front view
    +
    +
    + +
    A non-acceptable head mesh example that does not take up the appropriate amount of bounding box space in the front view
    +
    +
    + +## Attachments + +Attachments are points on the humanoid model where rigid accessories attach. Like many [character components](./index.md#components-of-an-avatar), attachment points are set up in third-party modeling software and imported as `Class.Attachment` objects. + +The 3D Importer automatically recognizes and converts mesh objects as attachment points if the objects include the affix `\_Att` and follow the naming conventions below. This only applies when importing meshes with caging data, such as bodies (accessory attachment points are created using the Accessory Fitting Tool). Check out examples of this implementation in any of the [downloadable reference models](../../avatar/resources.md#references). + +Generally, when placing attachment points, position them so they overlap halfway with the character model's mesh part. + + +
    + +
    Incorrect placement of collar attachments
    +
    +
    + +
    Correct placement of collar attachments
    +
    +
    + +Attachments must follow a specific naming convention and positional consistency: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Mesh partAttachment nameDetails
    HeadFaceCenter_AttAnywhere within mesh bounding box
    FaceFront_AttFront half of mesh bounding box
    Hat_AttTop half of mesh bounding box, can overlap with Hair_Att
    Hair_AttTop half of mesh bounding box, can overlap with Hat_Att
    UpperTorsoLeftCollar_AttLeft top half of mesh bounding box
    RightCollar_AttRight top half of mesh bounding box
    Neck_AttTop half of mesh bounding box
    BodyBack_AttBack half of mesh bounding box
    BodyFront_AttFront half of mesh bounding box
    LowerTorsoRoot_AttMust set to `0`, `0`, `0` position
    WaistFront_AttFront half of mesh bounding box, can overlap with WaistCenter_Att
    WaistBack_AttBack half of mesh bounding box
    WaistCenter_AttAnywhere in mesh bounding box, can overlap with WaistFront_Att
    RightUpperArmRightShoulder_AttTop half of mesh bounding box
    RightHandRightGrip_AttAnywhere in mesh bounding box.

    Orient grip attachments **perpendicular** to the lower arm bone. For example, for I-Pose (arms pointing down), set the grip attachment to `90`, `0`, `0` (grip attachment pointing forward).

    LeftUpperArmLeftShoulder_AttTop half of mesh bounding box
    LeftHandLeftGrip_AttAnywhere in mesh bounding box.

    Orient grip attachments **perpendicular** to the lower arm bone. For example, for I-Pose (arms pointing down), set the grip attachment to `90`, `0`, `0` (grip attachment pointing forward).

    RightFootRightFoot_AttAnywhere in mesh bounding box
    LeftFootLeftFoot_AttAnywhere in mesh bounding box
    + +## Rigging + +Unlike generic rigs, humanoid models require a specific hierarchy and naming conventions for the internal bone or joint structure. + + +
    + +
    Humanoid rig model
    +
    +
    + +
    Humanoid rig bone structure (Blender)
    +
    +
    + +See the following requirements for humanoid rigging: + +- **Rig Hierarchy** - Humanoid rigs require a specific bone hierarchy and naming convention: + + - Root + - HumanoidRootNode + - LowerTorso + - UpperTorso + - Head (representing the base of the neck) + - LeftUpperArm + - LeftLowerArm + - LeftHand + - RightUpperArm + - RightLowerArm + - RightHand + - LeftUpperLeg + - LeftLowerLeg + - LeftFoot + - RightUpperLeg + - RightLowerLeg + - RightFoot + + +
    + +
    Blender rig hierarchy
    +
    +
    + +
    Maya rig hierarchy
    +
    +
    + +- **LowerTorso and Root** - The LowerTorso and Root bone or joint position must be set to `0`, `0`, `0`. +- **Pose** - Export your character model in an I-Pose, A-Pose, or T-Pose for the best Studio compatibility. The LeftUpperArm and RightUpperArm bones can be exported with rotation values to meet this requirement. + +## Skinning + +Roblox supports skinning for rigged meshes. See [Rigging and Skinning](../../art/modeling/rigging.md) for more details on implementing skinned meshes in your experience. + +See the following requirements for skinning: + +- **Max Influences** - A vertex can not be influenced by more than 4 bones or joints. +- **No Root Influences** - Do not apply influences to the Root bone or joint. +- **Symmetry** - When possible, maintain symmetry when applying influences to a rig. + +## Facial animations + +Roblox supports facial animation on character heads and can support more than 50 base poses. If you are creating an avatar character, it must, at minimum, include the following 17 [FACS reference poses](../../art/characters/facial-animation/facs-poses-reference.md) to support avatar chat: + +- EyesLookDown +- EyesLookLeft +- EyesLookRight +- EyesLookUp +- JawDrop +- LeftEyeClosed +- LeftLipCornerPuller +- LeftLipStretcher +- LeftLowerLipDepressor +- LeftUpperLipRaiser +- LipsTogether +- Pucker +- RightEyeClosed +- RightLipCornerPuller +- RightLipStretcher +- RightLowerLipDepressor +- RightUpperLipRaiser + +While the 17 poses are a minimum requirement, it's recommended to include as many facial poses as possible in your asset to improve expressiveness and facial animation fidelity for facial animation and avatar chat. + +## Textures + +Avatar characters must follow Roblox's [texture specifications](../../art/modeling/texture-specifications.md). Characters created for the Marketplace can take advantage of [custom skin tones](#custom-skin-tone) which use alpha layers allow users to select their own base color. + +### Custom skin tone + +When texturing an avatar character model where the user can set their own skin tone, set the exposed skin areas as transparent so a default color or texture is not baked into the texture. When rendering, the Studio engine applies the transparent layer on top without any layer effects. This step applies mostly to human-like characters with exposed skin that you intend users to customize. + +The following are examples of skin tone shading for the face, and you can apply this process with any part of an avatar with exposed skin: + + +
    + +
    +
    + - Use 100% opacity for areas not related to a customized skin tone, such as eyes and brows. + - When applying shading, use black at low opacity and adjust opacity when needed. + - For areas that are partially translucent, such as shading contours or certain cosmetic features, leave some transparency for partial visibility of the skin tone. + - You should consistently test out how various colors layers can interact with your shading. +
    +
    + + +
    + +
    Beige
    +
    +
    + +
    Blue
    +
    +
    + +
    Brown
    +
    +
    + +
    Pink
    +
    +
    + +## Outer cages + +Outer cages on your character model allow your character to wear layerable accessories, such as clothing. Models, such as an avatar character, that are the target of meshes that will stretch over it, only require an outer cage, but meshes that deform, like [layered clothing](../accessories/clothing-specifications.md#cage-meshes), require an inner and outer cage. + +For general use, see the following requirements for adding outer cage meshes to your model: + +- Use Roblox's [body cage templates](../../avatar/resources.md#project-files) to ensure naming convention and other configurations are correct. +- **Naming Conventions** - The outer cage of a body part must be named after the primary mesh object with **\_OuterCage** affixed, for example `LeftUpperArm_OuterCage`. +- **Vertices and UV Map** - Don't delete vertices or alter the UVs on the Outer Cages as this can cause errors when importing in Studio or when equipping onto a character. Use the Roblox provided templates for the cage meshes to ensure compatibility with other layered assets. +- **Symmetry and consistency** - Keep each face (the space between vertices) consistently sized and retain symmetry wherever possible. Use symmetry tools in your modeling software whenever possible. + +## Marketplace requirements + +Along with the other technical requirements listed, your items must meet the following additional specifications before uploading them to the Marketplace to sell: + +- Ensure that your items adhere to the [Marketplace program guidelines](../../marketplace/marketplace-policy.md). +- Whenever possible, ensure that your items adhere to the following modeling requirements: + - [Custom mesh specifications](../../art/modeling/specifications.md) + - Any applicable [avatar specifications](../../art/characters/specifications.md) +- Object `Class.MeshPart.Material|Material` is set to `Plastic`. +- Object `Class.MeshPart.Transparency|Transparency` is set to `0`. +- Object `Class.MeshPart.VertexColor|VertexColor` is the default `1, 1, 1`. +- If your head includes separate eyelash and eyebrow assets, you must add them to your character model as `Class.Accessory` objects. + - See [accessory specifications](../../art/accessories/specifications.md) for additional technical requirements. +- Your `Class.Model` instance doesn't contain extraneous objects, like `Class.Script` or additional `Class.Part` instances. diff --git a/.cursor/rules/roblox/art/characters/testing/blender.md b/.cursor/rules/roblox/art/characters/testing/blender.md new file mode 100644 index 00000000..0832d227 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/testing/blender.md @@ -0,0 +1,80 @@ +--- +title: Test in Blender +comments: +description: Verify the important aspects of your character model in Blender before importing into Studio. +next: /art/characters/testing/studio +prev: /art/characters/testing/ +--- + +You can quickly verify many of your components in Blender, allowing you to catch out problems that may cause issues later on. You can use a mix of Blender native tools and Roblox's helper plugins to check for many common issues in your character model. + +## Facial animation data + +Facial animation uses multiple modeling components to work effectively. If using a template, or making changes to a model with existing facial animation data, it's sometimes possible to make a change that affects the saved poses, either in the animation timeline, or in the custom property of the head mesh. + +Use the following steps to help verify the integrity of your facial animation data: + +1. With the Armature object selected, check the animation frame in the **timeline**: + + 1. The timeline typically ranges between **0–330**, though not all templates use the entire range, and there may be gaps between poses. + + 2. The **neutral pose** should be on **frame 0**. + 3. There shouldn't be any keyframe gaps between the frames with animation data. + +2. Verify the **Object Properties** > **Custom Properties** panel for the Head_Geo object: + + + 1. There should be a **RootFaceJoint** attribute set to the name of the first facial animation bone. + + 1. This bone should be a child of the **Head** bone, one of the 15 required bones in an avatar's armature. + 2. In templates and some reference models, this bone is commonly named `DynamicHead` and indicates the beginning of the facial animation rig. + + 2. There should be about the same number of custom properties as unique animation frames, with each animation pose having its own mapped custom property. + 3. The names for the mapped poses here should match the spelling and capitalization of the [FACS pose reference](../../../art/characters/facial-animation/facs-poses-reference.md). + + + + +If you discover issues with your face animation data, you may need to repeat the skinning, posing, or mapping processes for your character's head. See [Creating Heads](../../../art/characters/facial-animation/create-basic-heads.md) for a general overview of the avatar head creation process. + +If you are using a template and run into issues, it's possible the facial data was overridden by a saved animation, or the rigging or mapped data was mistakenly deleted. If it's difficult to quickly identify and resolve the issue, it may be quicker to restart your character customization from the original template file. + + +## Body skin + +Properly skinning your character models ensures natural joint movements and realistic poses and expressions. There are several ways to verify skinning data, like using Blender's Pose Mode to pose the joints and examine how certain orientations can affect the joint skinning. + +Use the following steps in Blender to verify your joint skinning in Pose mode: + +1. With the **Armature** object selected, navigate to the **Object Properties** > **Viewport Display** and enable **Show In Front**. This allows you to see and access bones within your character. +2. With the armature selected, and switch to **Pose Mode**. +3. Select all the face bones of your model and press H to hide. You can reveal these again later with AltH (⌥H) in Pose mode. +4. Select any body bone and press R to rotate. Verify that your body bones correctly deform and bend the character mesh as expected in natural poses. + + 1. While actively rotating a bone, right-click to cancel the rotation and set the bone to its original position. + 2. While actively rotating a bone, you can **click to confirm** the rotation and save the current position. You can combine this to make various poses of your character by changing the rotation of various limbs at once. + 3. If you've saved a rotation, press AltR (⌥R) to clear any rotation in Pose Mode. Make sure to reset your pose whenever you complete testing. + + + +You can also run through common poses and movements using Roblox's [Calisthenics Tool](../../../art/modeling/calisthenics-tool.md) add-on, which applies several common animations to an avatar armature that you can play back and review in Blender's animation timeline. + + +The [Calisthenics Tool](../../../art/modeling/calisthenics-tool.md) adds animations to your timeline to quickly preview body animations. Be careful when saving or exporting your character when using this tool, as it may conflict with saved facial animation data that uses the same timeline. + + + + + +If you discover issues with your skinning, you may need to troubleshoot and reapply rigging and skinning steps to your humanoid. See [Rigging and skinning](../../../art/modeling/rigging.md) for an overview of the rigging and skinning processes. + +If you are using a template, it's possible the skinning data was affected by a destructive modeling change. This may require reskinning, or starting over your character customization from the original template file. + + +## Technical specifications + +Your avatar components should match the requirements provided in the [avatar specifications](../../../art/characters/specifications.md). When using templates and following appropriate non-destructive modeling practices, most of these components should not be touched, but you should still double-check that each component is compliant with the technical requirements. + + +If you are using Roblox character templates and are ready to export into Studio, see [Exporting instructions](../../../art/characters/creating/export-textures.md) for specific export instructions for template files. + diff --git a/.cursor/rules/roblox/art/characters/testing/index.md b/.cursor/rules/roblox/art/characters/testing/index.md new file mode 100644 index 00000000..87fd4769 --- /dev/null +++ b/.cursor/rules/roblox/art/characters/testing/index.md @@ -0,0 +1,96 @@ +--- +title: Testing characters +comments: +description: Verify the important aspects of your character model in Blender and in Studio. +next: /art/characters/testing/blender +--- + +It's important to constantly test your models during and after the creation process to ensure that your character can interact with various social and environmental elements in any experience. + +Whether you are using a template character, or your own custom assets, use the information provided in [Test in Blender](../../../art/characters/testing/blender.md) and [Test in Studio](../../../art/characters/testing/studio.md) throughout your workflow to comprehensively test your assets and quality check your models. + +Use the following table as an overview of common tests and resources to verify each component of your character model. + + + + + You can apply the following workflows with any modeling software, though certain interfaces and instructions may differ between platforms. See [Testing in Blender](../../../art/characters/testing/blender.md) for additional information. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ComponentTesting recommendations

    **Body Parts**
    When modeling, confirm that your geometry follows [avatar geometry specifications](../../../art/characters/specifications.md#geometry).

    **Textures**
    When texturing, confirm that your geometry follows [avatar texture specifications](../../../art/characters/specifications.md#textures).

    **Rigging**
    Use [Blender's posing tools](../../../art/characters/testing/blender.md#body-skinning) to check the rigging and skinning quality of your asset.

    **Face Animation**
    Confirm that [your FACS data](../../../art/characters/testing/blender.md#facial-animation-data) is present and correctly configured.

    **Cage Mesh**
    Manually verify that your cage mesh completely and tightly covers your character model and follows [avatar outer cage specifications](../../../art/characters/specifications.md#outer-cages).

    **Attachments**
    Manually verify that your attachment points are correctly positioned and follow [avatar attachment specifications](../../../art/characters/specifications.md#attachments).
    +
    + + + + Roblox provides an uncopylocked testing place that includes quick access to various environments and testing features. See [Testing in Studio](../../../art/characters/testing/studio.md) for additional information. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ComponentTesting recommendations

    **Body Parts**
    Verify your character's geometry while in [movement and animation](../../../art/characters/testing/studio.md#movement-and-animation).

    **Textures**
    Test your character in [various lighting environments and skin tone colors](../../../art/characters/testing/studio.md#lighting-and-color).

    **Rigging**
    Use [animations and testing environments](../../../art/characters/testing/studio.md#movement-and-animation) to verify your character's rigging, skinning, and movement.

    **Face Animation**
    [Cycle through various facial animations](../../../art/characters/testing/studio.md#movement-and-animation) to ensure your character can express common expressions.

    **Cage Mesh**
    [Equip various clothing items](../../../art/characters/testing/studio.md#clothing-and-accessories) to check for fit and for any unexpected cosmetic issues.

    **Attachments**
    [Equip various accessory items](../../../art/characters/testing/studio.md#clothing-and-accessories) to verify rigid accessory placement and orientation.
    +
    +
    diff --git a/.cursor/rules/roblox/art/characters/testing/studio.md b/.cursor/rules/roblox/art/characters/testing/studio.md new file mode 100644 index 00000000..083188ac --- /dev/null +++ b/.cursor/rules/roblox/art/characters/testing/studio.md @@ -0,0 +1,272 @@ +--- +title: Test in Studio +comments: +description: Verify the important aspects of your character model in a custom Studio test experience. +--- + +Test your character model in Studio to understand how it looks and feels within a Roblox experience. To test your custom character in Studio, first [import the character model](../../characters/import.md) into your Studio project. + +You can test in Studio using the [Avatar Setup](../../../avatar-setup/) tool to preview and test various components of your avatar character. + +You can also playtest your character in the [Avatar Test experience](https://www.roblox.com/games/13176231501/Avatar-Test-Place). This experience provides a wide variety of environmental and clothing tests to ensure that your character model and related components work as expected. + +## Set up test experience + +The following is the general testing process setting up the Avatar Test experience: + +1. Download and open the [Avatar Test experience](https://www.roblox.com/games/13176231501/Avatar-Test-Place) in Studio. +2. Import your avatar model into Studio. +3. Set your model as the starter character. +4. Launch a playtest of the experience. + +### Open in Studio + +In order to use the [Avatar Test experience](https://www.roblox.com/games/13176231501/Avatar-Test-Place), you must first download it from Roblox. You can save the experience locally and make any changes that may help your testing workflow. Roblox may update this experience periodically to add or improve features. + +To download the Avatar Test experience: + +1. Navigate to the [Avatar Test experience](https://www.roblox.com/games/13176231501/Avatar-Test-Place). +2. In the button next to the experience title, select **…** > **Edit**. The page navigates to the Studio launcher. + + + + +### Import + +After you open the test experience in Studio, import your custom character model. + +1. From Studio's **File** menu, select **Import 3D**. A file browser displays. + + + +2. Select your custom character `.fbx` file. +3. Verify the following: + + 1. With the highest level object selected, ensure **Rig Type** is set to R15. + + + + 2. If using the template files, set **Rig Scale** to **Rthro**. Otherwise, use the appropriate rig scale for your [character body type](../../../art/characters/specifications.md#body-scale). + 3. Check for any red errors that may block import into Studio. + 4. Verify any yellow warnings that may indicate a quality issue with your avatar components. + + + The 3D Importer may incorrectly report some cage meshes as not watertight. You can ignore these warnings for those cage objects. + + +4. Click **Import**. The character's model populates into the workspace. + + + If an error or warning message displays in the **Output** window, see [Troubleshooting](../../../art/characters/facial-animation/use-heads-in-studio.md#troubleshooting) for guidance on how to handle your specific error or warning message. + + +### Add SurfaceAppearance + +If you exported your textures separately, or if the 3D Importer fails to pick up your PBR textures, you can add them manually. + +To add individual image texture files: + +1. Open the **Asset Manager**. You may need to publish your experience first. +2. **Bulk Upload** the image map assets. + + + +3. In the **Explorer**, expand the **Head_Geo** and check if a `Class.SurfaceAppearance` object exists. + - If `Class.SurfaceAppearance` is present, continue to step 4. + - If `Class.SurfaceAppearance` is not present, select the ⊕ next to the Head_Geo and add a `Class.SurfaceAppearance` object. +4. Set each property to the corresponding uploaded image map + + + +5. Copy the `Class.SurfaceAppearance` with the populated image map with CtrlC (⌘C). +6. Hold Shift and click all of your model's MeshParts to select all of your character's geometry. +7. Use CtrlShiftV (⌘ShiftV) to paste into all of the head geometries. An updated `Class.SurfaceAppearance` populates in each `Class.MeshPart` object. + + + +### Set model as StarterPlayer + +In order to play as the character during a playtest, rename and move the model instance: + +1. In the **Explorer**, rename the character **model** as `StarterCharacter`. +2. In the **Explorer**, navigate to the `Class.StarterPlayer` directory. If a `StarterCharacter` model already exists, remove it. +3. Click and drag the model under the directory. + + + +After you rename and add your model, [playtest](../../../studio/testing-modes.md#playtesting) the experience as the custom model. + +## Use test experience + +The Avatar Test experience includes several features in the interface and environment to quickly perform comprehensive tests of your avatar characters. You can use the [test checklist](#checklist) to ensure you are reviewing all the important aspects of your avatar character. + +When playtesting the experience, use the following UI buttons on the right side to open various testing tools and options: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Button
    Description
    +

    Avatars and facial animation
    +
    Use this menu to swap between the custom avatar and control avatars. An additional button option allows you to loop through various facial animations to test your character's face expressions.

    Emotes and animations
    Use this menu to test various animations on your avatar character.

    Skin tone color palette
    Use this menu to select a new skin tone for your character. See Custom Skin Tones for more details on this implementation with template character models.

    Clothes and accessories
    Use this menu to select various clothing items to try on.

    Movement settings
    Use this menu to change movement settings for your character model, such as **jump height** and **walk speed**.

    Body proportion settings
    Use this menu to change various aspects of your character's body proportions.

    Lighting presets
    Use this menu to change the environment lighting to various presets, such as **Mountains - Sunset**, or **Indoor - Midday**.
    + +### Checklist + +Use the following checklists to ensure that you are comprehensively testing each component of your avatar. Use the Avatar menu to switch between your custom avatar and a control avatar to verify expected behavior. + +#### Movement and animation + + +
    Testing guitar animation emote
    + +
    Testing water movement
    + +
    Testing ramp movement
    + +
    + +Check the following for any anomalies: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FunctionHow to test
    WalkingMove the character around the environment, ramps, and platforms.
    SittingMove to any of the seats in the environment and press E to sit.
    ClimbingMove to any of the trusses and ladders. Your character automatically begins climbing when near.
    SwimmingUse the pool of water at the top of the ramp area to verify your swimming animation.
    JumpingPress Space to jump.
    DyingUse any of the death cubes to set your character to a ragdoll state and respawn.
    Facial AnimationUse the **Face UI menu** to toggle a face animation cycle.
    Emotes and AnimationUse the **Emote UI menu** to access and play the available emotes.
    + +If you see unexpected behavior with your character's movement, there may be some issues with the rigging or skinning of your character. It may require revisiting the rigging and armature components of your avatar model in your modeling application. + +#### Lighting and color + + +
    Testing skin tones
    + +
    Testing environmental lighting
    +
    + +Check the following for any anomalies: + + + + + + + + + + + + + + + + + + +
    FunctionHow to test
    Skin toneUse the **Skin Tone UI** menu to test various skin tones for texturing and lighting compatibility.
    Environmental lightingUse the **Lighting UI menu** and the environment to check how your character's surface appearance displays in various conditions.
    + +If you see unexpected behavior with your character's appearance in various lighting and color selections, there may be some issues with the texturing of your character. It may require re-adjusting the texturing components of your avatar model in your modeling application. + +#### Clothing and accessories + + +
    Test a mix of clothing and accessories
    + +
    Use the UI menu or pedestals to equip or reset clothing and accessories
    +
    + +Check the following for any anomalies: + + + + + + + + + + + + + + + + + + +
    FunctionHow to test
    Equipping accessoriesUse the **Clothes and Accessories UI menu** or environmental pedestals to equip rigid accessories to your character.
    Equipping clothingUse the **Clothes and Accessories UI menu** or environmental pedestals to equip rigid accessories to your character. Test your clothing in motion and in animations to verify the fit.
    + +If you see unexpected behavior with your character wearing clothes or equipping rigid accessories, there may be issues with the caging or attachment points of your character. You may need to re-adjust the cage mesh shapes or attachment objects of your avatar model in your modeling application. + + +Clothes can layer in unconventional orders, such as a jacket worn below a tshirt. You can reset the equipped clothing and try various combinations of clothing options and ordering. + diff --git a/.cursor/rules/roblox/art/characters/validation-tool.md b/.cursor/rules/roblox/art/characters/validation-tool.md new file mode 100644 index 00000000..e2937f9a --- /dev/null +++ b/.cursor/rules/roblox/art/characters/validation-tool.md @@ -0,0 +1,121 @@ +--- +title: Blender validation tool +description: The Avatar Validation Tool checks for common character model issues in Blender. +--- + +The **Avatar Validation Tool** is a supplemental Blender add-on you can use to quickly identify common issues with your character model. This tool checks that your model meets most of Roblox's avatar [technical specifications](../../art/characters/specifications.md) and, when possible, attempts to automatically resolve them. + + + +This tool can save you time by checking for common validation specifications before you export your model, but it doesn't provide a comprehensive verification of all aspects of your character model. You should always continually test your character model, including testing your characters [in Studio](../../art/characters/testing/studio.md) and verifying on your own if your model meets Roblox's [character specifications](../../art/characters/specifications.md). + +## Install + + +The Validation Tool plugin is compatible with Blender 3.5.1+. You may experience unexpected behavior if using earlier versions of Blender. + + +To install the Validation Tool in Blender: + +1. Download [ValidationTool_Blender.zip](../../assets/art/ValidationTool_V2.zip) and save the .zip file locally. Do not open the .zip file. +2. In Blender, navigate to **Edit** > **Preferences**. +3. In Preferences, go to the **Add-Ons** section on the left sidebar. + + + +4. Click the **Install...** button. A file browser displays. +5. Select the downloaded .zip file and click **Install Add-On**. +6. In the Add-Ons section, find the Validation Tool and **enable** the add-on. + + + +7. Return to your workspace and expand the side toolbar in the Viewport to access the add-on. + + +
    + +
    Sidebar indicator
    +
    +
    + +
    Expanded sidebar
    +
    +
    + +## Validate + +After installing the plugin, you can begin validating your character models. When validating, results with issues display as red. In some cases, you can apply an automatic fix to checks that have issues. See [Checks and Troubleshooting Steps](#checks-and-troubleshooting) for details on each validation check. + +To use the validation tool on your asset: + +1. In the Target Armature field, select the **eyedropper**. +2. With the eyedropper active, select your character's **armature object**. This object is often named Joints or Armature. +3. Select **Run All Checks** to go through each individual check. Alternatively, you can click individual buttons to run a specific check. +4. Checks that detect issues display as red and an error output displays at the bottom of the tool. + + + + +This validation tool only checks for common validation issues. You should always continually test your character model, including testing your characters [in Studio](../../art/characters/testing/studio.md) and verifying on your own if your model meets Roblox's [character specifications](../../art/characters/specifications.md). + + +## Checks and troubleshooting + +Each button on the validation tool performs a different check against the expected [character specifications](../../art/characters/specifications.md). The following are the specific types of verification each check performs, as well as general troubleshooting steps to resolve discovered issues: + +
    +
    **Layers**
    +
    Checks for extra layers in the scene. Automatic fix attempts to remove extra layers.

    If the automatic fix fails, manually remove extra layers.

    + +

    **Transforms**
    +
    Checks that geometry location, rotation, and scale are frozen (`0`,`0`,`0`). Automatic fix button attempts to freeze the transforms. This may cause changes to your rig.

    If the automatic fix fails, manually freeze your geometry.

    + +

    **UV**
    +
    Checks if the body Geometry UVs are within `0`-`1`. You must resolve issues manually by setting your body object UVs within a `0`-`1` range.

    + +

    **Cage UV Modifications**
    +
    Checks if cage object UVs have incorrect modifications. Automatic fix attempts to resolve UV coordinates.

    If automatic fix fails, you may want to use a new template cage.

    + +

    **Asset Size**
    +
    Checks if the character total size and individual parts are within expected bounds. You must resolve issues manually by resizing your character model or individual parts.

    + +

    **Unused Data**
    +
    Checks for any unused data in the scene, such as orphan data, or unused materials. Automatic fix attempts to remove extra data.

    If automatic fix fails, manually remove unnecessary data and objects.

    + +

    **Keyframes**
    +
    Checks for any unnecessary keyframes. Keyframes related to facial expressions are expected and ignored. Automatic fix attempts to remove keyframes associated with non-face objects.

    If automatic fix fails, manually remove keyframe data from non-face objects. Do not delete keyframes that also contain facial data.

    + +

    **Attachment Points**
    +
    Checks that attachment points are parented to the armature and use the correct naming convention. Automatic fix attempts to parent any unexpected attachment points.

    + +

    **Joint Positions**
    +
    Checks for the following: +
    • Root and HumanoidRootNode bones exist
    • +
    • Root bone is at `0`,`0`,`0` world space
    • +
    • Bones with Left/Right naming conventions are on correct axes.
    Refer to the output messages to manually resolve joint position issues.

    + +

    **FACS Data**
    +
    Checks for the following FACs data: +
    • `Neutral Pose` exists as a mapped pose
    • +
    • Mapped Custom Properties under the Head_Geo exists
    • +
    • Property name and values correctly set
    • +
    • Corrective poses must include existing base poses
    • +
    • Corrective poses do not use more than 3 base poses Refer to the output messages to manually resolve FACS data issues.

    + +

    **Head Joint Names**
    +
    Checks for duplicate head bone names, including duplicates with Blender's duplicate affixes .001, .002, .003, and such. Refer to the output messages to manually resolve face joint names.

    + +

    **Intersection**
    +
    Checks for any intersection between character geometry and cage mesh geometry. The tool switches to Edit mode and highlights areas where potential intersections are detected.

    + +

    **Polygon Data**
    +
    Checks for common polygon issues:
      +
    • Meshes are watertight
    • +
    • Meshes are within polycount budgets
    • +
    • Meshes don't use N-Gons Meshes
    • +
    • Meshes are non-manifold
    • +
    • Meshes don't have vertex color information

    Refer to the output messages to manually resolve any polygon data issues.

    + +

    **Texture Format**
    +
    Checks that textures match texture requirements, such as resolution size. Users can also select an external image file. Refer to the output messages to manually resolve any texture related issues.
    +
    diff --git a/.cursor/rules/roblox/art/classic-clothing.md b/.cursor/rules/roblox/art/classic-clothing.md new file mode 100644 index 00000000..11120418 --- /dev/null +++ b/.cursor/rules/roblox/art/classic-clothing.md @@ -0,0 +1,152 @@ +--- +title: Classic clothing +description: Classic clothing are decals you can apply to a classic character model's surface. You can create classic clothing items on Roblox and upload them to the Marketplace. +--- + + +Current user-generated avatars on the Marketplace do not support 2D classic clothing. For information on creating modern 3D cosmetics, including rigid accessories and clothing items, see [Get started](../avatar). + + + + + + +
    + +
    + +Create and sell your first 2D classic clothing item. + +
    +
    + + + + +
    + +
    + +A high-level overview of avatar items on Roblox. + + +
    +
    +
    + +Classic clothing are the most basic type of avatar item available to purchase and sell on Roblox. With any image editor and web browser, you can create classic clothing items and sell them on the [Marketplace](https://www.roblox.com/catalog). + +To create classic clothing items: + +1. Decide on the [type of classic clothing](#types-of-classic-clothing) you'd like to create. +2. [Create](#creating-classic-clothing) an image for your asset using an image editor of your choice. +3. [Test](./test-classic-clothing.md) your creation in Studio to ensure it looks as intended. +4. [Upload](./upload-classic-clothing.md) the image file to the Marketplace through a web browser. + 1. Adding an item to the Marketplace requires a Robux [fee](../marketplace/marketplace-fees-and-commissions.md#classic-clothing). + 2. Upon successful moderation, you gain a copy of the asset in your inventory. + +## Types of classic clothing + +The three types of classic clothing items are **T-shirts**, **Shirts**, and **Pants**. Each has different design and format requirements. + +3 different examples of blocky characters with a different type of image displayed on its surface. + +### T-shirts + +T-shirts are a square image, such as 512x512 pixels. When properly configured, classic t-shirts display on the front torso of a blocky character. + +### Shirts and pants + +Classic shirts and pants are image assets that wrap around an avatar's body. Because classic shirts and pants have specific size requirements, download and modify the provided template files to begin creating these assets. + + +
    + +
    Shirt (torso and arms)
    + +
    +
    + +
    Pants (torso and legs)
    +
    +
    + + + +Table of sizes for each template part + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ShapePixel size (width x height)Clothing parts
    Large square128 × 128FRONT and BACK
    Tall rectangle64 × 128Sides of torso (R, L)
    Sides of arms and legs (L, B, R, F)
    Wide rectangle128 × 64UP and DOWN
    Small square64 × 64Top and bottom of arms and legs (U, D)
    +
    +
    + +## Creating classic clothing + +To begin creating classic clothing: + +1. If you are creating a classic shirt or pants, [download and unzip](../assets/accessories/classic-clothing/Classic-Clothing-Templates.zip) the following clothing templates to use as a canvas for your art. +2. Modify the image in an image editor of your choice. +3. Export the image as a `.png` or `.jpg` before [testing](./test-classic-clothing.md) or [uploading](upload-classic-clothing.md) to Roblox. + +When applying clothing to avatars in Roblox, some limits exist with the templates and may require some testing to get right, as shown in the following examples: + + +
    + +
    The shoe designs in this example are near the bottom of the leg regions (L, B, R, F) but don't extend too far up. This provides a distinct separation between the shoes and the bottom of the jeans.
    +
    +
    + +
    The shoe designs in this example extend too far up the leg regions (L, B, R, F) which make them appear as if they're part of the pants. The same issue may occur near other joints on the avatar's body.
    +
    +
    + + +After creating your classic clothing, [test](./test-classic-clothing.md) your creation in Roblox Studio before [uploading](./upload-classic-clothing.md) and selling your asset on the Marketplace. + diff --git a/.cursor/rules/roblox/art/emotes/export-settings.md b/.cursor/rules/roblox/art/emotes/export-settings.md new file mode 100644 index 00000000..d4f74aff --- /dev/null +++ b/.cursor/rules/roblox/art/emotes/export-settings.md @@ -0,0 +1,56 @@ +--- +title: Animation export settings +description: Use the appropriate export settings in Maya and Blender to generate Studio-ready .fbx files. +--- + +You can export animation data from a third-party software, such as Blender or Maya to use in Studio. Both `.fbx` and `.gLTF` formats support animation data. + +Typically, creators will use a third-party modeling tool to animate a character model. Once the animation is complete, you export both the model and the animation data into Roblox Studio. + +After exporting, you can [import and configure](./import.md) the animation data into Studio. + +## Before exporting + +When exporting characters with animation or FACS animation, ensure that your animation timeline **Start** and **End** include the entire range of your animations. + +Zoom-in of Blender animation track indicating a Start value of 0 and End value of 308. + +## Blender + +Blender allows you to export in `.fbx` or `.gltf` as well as other formats. If you are using `.fbx` export, familiarize yourself with [Blender's FBX scaling](../blender.md#adjust-scale-fbx) to ensure that you successfully import the model into Studio at the correct scale. + +1. In the topbar, click **File** > **Export** > **FBX (.fbx)**. The Blender file browser window displays. +2. Set **Path Mode** to **Copy** and enable the **Embed Textures** icon. +3. In the Include section, enable **Custom Properties**. +4. If your project doesn't already have `.01` scene unit scaling, set the **Transform** > **Apply Scalings** to `FBX Unit Scale`. For more details, see [Blender FBX scaling](../blender.md#adjust-scale-fbx). +5. Expand the Armature section and uncheck **Add Leaf Bones**. +6. Enable **Bake Animation**. +7. Expand Bake Animation and **uncheck NLA Strips**, **All Actions**, and **Force Start/End Keyframes**. + 1. Ensure your project animation timeline has the correct **Start** and **End** range of all your keyframes. +8. In Bake Animation, set **Simplify** to **0.0**. +9. Click the **Export FBX** button. Save the `.fbx` to the directory of your choice. + +Screenshot of Blender export settings + +## Maya + +For additional context on exporting animations from Maya, see the [Exporting Characters from Maya](../../art/characters/export-avatar-animations-from-maya.md) tutorial. + +To export a mesh in Maya as a `.fbx` file: + +1. In the topbar, click **File**. A pop-up menu displays. +2. Select **Export All**. The **Export All** window displays. +3. Near the bottom of the window, click the **Files of type** dropdown, then select **FBX export**. +4. On the right-hand side of the window, navigate to the **Options...** section. +5. In the **Geometry** section, enable **Smooth Mesh** and **Referenced Asset Content**. +6. In the **Animation** section, enable **Animation**. Avatar characters with [facial animation data](../../art/characters/facial-animation/index.md) require animation data. +7. Enable **Bake Animation**. +8. If you need to import textures as a `.png`, in the **Embed Media** section, enable **Embed Media**. +9. In the **Advanced Options** section, + - Navigate to **Units**, then enable **Automatic**. + - Navigate to **Axis Conversion**, then set the **Up Axis** property to **Y**. +10. Click the **Export All** button. + + Screenshot of Maya export settings for exports with animation. + +11. After exporting, use Studio's [3D importer](../../art/modeling/3d-importer.md) to import your model. See [Test characters in Studio](../../art/characters/testing/studio.md) for additional importing and testing information. diff --git a/.cursor/rules/roblox/art/emotes/import.md b/.cursor/rules/roblox/art/emotes/import.md new file mode 100644 index 00000000..e3697f22 --- /dev/null +++ b/.cursor/rules/roblox/art/emotes/import.md @@ -0,0 +1,93 @@ +--- +title: Import and configure animations +description: Use the 3D Importer to add third-party models to Studio before testing, using, or uploading the character model. +--- + +Use the following steps to import and configure the animation for publishing emotes: + +1. [Import](#import-into-animation-editor) the animation into Studio. +2. [Convert](#convert-to-curveanimation) the animation to a `CurveAnimation`. +3. [Generate an asset ID](#generate-asset-id) from your animation data. +4. [Create an Animation object](#create-an-animation-object) using the asset ID +5. [Upload](#upload-and-publish-an-emote) the animation as an avatar emote. + +## Import into Animation Editor + +If your animation data is saved to a `.fbx` file and your animation meets the emote [technical specifications](./specifications.md), use the **Animation Editor** to import your animation. If your animation is already in Studio, skip this step. +
    +To import your animation in Studio: + +1. If you don't already have a rigged R15 character in your workspace, add one by selecting **Avatar** > **Character**. +2. Select **Avatar** > **Animation** to open the **Animation Editor**. +3. With editor open, select the rigged character in the 3D viewport. +4. In the **Animation Editor**, select **⋯** > **Import** > **From FBX Animation** and select your `.fbx` file. + + + +5. Verify your animation populates and correctly animates on the target rig. +6. Follow steps to [convert to CurveAnimation](#convert-to-curveanimation). + +## Convert to CurveAnimation + +To generate an asset ID for your animation, use the **Animation Editor** to convert the animation to a `CurveAnimation` and save the animation to Roblox to generate an asset ID. + + +The animation data for emotes must be a `CurveAnimation` clip. + + +To convert an existing keyframe sequence to a `CurveAnimation`: + +1. In the **Animation Editor**, select the **Curve Editor** button next to the timeline. A confirmation prompt displays. + + + +2. Press **Confirm** to convert your keyframes into a `CurveAnimation` clip. + + + +## Generate Asset ID + +To create an asset ID of the `CurveAnimation`: + +1. In the **Animation Editor**, select the **⋯** > **Publish to Roblox**. + + + +2. Add a title and description and save the animation. +3. After processing, you should see a successful upload and an asset ID to copy. + + + +## Create an Animation object + +To submit an emote to the Marketplace, you must submit an `Class.Animation` object with the `AnimationId` property set to the asset ID of your `CurveAnimation`. + + +
    + +
    `Animation` object in the Explorer.
    + +
    +
    + +
    `AnimationId` property in the Properties window.
    +
    +
    + +To create an `Class.Animation` object you can publish as an emote: + +1. In the **Explorer**, add a new `Animation` object. +2. In the **Properties** window, add the asset ID of the emote animation. + +## Upload and publish an emote + +When you have an `Class.Animation` with your emote animation asset ID set, you can upload the emote to the Marketplace. This process requires an [upload fee](../../marketplace/marketplace-fees-and-commissions.md#upload-fees). + +1. Right-click the `Animation` object and select **Save to Roblox**. +2. In the upload window, set the following fields: + 1. Add a title and description. + 2. Set the **Content Type** to **Avatar Item**. + 3. Set the **Asset Category** to **Emotes**. +3. Press Submit to upload your asset for moderation. + +For more information on the upload and publishing process, see [publishing Marketplace items](../../marketplace/publish-to-marketplace.md#upload-an-asset). diff --git a/.cursor/rules/roblox/art/emotes/index.md b/.cursor/rules/roblox/art/emotes/index.md new file mode 100644 index 00000000..e2294dac --- /dev/null +++ b/.cursor/rules/roblox/art/emotes/index.md @@ -0,0 +1,57 @@ +--- +title: Emotes +description: All Roblox users are represented by an avatar character which can be customized with body parts, accessories, and clothes from the Marketplace or within experiences. +--- + +**Emotes** are short animations that an avatar performs, making it easier to communicate and celebrate with others, enhancing the experience to feel more social and more lively. + +Creators sell their own emotes, such as gestures, reactions, dances, and more, by publishing their animation to sell on the Marketplace or within experiences. + + +Developers can access and modify emotes within their own experiences. For more information, see [character emotes](../../characters/emotes.md). + + +## Components of an emote + +Emotes are made up of an `Class.Animation` object with the unique `Class.Animation.AnimationId` property set to the asset ID of your animation sequence. + + +
    + +
    `Animation` object in the Explorer.
    + +
    +
    + +
    `AnimationId` property in the Properties window.
    +
    +
    + +Emotes must meet [technical specifications](./specifications.md) as well as [Marketplace](../../marketplace/marketplace-policy.md) and [Community](https://en.help.roblox.com/hc/en-us/articles/203313410-Roblox-Community-Standards) policies. + +## Creation process + +There are several ways to create an animation both in Studio or using a third-party tool. See the following table for common workflows and various resources to create your own. + + + + + + + + + + + + + + + + + + + + +
    Animation workflowDescription
    Animation CaptureUse the [Animation Capture (Body)](../../animation/capture.md#body) to convert a video of your emote into a keyframe sequence.
    Manual animation with Animation EditorUse the [Animation Editor](../../animation/editor.md) to manually animate a character rig. For an in-depth tutorial on creating a character animation, see [Create character animations](../../tutorials/use-case-tutorials/animation/create-an-animation.md).
    Third-party plug-insUse a third-party animation plugin, such as [Moon Animator](https://create.roblox.com/store/asset/4725618216/Moon-Animator-2), to generate your animation.
    + +To convert your keyframe sequence into an animation and upload to the Marketplace, see [import and configure emotes](../emotes/import.md#configure). diff --git a/.cursor/rules/roblox/art/emotes/specifications.md b/.cursor/rules/roblox/art/emotes/specifications.md new file mode 100644 index 00000000..d5dc3611 --- /dev/null +++ b/.cursor/rules/roblox/art/emotes/specifications.md @@ -0,0 +1,31 @@ +--- +title: Emotes specifications +description: Character specification lists the specific technical requirements for custom characters created outside of Studio. +--- + +Emotes are made up of an `Class.Animation` object with the `Class.Animation.AnimationId` property set to the asset ID of your animation sequence. + + +
    + +
    `Animation` object in the Explorer.
    + +
    +
    + +
    `AnimationId` property in the Properties window.
    +
    +
    + +Only the `Class.Animation` object is required to upload an emote to the Marketplace. Animations do not require meshes, textures, or other 3D art components. + +## Animation requirements + +Emotes must also meet the following requirements or may fail validation: + +- Emotes must be less than 10 seconds. +- The joint root of the character can not move too far from its starting position. +- Movement speed can't exceed a certain threshold to prevent teleportation abuse (measured from a frame-by-frame basis). +- Animation data must reference an R15 rig. +- Animation must be sourced from a `CurveAnimation`. For information on converting animation data, see [import and configure](./import.md#generate-asset-id). +- Animations must meet [Marketplace](../../marketplace/marketplace-policy.md) and [Community](https://en.help.roblox.com/hc/en-us/articles/203313410-Roblox-Community-Standards) policies. diff --git a/.cursor/rules/roblox/art/index.md b/.cursor/rules/roblox/art/index.md new file mode 100644 index 00000000..e0a0147c --- /dev/null +++ b/.cursor/rules/roblox/art/index.md @@ -0,0 +1,442 @@ +--- +title: 3D art in Roblox +description: An overview of 3D art tools, resources, and workflows for creators of all experience levels. +hideInPageNavigation: true +--- + +3D art in Roblox refers to the creation and integration of models, environments, effects, sounds, and more to create an engaging and immersive experience. 3D artists bring the world, objects, and characters to life with a variety of tools and techniques using Roblox Studio and external applications. + +No matter your creative background, Roblox provides a variety of tools, guides, tutorials, and reference files to help inspire and level up your 3D art creation in your experiences and beyond. + +
    + +

    Quick reference

    +Whether you're just getting started with Roblox or need a quick refresher, use the following popular resources to get up to speed. + + + + + +
    + +
    + 3D art in Roblox Studio + Get up to speed with the many powerful tools and functions in Roblox Studio! + Studio for artists +
    +
    + + + + +
    + +
    + Use third-party applications + Understand how to use incorporate your creations from off-platform into Studio. + Overview + General modeling requirements + Downloadable references + +
    +
    + + + + +
    + +
    + Create avatar items + Create accessories, clothing, and bodies that you can sell on the Marketplace. + Overview + Marketplace overview + Fees and commissions + +
    +
    +
    + +

    + +

    Tutorials

    + +To dive deeper, follow along with guided curriculum +that teaches you the skills you need to create and monetize your experiences. + + + + + + +
    + +
    + Environmental art + Environmental art teaches you how to recreate a high-quality environment for a first-person laser tag experience. + +
    +
    + + + + +
    + +
    + Avatar item tutorials + Check out our tutorials on creating your own Avatar items ready for the Marketplace. + Create accessories + Create clothes + Create characters from templates +
    +
    + +
    + +

    Showcases

    + +Check out the following showcases made by Roblox and the community. Each of these highlight amazing creativity and technical accomplishments by talented creators. + + + + + + +
    + +
    + Roblox creations + Check out various experiences created by Roblox. Click to see documentation, downloadable resources, and links to try out the experiences yourself! + Mystery of Duvall Drive + Beyond the Dark + Modern City template +
    +
    + + + + +
    + +
    + Community creations + Check out these amazing showcase experiences created members of the community! + Toyokawa Inaru Shrine by @nezko + Hotel Resort by @ChooShu_Cho + Lab by @thisfall +
    +
    +
    + +

    From the staff

    + +The following articles are from the staff, covering a broad array of topics that can help you on your creative journey both within Studio and beyond. + + + + + + +Create buttes and mesas with Studio terrain + +Create beautiful and striking landscapes using Studio's powerful terrain and material tools. + + + + + + + + + +
    + +
    +Custom skyboxes 101 + +Apply your own custom skyboxes to your experience to add some flair and elevate your world. + + + +
    +
    + + + + +Use alpha masks to customize colors + +Save time and optimize for performance by using alpha masks in your PBR textures. + + + + + + + + + +Create perfect audio loops + +Learn a quick technique to make seamless loops in your audio files. Great for ambience, music, sound effects, and more. + + + + + + + + + +Use radial symmetry with Zbrush + +Radial symmetry is an extremely versatile sculpting technique applicable in many third-party tools. This article is a primer on radial symmetry in Zbrush. + + + + + + + + + +Looking for more? + +Stay up to date with new articles written by our staff on the [DevForum](https://devforum.roblox.com/c/resources/roblox-staff/278). Topics can range from third-party tools, behind-the-scenes, tutorials, and more. + + + + +
    + +
    + +

    Additional resources

    + +The following is a list of common 3D art resources ordered by subject, as well as other Studio and Avatar documentation. You can also use the side navigation bar, search bar, or assistant to find specific articles and topics. + +Get started and tutorials + + + + +Topic overviews + +Get started in Studio +Get started with third-party software +Get started with avatar items +Create your first experience +Creator Store overview +Marketplace overview + + + + + +3D art tutorials + +Core curriculum +Environmental art +Gameplay scripting +
    + +

    See Engine tutorials for additional 3D Art tutorials.

    + +
    +
    + + + + +Avatar tutorials + +Creating accessories +Create clothing +Create avatar characters from templates +
    + +

    See Avatar tutorials for additional avatar tutorials.

    + +
    +
    + +
    + +Specifications and references + + + + + + +Technical specs + +Blender and Maya .FBX export settings +General mesh specifications +Accessory specifications +Clothing specifications +Avatar character specifications +Marketplace policy + + + + + + +Reference files +Example models +Reference avatar items +Add-ons and tools + + + + + + +Texturing + +Texturing requirements +PBR textures +Create customizable colors with alpha masks (staff) + + + + + +Guides and workflows + + + + + +Studio tools + +3D Importer + +Accessory Fitting Tool + +Animation Editor + +Animation Capture + +Avatar Setup + +Material Generator + +Terrain Editor + +Texture Generator + +Toolbox and Asset Manager + +

    See Studio overview for more.

    +
    +
    + + + +Environment, lighting, and effects + +Environmental art curriculum +Assemble modular environments +Light with props +Add 3D audio +Add 2D audio +Add text-to-speech +Enhance outdoor environments with realistic lighting +Custom skyboxes 101 (Staff) + +
    + +

    See Lighting and effects for additional environment resources.

    + +
    +
    + + + +Avatar item creation + +Avatar overview +Accessories overview +Clothing overview +Character bodies overview +Marketplace overview + + + + + + +Animation + +Animation Capture +Animation Editor +Export animations from Maya +Inverse kinematics +
    + +

    See Animation for additional resources.

    +
    +
    + + + +Facial animation and live heads + +Basic head creation +Create face accessories +FACS pose references + + + + + + + +Rigging and skinning + +Rigging and skinning overview +Avatar rig requirements +Rig basic meshes +Rig facial bones +Skin facial bones +Auto skin transfer + + + + + + + +Publish to Creator Store and Marketplace + +Creator Store overview +Marketplace overview +Marketplace policy +Publish avatar items to Marketplace +Marketplace fees and commissions + + + +
    diff --git a/.cursor/rules/roblox/art/modeling/3d-importer.md b/.cursor/rules/roblox/art/modeling/3d-importer.md new file mode 100644 index 00000000..0747c59a --- /dev/null +++ b/.cursor/rules/roblox/art/modeling/3d-importer.md @@ -0,0 +1,398 @@ +--- +title: 3D Importer +description: 3D Importer imports third-party .fbx, .gltf, and .obj 3D model assets into Studio. +--- + +The 3D Importer allows you to import `.fbx`, `.gltf`, or `.obj` 3D models into Studio as a custom `Class.Model`. This includes meshes with PBR textures, meshes with rigging, skinning, and animation data, and meshes designed as avatar items. + + + + + +
    + +
    + +Import general 3D custom models into Studio. + + +
    +
    + + + + +
    + +
    + +Use the 3D importer to import assets with avatar item components. + +
    +
    +
    + +To import a 3D object: + +1. From Studio's **File** menu, select **Import 3D**. +2. In the file browser, select the supported `.fbx`, `.gltf` or `.obj` files you intend to import. + 1. If selecting one object, the [import preview](#import-preview) window screen appears for that object. + 2. If selecting multiple objects, the files are added to the [import queue](#import-queue). +3. Configure your import settings and verify any [warning or error messages](#warnings-and-errors). +4. Click **Import**. + + +To directly import 3D assets using HTTP requests, see the [Open Cloud usage guide for assets](../../cloud/guides/usage-assets.md). + + +## Supported file types + +Before importing a 3D object, ensure that the `.fbx`, `.gltf` or `.obj` meets Studio's [mesh requirements](../../art/characters/specifications.md) to reduce errors or unexpected behavior. + + + + + + + + + + + + + + + + + + + + + + + +
    **File type****Studio compatibility****Best for**
    OBJ (`.obj`)— Basic single mesh objectsSimple mesh geometry use-cases.
    FBX (`.fbx`)— Multiple mesh objects and hierarchies
    — Textures, including basic and [PBR textures](../../art/modeling/surface-appearance.md).
    — Cage mesh objects
    — [Rigging and armature data](../../art/modeling/rigging.md)
    — Additional components for [avatar](../../avatar/index.md) items
    — Animation data
    — [Vertex colors](../blender.md#vertex-painting)
    Any type of 3D import, including but not limited to [game assets](../../assets.md) or [avatar items](../../avatar).
    gLTF (`.gltf`)— Multiple mesh objects and hierarchies
    — Textures, including basic and [PBR textures](../../art/modeling/surface-appearance.md).
    — Cage mesh objects
    — [Rigging and armature data](../../art/modeling/rigging.md)
    — Additional components for [avatar](../../avatar/index.md) items
    — Animation data
    — [Vertex colors](../blender.md#vertex-painting)
    Any type of 3D import, including but not limited to [game assets](../../assets.md) or [avatar items](../../avatar).
    + +## Import queue + +If you selected multiple files with the 3D Importer, you can use the import queue to bulk manage your various imports. + +The 3D importer interface, showing a preview of the mesh in the top left, a list of 3D objects on the bottom left, and a list of toggle-able properties on the right side. + + + + + The **top bar** allows you to add new files, clear the queue, search and filter, and import all enabled models. + + + + + + The **import queue** lists all added files, with quick access dropdowns to change creator, presets, and file paths. + + + +### Add files to queue + +To open a file browser and add additional files to the import queue, you can: + +- Click the **Add file** button in the top bar of the import queue window. +- From Studio's **File** menu, select **Import 3D**. + +### Remove files from queue + +To remove all files from the queue, click the **Clear queue** button with the broom icon. To remove an individual file from the queue, right-click an item in the queue and select **Delete from queue**. + +### Apply preset settings + +Use the **Import Preset** column to select a preset configuration to apply to your model. For more information, see [Presets](#presets). + +You can also apply the settings of one item to all items by right-clicking an item with the desired settings and selecting **Apply settings to all**. + +### Access individual preview and settings + +Click the individual **Asset** name of an unimported model to access the import preview for that item. Use the import preview to view and check your model, as well as set any individual [import settings](#import-settings). + +### Import files + +Ensure that each item you want to import has a checkbox enabled in the first column. By default, all items are selected if they are importable. + +Press the **Import** button to start the import process. + +## Import preview + +The import preview window appears if you are importing a single file, or if you selected an individual item from the import queue. This preview window provides individual controls for the various objects in your model. + +The preview window is divided into multiple sections: + +The 3D importer interface, showing a preview of the mesh in the top left, a list of 3D objects on the bottom left, and a list of toggle-able properties on the right side. + + + + + The **file path** of your model file. Click **Browse** to edit. + + + + + + The **preset** applied to your import. Use the dropdown to select multiple presets, or the hamburger menu to set a new preset. + + + + + + The **3D preview** of your model. Use mouse buttons and top-right icons for various camera options and views. + + + + + + The **object hierarchy** of the imported object. Includes mesh objects and other supported components. + + + + + + The **import settings** for your import. For a complete list of settings, see [Import settings](#import-settings). + + + +### Import settings + +Depending on the object selected in the hierarchy panel, the inspector panel displays the following groups of settings: + +- **File General**: Affects the entire imported file. +- **Rig General**: Affects the selected mesh object if rigging data is present. +- **File Transform**: Affects the transform properties of the imported file. +- **File Geometry**: Affects the geometry properties of the imported file. +- **Object General**: Affects the selected child object. +- **Object Geometry**: Affects the geometry of the selected child object. + +#### File general + +The 3D Importer provides the following settings for all meshes: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    SettingDescription
    NameSets the name of the imported asset as it will appear in your project.
    Import Only As ModelIf enabled, the 3D Importer imports the model as a single asset even if the model contains multiple children. By default, this is **enabled**.

    If disabled, the 3D Importer imports the model and all descendants, such as the multiple meshes, as individual assets.
    Add Model To InventoryIf enabled, the 3D Importer adds the model to your **Toolbox** and **Asset Manager** inventory as a new asset. By default, this is **enabled**.

    If disabled, the 3D Importer does not add the asset to your inventory.
    Insert In WorkspaceIf enabled, the 3D Importer inserts the model into the `Class.Workspace` as well as your **Toolbox** and **Asset Manager** inventory. If importing from a saved or published experience, this setting also grants permission to the experience to use the restricted asset. By default, this is **enabled**.

    If disabled, this setting only adds the model to your inventory and does **not** grant the experience permission to use the asset.
    Insert Using Scene PositionIf enabled, the 3D Importer uses the current scene position when inserting the model into the workspace. By default, this is **disabled**.
    Set Pivot to Scene OriginIf enabled, the 3D Importer sets the pivot point of the entire model to the scene origin. By default, this is **enabled**.
    AnchoredIf enabled, the 3D Importer sets the `Class.BasePart.Anchored|Anchored` property to `true` on all the imported `Class.MeshPart|MeshParts`. This is disabled for meshes with rig data / avatars. By default, this is **disabled**.
    Uses CageIf enabled, the 3D Importer finds cage meshes in the model and converts them to `WrapInstance` objects, such as `Class.WrapLayer` or `Class.WrapTarget`. If disabled, the Importer treats them as regular meshes. If the 3D Importer initially detects cage meshes in the model, this is **enabled** by default.
    + +#### Rig general + +The 3D Importer provides the following settings for meshes with rigging data, typically character bodies or clothing accessories: + + + + + + + + + + + + + + + + + + + + + + +
    SettingDescription
    Rig TypeSets the type of rig the mesh should be associated with. The options are:
    - **R15**
    - **Custom**
    - **No Rig**

    By default, the 3D importer attempts to select the most appropriate setting based on the detected rigging and skinning data of the mesh.
    Validate UGC BodyAfter importing, Studio opens the assets in the [Avatar Setup](../../avatar-setup/index.md) tool, allowing you to quickly begin testing and uploading avatar assets to the Marketplace.
    Rig ScaleIf Rig Type is set to R15, the importer provides additional options to specify [body type scaling](../../art/characters/specifications.md#body-scale). The options are:
    - **Default**
    - **Rthro**
    - **Rthro Narrow**
    + +#### File transform + +The 3D Importer provides the following settings for all meshes: + + + + + + + + + + + + + + + + + + +
    SettingDescription
    World ForwardSets the forward facing axis of the object. By default, this is set to **Front**.
    World UpSets the upward facing axis of the object. By default, this is set to **Top**.
    + +#### File geometry + +File geometry includes information on the file dimensions and polycount of the entire model. You can edit the following settings for all meshes: + + + + + + + + + + + + + + + + + + + + + + +
    SettingDescription
    Scale UnitSets what units the file was modeled in so that it's sized appropriately when imported. By default, this is set to **Studs**.
    Merge MeshesIf enabled, merges all MeshParts in the model into a single MeshPart and creates one MeshPart rather than a Model. By default, this is **disabled**.
    Invert Negative FacesInverts the orientation of negative faces in the mesh. By default, this is **disabled**.
    + +#### Object general + +When selecting a specific child object of your mesh, the 3D Importer populates Object General settings. You can edit the following settings for the selected child objects: + + + + + + + + + + + + + + + + + + + + + + +
    SettingDescription
    NameSets the name of the selected child object within the model.
    AnchoredIf enabled, sets the `Class.BasePart.Anchored|Anchored` property to `true` on the selected child object. By default, this is **disabled**.
    Use Imported PivotIf enabled, imports the object using the pivot point set within the child object. By default, this is **enabled**.
    + +#### Object geometry + +Object Geometry includes information on the dimensions and polycount of the selected child object of the model. You can edit the following settings for the selected child objects: + + + + + + + + + + + + + + + + + + +
    SettingDescription
    Make Double SidedIf disabled, sets the vertices as one-sided. One-sided vertices means that you can see through them from one side.

    If enabled, sets the vertices as double-sided. Vertices that are double sided visually render on both sides. Double-sided is more performance intensive.

    By default, this is **disabled**.
    Ignore Vertex ColorsIf enabled, ignores the vertex color data in the child object. By default, this is **disabled**.
    + +## Presets + +You can save presets of various import settings to quickly apply later within the [import preview](#import-preview) or [import queue](#import-queue). + +By default, you can select between two presets: + +- **Studio Default**: The default import behavior. +- **Last Imported**: Uses the settings applied to the most recent import. + +You can use the **⋯** menu next to the Presets dropdown for additional options: + +- **Reset all**: Removes any changes to the current configuration, putting settings back in the default state for the current preset. +- **Save selection**: Allows you to save any new changes to the importer settings into the currently selected preset. +- **Save as new**: Sets the current settings as a new preset. A dialogue box displays allowing you to set a name. +- **Set as default**: Sets the current preset as the default for all imports moving forward. +- **Rename**: Renames the current preset. +- **Delete**: Deletes the current preset. Resets to `Studio Default` preset. + +## Warnings and errors + + +
    + +If Studio detects any issues with your model, a small indicator displays in the hierarchy panel or the settings panel. + +If you see a warning icon in the hierarchy, expand the hierarchy until you reach the specific child object to see more information about the issue. Warning and error messages display in the settings panel or as a tooltip. + + +
    + A warning message in orange stating an error about cages mismatching. +
    Warning and error messages display in the appropriate section in the inspector panel.
    +
    +
    + An error message in red with a pop-up message about missing textures. +
    Some errors display a tooltip when hovering over the error icon.
    +
    +
    diff --git a/.cursor/rules/roblox/art/modeling/assign-textures.md b/.cursor/rules/roblox/art/modeling/assign-textures.md new file mode 100644 index 00000000..dbf34933 --- /dev/null +++ b/.cursor/rules/roblox/art/modeling/assign-textures.md @@ -0,0 +1,70 @@ +--- +title: Blender and Maya texture settings +description: Learn to assign basic or PBR textures in Blender or Maya to natively import into Studio. +--- + +This guide covers the process to assign texture images in Blender or Maya to your 3D model so that they import seamlessly into Studio. The import process supports both basic textures and realistic PBR textures, as long as they meet Roblox's [texture specifications](./texture-specifications.md). + + +The following information is **specific for applying makeup textures generic meshes**. For more information on reassigning textures for makeup assets, see [Reassign textures in Blender and Maya](../../makeup/reassign-textures.md). + + +## Blender + +To assign Roblox-supported textures to your 3D model in Blender: + +1. In the Outliner, select your mesh object. +2. In the Properties panel, navigate to the **Materials tab**. +3. Verify that your object has a Material assigned with the Surface set to `Principled BSDF`. + +4. If no material is assigned, click the + symbol to add a material. + 1. Click the New button. A new `Principled BSDF` material populates. + +5. Navigate to the **Shading tab**. +6. With your mesh object selected, check the node graph. There may already be texture image nodes connected to the `Principled BSDF` node. +7. In the node graph area, add a texture image node with right-click > **Add** > **Texture** > **Image Texture**. + +8. In the new Image Texture node, click Open to open a file browser and insert your custom texture. + + + Alternatively to steps 7-8, you can **drag and drop** texture file from another window into the graph editor space. + +9. After adding image texture nodes and assigning the appropriate files, drag the `Image Texture` sockets to the appropriate sockets in the `Principled BSDF` node: + + +- **Basic texture** or **PBR color/albedo**: connect `Color` to `Base Color`. +- **Metallic texture**: connect `Color` to `Metallic`. +- **Roughness texture**: connect `Color` to `Roughness`. +- **Normal texture** images need to be added to a NormalMap node: + 1. Right-click in the graph-editor area and select **Add** > **Vector** > **Normal Map**. + 2. Connect Image Texture `Color` to NormalMap's `Color`. + 3. Connect NormalMap's `Normal` to PrincipledBSDF's `Normal` socket. + + +After replacing your PBR textures, [export the entire model](../../art/modeling/export-requirements.md#blender) and follow instructions to [import into Studio](./3d-importer.md). + + +## Maya + +To assign Roblox-supported textures to your 3D model in Maya: + +1. In the Status Line near the top of the default layout, click on the Hypershade icon. + +2. In the Create Window panel on the Hypershade popup, navigate to **Maya** > **Surface** and click **Standard Surface**. A surface node appears in the node editor. + +3. If adding a normal map, navigate to **Maya** > **Utilities** and click **Bump 2d**. A node required for normal maps appears in the node editor. + + + +4. Drag and drop your PBR textures to the graph network. + + + + 1. If adding a normal map, select the Bump 2d node, and change to Tangent Space Normals. + +5. Select your model and navigate to your material you intend to assign. Right-click and hold over the material and select **Assign Material to Selection**. + + + +After replacing your PBR textures, [export the model](../../art/modeling/export-requirements.md#maya) and follow instructions to [import into Studio](./3d-importer.md). + diff --git a/.cursor/rules/roblox/art/modeling/calisthenics-tool.md b/.cursor/rules/roblox/art/modeling/calisthenics-tool.md new file mode 100644 index 00000000..f2fce85a --- /dev/null +++ b/.cursor/rules/roblox/art/modeling/calisthenics-tool.md @@ -0,0 +1,142 @@ +--- +title: Calisthenics Tool +description: Calisthenics Tool is a Blender plugin that you can use to verify skinning quality of an asset. +--- + +The **Calisthenics Tool** is a supplemental [Blender](https://www.blender.org/) add-on that allows you to quickly test your asset through a set of animation cycles to verify your skinning data. At any point during the animation testing, you can pause and use Blender's skinning Tools, such as [Weight Painting brushes](https://docs.blender.org/manual/en/latest/sculpt_paint/weight_paint/introduction.html), to resolve any skinning imperfections. + +Skinning your clothing and characters is a critical and often time-intensive process to create high quality assets that move and fit with different character bodies. Similar to the [Layered Clothing Validation Tool](../../art/accessories/validation-tool.md), the Calisthenics Tool can save you time when testing your character models after rigging and skinning. + + +The Calisthenics Tool doesn't provide complete verification of all potential skinning issues. You must also ensure that your custom models meet Studio's [avatar character specifications](../../art/characters/specifications.md) and any applicable [layered clothing specifications](../../art/accessories/specifications.md) for the best results in your experience. + + + +
    + +
    Walking Animation
    +
    +
    + +
    Running Animation
    +
    +
    + +
    Generic Movements
    +
    +
    + +## Installation + + +The Calisthenics Tool plugin is designed for [Blender 3.0+](https://www.blender.org/download/). You can download and modify the tool for any use. + + +To install the Calisthenics Tool in Blender: + +1. Download the [CalisthenicsTool.zip](../../assets/modeling/skinned-meshes/calisthenic-tool/CalisthenicsTool.zip) and save the `.zip` file locally. +2. In Blender, navigate to **Edit** > **Preferences**. + + +3. In the left sidebar of the **Preferences** window, navigate to the **Add-Ons** section. +4. Click the **Install…** button. A file browser displays. +5. Select the `.zip` and click **Install Add-On**. +6. Using the search bar, search for "Calisthenics Tool" and select the add-on. +7. Enable the add-on by checking the box next to the add-on name. + + + +8. Close the Preferences window. You can now access the Calisthenics Tool by expanding the tool sidebar in the Viewport. + + +
    + +
    Use the arrow on the side of the Viewport to open the sidebar.
    +
    +
    + +
    Access the Calisthenics Tool by selecting the tab in the sidebar tool menu.
    +
    +
    + +## Use the Calisthenics Tool + +After installation, you can use the Calisthenics Tool whenever you want to test an R15 character rig with skinning data. With the Calisthenics Tool, you can check how a character would move with generic animations, as well as attach rigid reference accessories to verify attachment during these movements. The tool also includes an option to automatically export your character, removing reference animation and accessory data. + +You can try out the Calisthenics Tool using an [example character model](../../assets/modeling/skinned-meshes/calisthenic-tool/Fish-Character-No-FACS.fbx). + + +For demonstration purposes, this reference model doesn't contain FACS data. If you require a reference with facial animation, you can download the same model with FACS data from our [reference models](../../art/characters/specifications.md#reference-files). + + +### Test animations + +When testing your character model, first set the armature in the Calisthenics Tool then select one of the reference animations. It is important to visually verify your skinning quality using various movements and angles to ensure the best results for your model. + + +If you encounter any errors or warnings when setting armature or playing animations, verify that your model uses an appropriate bone hierarchy and naming convention outlined in Roblox's [custom mesh requirements](../../art/characters/specifications.md). + + +To test animations: + +1. Open a Blender project with an existing R15 character model, or import an appropriate character model `.fbx` using **File** > **Import** > **FBX (.fbx)**. + +2. For easier visualization, hide non-rendered mesh objects, such as armature, cages, and attachments to better preview the reference animations. + + + +3. Set which rig you want to test a reference animation on: + 1. In the add-on's **Armature** field, select the Eyedropper. + 2. In the Outliner, select the **Armature** object that contains your character's rig data. +4. Click on an animation cycle to preview, such as **Walk**, **Run**, **Move** or **Idle**. +5. Press **Stop Animation** to clear animation data. + + +6. If you notice any unexpected skinning deformations, pause on the frame and switch to **Weight Paint mode** or use Blender's other skinning tools to resolve. See [Skin a humanoid model](../../art/modeling/skin-a-humanoid-model.md) for additional instruction. + + +### Test accessory attachments + +You can add reference attachments to your character model using the **Attach Test Accessory** buttons. These test accessories help preview how rigid accessories attach to your character and how they can move with your model. The tool includes two sets of rigid accessories to apply to your character. + + +
    + +
    **Normal Size** - Loads normal accessory references.
    +
    +
    + +
    **Slender Size** - Loads slender accessory references.
    +
    +
    + +To test accessories: + +1. Use the following **Attach Test Accessory** buttons to add or remove sample accessories to your character's attachment points: + - **Normal Size**: Adds normal scale test accessories. + - **Slender Size**: Adds slender scale test accessories. + - **Detach Test Accessories**: Removes any test accessories from your character. +2. If an accessory is not attaching at an expected location, reposition the associated **Attachment object** in your character rig. + +### Export models + +When you are ready to export your model, you can export your character directly through the Calisthenics Tool. The tool automatically clears any of the test data and applies appropriate export settings. + + +Using this tool to export models with [facial animations](../../art/characters/facial-animation/index.md) may result in unexpected behavior because the stored FACS data can conflict with the tool's reference animations. + + +To export from the Calisthenics Tool: + +1. In the **Export Path** field, set the export directory by clicking the folder icon and browsing to the appropriate file directory. + + +2. Click the **Export Model** button. The character model `.fbx` populates in the designated folder as `Character_Model_Export.fbx`. + + +If you are manually exporting your model with Blender's `.fbx` importer instead of the Calisthenics Tool, ensure the following before export: +- Detach the Calisthenics Tool's test accessories. +- Use the **Stop Animation** button to clear test animations from the timeline. +- Return the model to the default pose with no additional pose data. +- Verify your settings follow Roblox's [Blender export settings](../../art/modeling/export-requirements.md). + diff --git a/.cursor/rules/roblox/art/modeling/export-requirements.md b/.cursor/rules/roblox/art/modeling/export-requirements.md new file mode 100644 index 00000000..eb49d057 --- /dev/null +++ b/.cursor/rules/roblox/art/modeling/export-requirements.md @@ -0,0 +1,62 @@ +--- +title: Export settings +description: Use the appropriate export settings in Maya and Blender to generate Studio-ready .fbx files. +--- + +Export your mesh or model as a `.fbx` to take advantage of all of Studio's 3D import features. When rigging or skinning a model, a `.fbx` export contains both the rig and influence data you need to later [import](../../parts/meshes.md#import-meshes) into Studio. + +Check that your model meets Roblox's [modeling specifications](../../art/modeling/specifications.md) before exporting to ensure Studio compatibility. Specific types of assets, like characters and accessories, have additional specifications: + + +If creating other types of 3D models: +
      +
    • For rigid accessories, see [accessory specifications](../../art/accessories/specifications.md) and [accessory export settings](../accessories/export-settings.md).

    • +
    • For layered accessories, see [layered accessory specifications](../accessories/clothing-specifications.md) and [layered export settings](../accessories/clothing-export-settings.md).

    • +
    • For avatar characters, see [avatar specifications](../../art/characters/specifications.md) and [avatar export settings](../characters/export-settings.md).
    • +
    +
    + +## Blender + +Before exporting a mesh from Blender, make sure to set the Scene Unit Length to **Centimeters** and, if applicable, set the Unit Scale to **.01** to ensure similar `.fbx` scaling within Studio. + +To export the `.fbx` file in Blender: + +1. In the topbar, click **File**. A pop-up menu displays. +2. Select **Export**, then **FBX (.fbx)**. The **Blender File View** window displays. +3. On the right-hand side, change the **Path Mode** property to **Copy**, then toggle the **Embed Textures** button. + + Blender export sidebar showing Path Mode set to Copy and the Embed Textures button enabled. + +4. If your project doesn't already have .01 scene unit scaling, set the **Transform** > **Scale** to `.01`. + + + +5. Under the **Armature** section, disable **Add Leaf Bones**. + + Blender export sidebar showing Transform Scale set to .01 + +6. Unless exporting content with animation keyframes, such as a walk cycle or a character with [facial animation data](../../art/characters/facial-animation/index.md), disable **Bake Animation**. + + Blender export sidebar showing Add Leaf Bones as unchecked
    + +7. Click the **Export FBX** button. + +## Maya + +To export a mesh in Maya as a `.fbx` file: + +1. In the topbar, click **File**. A pop-up menu displays. +2. Select **Export All**. The **Export All** window displays. +3. Near the bottom of the window, click the **Files of type** dropdown, then select **FBX export**. +4. On the right-hand side of the window, navigate to the **Options...** section. +5. In the **Geometry** section, enable **Smooth Mesh** and **Referenced Asset Content**. +6. In the **Animation** section, disable **Animation**, unless you need to import an animation to Studio. Some avatar assets require animation. + 1. If you are exporting animation, enable **Bake Animation**. +7. If you need to import textures as a `.png`, in the **Embed Media** section, enable **Embed Media**. +8. In the **Advanced Options** section, + - Navigate to **Units**, then enable **Automatic**. + - Navigate to **Axis Conversion**, then set the **Up Axis** property to **Y**. +9. Click the **Export All** button. + + Maya export sidebar showing Bake Animation as unchecked diff --git a/.cursor/rules/roblox/art/modeling/gltf-export.md b/.cursor/rules/roblox/art/modeling/gltf-export.md new file mode 100644 index 00000000..41d812b9 --- /dev/null +++ b/.cursor/rules/roblox/art/modeling/gltf-export.md @@ -0,0 +1,85 @@ +--- +title: 3D Export +description: 3D Importer imports third-party .fbx, .gltf, and .obj 3D model assets into Studio. +--- + +import BetaAlert from '../../includes/beta-features/beta-alert.md' + + + +You can export your 3D Roblox assets as a **.glTF** ([GL Transmission Format](https://en.wikipedia.org/wiki/GlTF)) file format. This open standard format allows for efficient transfer of 3D assets and associated data between Studio and other software, such as Blender or Maya. + +
    +Some common use cases for .glTF export includes: + +- Running [Avatar auto setup](../../avatar-setup/index.md#auto-setup), exporting the output and finalizing the meshes, cages, or rigging in a third-party tool. +- Exporting your entire place for high-fidelity scene renders in another 3D application. +- Creating 3D content in Studio, such as part-based models or editable meshes and making modifications in an external application. + +Keep in mind that glTF supports specific 3D [components](#supported-components), has some [limitations](#limitations), and requires correct [permissions](#limitations) to export assets from Studio. Some of these specifications may change over the course of the beta. + +## Supported components + +glTF export supports the following types of 3D data: + +- Meshes +- Textures +- Rigging and skinning data +- Vertex colors +- Cages +- Dynamic head FACS data. + +## Limitations + + +See the beta announcement for the latest information on limitations and currently known bugs. + + +At this time, glTF has the following limitations: + +- Does not support animation data. +- Inconsistent support for layered clothing — clothing accessories may not always position correctly and won't deform to avatar bodies outside of Roblox. + +## Permissions + + +See the beta announcement for the latest information on permissions and upcoming changes. + + +You must have the correct permissions to export assets as .glTF. When exporting .glTF, Studio verifies that you have permissions to export that asset and may warn you if there are any conflicts. + +
    +You can export the following assets: + +- Assets directly uploaded to your account +- Assets directly uploaded to one of your group accounts +- Mesh and image assets that have been explicitly shared with you or your group + +You cannot export the following assets: + +- Avatar Marketplace assets +- Acquired Creator Store assets +- Shared collaborator assets where the underlying meshes/images have not been explicitly shared +- Other `Open Use` (public) assets that have not been explicitly shared with you or your group + +## How to use .glTF export + + + +You can export selected items from the Explorer, or export the entire place. + +
    +To export from the Explorer: + +1. Select the items you intend to export. +2. Right-click and navigate to **Save / Export** > **Export as glTF**. +3. Follow the prompts on screen to fine-tune your export components. Click **Export** when ready. + 1. After clicking Export, Studio runs a permission check. If there are any permission conflicts, a permission prompt appears with additional details. +4. In the file browser, select a location to save the .glTF file. + +To export an entire place: + +1. Navigate to **File** > **Export as glTF**. +2. Follow the prompts on screen to fine-tune your export components. Click **Export** when ready. + 1. After clicking Export, Studio runs a permission check. If there are any permission conflicts, a permission prompt appears with additional details. +3. In the file browser, select a location to save the .glTF file. diff --git a/.cursor/rules/roblox/art/modeling/index.md b/.cursor/rules/roblox/art/modeling/index.md new file mode 100644 index 00000000..4946bfde --- /dev/null +++ b/.cursor/rules/roblox/art/modeling/index.md @@ -0,0 +1,142 @@ +--- +title: Custom meshes +description: External modeling is the use of a third-party modeling software to create custom meshes. +--- + +**Custom meshes** are 3D objects that enhance the visual appeal and uniqueness of your environment and characters. In Studio, custom meshes are represented as `Class.MeshPart` objects, and you can use them to create assets like characters, clothing, environment props, and cosmetics. To create a custom mesh, you must use a third-party modeling application, such as [Blender](https://www.blender.org) or [Maya](https://www.autodesk.com/products/maya/overview), to design and model the asset before importing the 3D object into Studio. + +Many 3D assets, like characters, are made up of several meshes and are represented in Studio as a single `Class.Model`. See [Models](../../parts/models.md) for more information. + +In Roblox, custom 3D assets generally fall under three types of applications: + +- **Generic meshes or models** you can use for environmental props, buildings, characters, and decoration within an experience. +- **Avatar models** for users or non-player characters (NPCs). +- **Accessory models** that character models can equip and wear, like clothing and cosmetics. + +If you meet certain account requirements, you can publish and sell your avatar-ready models on the Marketplace and earn a commission for each sale. For more information, see [Roblox avatars](../../avatar/index.md). + + +
    + A Roblox avatar wearing a glossy puffy jacket and jeans +
    Create custom accessories, clothing, and characters that anyone can wear and use
    +
    +
    + A floating alien creature in space, from the Beyond The Dark experience +
    Design a custom character unique to your experience
    +
    +
    + A cluttered interior room with a candle in the forefront and spooky interior lighting from the Mystery of Duvall Drive experience +
    Use custom meshes and models to give your environments ambiance and depth
    +
    +
    + +## Supported meshes + +Roblox supports many types of custom meshes, as long as they adhere to the [general mesh specifications](../../art/modeling/specifications.md). A basic custom mesh consists of at least one mesh object and one texture: + + +
    + A plain white tree mesh without a texture +
    A mesh object sets the shape and geometry of the 3D object
    +
    +
    + Various color maps used to apply textures to the tree bark, and inner, middle, and outer leaves +
    A texture image map applies a surface appearance and color
    +
    +
    + The tree mesh and the image maps combined to create a single tree +
    The mesh and texture combine to make a unique custom 3D object
    +
    +
    + +Studio also supports meshes that include [rigging and skinning](#rigging-and-skinning) data, [PBR textures](#pbr-textures), and other [Studio-related objects](#studio-related-objects) like cage meshes and attachments. Many of these various components are required if you are creating avatar character models or accessories. + +### Rigging and skinning + +A **rigged mesh** is a mesh with an internal poseable skeleton rig and bone structure. Rigged meshes allow mesh surfaces to rotate and move where internal bone joints are placed within a model, such as a character's knee or elbow. Skinning a rigged mesh allows the mesh object to bend organically, imitating the natural way joints would move in real life. + + +
    + +
    Without skinning, the entire head mesh rotates on a single axis
    +
    +
    + +
    With skinning, the head mesh bends naturally at the neck, and the bottom of the neck stays connected to the torso
    +
    +
    + +For more information on rigging and skinning, see [Rigging and skinning](../../art/modeling/rigging.md). + +### PBR textures + +**Physically-Based rendering** (PBR) textures allow you to represent realistic shading and lighting by using multiple types of texture images, or **maps**, on a single object. Combining multiple texture maps can more accurately simulate color, roughness, and reflectivity in any lighting environment and can enhance the visual elements of your assets and environment. + + + A realistic looking leafy bush with shadows and depth. + A realistic looking rock with moss on the top. + + +For more information on PBR textures, see [PBR textures](../../art/modeling/surface-appearance.md). + +### Studio-related objects + +Studio automatically converts certain types of objects found in 3D modeling files as specific workspace objects in the experience. These are typically used when creating a character or accessory, and configuring these in your modeling software can sometimes be the primary way of correctly setting up these Studio objects. + +The following objects are automatically created in Studio if they are detected by the importer: + +- `Class.Attachment` - Created when Studio detects mesh objects that include `_Att` at the end of their name. +- `Class.WrapTarget` - Created when Studio detects mesh objects that include `_OuterCage` at the end of their name. +- `Class.WrapLayer` - Created when Studio detects a mesh object with `_InnerCage` and similarly named mesh object with `_OuterCage` at the end of their names. +- `Class.FaceControls` - Created when Studio detects an avatar character head and the appropriate facial animation data in the model. + +## Resources + +There are a variety of resources available for creators of all backgrounds to get started with custom meshes. + +If you are interested in specific avatar creation topics, use the following table to find guides and resources that best match your needs: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TopicResources
    Reference files[Example models, project kits, and templates](../../art/modeling/project-files.md)
    Technical specs[.FBX export settings](../../art/modeling/export-requirements.md)

    [General mesh specifications](../../art/modeling/specifications.md)

    + [Avatar specifications](../../art/characters/specifications.md)

    [Accessory specifications](../../art/accessories/specifications.md)

    [Marketplace policy](../../marketplace/marketplace-policy.md)
    Bodies and clothing creation[Accessories overview](../../art/accessories/index.md)

    [Bodies overview](../../art/characters/index.md)

    [Face accessory creation](../../art/characters/facial-animation/create-face-accessories.md)

    [Accessory Fitting Tool](../../art/accessories/accessory-fitting-tool.md)

    [Accessory specifications](../../art/accessories/specifications.md)

    [Marketplace requirements](../../marketplace/marketplace-policy.md)
    Texturing[Texture specifications](../../art/modeling/texture-specifications.md)

    [PBR textures](../../art/modeling/surface-appearance.md)
    Rigging and skinning[Rigging and skinning overview](../../art/modeling/rigging.md)

    [Basic mesh rigging](../../art/modeling/rig-a-simple-mesh.md)

    [Facial bone rigging](../../art/characters/facial-animation/create-basic-heads.md#rigging)

    [Facial bone skinning](../../art/characters/facial-animation/create-basic-heads.md#skin-face-bones)

    [Avatar rigging requirements](../../art/characters/specifications.md#rigging)

    [Automatic skinning transfer](../../art/accessories/automatic-skinning-transfer.md)
    Facial animation and live heads[Basic head creation](../../art/characters/facial-animation/create-basic-heads.md)

    [Face accessory creation](../../art/characters/facial-animation/create-face-accessories.md)

    [FACS pose references](../../art/characters/facial-animation/facs-poses-reference.md)
    Testing and validation[Calisthenics Tool](../../art/modeling/calisthenics-tool.md)

    [Clothing Validation Tool](../../art/accessories/validation-tool.md)
    Publishing and Marketplace[Upload to Marketplace](../../marketplace/publish-to-marketplace.md)

    [Marketplace policy](../../marketplace/marketplace-policy.md)

    [Fees and commissions](../../marketplace/marketplace-fees-and-commissions.md)
    diff --git a/.cursor/rules/roblox/art/modeling/material-reference.md b/.cursor/rules/roblox/art/modeling/material-reference.md new file mode 100644 index 00000000..7f2fa28d --- /dev/null +++ b/.cursor/rules/roblox/art/modeling/material-reference.md @@ -0,0 +1,181 @@ +--- +title: Material references +description: PBR texture examples and various texture map values. +--- + +When combining different combinations of metalness and roughness values with your PBR textures, Roblox can render virtually every type of surface with a high level of realism. The following includes various material values for common materials and [clothing examples](#clothing-examples) that you can use when creating your own PBR surfaces. + +The following figure illustrates the various base surface types you can achieve with various roughness and metallic values: + +
    + +
    + +## Common materials + +You can use the following material reference values as a baseline for creating your own custom surfaces: + + +
    + +
    Glossy Plastic
    Roughness: 0.1
    Metalness: 0.0
    +
    +
    + +
    Matte Plastic
    Roughness: 0.4
    Metalness: 0.0
    +
    +
    + +
    Rubber
    Roughness: 0.5-0.6
    Metalness: 0.0
    +
    +
    + +
    Latex
    Roughness: 0.0
    Metalness: 0.0
    +
    +
    + +
    Glossy Wood
    Roughness: 0.2-0.3
    Metalness: 0.0
    +
    +
    + +
    Worn Wood
    Roughness: 0.7-0.9
    Metalness: 0.0
    +
    +
    + +
    Cotton, Canvas, Denim
    Roughness: 0.8-0.9
    Metalness: 0.0
    +
    +
    + +
    Polyester, Nylon
    Roughness: 0.6-0.8
    Metalness: 0.0
    +
    +
    + +
    Wool, Linen
    Roughness: 0.9-0.096
    Metalness: 0.0
    +
    +
    + +
    Silk, Satin
    Roughness: 0.4-0.6
    Metalness: 0.4-0.6
    +
    +
    + +
    Velvet, Suede
    Roughness: 0.6-0.8
    Metalness: 0.4-0.6
    +
    +
    + +
    Glossy Leather
    Roughness: 0.2-0.4
    Metalness: 0.0
    +
    +
    + +
    Worn Leather
    Roughness: 0.5-0.7
    Metalness: 0.0
    +
    +
    + +
    Fur
    Roughness: 0.65-0.75
    Metalness: 0.0
    +
    +
    + +
    Scales
    Roughness: 0.5-0.6
    Metalness: 0.0
    +
    +
    + +
    Bone
    Roughness: 0.5
    Metalness: 0.0
    +
    +
    + +
    Skin
    Roughness: 0.65
    Metalness: 0.0
    +
    +
    + +
    Wax
    Roughness: 0.38
    Metalness: 0.0
    +
    +
    + +
    Marble
    Roughness: 0.375
    Metalness: 0.0
    +
    +
    + +
    Jade
    Roughness: 0.15
    Metalness: 0.0
    +
    +
    + +
    Painted Metal
    Roughness: 0.3
    Metalness: 0.0
    +
    +
    + +
    Pure Metals (Gold, Silver, Bronze)
    Roughness: 0.2-0.3
    Metalness: 1.0
    +
    +
    + +
    Worn Metals
    Roughness: 0.2-0.4
    Metalness: 1.0
    +
    +
    + +
    Glass Mirror
    Roughness: 0.0
    Metalness: 0.1
    +
    +
    + +## Clothing examples + +Layered clothing can take advantage of PBR textures to achieve realistic and visually popping cosmetics for avatar characters. Use the following reference examples to compare how various material values are used to achieve a certain cosmetic effect and its comparable real-time rendering in Substance Painter and Roblox Studio: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Substance Painter render
    Roblox Studio render
    Material values
    **Leather fabric:**
    + Roughness: 0.62
    + Metalness: 0.0

    + **Brass zipper:**
    + Roughness: 0.25
    + Metalness: 1.0
    **Metallic puffer fabric:**
    + Roughness: 0.62
    + Metalness: 1.0

    + **Brass zipper and buttons:**
    + Roughness: 0.482
    + Metalness: 1.0

    + **Fur hood:**
    + Roughness: 0.75
    + Metalness: 0.0

    + **Cotton band:**
    + Roughness: 0.8
    + Metalness: 0.0
    **Silk fabric:**
    + Roughness: 0.52
    + Metalness: 0.3

    + **Steel zipper and buttons:**
    + Roughness: 0.25
    + Metalness: 1.0

    + **Cotton band:**
    + Roughness: 0.9
    + Metalness: 0.0

    **Denim fabric:**
    + Roughness: 0.9
    + Metalness: 0.0

    + **Tarnished steel buttons:**
    + Roughness: 0.33
    + Metalness: 1.0
    diff --git a/.cursor/rules/roblox/art/modeling/project-files.md b/.cursor/rules/roblox/art/modeling/project-files.md new file mode 100644 index 00000000..69a0a16c --- /dev/null +++ b/.cursor/rules/roblox/art/modeling/project-files.md @@ -0,0 +1,590 @@ +--- +title: Modeling project files and references +description: Download various modeling-related project files and reference files. +hideInPageNavigation: true +--- + +The following `.fbx`, `.blend`, and `.ma` project files are available to use as templates or as reference: + + + + + + + +
    Maple leaf tree
    +
    +
    A green maple tree mesh
    +
    +
    +A skinned tree model with the soil, branches, and leaves as separate meshes bound to a single armature. This is packaged with UV textures that can be applied with `Class.SurfaceAppearance`. This is an advanced version of the tree model used in the Skin a simple mesh guide. +
    +
    + + + +
    +
    + + + + + +
    Shoebot
    +
    +
    A white round robot with arms and orange trim.
    +
    +
    +A robot non-player character used in the Beyond The Dark showcase. +
    +
    + + + +
    +
    + + + + + +
    Creature
    +
    +
    A black and blue alien creature with tentacles.
    +
    +
    +Creature model from the Beyond The Dark showcase. This model is made up of 11 meshes and over 50 bones. +
    + +
    + + + +
    +
    + +
    + +## Avatar and accessories + +The following include examples and templates utilizing Roblox's required [avatar components](../../art/characters/index.md#components-of-an-avatar). Many of these project files and references require additional configuration in your modeling software before importing into Studio as a complete avatar character. See [Avatars](../../art/characters/index.md) for additional resources and template usage instruction. + +### References + + + + + + + +
    Fish person
    +
    +
    A blue-green scaly creature with a bulb-ish head ornament.
    +
    +
    +A rigged and skinned humanoid character model with a full body cage, facial animation rig, and associated PBR texture maps.

    If this asset were to be uploaded to the Marketplace, the bulb antenna must be a separate head accessory and not part of the character's head geometry. +
    +
    + + + + + +
    +
    + + + + + +
    Goblin
    +
    +
    A brown goblin with bright green eyes.
    +
    +
    +A rigged and skinned humanoid character model with a full body cage, facial animation rig. +
    +
    + + + + + +
    +
    + + + + + +
    Blocky
    +
    +
    A colorless blocky-like character.
    +
    +
    +A Blocky character model with an animatable head and a full body cage. +
    +
    + +
    + + + + + +
    + +
    + + + + + +
    Lola
    +
    +
    A pink-haired character complete with brown jacket, goggles, leggings, and pants.
    +
    +
    +A skinned R15 character created from the Skin a humanoid model guide. Since this reference model doesn't yet have [inner and outer cage mesh data](../../art/characters/specifications.md#outer-cages), this model can't equip layered clothing or accessories. +
    +
    + +
    + + + + + +
    + +
    + + + + + +
    Tshirt - uncaged
    +
    +
    A tie-dye tshirt with a rainbow of colors in a general spiral toward the torso.
    +
    +
    +Uncaged example clothing ready for caging in a 3D modeling software. +
    +
    + + + +
    + +
    + + + + + +
    Clothing examples
    +
    +
    +
    +
    +Caged 3D accessory models and associated PBR textures. Ready for import into Studio or in a modeling tool. +
    +
    + + + + + +
    + +
    + + + + + +
    Caging Examples
    +
    +
    +
    +
    +Additional caged clothing items from How to cage Roblox's 3D [clothing video guide](https://www.youtube.com/watch?v=QwZaA9Gc-WQ). +
    +
    + + + + + +
    + +
    + + + + + +
    Classic mannequin
    +
    +
    A white untextured mannequin in the blocky style.
    +
    +
    +A blank mannequin using Roblox's [Classic](../../art/characters/specifications.md#classic) avatar proportions.

    Use this reference to aid your creation process for accessories, clothing, and characters in third-party applications.

    The caged `.fbx` contains the individual outer body cages for the body and may not import correctly into Studio without modification. +
    +
    + + + + + + +
    +
    + + + + + +
    Rthro mannequin
    +
    +
    A white untextured mannequin in a larger build humanoid style.
    +
    +
    +A blank mannequin using Roblox's [Rthro Normal](../../art/characters/specifications.md#normal) avatar proportions.

    Use this reference to aid your creation process for accessories, clothing, and characters in third-party applications.

    The caged `.fbx` contains the individual outer body cages for the body and may not import correctly into Studio without modification. +
    +
    + + + + + + +
    +
    + + + + + +
    Rthro slender mannequin
    +
    +
    A white untextured mannequin in a slimmer build humanoid style.
    +
    +
    +A blank mannequin using Roblox's [Rthro Slender](../../art/characters/specifications.md#slender) proportions.

    Use this reference to aid your creation process for accessories, clothing, and characters in third-party applications.

    The caged `.fbx` contains the individual outer body cages for the body and may not import correctly into Studio without modification. +
    +
    + + + + + + +
    +
    +
    + +## Templates + +These project files require additional configuration before they are ready for Studio import. See [Create with templates](../characters/creating/index.md) for additional information. + + +If you are using Roblox's avatar template files, you must perform the [cleanup steps](../../art/characters/creating/combine-head-geometry.md) in order for the assets to properly validate before publishing to the Marketplace. + + + + + + + + +
    +A male and female presenting pair with a prominently round shaped head. +
    +
    +Blender and .fbx template files with pre-baked avatar components. +
    + +
    + + + + + +
    +
    + + + + + + +
    +A male and female presenting pair with a prominently square shaped head. +
    +
    +Blender and .fbx template files with pre-baked avatar components. +
    + +
    + + + + + + +
    +
    + + + + + + +
    +A male and female presenting pair with a prominently elongated snout and mouth. +
    +
    +Blender and .fbx template files with pre-baked avatar components. +
    + +
    + + + + + + +
    +
    + + + + + +
    +A male and female presenting pair with realistic body proportions and facial shape. +
    +
    +Blender and .fbx template files with pre-baked avatar components. +
    + +
    + + + + + + +
    +
    + + + + + +
    +A male and female presenting pair with larger anime-like eyes and prominently oval shaped faces. +
    +
    +Blender and .fbx template files with pre-baked avatar components. +
    + +
    + + + + + + +
    +
    + + + + + +
    +A humanoid cartoonish figure with exaggerated features, including a prominent forehead, nose, and chin. +
    +
    +Blender and .fbx template files with pre-baked avatar components. +
    + +
    + + + + +
    +
    + + + + + +
    +A cartoonish figure with a round head and exaggerated forehead. +
    +
    +Blender and .fbx template files with pre-baked avatar components. +
    + +
    + + + +
    +
    + +
    + +### Project files + + + + + + + +
    R15 rig and attachments
    +
    +
    A Blender visualization of bones and attachment meshes in a neutral humanoid pose.
    +
    +
    +Standard armature rig template for Blender. Use this template for rigging **bodies** and **clothing** items. +
    + +
    + + + +
    +
    + + + + + +
    Cages for clothing
    +
    +
    A humanoid shaped mesh in a neutral A-pose.
    +
    +
    +Project files for creation, includes a full-body inner and outer cage mesh for creation of **clothing** items. +
    + +
    + + + +
    +
    + + + + + +
    Cages for bodies
    +
    +
    A humanoid shaped mesh in a neutral A-pose. Each section of the mesh is colored differently based on the body part.
    +
    +
    +Project files for creation, includes the 15 individual body part cages required for caging your avatar **bodies**. +
    + +
    + + + + +
    +
    + + + + + +
    Combined project files
    +
    +
    +
    +
    +Template file containing all content from previous templates, includes rig skeleton, body cages, attachment points.

    Use this template to rig and cage bodies and clothing. +
    + +
    + + + + +
    +
    + +
    + +### Add-ons and tools + + + + + + + +
    Blender Studio plugin
    +
    +
    +
    +
    +Open-source Blender Studio add-on that allows you to upload assets directly from Blender to Studio. +
    + +
    + + + +
    + +
    + + + + + +
    Blender validation tool
    +
    +
    +
    +
    +Blender add-on for verifying avatar technical compatibility before importing into Studio. +
    +
    + + + +
    + +
    + + + + + +
    Blender Calisthenics tool
    +
    +
    +
    +
    +Blender add-on for checking skinning data on characters and clothing. +
    +
    + + + + + +
    + +
    + +
    diff --git a/.cursor/rules/roblox/art/modeling/reimport.md b/.cursor/rules/roblox/art/modeling/reimport.md new file mode 100644 index 00000000..ae9b8500 --- /dev/null +++ b/.cursor/rules/roblox/art/modeling/reimport.md @@ -0,0 +1,116 @@ +--- +title: Reimport +description: Reimport allows you to update an existing custom mesh and textures without generating a new instance. +--- + + +Reimport is currently in beta. Enable the Reimport beta by navigating to **File** > **Beta Features** and enable **Reimport**. + +For latest information on updates and limitations, see the [DevForum Announcement](https://devforum.roblox.com/t/studio-beta-reimport-one-click-updates-for-imported-3d-content/4068650). + + +**Reimport** allows you to update existing custom models and their textures from an external 3D file. Unlike regular [import](./3d-importer.md#import-files), which creates brand new instances, the reimport function updates existing objects non-destructively to help support the iterative nature of 3D development. + +
    + +Along with asset updates, reimport remembers the file and settings used to import the original asset. This means you can easily update an imported asset with a single click or hotkey without going through all the initial import settings. This memory persists across Studio sessions. + +## Supported instances + +At this time, reimport supports `Class.MeshPart` and `Class.SurfaceAppearance` objects parented within a `Class.Model` container. This is the common object structure of an imported custom model with PBR textures. Reimport also supports [packages](../../projects/assets/packages.md), allowing you to reimport batches of asset instances at once. + +- `Class.Model` - The reimport feature scans the container, updating any changed `Class.MeshPart` and `Class.SurfaceAppearance`. + - `Class.MeshPart` - Reimport replaces meshes based off of mesh names saved in Studio and the external 3D file. For specific behavior, see [MeshPart detection](#meshpart-detection). + - `Class.SurfaceAppearance` - Reimport replaces images for PBR textures based off of filenames. For specific behavior, see [SurfaceAppearance detection](#surfaceappearance-detection). + + +Reimport memory is local to your device. A Reimport ID is stored on the `Class.Model` instance and referenced locally. Keep in mind the following: + +- Filepaths are never saved in the place file. +- Reimport supports different reimport paths on different devices for the same instance. +- Reimport supports copy-pasting, saving and loading from rbxm/rbxl, and Asset Manager workflows. + + +### MeshPart detection + +Reimport updates meshes based off of the path and name of the 3D source file, and the path and name of the mesh object in Studio. Reimport only updates the mesh content and transform properties and preserves other Roblox-specific properties. + +Reimport relies on matching mesh names between the Studio and the 3D source file: + +- If a mesh's `path/name` in the 3D source file **matches** a `Class.MeshPart` `path/name` in Studio, reimport updates the matching `Class.MeshPart`. +- If a mesh's `path/name` in the 3D source file **doesn't exist** as `Class.MeshPart` `path/name` in Studio, reimport creates a new `Class.MeshPart` within the `Class.Model`. +- If a `Class.MeshPart` `path/name` in Studio **doesn't exist** in the 3D source file, reimport does not modify the `Class.MeshPart` in Studio. + +#### Known Asset Cache + +Studio uses a **Known Asset Cache**, which helps detect duplicate imports in the same Studio session. If an imported or reimported asset is detected, Roblox reuses the existing asset ID instead of creating and uploading a new asset. + +If you attempt to reimport a single mesh object, but the 3D file contains a larger number of meshes or textures, Roblox only applies a single asset upload for that object. + +#### Duplicates + +Reimport detects duplicate meshes, and doesn't reupload matching meshes that are the same in both Studio and the 3D source file. + +In the scenario where a mesh in Blender is renamed from "Mesh1" to "Mesh2", reimport creates a new `Class.MeshPart` named "Mesh2" and doesn't apply changes to the original "Mesh1". + +#### Pivot points + +In cases where you may want to use the pivot point of the `Class.MeshPart` and not the `Class.Model`, right-click any `Class.MeshPart` with reimport information and select **Reimport** > **Reimport relative to this**. + +**Reimport relative to this** triggers a reimport for the entire model using the pivot point of right-clicked `Class.MeshPart` as an anchor instead of the `Class.Model` pivot point. You can use this for models that have custom pivots by reimporting relative to a mesh that that has not changed position in the 3D file. + +### SurfaceAppearance detection + +Reimport can quickly batch update the textures of a model with [PBR textures](./surface-appearance.md) based off of the naming convention of the image files. + +Reimport detects a set of known suffixes for color, metalness, normal, and roughness maps. You can find the full list of supported suffixes in the following table: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Map TypeSuffixesExample
    Colordiffuse, diff, albedo, base, col, color, albTree_**Color**.png
    Metalnessmetallic, metalness, metal, mtl, metTree_**Metal**.png
    Roughnessroughness, rough, rghTree_**Normal**.png
    Normalnormal, nor, nrm, nrml, normTree_**Rough**.png
    + +When reimporting an asset with a `Class.SurfaceAppearance` selected, a file dialog displays allowing you to select a new image file to use as a PBR texture. Reimport automatically detects other PBR images in the directory based off of naming and maps them to the `Class.SurfaceAppearance` object. + +## Reimport models + +To enable reimport for an imported `Class.Model`, first configure your imported asset to save reimport configuration information for the model: + +1. Right-click the `Class.Model` of your imported asset and select **Reimport** > **Configure**. + Right-click menu of an imported model, displaying reimport options +2. In the Reimport configuration window, set the correct file path and import presets for future reimport actions. +3. Click **Save & Reimport** to initiate the reimport process. +4. For future reimports, right-click the `Class.Model` and select **Reimport** > **Reimport**. + 1. Alternatively, when selecting the object, use the reimport hotkey ShiftAltR. + 2. A loading indicator appears after selecting reimport. If there are any issues, a popup displays with any errors or warnings. + + +Since reimport relies on matching mesh paths/names to update a `Class.Model` from a 3D file, it’s important to maintain unique naming of meshes and their paths in your external 3D tools. + +In Studio, you should also maintain the naming/tree structure of the `Class.MeshPart` objects within your model in order for reimport to update correctly. + diff --git a/.cursor/rules/roblox/art/modeling/rig-a-humanoid-model.md b/.cursor/rules/roblox/art/modeling/rig-a-humanoid-model.md new file mode 100644 index 00000000..5b04eaf4 --- /dev/null +++ b/.cursor/rules/roblox/art/modeling/rig-a-humanoid-model.md @@ -0,0 +1,155 @@ +--- +title: Rig a humanoid model +description: Explains the process for rigging a humanoid R15 model in Blender. +--- + +An R15 humanoid character model, such as those that make up user avatar characters, is made up of 15 individual mesh objects. Similar to rigging a simple mesh, you can bind or parent a group of meshes to an internal rig. Models made up of multiple meshes require additional steps to rig in a third-party modeling tool such as [Blender](https://www.blender.org) or [Maya](https://www.autodesk.com/products/maya/overview). + +This advanced guide covers the process of rigging a humanoid model in Blender using a provided template and humanoid model. This rigging step is required before [skinning the humanoid model](../../art/modeling/skin-a-humanoid-model.md). You should be familiar with [rigging a basic model](./rig-a-simple-mesh.md) before continuing. + +To rig a humanoid model in Blender: + +- [Import a character model](#import-model) into a template file to easily access a premade R15 bone structure. +- [Create, size, and position bones](#set-bones-and-armature) symmetrically for a humanoid character. +- [Parent](#parent-armature) multiple meshes to a single armature to bind the skeleton rig. +- [Assign full influence](#assign-meshes-to-bones) to each mesh object and bone by assigning influences. + + +This guide uses a downloadable [Rig and Attachment Template Blender Project](../../assets/modeling/meshes/reference-files/Rig_and_Attachments_Templates.zip), a reference [Lola Character model](../../assets/modeling/meshes/reference-files/lola-base-model.fbx), and [Blender version 3.0](https://www.blender.org/download/releases/3-0/). If you are +using another version of Blender, there may be minor differences in UI and +settings. + + +## Set up Blender + +To begin creating a humanoid rigged mesh, first set up the following in your Blender project: + +- [Import](#import-model) the Lola character model in the Mannequin Template Blender project. +- Set up your [Viewport visualizations](#viewport-visualizations) to optimize the rigging process. + +### Import model + +When rigging a model, make sure the character model you are using follows Studio's [Avatar character specifications](../../art/characters/specifications.md). For this guide, import a [Lola reference model](../../assets/modeling/meshes/reference-files/lola-base-model.fbx) into the mannequin template project. + +To import your model: + +1. In Blender, navigate to **File** > **Open** and select `Rig_and_Attachments_Template.blend`. +2. Navigate to **File** > **Import** > **FBX (.fbx)** and import the reference Lola model file. +3. If required, scale the model to roughly match the scale of the armature bone structure. You can select all the mesh geometries in the Outliner and press G to reposition and S to scale the mesh objects by dragging your mouse. + + + +### Viewport visualizations + +For better visualization and access to your bone objects, set your bone objects to always be displayed in front of the Viewport. + +To set the bone visualization: + +1. In the **Viewport**, click on any of the bones in your armature. +2. In the **Properties Editor** panel, select the **Object Data Properties** tab. +3. Expand **Viewport Display**, navigate to the **Show** property, then enable **In Front**. + + +At any point during the skinning process, you can also toggle one of the various material previews options in the top right of your 3D Viewport to change the visualization of your character model, such as enabling X-ray or texture view. + +## Set bones and armature + +In this guide, set up X-Axis Mirroring to make symmetrical changes to the left and right bones before repositioning the bones to the imported model. Try to maintain symmetry whenever possible when rigging a model. + + +If modifying bones or creating a new bone structure, keep in mind the specific bone hierarchy and naming requirements for R15 character models. + + +### Enable x-axis mirror + +The X-Axis Mirror setting allows you to maintain symmetry with your left and right bones by mirroring changes to their positions. To reduce issues with posing and animating, it is important to retain symmetry with your bone structure whenever possible. + +To set up X-Axis Mirror: + +1. In **Object Mode**, select your **armature** by clicking on any bone. +2. Switch to **Edit Mode** (Tab). +3. In the Viewport's right sidebar, extend the Tool panel and enable **X-Axis Mirror**. + + + +### Position bones + +With the model added to the project, you can reposition the bones provided in the template to match the character structure. In most cases, each bone should be positioned in the center of their corresponding mesh objects, such as the Head bone being centered within the Head_Geo mesh object. + +Bone positioning may differ based on use-case and may need to be revisited after weight painting and testing if a certain pose or animation doesn't work as intended. + +To position your individual bones: + +1. In Object Mode, click on the **bone** you intend to reposition to highlight it. +2. From the Mode dropdown, switch to **Edit Mode**. +3. Click on the **tip** of the bone so that the tip is highlighted and press G. The top of the bone moves with your cursor. +4. Pull this bone to align with the interior center of the model, then click to set the bone's position. + + + +5. Click and hold your mouse's scroll wheel or use one of the various perspective views to verify that the bone is within the mesh object. + + + +### Parent armature + +After you position the bone structure, you need to parent the bone armature to the model. You must parent all 15 mesh objects to one armature. + +For this example, the mesh objects are parented to the armature with Empty Groups to illustrate the vertex group assignment and weight painting process in the following [Skin a humanoid model](../../art/modeling/skin-a-humanoid-model.md) guide. + +To parent the model to the armature: + +1. Switch to **Object Mode**. +2. In the Outliner, filter your mesh objects by typing **"geo"** in the search bar. +3. Select all of the mesh objects in the Outliner by holding Shift and clicking on the first and last mesh objects. +4. With the meshes highlighted, hold Shift and click on the Armature object in the Viewport or Outliner. +5. Right click in the Viewport and select **Parent** > **With Empty Groups**. + + + +## Assign meshes to bones + +Now that you have connected your armature to the mesh object, you can assign the vertices of your individual limbs to be fully influenced by one corresponding bone. After this process is completed, the model will be ready for skinning. See [Skin a humanoid model](../../art/modeling/skin-a-humanoid-model.md) for instructions on applying multiple bone influences to a mesh. + + +The **Root** and **HumanoidRootNode** parent bones in a humanoid rig should not have any influences applied to them. Any added influences are dropped when importing into Studio. + + +To assign full influence to the head mesh: + +1. In **Object Mode**, click on the **head mesh object** to highlight it. +2. Switch to **Edit Mode**. +3. Select all the vertices of your mesh object by pressing A. +4. After all the head vertices are highlighted, navigate to the **Object Properties** panel on the right side of the screen. +5. In the **Vertex Group** section of the panel, select the name of the bone you want to assign the Head geometry to and click **Assign**. + + + +You can quickly iterate through all of your mesh objects in this mode by selecting the next mesh object in the Outliner and assigning it to the appropriate Vertex Group. For this guide, **assign all of your character's mesh objects to their appropriate bone**. + +To quickly assign vertex groups to the rest of the body meshes: + +1. In the **Outliner** panel, **click** the dot next to the object you intend to edit. The dot switches to the active edit icon when pressed. +2. If the vertices are not highlighted, press A to select all vertices. +3. In the **Object Properties** panel > **Vertex Groups** section, select the appropriate vertex group and click **Assign**. You can use the search bar to find the specific vertex group name. + + + +## Test + +You can test and pose bones and their assigned mesh objects in Pose Mode. It is important to test your model after applying or editing any influences. + +To navigate to Pose mode and test your poses: + +1. In **Object Mode**, select any part of your model. +2. Click on the Mode dropdown, then switch to **Pose** mode. +3. Hold Shift and click the bone you want to test to highlight it, then press R to test the rotation. +4. Press AltA (⌥A) to deselect the current bone, then reselect and test another bone. + + + + + To reset the rotation of a selected bone to neutral, press Alt+R. While rotating, you can also press your mouse's scroll wheel to change the axes of your rotation. + + +At this stage, if all of your mesh objects are influenced by their corresponding bones, you can [export](../../art/modeling/export-requirements.md) this rigged model as an `.fbx` for use in Studio or continue on to the next stage of [Skin a humanoid model](../../art/modeling/skin-a-humanoid-model.md). diff --git a/.cursor/rules/roblox/art/modeling/rig-a-simple-mesh.md b/.cursor/rules/roblox/art/modeling/rig-a-simple-mesh.md new file mode 100644 index 00000000..161beff6 --- /dev/null +++ b/.cursor/rules/roblox/art/modeling/rig-a-simple-mesh.md @@ -0,0 +1,158 @@ +--- +title: Rig a simple mesh +description: Explains the process for rigging a basic model in Blender. +--- + +You can create a **rigged mesh** using a third party modeling tool such as [Blender](https://www.blender.org) or [Maya](https://www.autodesk.com/products/maya/overview). You should rig a model after designing it, but prior to [exporting](../../art/modeling/export-requirements.md). + +To rig a simple model in Blender: + +- [Set up Blender](#set-up-blender) to Studio's relative scene units before importing a model to rig. +- [Create and reposition bones](#create-a-bone-structure) within the mesh object. +- [Parent the mesh to the armature](#parent-armature) to bind the bone armature to the mesh object. +- [Assign vertices to specific bones](#assign-vertices-to-bones) to define which parts of the mesh is driven by which bones. +- [Test your rigged mesh](#test) to ensure that the bones are properly positioned and influenced within the mesh. + + + This guide uses a downloadable [example robot model](../../assets/modeling/meshes/reference-files/shoebot-base-model.fbx) and [Blender version 3.0](https://www.blender.org/download/releases/3-0/). If you are using another version of Blender, there may be minor differences in UI and settings. + + +## Set up Blender + +To start the process of creating a rigged mesh, first set up the following in your Blender project: + +- Set up Blender's [scene unit and unit scale properties](#set-scene-and-scale) to Studio's proportions. +- [Import the model into Blender](#import-a-model) using Blender's file importer. + +### Set scene and scale + +When setting up Blender projects for Roblox Studio to import, you should modify Blender's default **scene units** and **unit scale** properties to ensure they closely align with Studio's scale. + +To start a new Blender project and set scene unit properties: + +1. Open a new **General** project in Blender. +2. Select the default shape, camera, and lights, then press Delete. +3. In the left-hand navigation of the **Properties Editor**, navigate to **Scene Properties**. + + + +4. In the **Units** section, change the **Unit Scale** to **0.01** and the **Length** to **Centimeters**. + + + +### Import a model + +For this example, import a [robot model](../../assets/modeling/meshes/reference-files/shoebot-base-model.fbx) into Blender as your mesh object. + +To import an existing `.fbx` model: + +1. In the topbar, click **File**. A pop-up menu displays. +2. Select **Import**, then the file format of the model you're importing. For this example, select **FBX (.fbx)** and the `.fbx` reference model. The model displays on the 3D viewport. + + Imported Model + +## Create a bone structure + +Now that your model is within Blender, you must add an **armature** and **bones** to your mesh object. An **armature** is a skeleton-like rigging object that acts as a container for bones, while **bones** are objects that control the movement and deformation of the group of vertices, or **vertex group**, that surround the bone. + +### Add an armature + +An armature is a structure required to add bones to your mesh. After you add in an armature, you can create and reposition any number of bones inside of your mesh object. + +To add an armature: + +1. At the top of the 3D viewport, select **Add** → **Armature**. + +2. For better visualization of the bones, in the left-hand navigation of the **Properties Editor**, navigate to **Armature Object Properties**. + +3. In the **Viewport Display** section, navigate to the **Show** property, then enable **In Front**. + + + +### Add and position bones + +When you add an armature to your project, Blender automatically adds one bone to the armature at a default position and scale which will act as the root bone. + +To add and position two additional bones: + +1. Click on the **bone** to highlight it. +2. At the top of the 3D viewport, click on the Mode dropdown, then switch to **Edit Mode**. +3. In the Viewport, click **Add** → **Single Bone**. Perform this step twice. + + + +4. In the Viewport or Outliner, click on **a newly created bone** to highlight it. +5. Press G and use your mouse to drag the bone onto the **right arm**. +6. Click on the second bone and press G to drag the bone on the **left arm**. + + +7. Click on the top of the **right bone** so that the tip is highlighted. Press G to drag and orient the bone horizontally toward the right. +8. Click on the top of the **left bone** so that the tip is highlighted. Press G to drag and orient the bone horizontally toward the left. + + + +9. In the Outliner, double-click and **rename** your bones so they can be easily referenced later. + + + +## Parent armature + +After you create and position the bone structure, you need to connect the armature to the mesh object by parenting the armature to the mesh object. + +In this guide, you should also use Blender's **Automatic Weights** function when you are parenting an armature, as it automatically adds weights and influences to your mesh. + +To parent an armature to a mesh: + +1. At the top of the 3D viewport, click on the Mode dropdown, then switch back to **Object Mode**. +2. Press AltA (Windows) or ⌥A (Mac) to deselect every object. +3. Hold Shift and select the **mesh object** and then the **armature**. The selection order is important. +4. In the **Viewport**, right-click on the mesh object. A pop-up menu displays. +5. Select **Parent**, then **With Automatic Weights**. + + + +## Assign vertices to bones + +With your armature connected to the mesh object, you can now assign the mesh vertices of your limbs to be fully influenced by their corresponding +bones. As a rigid model, each limb will completely bend and articulate when the bones are rotated, which is ideal for a non-organic character like a robot. + +To assign bone influence to the left and right arms: + +1. In Object Mode, select the **robot mesh object**. +2. In the Mode dropdown, switch to **Edit Mode**. +3. At the top-right of the Viewport, switch to **X-Ray** view using the Material Preview options. + + + +4. Drag and select the vertices you want to move with the right bone. +5. Navigate to the **Object Properties** panel. +6. In the **Vertex Group** section, select the name of the bone you want to assign and click **Assign**. +7. **Repeat steps 4-6** for the other bone and arm vertices. + + + +8. Drag and select the rest of the vertices in the center of the robot. +9. Navigate to the **Object Properties** panel. +10. In the Vertex Group section, select the **Middle bone** and click **Assign**. + + + +## Test + +You can test your rig in different poses in Pose mode. It's important to test your rigs after applying or changing influences before exporting. + +To test your applied influences: + +1. In **Object Mode**, select any part of your model. +2. At the top of the 3D viewport, click on the Mode dropdown, then switch to **Pose** mode. +3. Hold Shift and click the bone you want to test to highlight it, then press R to test the rotation. +4. Press AltA (⌥A) to deselect the current bone, then reselect and test another bone. + + + + + To reset the rotation of a selected bone to neutral, press Alt+R. While rotating, you can also press your mouse's scroll wheel to change the axes of your rotation. + + +The robot model is now a rigged mesh and ready to [export](../../art/modeling/export-requirements.md) to Studio. For reference, you can download the [final export](../../assets/modeling/meshes/reference-files/shoebot-rigged-model.fbx) (`.fbx`) of the model rigged in this guide. diff --git a/.cursor/rules/roblox/art/modeling/rigging.md b/.cursor/rules/roblox/art/modeling/rigging.md new file mode 100644 index 00000000..f43795cc --- /dev/null +++ b/.cursor/rules/roblox/art/modeling/rigging.md @@ -0,0 +1,68 @@ +--- +title: Rigging and skinning +description: Rigging and skinning is a modeling process that connects an armature to a mesh, allowing it to be animated or posed in Studio. +--- + +**Rigging** is the process of connecting a mesh with an internal poseable skeleton rig and bone structure. Rigged meshes allow mesh surfaces to rotate and move where internal bones are placed within the model during the modeling process. Rigging is often performed in conjunction with **skinning**, creating a natural looking stretch and bend when models are animated or repositioned. You can create rigged meshes with third-party software such as [Blender](https://www.blender.org) or [Maya](https://www.autodesk.com/products/maya/overview). + + +
    + +
    A normal model can only rotate on its pivot point.
    +
    +
    + +
    A rigged model (or mesh) can rotate with any bone of its associated rig.
    +
    +
    + + +
    + +
    A rigged model with no skinning data.
    +
    +
    + +
    A skinned model that bends organically with the bone rotation.
    +
    +
    + +See the following resources to learn the basics and intermediate steps required to skin models in Blender: + +- [Rig a simple mesh](../../art/modeling/rig-a-simple-mesh.md) +- [Skin a simple mesh](../../art/modeling/skin-a-simple-mesh.md) +- [Rig a humanoid model](../../art/modeling/rig-a-humanoid-model.md) +- [Skin a humanoid model](../../art/modeling/skin-a-humanoid-model.md) + +## Rigs and bones + +The **rig**, or bone structure, within a rigged mesh creates additional poseable points for the 3D model in Studio. By rotating or moving the bones of a mesh, the parts of the mesh assigned to those bones can move independently from the rest of the mesh. The assignment of influence between meshes and bones, such as a **LowerLeftArm** bone driving the movement of the **LowerLeftArm** geometry, is set in a third-party application like Blender or Maya. When imported into Studio, Roblox saves this influence assignment data to the `Class.MeshPart` asset data. + +Once you successfully [import](../../parts/meshes.md#import-meshes) a rigged mesh model into Studio, Studio represents this rig structure with `Class.Bone` instances that you can then pose and animate. You can view bones in Studio by enabling **Show Constraint Details** from the **View** menu, or when you are using the [Animation Editor](../../animation/editor.md). + + +When `Class.Bone` objects are used in animation, they affect the appearance of the parts but don't change the physical shape in cases such as [collision detection](../../workspace/collisions.md). + + + +
    + A translucent humanoid outline, showing various sphere points where the constraints exist. +
    Constraint Details enabled
    +
    +
    + A translucent humanoid outline, showing 15 pink bones objects over various limbs. +
    When using the Animation Editor
    +
    +
    + +## Types of rigs + +Rigged models use a naming convention starting with "R" and ending with the number of individual meshes that make up the model. This is used to quickly identify the type and number of meshes that a model has. Although R6 and R15 models are common, a model can be of varying subjects, sizes and can have any number of individual meshes, such as a R5, R20, or R200. + +- **R1** refers to a single mesh that is rigged, or associated with an internal skeleton structure. Many models, such as a tree or accessory item, are good candidates to be made into an R1 model. Even humanoid characters, such as NPCs, can be created as R1 models but they will not be able to take full advantage of the animation and humanoid options available for R15 characters. + + See [Rig a simple mesh](../../art/modeling/rig-a-simple-mesh.md) for instructions on turning a basic mesh into an R1 model in Blender. + +- **R15** typically refers to humanoid models used as player or avatar characters. An R15 model is made up of 15 specific meshes that are parented to a single rig. A R15 character model often includes skinning data to allow the model to bend and pose naturally. Roblox uses the R15 standard for all avatars, and requires the [R15 technical specifications](../../art/characters/specifications.md) to ensure universal behavior and quality. + + See [Rig a humanoid model](../../art/modeling/rig-a-humanoid-model.md) for instructions on turning a character model into an R15 humanoid model in Blender. diff --git a/.cursor/rules/roblox/art/modeling/roblox-blender-plugin.md b/.cursor/rules/roblox/art/modeling/roblox-blender-plugin.md new file mode 100644 index 00000000..5f299b74 --- /dev/null +++ b/.cursor/rules/roblox/art/modeling/roblox-blender-plugin.md @@ -0,0 +1,10 @@ +--- +title: Roblox Blender plugin +description: The Roblox Blender plugin allows you to transfer assets directly from Blender to Studio. +--- + +The Roblox Blender plugin is a Blender add-on that allows you to link your Roblox account and quickly transfer 3D modeling objects directly from Blender to your Studio session. This tool helps you save time and reduce errors by skipping the process of exporting and importing third-party modeling files between applications. + +The Roblox Blender plugin is an open-source implementation of Roblox's [Open Cloud API](../../cloud/guides/index.md) and developers are encouraged to extend and build upon this tool for their own projects. For installation, use, licensing, and contribution details, see the [Roblox Blender plugin GitHub page](https://github.com/Roblox/roblox-blender-plugin). + + diff --git a/.cursor/rules/roblox/art/modeling/skin-a-humanoid-model.md b/.cursor/rules/roblox/art/modeling/skin-a-humanoid-model.md new file mode 100644 index 00000000..3a7ec112 --- /dev/null +++ b/.cursor/rules/roblox/art/modeling/skin-a-humanoid-model.md @@ -0,0 +1,224 @@ +--- +title: Skin a humanoid model +description: Explains the process for skinning a humanoid R15 model in Blender. +--- + +A humanoid skinned mesh is a character model that, when posed or animated, bends and stretches naturally at its joints. You can create a skinned mesh using a third party modeling tool such as [Blender](https://www.blender.org) or [Maya](https://www.autodesk.com/products/maya/overview). + +This is an advanced guide on skinning a humanoid model into an R15 model in Blender using the humanoid model completed in [Rig a humanoid model](./rig-a-humanoid-model.md). Before skinning a humanoid model, you should also familiarize yourself with the basic concepts in [Skin a simple mesh](../../art/modeling/skin-a-simple-mesh.md). + +To skin a humanoid model in Blender, you need to: + +- [Set up Blender](#set-up-blender) with a rigged model to optimize the weight painting process with bone visualization settings and Auto Normalize. +- [Weight paint](#weight-painting) vertices of your mesh objects by balancing influence of your vertices between two or more bones of a humanoid rig architecture. + + +This guide uses the humanoid model rigged in [Rig a humanoid model](./rig-a-humanoid-model.md) and [Blender version 3.0](https://www.blender.org/download/releases/3-0/). If you are +using another version of Blender, there may be minor differences in UI and +settings. + + +## Set up Blender + +This guide uses the rigged model completed in [Rig a humanoid model](./rig-a-humanoid-model.md). You can also download the rigged model [Blender project](../../assets/modeling/meshes/reference-files/lola-rigged-r15.blend) to follow along with this guide. + +To optimize the process of skinning a rigid character, first set up the following in your Blender project: + +- Open the Blender project and configure the [bone visualization](#bone-visualization) settings. +- Enable [Auto Normalize](#auto-normalize) to help optimize the weight-painting process. + +### Bone visualization + +By default, Blender displays bone objects as octahedral shapes. This original shape is useful when positioning bones but can get in the way while weight painting. To help visualization during the weight painting process, change your bone visualization to sticks. + +To update the visualization of your bones: + +1. In Object Mode, click the **armature**. +2. In the **Object Data Properties**, change the **Display As** value to **Sticks**. + + + +### Auto normalize + +The Auto Normalize setting forces the influence on your vertices to equal one. This makes weight painting multiple meshes and bones more efficient by ensuring that each vertex in your character is fully influenced by at least one bone. See Blender's documentation on the [Auto Normalize](https://docs.blender.org/manual/en/latest/sculpt_paint/weight_paint/tool_settings/options.html) for more information. + +Auto Normalize also prevents cases where a vertex is fully influenced by multiple bones and can prevent common weight painting mistakes. + + +
    + +
    Without Auto Normalize, it is not clear until testing that this fully influenced head is also influenced by another bone due to a painting mistake.
    +
    +
    + +
    With Auto Normalize, painting influence to an incorrect bone removes the existing influence from the original bone. This makes mistakes easier to catch and resolve.
    +
    +
    + + +Studio doesn't support more than 4 bones to influence any single vertex. This may occur in complex rigs or inadvertently with Auto Normalize disabled. + + +To enable Auto Normalize: + +1. In **Object Mode**, select the **armature**. +2. Hold Shift and select **any mesh object** on your model. +3. At the top of the 3D viewport, click on the Mode dropdown and switch to **Weight Paint** mode. +4. On the right side of the viewport, expand the **Tool** tab. +5. Under **Options**, enable **Auto Normalize**. + + + +## Weight painting + +Weight painting applies specific weights, or influences, that bones will have over parts of a mesh using a painting workflow. There are also additional ways to apply influences through weight painting or other tools, some which are covered in [Skin a simple mesh](../../art/modeling/skin-a-simple-mesh.md). See additional online resources such as Blender's [Character Rigging](https://www.youtube.com/watch?v=f2pTkW-1JkE) and [Vertex Groups](https://www.youtube.com/watch?v=dKZrzG5r13g) fundamental guides for more information on skinning and applying weights. + +This guide will cover one process of weight painting the head and arm meshes of a humanoid model. These weight painting techniques can be used to weight paint the rest of the model. + + +Do not apply influences on the Root or HumanoidRootNode parent bones in a humanoid rig. Any added influences are dropped when importing into Studio. + + +### Paint the head mesh + +The head mesh connects to the upper torso at the bottom vertices of the neck. To create a realistic bend in the model, the head mesh needs to share influence with the Head bone and the Upper Torso bone near the neckline. + +To begin weight painting the Head mesh object: + +1. In Object Mode, click the **armature** then hold Shift and click the **Head mesh object**. +2. In the Mode dropdown, switch to **Weight Paint** mode. +3. Hold Shift and click the **Upper Torso bone**. The head should be completely blue as the Upper Torso doesn't yet influence any head vertices. + + + + + A common error is to apply weights with the incorrect bone selected. Make sure to Shift select and un-select the correct bones when applying weights. The name of the bone currently being painted will populate in the Viewport. + + +4. In the top right of the Viewport, open the **Tool** menu and set the **brush strength** to **1**. +5. With the Upper Torso bone selected, **paint** the Head of your model at the neckline. You can temporarily **Hide** the Upper Torso mesh in the Outliner to have direct access to the bottom of the neck. + + +6. At any point, check the applied influences by holding Shift and deselecting the Upper Torso bone and selecting the Head bone. Press R to rotate the Head bone with your mouse and test how the mesh object shares influences between the Head and Upper Torso bone. + + +7. If additional painting is required, hold Shift and select the bone you want to add or remove influence from, and use the Brush tool to apply. + +The final result of weight painting the head of the model should balance the head mesh influences with the Head bone and the Upper Torso bone: + + +
    + +
    The Head bone fully influences the Head_Geo mesh from the neck up.
    +
    +
    + +
    The Upper Torso bone fully influences the Head_Geo mesh from the neck down.
    +
    +
    + +### Paint the arm meshes + +Similar to the process for balancing influences between the Head bone and Upper Torso bone, arms and legs require a similar weight painting process. + +The right arm includes the Right Hand, Right Lower Arm, and Right Upper Arm, each with their corresponding bones. The following instructions provide guidance on painting influences to all of the arm mesh objects. You can then apply these techniques to the rest of the meshes in your model. + +#### Hand + +Starting with the Right Hand, you can balance the influences of the mesh between the **Hand bone** and the **Lower Arm bone** to create a natural bend at the wrist. + +To weight paint influences to the right hand: + +1. From Object Mode, click the **armature**, hold Shift, and click the right **hand** geometry. +2. In the mode dropdown, switch to **Weight Paint** mode. With the hand bone selected in this mode, you can press R and test the current rotation of the hand mesh object. + + + +3. In the top right of the Viewport, open the **Tool** menu and set the **brush strength** to **1**. +4. With the Lower Arm bone selected, **paint** the hand of your model at the wrist. You can temporarily **Hide** the Lower Arm mesh in the Outliner to get better access to the wrist. + + + +5. During and after weight painting the hand, press R with the bone selected to test the rotation and flexibility. + + + + +You can add and skin additional bones, such as fingers, if you want additional controls to your skinned mesh. + +Extra bone objects that are skinned to a mesh but do not share a Humanoid bone object name (such as LowerTorso, LeftFoot, Right UpperArm) are imported into Studio as a `Class.Bone` with the same name it was assigned with in the 3D modeling software. + + +#### Lower arm + +After the wrist of the right hand is weight painted, you can proceed to balance the influences of the Lower Arm mesh between the **Lower Arm bone** and the **Upper Arm bone** to create a natural bend at the elbow. + +To weight paint influences to the lower arm: + +1. Switch back to Object Mode. +2. Click the **armature** and hold Shift and click the right **lower arm** geometry. +3. In the mode dropdown, switch to **Weight Paint** mode. +4. Hold Shift and deselect other bones besides the Lower Arm bone. You can test the current rotation of the highlighted Lower Arm bone by pressing R. + + + +5. Hold Shift and select the Upper Arm bone. +6. With the Upper Arm bone selected, **paint** the lower arm of your model at the elbow. You can temporarily **Hide** the Upper Arm mesh in the Outliner to get better access to the elbow. +7. During and after weight painting the lower arm, press R with the lower arm bone selected to test the rotation and flexibility. + + + +#### Upper arm + +After the elbow of the right lower arm is weight painted, you can proceed to balance the influences of the Upper Arm mesh between the **Upper Arm bone** and the **Upper Torso bone** to create a natural bend at the underarm. + +To weight paint influences to the upper arm: + +1. Switch back to Object Mode. +2. Click the **armature** and hold Shift and click the right **upper arm** geometry. +3. In the mode dropdown, switch to **Weight Paint** mode. +4. Hold Shift and deselect other bones besides the Upper Arm bone. You can test the current rotation of the highlighted Upper Arm bone by pressing R. + + + +5. Press R and drag your mouse to rotate the Upper Arm so that the arm is horizontal. This makes it easier to access the vertices of the underarm. +6. Hold Shift and select the Upper Torso bone. +7. With the Upper Torso bone selected, **paint** the upper arm of your model at the underarm. You can temporarily **Hide** the Upper Torso mesh in the Outliner to get better access to the elbow. +8. During and after weight painting the lower arm, press R with the upper arm bone selected to test the rotation and flexibility. + + +#### Shoulder + +After the underarm is weight painted, you can proceed to balance the influences of the Upper Torso mesh between the **Upper Torso bone** and the **Upper Arm bone** to create a natural bend at the shoulder when the arm is moved. Since this movement is subtle, you only need to apply a partial strength influence to these vertices. + +To weight paint a partial strength influence to the upper torso: + +1. Switch back to Object Mode. +2. Click the **armature** and hold Shift and click the **upper torso** geometry. +3. In the mode dropdown, switch to **Weight Paint** mode. +4. Hold Shift and deselect other bones besides the Upper Arm bone. You can test the current rotation of the highlighted Upper Arm bone by pressing R. + + + +5. In the top right of the Viewport, open the **Tool** menu and set the **brush strength** to **.25**. You may want to adjust this based on the results when testing. +6. With the Upper Torso bone selected, **paint** the upper torso of your model at the shoulder. +7. During and after weight painting the lower arm, press R with the upper arm bone selected to test the rotation and flexibility of your influences to the upper torso. + + + + + +
    + +
    +
    + When rotating arms to their full range of motion, a candy-wrapping effect may occur between the shoulder and torso where the skinning loses volume and doesn't deform naturally. This effect may not be avoidable in many cases. +
    +
    +
    + +You can continue to weight paint the rest of the limbs of your model using these processes. When completed, you can [export](../../art/modeling/export-requirements.md) your skinned model as a `.fbx` using the Blender export settings for use in Studio. For reference, you can download a [Blender project](../../assets/modeling/meshes/reference-files/lola-skinned-s15.blend) with the model fully skinned. + + +Since this reference model doesn't yet have [inner and outer cage mesh data](../../art/characters/specifications.md#inner-and-outer-cages), this model can't equip layered clothing or accessories. + diff --git a/.cursor/rules/roblox/art/modeling/skin-a-simple-mesh.md b/.cursor/rules/roblox/art/modeling/skin-a-simple-mesh.md new file mode 100644 index 00000000..44b63327 --- /dev/null +++ b/.cursor/rules/roblox/art/modeling/skin-a-simple-mesh.md @@ -0,0 +1,301 @@ +--- +title: Skin a simple mesh +description: Explains the process for skinning a basic model in Blender. +--- + +A skinned mesh is a rigged mesh that bends and flexes naturally when the internal skeleton rig is posed or animated. You can create a skinned mesh using a third party modeling tool such as [Blender](https://www.blender.org) or [Maya](https://www.autodesk.com/products/maya/overview). Skinning must be completed after the model is [rigged](./rigging.md). + +This guide covers the process for rigging and then skinning a simple tree model in Blender with 3 bones. For basics on rigging, see [Rig a simple mesh](./rig-a-simple-mesh.md) before continuing this guide. + +To skin a simple mesh, you need to: + +- [Set up Blender](#set-up-blender) to Studio's relative scene units before importing a model. +- [Create, size, and position bones](#position-bones) inside of an armature. +- [Parent a mesh to an armature](#parent-armature) to bind the skeleton rig to the mesh object. +- [Weight paint](#weight-paint) the mesh to assign which parts of the mesh will move with which bone. + + +This guide uses a downloadable [example tree model](../../assets/modeling/skinned-meshes/MapleLeafTree.fbx) and [Blender version 3.0](https://www.blender.org/download/releases/3-0/). If you are +using another version of Blender, there may be minor differences in UI and +settings. + + +## Set up Blender + +To start the process of creating a skinned mesh, first set up the following in your Blender project: + +- Set [scene unit and unit scale properties](#adjust-scene-and-scale) to Studio's proportions. +- [Import the model into Blender](#import-a-model) using Blender's file importer. + +### Adjust scene and scale + +When setting up Blender projects for Roblox Studio import, modify Blender's default **scene units** and **unit scale** properties to ensure they closely align with Studio's scale. + +To modify Blender's scene and scale units in a new project: + +1. Open a new **General** project in Blender. +2. Select the default shape, camera, and lights, then press Delete. +3. In the left-hand navigation of the **Properties Editor**, navigate to **Scene Properties**. + + + +4. In the **Units** section, change the **Unit Scale** to **0.01** and the **Length** to **Centimeters**. + + + +### Import a model + +For this guide, you'll import a [maple tree model](../../assets/modeling/skinned-meshes/MapleLeafTree.fbx) into Blender as your mesh object. + +To import a model into Blender: + +1. In the topbar, click **File**. A pop-up menu displays. +2. Select **Import**, then the file format of the model you're importing. For this example, select **FBX (.fbx)** and the `.fbx` reference model. The model displays on the 3D viewport. + + Viewport Display Settings + +## Create a bone structure + +Now that your model is within Blender, add an armature and **bones** to your mesh object. An **armature** is a skeleton-like rigging object that acts as a container for bones, while **bones** are objects that control the movement and deformation of the group of vertices, or **vertex group**, that surround the bone. + +### Add an armature + +An armature is a structure required to add bones to your mesh. After you add in an armature, you can create and reposition any number of bones inside of your mesh object. + +To add an armature: + +1. At the top of the 3D viewport, select **Add** → **Armature**. + + + +2. For better visualization of the bones, in the left-hand navigation of the **Properties Editor**, navigate to **Armature Object Properties**. + +3. In the **Viewport Display** section, navigate to the **Show** property, then enable **In Front**. + + + + + +### Position bones + +When you add an armature to your project, Blender also adds one bone to the armature at a default position and scale. You can rotate and scale the bone to more accurately represent the internal structure of your mesh object. + +To reposition the bone: + +1. Click on the **bone object** to highlight it. +2. At the top of the 3D viewport, click on the Mode dropdown, then switch to **Edit Mode**. +3. Click on the **top of the bone** and press G. The top of the bone moves with your cursor. +4. Pull this bone to align with the interior center of the model, then click to set the bone's position. + + + +5. Press and hold your mouse's scroll wheel to move the camera around the mesh object to see different views and angles to ensure that the bone is centered within the mesh object. + +### Add additional bones + +In this guide, you need 3 bones within your mesh so the tree can move and rotate at three points. + +To add additional bones into the armature: + +1. While still in **Edit Mode**, click on the tip of the bone. +2. Press E and drag your mouse upward. This extends an additional bone out of the original root bone. + + + +3. Repeat this process for the second bone. + + + +4. Press and hold your mouse's scroll wheel to move the camera around the mesh object to see different views and angles to ensure that the bones are within the mesh object. [Reposition the bones](#position-bones) as necessary. +5. In the Outliner, expand the **Armature** object. The armature's bone hierarchy displays. +6. In the Outliner, double-click and **rename** each bone. Bone object names remain the same when you import the mesh object into Studio. + + + +## Parent armature + +After the bone structure is created and positioned, you need to connect the armature to the mesh object by parenting the armature to the mesh object. + +This guide uses Blender's **Automatic Weights** function when you are parenting an armature, as it automatically adds weights and influences to your mesh. This can save you time during the [weight painting](#weight-paint) process. + +To parent an armature to a mesh: + +1. At the top of the 3D viewport, click on the Mode dropdown, then switch back to **Object Mode**. +2. Press AltA (Windows) or ⌥A (Mac) to deselect every object. +3. Hold shift and select the **mesh object** and then the **armature**. The selection order is important. +4. In the viewport, right-click on the **mesh object**. A pop-up menu displays. +5. Select **Parent**, then **With Automatic Weights**. + + + +## Weight paint + +With your armature connected to the mesh object, you can use the process of **weight painting** to change the amount of influence (weight) the bones will have on specific vertices to allow for more natural movement and flexibility. + +Blender represents weight strength with a [blue to red gradient](https://docs.blender.org/manual/en/latest/sculpt_paint/weight_paint/introduction.html#the-weighting-color-code), where **blue** represents a value of **0** and **red** represents a fully influenced value of **1**. Vertices on a mesh object that are painted red will be fully influenced by that specific bone's rotation while vertices that are yellow or green will be partially influenced by the bone's rotation. + +You can quickly assign influence with the [Brush tool](https://docs.blender.org/manual/en/latest/sculpt_paint/weight_paint/tools.html) in Blender's **Weight Paint** mode using the **Draw**, **Add**, or **Subtract** brush tools. For each brush, you can set the influence weight and radius in the **Tools** setting to the right of the **Viewport**. + + + +To optimize the painting process, [set up visualization and brush settings](#setup) before [painting influences](#paint-influence) to the mesh. + +### Setup + +When assigning influences for complex models, you can configure the following Blender settings to optimize the Weight Painting process. + +#### Bone visualization + +By default, Blender displays bone objects as octahedral shapes. This original shape is useful when positioning bones within the rig but can get in the way while painting. To help visualize the weight painting process, change your bone visualization to sticks. + +To update the visualization of your bones: + +1. In **Object Mode**, select the **Armature**. +2. In the left-hand navigation of the **Properties Editor**, navigate to **Object Data Properties**. +3. Change the **Display As** value to **Stick**. + + + +#### Auto normalize + +The [Auto Normalize](https://docs.blender.org/manual/en/latest/sculpt_paint/weight_paint/tool_settings/options.html) setting forces the influence on your vertices to equal one. This makes weight painting more efficient by ensuring that each vertex in your character is fully influenced by at least one bone. In this guide, Auto Normalize allows you to first apply full influence to the entire mesh quickly and then make minor adjustments with each bone. + +To enable Auto Normalize: + +1. In **Object Mode**, select the **Armature**. +2. Hold shift and select the **mesh object**. +3. At the top of the 3D viewport, click on the Mode dropdown, then switch to **Weight Paint** mode. + + + You must select the appropriate object to access specific modes, such as selecting a mesh object to access **Weight Paint** mode. If you are unfamiliar with switching to different modes, refer to Object Modes. + + +4. On the right side of the viewport, click the **Tool** tab. +5. Under the **Options** section, enable **Auto Normalize**. + + + +#### Projected brush + +A projected brush allows you to easily apply influence through a mesh, instead of just the surface. This is useful when painting influences on meshes that may be geometrically layered, such as the foliage of the tree. + +To set up a projected brush: + +1. In **Object Mode**, select the **Armature**. +2. Hold shift and select the **mesh object**. +3. At the top of the 3D viewport, click on the Mode dropdown, then switch to **Weight Paint** mode. +4. On the right side of the viewport, click the **Tool** tab. +5. Expand the **Advanced** section, then uncheck **Front Faces Only**. +6. Expand the **Falloff** section, then select **Projected**. + + + +### Paint influence + +With the [projected brush](#projected-brush) set up, you can now begin applying influence to the tree. Take advantage of the [Auto Normalize](#auto-normalize) setting by painting full red influence to the entire tree to the bottom bone and then assigning a partial influence on the middle and top bones. + +#### Bottom bone + +The bottom bone should fully influence the movement of the entire tree starting from the trunk. + +To start painting influence to the bottom bone: + +1. In **Object Mode**, hold shift, select the bones and then the mesh object. +2. At the top of the 3D viewport, click on the Mode dropdown, then switch to **Weight Paint** mode. +3. Hold shift and click on the bottom bone. +4. Use the brush tools to paint a red area of influence from the base of the bone and the rest of the tree. + + + + + You can adjust the radius of the brush in the Tool tab, or by holding F and dragging your mouse to change the size. + + +5. With the bone highlighted, test that the bone is influencing the entire model by pressing R and rotating the mouse. Paint any vertices that are not influenced correctly to apply influence to them. + + + +#### Middle bone + +The middle bone represents most of the foliage above the bottom bone. For a more subtle effect, apply a 50% influence (green) from the middle bone upwards. + +To paint influence to the middle bone: + +1. In **Weight Paint** mode, press AltA (Windows) or ⌥A (Mac) to deselect the current bone object. +2. Hold shift and click on the middle bone. +3. On the right side of the viewport, click the **Tool** tab. +4. Change the **Weight** value to **.5**. +5. Starting from the area at the middle bone, paint the middle and top area of the tree. +6. Press R to rotate the bone and test the influence at different angles. + + + +#### Top bone + +The top bone should influence the top leaf area above the middle bone. Paint this top area using 25% influence (teal) for a more natural effect. + +To paint influence to the top bone: + +1. In **Weight Paint** mode, press AltA (Windows) or ⌥A (Mac) to deselect the current bone object. +2. Hold shift and click on the top bone. +3. On the right side of the viewport, click the **Tool** tab. +4. Change the **Weight** value to **0.25**. +5. Starting from the area at the top bone, paint the top area of the tree. +6. Press R to rotate the bone and test the influence at different angles. + + + +After weight painting each bone, each section of this tree should now be influenced by the bottom, middle, or top bones. The bottom bone fully controls the trunk of the tree while the middle and top bones have a reduced influence on the branches and leaves. + + + +### Test + +It is important to constantly test the influences of your bone **throughout** the weight painting process. + +Blender allows you to test and pose bones **while** painting if both the armature and mesh are selected in Object Mode **before** switching to Weight Paint mode. This hybrid pose and weight paint functionality doesn't work unless you select both armature and mesh before entering Weight Paint mode. + +To test your weight painting: + +1. In **Object Mode**, select the **Armature**. +2. Hold shift and select the **mesh object**. +3. At the top of the 3D viewport, click on the Mode dropdown, then switch to **Weight Paint** mode. +4. Hold shift and click the bone you want to test, then press R to test the rotation. +5. Press AltA (⌥A) to deselect the current bone, then reselect and test another bone. + + + + + To reset the rotation of a selected bone to neutral, press Alt+R. While rotating, you can also press your mouse's scroll wheel to change the axes of your rotation. It is recommended to prioritize testing positions you expect to use in your animations and poses in Studio. + + +Your S1 tree model is now a skinned mesh and is ready for [export](../../art/modeling/export-requirements.md) for Studio. The Blender project file and [final export](../../assets/modeling/skinned-meshes/MapleLeafTree.fbx) (`.fbx`) are available for reference. diff --git a/.cursor/rules/roblox/art/modeling/specifications.md b/.cursor/rules/roblox/art/modeling/specifications.md new file mode 100644 index 00000000..1974e5f6 --- /dev/null +++ b/.cursor/rules/roblox/art/modeling/specifications.md @@ -0,0 +1,88 @@ +--- +title: General specifications +description: Lists the specific technical requirements for custom models created outside of Studio. +--- + +Roblox supports a wide variety of mesh configurations created from third-party software such as [Blender](https://www.blender.org) or [Maya](https://www.autodesk.com/products/maya/overview). + +Check that your model meets the following modeling specifications and guidelines before exporting to ensure Studio compatibility. Specific types of assets, like characters and accessories, have additional specifications: + + +If creating other types of 3D models: +
      +
    • For rigid accessories, see [accessory specifications](../accessories/specifications.md) and [accessory export settings](../accessories/export-settings.md).

    • +
    • For layered accessories, see [layered accessory specifications](../accessories/clothing-specifications.md) and [layered export settings](../accessories/clothing-export-settings.md).

    • +
    • For avatar characters, see [avatar specifications](../characters/specifications.md) and [avatar export settings](../characters/export-settings.md).
    • +
    +
    + +When ready to export, see the [export settings](../../art/modeling/export-requirements.md) for mesh export settings for Blender and Maya. + + +If you meet certain account requirements, you can sell your custom meshes as accessories on the Marketplace. See [Rigid accessories](../../art/accessories/index.md) for an overview on the creation process for these types of accessories. + + +## Geometry + +See the following specifications for general geometry: + +- **Budgets** - Individual meshes can not exceed 20,000 triangles. Avatar items have their own individual budget requirements for [characters](../../art/characters/specifications.md) and [accessories](../../art/accessories/specifications.md). +- **Watertight** - All geometry must be watertight without exposed holes or backfaces. +- **No N-gons** - Meshes must be in quads where possible. +- **Volume** - Meshes cannot be 0 thickness and must have some volume. + +## Rigging and skinning + +Roblox supports third-party meshes with an internal rig, or skeleton structure that can be used as additional articulation points in your model. See [Character rigs](../../art/characters/specifications.md#rig) for specific standards for an R15 character rig. + + +
    + A cartoon-ish low polygon model of a puffer fish. +
    Generic rig model.
    +
    +
    + The Outliner in Blender of the puffer fish model, showing the armature bone structure. +
    Generic rig bone structure (Blender).
    +
    +
    + +See the following requirements for general rigging and skinning: + +- **Transformations** - All bones (Blender) or joints (Maya) must be frozen and have scale values set to `1`, `1`, `1` and rotation values set to `0`, `0`, `0`. +- **Symmetry** - When possible, maintain symmetry when applying influences to a rig +- **Root joint** - The root bone or joint should always be set to `0`, `0`, `0`. +- **Max influences** - A vertex can not be influenced by more than 4 bones or joints. +- **No Root influences** - Do not apply influences to the Root bone or joint. + +## Textures + +- Roblox supports basic color textures and modern [PBR textures](../../art/modeling/surface-appearance.md). +- For instructions on assigning texture images to natively import with your mesh, see [Assign textures in modeling tools](./assign-textures.md). +- For technical requirements and best practices when generating individual texture images, see [Texture specifications](../../art/modeling/texture-specifications.md). + +## Animations + +An animation can be included on any `.fbx` mesh export. For information on prepping a character animation from a modeling software for export, see [Export animations from Maya](../../art/characters/export-avatar-animations-from-maya.md). + +See the following requirements for assets with animation: + +- **Single track animation** - Only a single animation track can be exported with a mesh or model. If you want to export multiple animations, you need to create separate exports for each animation you want to import. + +## Inner and outer cages + +Inner and Outer cages are non-rendered meshes that Roblox uses to define the inner and outer surfaces of a mesh using a `Class.WrapLayer` or `Class.WrapTarget` instance. These cages are most often used with characters and accessories, though you can use cage meshes for any mesh object. + + +Character models must include an outer cage in order to properly equip layered clothing and accessories. See [Character specifications](../../art/characters/specifications.md) for additional information. + + +For general use, see the following requirements for adding inner and outer cage meshes to your model: + +- **Naming conventions** - The inner and outer cage must be named after the primary mesh object with **\_InnerCage** and **\_OuterCage** affixed. + + The Outliner in Blender showing two mesh objects called Tshirt_InnerCage and Tshirt_OuterCage. + +- **Outer cage** - Models, such as a playable character, that aren't expected deform but are the target of meshes that will stretch over it, only require an Outer Cage. + - For more information on applying and implementing cages on non-Humanoid targets, see [layered clothing on non-R15](../../characters/appearance.md#layered-clothing-on-non-r15). +- **Vertices and UV map** - Don't delete vertices or alter the UVs on the Inner or Outer Cages as this can cause errors when importing in Studio or when equipping onto a character. +- **Symmetry and consistency** - Keep each face (the space between vertices) consistently sized and retain symmetry wherever possible. Use symmetry tools in your modeling software whenever possible. diff --git a/.cursor/rules/roblox/art/modeling/surface-appearance.md b/.cursor/rules/roblox/art/modeling/surface-appearance.md new file mode 100644 index 00000000..ba90c20e --- /dev/null +++ b/.cursor/rules/roblox/art/modeling/surface-appearance.md @@ -0,0 +1,424 @@ +--- +title: PBR textures +description: PBR textures are advanced textures using multiple texture maps. +--- + +**Physically-Based Rendering** (PBR) textures allow you to represent realistic shading and lighting by using multiple types of texture images, or **maps**, on a single object. Combining multiple texture maps can more accurately simulate color, roughness, and reflectivity in any lighting environment and can enhance the visual elements of your assets and environment. + + + + +A humanoid avatar with dreadlocks, a glossy jacket, jeans with decals, and boots. +A humanoid avatar with a short haircut, leather jacket, capri pants, and orange shoes. + + + + + A realistic leafy bush + A realistic mossy rock + + + + +Various applications and workflows are available for creating PBR textures. You can use these during the modeling and texturing phases of custom 3D object creation, provided that Roblox Studio [supports](../../art/characters/specifications.md#textures) the specific texture maps you're using. + + +For information on how to properly connect PBR textures to your model in Blender and Maya for import into Studio, see [Blender / Maya texture settings](./assign-textures.md). + + +This guide provides instructions on [setting up](#enable-surface-appearance) your mesh objects to use PBR texture maps, and describes common use-cases and best practices for Roblox's supported PBR [texture maps](#texture-maps). When creating your own surfaces, see [material references](../../art/modeling/material-reference.md) for common material values, image comparisons and clothing examples. + +## Enable surface appearance + +You can add PBR textures to any `Class.MeshPart` by adding a `Class.SurfaceAppearance` object which overwrites the original assigned texture. In general, you can't modify `Class.SurfaceAppearance` properties by scripts during an experience because the engine requires some pre-processing to display these graphics. Similar to adding a basic texture, each texture image map must point to the appropriate uploaded image asset ID. + +To enable surface appearance for a `Class.MeshPart`: + +1. In the [Explorer](../../studio/explorer.md) window, hover over the `Class.MeshPart` and click the ⊕ button. +2. Insert a `Class.SurfaceAppearance` from the contextual menu. + + A SurfaceAppearance object parented within a MeshPart in Studio's Explorer window. + + When you're ready to add texture maps to the `Class.SurfaceAppearance` object, you can click each map property in the [Properties](../../studio/properties.md) window and enter an asset ID. + +## Texture maps + +Studio currently supports 4 types of PBR texture maps: [color](#color-albedo), [normal](#normal), [roughness](#roughness), and [metalness](#metalness). Each of these maps correspond to an important aspect of the object's surface appearance. Texture maps only change visual appearance and don't affect the geometry of the `Class.MeshPart` object. + + +Avoid adjusting material values to look better in one specific lighting situation. You should base your material values on the physical characteristics and test and iterate to achieve a result that remains visually accurate in various lighting environments. + + +See the following examples for an overview of Roblox's supported texture maps and additional resources: + + + +The `Class.SurfaceAppearance.ColorMap|ColorMap` property sets the color data of the surface, including any transparency present in the map. See [color (albedo)](#color-albedo) for additional information. + +
    + A completely filled image, mostly red with various black splotches and white scratches. +
    Example map
    +
    +
    + A blank white sphere with a dark background. +
    Example mesh
    +
    +
    + A red sphere with black splotches and white scratches with a dark background. +
    Mesh and texture
    +
    +
    +
    + +The `Class.SurfaceAppearance.NormalMap|NormalMap` texture property defines the topography of the surface allowing you to add visual textures such as bumps, dents, or cracks to your surface. See [normal](#normal) for additional information. + +
    + A completely filled image, mostly cyan with streaks and bumps across the surface giving the impression of a tactile surface. +
    Example map
    +
    +
    + A blank teal sphere with a dark background. +
    Example mesh
    +
    +
    + A teal sphere with tactile streaks and bumps across the surface. +
    Mesh and texture
    +
    +
    +
    + +The grayscale `Class.SurfaceAppearance.RoughnessMap|RoughnessMap` texture property defines the smoothness of the surface, allowing for a glossy or matte visual appearance. See [roughness](#roughness) for additional information. + +
    + A completely filled image of black diamond shapes over a light grey background. +
    Example map
    +
    +
    + A blank purple sphere with a dark background. +
    Example mesh
    +
    +
    + A purple sphere that has glossy diamond shapes over its surface. +
    Mesh and texture
    +
    +
    +
    + +The grayscale `Class.SurfaceAppearance.MetalnessMap|MetalnessMap` texture property defines the metallic visual properties of the surface. See [metalness](#metalness) for additional information. + +
    + A completely filled image with a completely black border and scratch-like streaks revealing a white center. +
    Example map
    +
    +
    + A blank light blue sphere with a dark background. +
    Example mesh
    +
    +
    + A light blue sphere with parts of its surface looking scratched. The scratched areas reveal a metal-ness quality that is more reflective. +
    Mesh and texture
    +
    +
    +
    +
    + + +For technical details on texture file requirements, see [texture requirements](../../art/modeling/texture-specifications.md). + + +### Color (albedo) + +The **color**, or **albedo**, map determines the color of your texture and consists of mostly color information with little to no lighting or textural information. For additional customization, you can also add [transparency](#alpha-modes) in your albedo texture by adding opacity to your image map. + + +While albedo maps and generic [non-PBR texture maps](../../parts/textures-decals.md), commonly known as **diffuse maps**, contain very similar base color data for a surface, diffuse maps often include shading and lighting values to imitate a specific visual element that are more effectively handled by PBR's [normal](#normal), [roughness](#roughness), and [metalness](#metalness) maps. Using a typical diffuse map instead of an albedo map may often look incorrect when the lighting doesn't match with these added baked-in texture elements. + + +#### Alpha modes + +For objects that require partial or complete sections of transparency, such as grass, leaves, lace, or decals like dirt or grunge, you can use various **alpha modes** to apply transparency to your color map. If your color map image format supports alpha channels, you can apply a grayscale alpha map where `0.0` is transparent and `1.0` is opaque. Similarly, when using an image format such as a `.png`, any opacity on the color map applies as transparency on the asset. + +You can apply transparency in two different behaviors by setting the following `Class.SurfaceAppearance.AlphaMode|AlphaMode` values: + +- [Overlay](#overlay) — Overlays the `Class.SurfaceAppearance.ColorMap|ColorMap` over the underlying mesh's `Class.MeshPart.Color`. Color maps using **Overlay** reveal the base color of the mesh anywhere transparency is present. This is the default setting. +- [Transparency](#alpha-modes) — Removes the visible mesh based on transparency in the `ColorMap`. This renders the mesh see-through and does not reveal the original mesh color whenever transparency is present. +- [TintMask](#tintmask) — Blends the tinted `Class.SurfaceAppearance.ColorMap|ColorMap` over the un-tinted `Class.SurfaceAppearance.ColorMap|ColorMap`. + +##### Overlay + +You can use **Overlay** to reveal sections of the mesh's original color. Since the transparent areas of the color map expose the underlying color, you can design a unique texture map that partially or fully reveals the mesh's `Class.MeshPart.Color|Color` property for custom skin tones or other situations with unique colors. + +The following example demonstrates how the **Overlay** mode works using a white sphere reference: + + +
    + A completely filled image of a semi-repeating pattern with 8 by 8 small light blue squares. The background is checkered to indicate transparency. +
    Example color/albedo map with transparency
    +
    +
    + A blank white sphere over a dark background. +
    Example mesh object (white)
    +
    +
    + A white sphere with small blue squares scattered over the surface. +
    `Class.SurfaceAppearance.AlphaMode|AlphaMode` set to **Overlay** using reference map and material
    +
    +
    + +The following example uses the **Overlay** mode for custom characters, revealing the character's original skin-tone: + + +
    +A completely filled image of a texture map for a 3D humanoid model. Various parts of the image is checkered or partially checkered to indicate varying levels of transparency. +
    Color map containing transparency in sections to expose the original mesh color
    +
    +
    +Four of the same humanoid models with different skin tones: light brown, black, white, dark green. +
    Several variations of characters with a single color map using **Overlay** mode
    +
    +
    + +See [custom skin tone](../../art/characters/specifications.md#custom-skin-tone) for additional details on optimizing an overlay for skin and similar applications. + +##### Transparency + +You can use the **Transparency** mode to create complex or extremely fine objects, such as lace or netting, by removing visible parts of the mesh as an alternative to sculpting the mesh geometry. Since this does not affect the geometry of the mesh object, this can allow you to create detailed objects without the performance impact of an intricate mesh model. + +The following example demonstrates how a partial and full transparency in this mode visually removes sections of the mesh: + + + + +
    +A sphere with a basket-like surface. +
    No transparency
    +
    +
    +A sphere with regular triangular patterns on its surface partially invisible. +
    Half transparency in sections
    +
    +
    +A sphere with regular triangular patterns on its surface completely invisible. +
    Full transparency in sections
    +
    +
    +
    + + +
    +A completely filled image of a thatched basket-like surface. +
    No transparency
    +
    +
    +A completely filled image with a thatched basket-like surface with a regular triangle pattern partially transparent. +
    Half transparency in sections
    +
    +
    +A completely filled image with a thatched basket-like surface with a regular triangle pattern fully transparent. +
    Full transparency in sections
    +
    +
    +
    +
    + +There are two outcomes of `Enum.AlphaMode|Transparency` mode, depending on whether the `Class.MeshPart.Transparency` is set to `0` or **at least** `0.02`, although numerical precision may result in small values such as `0.01` triggering the opaque transparency. + +- When alpha is used to cut out the shape of mostly opaque objects with hard edges such as foliage, lace fabric, and netting, set the `Class.MeshPart.Transparency` to `0`. When parts of the surface are fully opaque, the Roblox engine can render them with proper depth‑based occlusion. Opaque surfaces also generally work better with depth‑based effects like `Class.DepthOfFieldEffect`, glass and water refraction, and water reflection. +- When alpha is used to add detail to semi‑transparent objects or objects with smooth gradients of transparency, set the `Class.MeshPart.Transparency` to **at least** `0.02`. This improves the quality of blending for objects such as dirty windows and soft‑edged feathers, but it will not work with all effects. + +##### TintMask + +You can use the `Enum.AlphaMode.TintMask` mode to apply `Class.SurfaceAppearance.Color` tinting to selective areas of a surface. The tinting is strongest where the alpha channel is fully visible and not applied where the alpha channel is transparent. + + + +
    +A warm, light colored brick texture with darker grey textured grout between the bricks. +
    +
    Example brick texture, showing the color detail on brick faces as well as in the grout between the bricks.
    +
    +
    +
    + +
    +A monochrome brick texture showing white in the brick face areas and solid black in between the bricks. +
    +
    Example brick texture alpha, with areas of the brick faces opaque (white) and the grout areas in between bricks transparent (black).
    +
    +
    +
    + +
    +Four square panels with a brick texture arranged in a vertical stack. They are tinted blue, yellow, purple, and red. +
    +
    Example brick texture with four different tint colors applied. The tint is affecting only the raised brick faces and not the grout between them.
    +
    +
    +
    +
    + + +When creating `Class.SurfaceAppearance.ColorMap` textures for use with a tint mask, preserve color in the transparent regions and turn off options such as pre-multiplied alpha that darken the color in transparent areas. The alpha values can also be semi-transparent to apply a partial tint to areas of the texture. + + +#### Color tinting + +You can apply a tint to your color map by modifying the `Class.SurfaceAppearance.Color` property. Tinting does not affect performance and you can save on memory by reusing a single color map with different tints. Use color tinting to create additional low-cost variation between your `Class.MeshPart` PBR textures or to programmatically modify your PBR surface colors in real-time. + + +
    +A statue with a default yellow tint and reflective jade-like properties. +
    Statue mesh from [The Mystery of Duvall Drive](../../resources/the-mystery-of-duvall-drive/index.md) with no tinting.
    +
    +
    +A statue with a red tint and continues to have a shiny reflective properties from its other texture maps. +
    Statue mesh with `Class.SurfaceAppearance.Color|Color` set to red.
    +
    +
    +A statue with a green tint and continues to have a shiny reflective properties from its other texture maps. +
    Statue mesh with `Class.SurfaceAppearance.Color|Color` set to green.
    +
    +
    + +`Class.SurfaceAppearance.Color` tinting applies as a multiplier, so the final appearance is a function of `Datatype.Color3` (texel color) times `Class.SurfaceAppearance.Color`. This means that authoring your original `Class.SurfaceAppearance.ColorMap` in near-white grayscale colors creates the strongest tinting effect when this property is applied. + +Tinting only applies to the `Class.SurfaceAppearance.ColorMap` and not the `Class.MeshPart.Color`. You can continue to use alpha channels when applying [transparency](#transparency). + +When `Class.SurfaceAppearance.AlphaMode` is set to `Enum.AlphaMode|Overlay` and an alpha channel is present, the underlying `Class.MeshPart.Color` is revealed and `Class.SurfaceAppearance.Color` tinting only applies to the visible `Class.SurfaceAppearance` color map. + +When `Class.SurfaceAppearance.AlphaMode` is set to `Enum.AlphaMode|TintMask` and an alpha channel is present, the alpha channel controls the amount of `Class.SurfaceAppearance.Color` tinting. The tinting is strongest where the alpha channel is fully visible and not applied where the alpha channel is transparent. + + + +
    +A floating square plane with a cyan slate texture, that gradually changes from fully transparent on the left to fully opaque on the right. A thin horizontal bar below the floating plane has a gradient with black on the left and white on the right. +
    +
    `Class.SurfaceAppearance.AlphaMode|AlphaMode` set to `Enum.AlphaMode|Transparency`. The greyscale gradient bar at the bottom indicates the alpha value. `Class.MeshPart.Color` is set to red and `Class.SurfaceAppearance.Color` is set to cyan.
    +
    +
    +
    + +
    +A floating square plane that gradually turns from a solid red color on the left to a cyan slate texture on the right. A thin horizontal bar below the floating plane has a gradient with black on the left and white on the right. +
    +
    `Class.SurfaceAppearance.AlphaMode|AlphaMode` set to `Enum.AlphaMode|Overlay`. The greyscale gradient bar at the bottom indicates the alpha value. `Class.MeshPart.Color` is set to red and `Class.SurfaceAppearance.Color` is set to cyan.
    +
    +
    +
    + +
    +A floating square plane that gradually turns from a white slate texture on the left to a cyan slate texture on the right. A thin horizontal bar below the floating plane has a gradient with black on the left and white on the right. +
    +
    `Class.SurfaceAppearance.AlphaMode|AlphaMode` set to `Enum.AlphaMode|TintMask`. The greyscale gradient bar at the bottom indicates the alpha value. `Class.MeshPart.Color` is set to red and `Class.SurfaceAppearance.Color` is set to cyan. Tint masking is not affected by `Class.MeshPart.Color`.
    +
    +
    +
    +
    + +### Normal + +The **normal**, or **surface**, map adds texture depth to your surface and behaves similarly to a [height map](../../parts/terrain.md#heightmaps). As a result, the effect may fade or intensify depending on the viewing angle and lighting environment. When a normal map is not present, the value is set to `0.0`. + +In the following figure, you can switch between the mesh reference and the map reference for comparisons of normal map values: + + + + +
    +A clay colored smooth sphere. +
    0.0
    +
    +
    +A clay colored sphere with a moderately rocky surface. +
    0.5
    +
    +
    +A clay colored sphere with an extremely rocky surface +
    1.0
    +
    +
    +
    + + +
    +A completely filled teal image. +
    0.0
    +
    +
    +A completely filled teal image with a moderate amount of surface aberrations in slightly lighter and darker shades +
    0.5
    +
    +
    +A completely filled teal image with a heavy amount of surface aberrations in slightly lighter and darker shades +
    1.0
    +
    +
    +
    +
    + +The **R**, **G**, and **B** channels of the image correspond respectively to the **X**, **Y**, and **Z** components of the local surface vector. A uniform image of color `[127, 127, 255]` translates to a completely flat normal map. Roblox only supports **OpenGL format - Tangent Space** normal maps. + +Normal maps prominently affect the visual surface of a mesh and can accentuate awkward seams in your texture. Whenever possible, keep your texture seams hidden to avoid visual issues with your mesh. + +### Roughness + +**Roughness**, or **microsurface**, maps determine how light is spread across your model's surface. When roughness is at `0.0`, the surface doesn't scatter light at all, resulting in a much sharper and brighter reflection and glossiness on your material. At `1.0`, light and reflections evenly scatter over the model resulting in a less reflective matte-like surface. + +Roughness may impact how reflective an object is at different angles, referred to as the **Fresnel** effect. See [fresnel](#fresnel) for more details and best-practices to maintain consistent reflective behavior. + +The following figure shows comparisons of various roughness map values: + + +
    +A blue glossy sphere with a legend indicating the roughness map is completely black. +
    0.0
    +
    +
    +A blue semi-glossy sphere with a legend indicating the roughness map is exactly grey. +
    0.5
    +
    +
    +A blue matte sphere with a legend indicating the roughness map is completely white. +
    1.0
    +
    +
    + + +Various combinations of the roughness and metalness can represent almost every possible real-world material surface. See [material references](../../art/modeling/material-reference.md) for examples and references of how combinations of material values can create various surface appearances. + + +#### Fresnel + +**Fresnel** refers to the amount of reflection of a surface in reference to the current viewing angle. Studio's Fresnel processing aims for physical real-world accuracy, although you may get unexpected specular contribution at certain angles even with rough surfaces. In some cases, you can compensate by making your roughness map around `0.1` more rough to achieve a consistent lighting response with your materials. + +Even though Roblox renders this lighting effect accurately, the brightness and reflectivity of a surface may not respond consistently between your texture content creating software, such as Substance Painter, and Studio. See [clothing examples](../../art/modeling/material-reference.md#clothing-examples) for differences in rendering between applications. + +### Metalness + +**Metalness** determines the reflectivity of a surface. Metalness values range between `0.0` and `1.0`. Roblox sets the default value to `0.0` if a metalness map is not present. + +See the following figure for comparisons of various metalness map values: + + + +
    +A brown sphere with light splotches. A legend indicates the metalness map is completely black. +
    0.0
    +
    +
    +A brown sphere with light splotches and some reflectiveness. A legend indicates the metalness map is exactly grey. +
    0.5
    +
    +
    +A brown sphere with moderate splotches and lots of reflectiveness. A legend indicates the metalness map is completely white. +
    1.0
    +
    +
    + +Different PBR renderers use various workflows for processing reflectiveness. Studio only uses the **metalness workflow** which determines whether a material is a **nonmetal** or a **metal**, sometimes referred to as an **insulator** or **conductor**. + +In most cases, you should set this value to either `0.0` (non-metal) or `1.0` (metal). You can use partial metalness values when creating more uncommon surfaces with moderate reflective properties, like satin or silk. This practice can subtly fake the reflections in the material to highlight the color from the [color/albedo map](#color-albedo) over colors reflected in the environment. + + +Various combinations of the roughness and metalness can represent almost every possible real-world material surface. See [material references](../../art/modeling/material-reference.md) for examples and references of how combinations of material values can create various surface appearances. + diff --git a/.cursor/rules/roblox/art/modeling/texture-specifications.md b/.cursor/rules/roblox/art/modeling/texture-specifications.md new file mode 100644 index 00000000..71974d09 --- /dev/null +++ b/.cursor/rules/roblox/art/modeling/texture-specifications.md @@ -0,0 +1,215 @@ +--- +title: Texture specifications +description: Texture Specifications lists the specific technical requirements and best practices for custom textures created outside of Studio. +--- + +A texture is a digital image applied to the surface of a 3D object to simulate and enhance its visual appearance. Roblox supports various texture types that you import with a custom 3D object, or upload directly as individual image files. For details on implementing basic textures, see [Textures and decals](../../parts/textures-decals.md). + +Roblox also supports [physically-based rendering (PBR) textures](../../art/modeling/surface-appearance.md) which override a mesh's existing `Class.MeshPart.TextureID|TextureID` and can be used to create immersive environments and objects. + + +For information on how to properly connect textures to your model in Blender and Maya for import into Studio, see [Blender / Maya texture settings](./assign-textures.md). + + +See the following requirements when creating your own basic and advanced textures: + +- **File formats** — File formats for textures that are uploaded separately in Studio must be submitted as a `.png`, `.jpg`, `.tga`, or `.bmp`. + +- **Resolution** — Roblox supports up to 4096x4096 pixel texture resolutions (4K). As an experience loads, the engine automatically starts with lower quality versions of the texture and ramps up quality based on device resources. Even still, manually sizing textures before you upload them can improve memory usage in some situations. Consider the following general guidance: + + - For smaller 5×5 stud objects, use 256×256 texture resolutions. + - For medium 10×10 stud objects, use 512×512 texture resolutions. + - For larger 20×20 stud objects, use 1024×1024 texture resolutions. + - See [PBR texture budgets](#surfaceappearance) for similar guidances with PBR texture maps. + +- **Single material** - Mesh objects can only have one material assigned. + + +Roblox default [materials](../../parts/materials.md) follow a similar texel resolution pattern: +- Parts display a 1024×1024 on an 8×8 stud face. +- Terrain displays 512×512 across 8×8 studs. + + +## SurfaceAppearance + +You can add a [surface appearance](../../art/modeling/surface-appearance.md) to your mesh in Studio to add PBR texture options. The `Class.SurfaceAppearance` instance uses UV mapping, a form of texture mapping, to accurately map up to four 2D images onto the mesh object. + + +For information on how to properly connect PBR textures to your model in Blender and Maya for import into Studio, see [Blender / Maya texture settings](./assign-textures.md). + + +See the following requirements for `Class.SurfaceAppearance` assets: + +- **Texture files** — Ensuring your textures follow consistent conventions optimizes assets for tools like the [3D Importer](../../art/modeling/3d-importer.md) and helps with organization. When possible, texture files should include the appropriate name affix and follow the appropriate image details: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Texture typeTexture schema suffixTexture image details
    Albedo_ALBRGB (24-bit)
    Metalness_METSingle Channel Grayscale (8-bit)
    Normal_NORRGB (24-bit) - Roblox only supports **OpenGL format - Tangent Space** normal maps.
    Roughness_RGHSingle Channel Grayscale (8-bit)
    + +- **PBR Texture Budget** — Use an appropriate texture map size based on the asset you are texturing to optimize for visual quality and performance. As a general guideline, each asset should have a texture resolution of 256×256 for every 2×2×2 unit space the asset occupies. If larger than a 2×2×2 cube, use the next highest resolution. The following are some baseline texture sizing examples: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Recommended map sizeApproximate asset size (unit cube)Example assets
    64×64 - 128×1281×1×1Jewelry, sunglasses, eyebrows, mustaches.
    256×2562×2×2Hair, shoes, tank tops, t-shirts, shorts, short skirts.

    256x256 is the **maximum budget** for non-albedo maps (RGH, MTL, NOR) for [rigid accessories](../accessories/specifications.md#textures).
    512×5124×4×4Jackets, pants, overalls, long-sleeve shirts, long skirts.
    1024×1024 (maximum)8×8×8Full body clothing (onesies, robes), humanoid characters.
    + + + When rendering many textures at the same time, Roblox may downsample textures to optimize for performance. + + +## UV mapping + +All textures use UV mapping, a 3D modeling process to project a 3D model's surface to a 2D image, or UV atlas. See the following requirements for UV mapping, especially if you're manually editing or optimizing your UV atlas: + +- **Single UV Set** — Use a single UV set for each component, such as a humanoid or accessory. Studio doesn't allow for multiple UV sets. +- **Coordinates** — All UVs must be created within a 0:1 space. +- **Overlaps** — Overlapping UVs are allowed. +- **Maximum Texture Resolution** — Roblox supports up to 1024×1024 pixel spaces for texture maps. See [Optimizations](#optimizations) for more details on efficiently texturing your assets. + +### Optimizations + +Studio's UV compositor allows you to pack and size your UVs to best suit your needs because it can detect and repackage UVs for performance and storage efficiency. The compositor looks to each component of the model, such as a character (arms, legs, torso, head), and repackages and loads the UVs as needed when in-experience changes occur, such as swapping body parts. + +Especially with character models and other advanced models, optimizing your UV layouts can help prevent texture issues, save loading time, and improve performance. Keep in mind the following best practices for optimizing your UV islands for Roblox's UV compositor: + +- **Pixel space** — Studio's texture compositor repacks UVs by breaking up the following pixel spaces: + + - **1024×1024** pixel space into **64×64 16 pixel** blocks. + - **512×512** pixel space into **32×32 16 pixel** blocks. + - **256×256** pixel space into **16×16 16 pixel** blocks. + + +
    + +
    1024×1024 UV example
    +
    +
    + +
    512×512 UV example
    +
    +
    + +
    256×256 UV example
    +
    +
    + +- **Avoid Sharing 16 Pixel Blocks** — To maximize your UV space and the resolution of your model, keep all UV islands within these 16 pixel blocks when possible, and do not let two UV islands share the same 16 pixel block. + + +
    + +
    + + Inefficient UV Layout + UV islands share blocks in the same 16 pixel grid. The compositor treats this as one large group. + +
    +
    +
    + +
    + + Optimized UV Layout + UV islands are near each other but do not share any blocks on the 16 pixel grid. The compositor treats these as separate groups. + +
    +
    +
    + +- **Use Smaller Islands** — When possible, use smaller islands to simplify layout and packing. This can help prevent a UV island for one body part incorrectly applying to another as the compositor can't differentiate the islands. + + +
    + +
    + + Inefficient UV Island + Several UV islands overlap into other island spaces on the 16 pixel grid. The compositor treats them as a single large object and may not optimize efficiently. + +
    +
    +
    + +
    + + Optimized UV Islands + By using smaller islands, none of the UV islands overlap on 16 pixel blocks. The compositor can easily identify them as smaller block groups to repack efficiently. + +
    +
    +
    + +By optimizing your UV layouts, you can prevent unexpected texture conflicts, save space, and improve performance. The following is an example of how Studio's compositor can process the same character body UV layouts with and without optimizations: + +
    + +
    + + Texture Repacking with Inefficient UVThe islands share too many of the same 16 pixel blocks and causes the compositor to combine many islands as one. In this example, the compositor incorrectly packs the island for the torso area by including several other islands as well. + +
    +
    + +
    + +
    + + Texture Repacking with Optimized UVThe islands do not share any 16 pixel blocks and allows the compositor to correctly identify each island. This ensures that the compositor correctly packs the island specifically for the required part and prevents unnecessary UV space from being saved and repacked. + +
    +
    diff --git a/.cursor/rules/roblox/art/overview-dcc.md b/.cursor/rules/roblox/art/overview-dcc.md new file mode 100644 index 00000000..4570215f --- /dev/null +++ b/.cursor/rules/roblox/art/overview-dcc.md @@ -0,0 +1,54 @@ +--- +title: Work with third-party software +description: An overview of how to incorporate content created from other software into Studio. +--- + +Creators on Roblox often leverage third-party creation tools to make custom assets and content. These external tools typically specialize in areas like **3D modeling**, **texture creation**, or **audio editing**, and offer additional features and flexibility that complement the Roblox Engine. Check out [Roblox staff 3D art articles](https://devforum.roblox.com/tags/c/resources/roblox-staff/278/art) for guides, tips, and tutorials on using various third-party software. + +In most workflows, you create custom assets in [third-party software](#examples-of-third-party-software), export them as a common file type, and then [import the file into Studio](#import-to-studio). + +## Examples of third-party software + +The following are examples of third-party software that creators commonly use: + +- **3D modeling software** + + - Creators use external 3D modeling software such as [Blender](https://www.blender.org/), [Maya](https://www.autodesk.com/products/maya/overview), or [Cinema 4D](https://www.maxon.net/en/cinema-4d) to design intricate and detailed 3D models. These models can include characters, props, and environmental assets. + +- **Image editors and texture creation tools** + + - Graphics designers and texture artists can use tools like [Photoshop](https://www.adobe.com/products/photoshop) or [Substance Painter](https://www.adobe.com/products/substance3d-painter) to create high-quality images. You can use these images for graphic interfaces or as textures for your 3D models. These tools allow for detailed painting, mapping, and manipulation of textures to achieve realistic or stylized effects. + +- **Audio editing software** + + - Creators working on sound design or music for their Roblox experiences might use external audio editing software like [Audacity](https://www.audacityteam.org/) or [Reaper](https://www.reaper.fm/). These tools allow for precise control when creating audio assets. + +By using third-party software, creators can tap into specialized features, workflows, and expertise, while expanding their creative possibilities and enhancing the overall quality of their Roblox experiences. + +## Import to Studio + +Studio provides several tools to get your third-party content into Studio depending on the type of asset you upload: + +- Models + + - Uploaded models must follow Studio's [modeling specifications](../art/modeling/specifications.md). + - Studio's [3D Importer](../art/modeling/3d-importer.md) supports `.gltf`, `.fbx`, `.obj` file formats. + - You can also use tools like the [Roblox Blender plugin](../art/modeling/roblox-blender-plugin.md) to connect your modeling software to Studio and directly upload your modeling assets between applications. + +- Images + + - Uploaded textures must follow Studio's [texture specifications](../art/modeling/specifications.md). + - Studio's [Asset Manager](../projects/assets/manager.md) supports `.png`, `.jpg`, `.gif`, `.tga`, or `.bmp` file formats and allows for bulk file imports. + +- Sounds + + - Uploaded sounds must follow Roblox's [audio asset requirements](../audio/assets.md#import-audio). + - Studio's [Asset Manager](../projects/assets/manager.md) supports `.ogg`, `.mp3`, `.flac`, and `.wav` file formats and allows for bulk file imports. + +- Video + + - You can import video assets in either `.mp4` or `.mov` format if all of the [requirements](../ui/video-frames.md) are met. + + +Roblox performs asset moderation on upload of any asset type. Roblox can also moderate assets after the initial upload. For more information, see [Asset moderation](../projects/assets/index.md#asset-moderation). + diff --git a/.cursor/rules/roblox/art/overview-studio.md b/.cursor/rules/roblox/art/overview-studio.md new file mode 100644 index 00000000..d621aec6 --- /dev/null +++ b/.cursor/rules/roblox/art/overview-studio.md @@ -0,0 +1,222 @@ +--- +title: 3D art and Studio +description: An overview of fundamental 3D art tools, concepts, workflows, and resources for Roblox Studio. +--- + +[Roblox Studio](../studio/setup.md) includes free powerful 3D creation tools that enable you to effectively contribute to asset creation, world building, and more. Whether you are just getting started, or are looking for a refresher on Studio tools, this guide provides an overview on using Studio for 3D art creation. + +Each of the following sections include a brief description as well as additional links for further learning: + +- [Basic layout of Studio's interface](#studio-interface) — Familiarize yourself with the various panels and tools available in Studio to navigate effectively. +- [How to use assets and packages](#assets-and-packages) — Learn to import, edit, and share assets and packages to enhance your workflow and collaboration. +- [3D modeling within Studio](#3d-modeling) — Explore the fundamentals of creating and importing 3D models within Studio. +- [Materials and textures](#materials-and-textures) — Discover how Roblox uses materials and textures with your models to enhance the surface appearance of your objects. +- [Environments](#environments) — Craft immersive environments using terrain tools, lighting effects, and atmospheric elements. + +## Studio interface + +After [installing Studio](../studio/setup.md), familiarize yourself with Studio's many 3D art tools and interfaces. While you can customize Studio to show various layouts and tools, Studio opens with the most commonly used windows by default. + + + +- [Viewport](../studio/ui-overview.md#3d-viewport) — Represents the workspace of a place. The items here are rendered similarly to how a user may view the environment they were to play your experience. + +- [Explorer](../studio/explorer.md) — Shows a hierarchical list of all objects and services in a place. This includes visible objects, like parts and lights, and non-rendered objects like scripts, sounds, and folders. + +- [Properties](../studio/properties.md) — Populates all the properties of a selected object such as size, position, material, and much more. Many properties can be set through this window, or programmatically through a script. + +- [Toolbox](../projects/assets/toolbox.md) — Contains a selection of [models](../parts/models.md), [images](../parts/textures-decals.md), [meshes](../parts/meshes.md), [audio](../audio/assets.md), [plugins](../studio/plugins.md), [videos](../ui/video-frames.md), and fonts made by Roblox or Roblox community members. + +- [Asset Manager](../projects/assets/manager.md) — Lets you manage [places](../production/publishing/publish-experiences-and-places.md) and bulk import assets into your experience. + +- [Output](../studio/output.md) — Displays all error, warning, or manually returned messages from the Roblox engine. This window is useful for troubleshooting behavior in your experience. + +For more information on the Studio interface and individual tools, see the [Studio overview](../studio/index.md). + +## Assets and packages + +Before you begin creating, it's important to understand how Roblox handles **assets** and **packages**, the most basic object or group of objects that you can save, use, and share. + +- [Assets](../projects/assets/index.md) are a cloud-based version of an object that you can access any time to use, share, and modify. You can make nearly any object into an asset, such as a prop, building, character, sound, image, script, and more. + +- [Packages](../projects/assets/packages.md) are the Roblox equivalent of Unity **Prefabs** or Unreal **Blueprints**, or a group of assets bundled together to reuse in one or more experiences. Packages can update and propagate their changes to any of their copies across one or more experiences, letting you take advantage of powerful versioning and asset management controls. Roblox recommends that most developers work with packages whenever possible. + +All assets and packages save to your account's [Toolbox](../projects/assets/toolbox.md) for you or any associated [groups](../projects/groups.md) to access. You can also manage your saved assets and packages in the **Creations** section of your [Creator Dashboard](https://create.roblox.com/dashboard/creations?activeTab=Model). + +You can also upload your assets to share on the [Creator Store](#creator-store), and sell certain avatar assets to Roblox's [Marketplace](#marketplace) for users to purchase and equip. + +### Creator Store + +The [Creator Store](../production/creator-store.md), accessible through the [web](https://create.roblox.com/store/) and directly inside Studio's [Toolbox](../projects/assets/toolbox.md), contains millions of assets by Roblox and the Roblox community for use in Studio and your experiences. Anyone can contribute their assets to the store, including models, images, meshes, audio, plugins, and more. + +Roblox also provides [free high quality assets](https://create.roblox.com/store/models?creatorName=Roblox), many of which are used in the following showcases: + + +
    +

    [Mystery of Duvall Drive](https://www.roblox.com/games/7902470429/The-Mystery-of-Duvall-Drive)

    + +
    ⟩  [Behind-the-scenes](../resources/the-mystery-of-duvall-drive/index.md)
    +
    ⟩  [Official model packs](https://create.roblox.com/store/models?creatorName=Roblox&includeOnlyVerifiedCreators=true&keyword=duvall+drive&pageNumber=1&querySource=0)
    +
    +
    +

    [Beyond the Dark](https://www.roblox.com/games/7208091524/Beyond-the-Dark-Vistech-Showcase)

    + +
    ⟩  [Behind-the-scenes](../resources/beyond-the-dark/index.md)
    +
    ⟩  [Official model packs](https://create.roblox.com/store/models?creatorName=Roblox&includeOnlyVerifiedCreators=true&keyword=beyond+the+dark&pageNumber=1&querySource=0)
    +
    +
    +

    [Realistic Forest Demo](https://www.roblox.com/games/5326950832/Roblox-Realistic-Forest-Demo)

    + +
    +
    + +### Marketplace + +The **Marketplace** is where all Roblox users can purchase virtual cosmetics, such as accessories and clothing, and various character bodies that they can save to their Roblox account and set as their Roblox avatar character. + +To sell assets on the Marketplace, your creation must follow specific avatar specifications and meet certain policies and guidelines. For more information, see [Avatar](../avatar/index.md) and [Marketplace](../marketplace/index.md). + +## 3D modeling + +3D modeling is the process of creating three-dimensional digital representations of objects or environments. Roblox supports [basic 3D modeling](#basic-parts) in Studio, using primitive parts and allowing you to combine, subtract, and intersect the basic parts into more complex models. + +Roblox also supports [custom 3D models](#mesh-parts) created from 3D modeling software such as Maya and Blender. This includes advanced support for custom models and meshes that include modern textures, animation, and avatar-related features. + + +
    + A single gray sphere part +
    Basic sphere part
    +
    +
    + A bright blue hollow bowl that was made with solid modeling operations. +
    Bowl created with solid modeling
    +
    +
    + A high-quality treasure chest mesh with a texture. +
    [Mesh](#mesh-parts) with texture
    +
    +
    + +### Basic parts + +Studio natively supports basic parts that allow you to quickly add simple geometry to your experience. This is ideal for creating simple environments or even greyboxing or prototyping a more complex 3D space. + +Basic parts include the following benefits: + +- You can quickly add and modify parts directly in Studio. +- Parts are performant and work well with Roblox's native physics behavior. +- You can quicly modify the surface appearance of parts using materials and textures. +- In many cases, a mix of basic parts and advanced custom mesh and models can work together to quickly create an immersive and performant environment. + +For more information on using basic parts, as well as solid modeling operations, see [Parts](../parts/index.md). + +### Mesh parts + +Meshes are collections of vertices, edges, and faces that make up a 3D object. Unlike parts, which you can directly create in Studio, you first create meshes in a third-party modeling application like Blender or Maya before importing the model file into Studio. After importing a mesh, Studio represents the mesh object as a `Class.MeshPart`. + + + +
    + A Roblox avatar wearing a glossy puffy jacket and jeans +
    Create custom accessories, clothing, and characters that anyone can wear and use.
    +
    +
    + A floating alien creature in space, from the Beyond The Dark experience +
    Design a custom character unique to your experience.
    +
    +
    + A cluttered interior room with a candle in the forefront and spooky interior lighting from the Mystery of Duvall Drive experience +
    Use custom meshes and models to give your environments ambiance and depth.
    +
    +
    + +For more information on creating custom meshes, see [Custom meshes](../art/modeling/index.md). + +## Materials and textures + +It's always important to consider the surface appearance of your objects, as this empowers you to create cohesive and engaging assets and environments. Studio includes many tools to manage the look and feel of your assets, primarily by customizing your objects with [materials](#materials) and [textures](#textures). + +### Materials + +Materials allow you to quickly set the visual and physical properties of objects. While Roblox provides dozens of preset materials that you can set your parts to, you can also use the [Material Generator](../parts/materials.md#material-generator) to create your own custom materials using a prompt. + +
    + + + + + + +
    Materials generated by [Material Generator](../parts/materials.md#material-generator) using a natural language prompt
    +
    + +Materials also affect physical properties beyond appearance. See [Materials](../parts/materials.md) for more information. + +### Textures + +Textures are 2D images that you can apply to the surface of an object to change its appearance. Unlike materials, textures are purely visual and never affect the physical properties of the object. In general, you create texture images with third-party software and import them into Studio directly as image files, or baked-in with an imported custom 3D object. You can also use Studio's [Texture Generator](../studio/texture-generator.md) to create brand new textures for your mesh using a natural language prompt. + + +
    + +
    A mesh object sets the shape and geometry of the 3D object
    +
    +
    + +
    A texture image map applies a surface appearance and color
    +
    +
    + +
    The mesh and texture combine to make a unique custom 3D object
    +
    +
    + + +Textures are different from user interface objects which can apply customizable text or an image to the [surface](../ui/in-experience-containers.md) of a part, like a billboard or computer screen. + + +There are two types of textures in Roblox, single image **basic textures** and **advanced PBR textures** that dynamically react to different lighting and environment scenarios. Whether creating assets directly for the [Creator Store](#creator-store) or [Marketplace](#marketplace) or designing content for an experience, you should incorporate PBR textures whenever you need realistic and impressive surface textures. + + +Loading many unique PBR textures at once can affect performance in your experience. When working with many similar meshes, you can save processing power and memory by using a single set of PBR textures and [modifying alpha channels in combination with your mesh object base colors](https://devforum.roblox.com/t/using-alpha-masks-in-color-maps-to-customizetint-base-colors). + +For additional tips on improving performance with your assets, see [Improve performance](../performance-optimization/improve.md#rendering). + + + +
    A humanoid avatar with dreadlocks, a glossy jacket, jeans with decals, and boots. +
    A character model wearing cosmetic assets with PBR textures.
    +
    +
    A realistic leafy bush +
    An environmental prop with PBR textures.
    +
    +
    + +For more information see [Textures and decals](../parts/textures-decals.md) and [PBR textures](../art/modeling/surface-appearance.md). + +## Environments + +Environments refer to the visual and spatial world within your experience. Environments are a combination of elements, such as [terrain](#terrain), [lighting](#lighting), architecture, effects, and more. Roblox provides many tools and services to quickly create high definition environments to elevate your experiences. + +### Terrain + + + +**Terrain** refers to the landscape or outdoor environment of a Roblox experience. Features such as mountains, valleys, hills, bodies of water, and vegetation all make up terrain. To quickly generate terrain, Studio provides a [Terrain Editor](../studio/terrain-editor.md) that allows you to quickly create various types of environments, such as mountains, grass-colored hills, deserts and more. + +While many experiences are include interior spaces, such as a city building or spaceship, it's important to use terrain for outdoor environments whenever possible to ensure performance and expected lighting and environmental behavior. + +For more information, see [Environmental terrain](../parts/terrain.md). + +### Lighting + +A campfire in a glade with a setting sun in the background illuminating the campsite. + +**Lighting** refers to the illumination and visual effect applied to the environment and objects in your experience. It plays a crucial role in setting the mood, atmosphere, and general visual quality of your creations. + +Lighting can be categorized into the following: + +- **Global lighting** — Refers to the luminescence from either the sun or moon in an outdoor environment. You can set the properties of your global lighting by adjusting the `Class.Lighting` service. For additional hands-on instructions on adjusting global lighting, see the [Customize global lighting](../tutorials/curriculums/core/building/customize-global-lighting.md) lesson of our Core Curriculum. +- **Local lighting** — Refers to light sources placed within your experiences, such as pointlights, spotlights, and surface lights. You can modify lighting scenarios based on different interior rooms or sections of your experience by using one or more light sources. + +For additional information on modifying your environment's lighting, see [Global lighting](../environment/lighting.md). diff --git a/.cursor/rules/roblox/art/reaper.md b/.cursor/rules/roblox/art/reaper.md new file mode 100644 index 00000000..963a508b --- /dev/null +++ b/.cursor/rules/roblox/art/reaper.md @@ -0,0 +1,395 @@ +--- +title: Reaper +description: Learn about Reaper tools. +--- + +Reaper is a Digital Audio Workstation (DAW) with a broad range of audio editing tools that allow you to create, manipulate, and export audio streams. Running on Linux, macOS, and Windows systems, this cross-platform application is a popular choice for creators who want to make custom music and sound effects for Roblox experiences. + +While this is by no means an exhaustive list, the following guide offers high-level information on essential Reaper tools and features for audio editing, as well as best practice guidance on designing audio files for Studio. + + +Reaper’s free trial mode is fully functional and extendable, allowing you to try the software and see if you’d like to purchase a license for its use in commercial projects. + +To download the latest version of Reaper, visit [Reaper.fm](https://www.reaper.fm/download.php). + + +## Fundamentals + +Before you take a look at all of the common workflows for creating custom audio for Studio, let's review Reaper's fundamental interface elements that are important for navigating through the application and finding the appropriate menus and controls for your specific audio editing task. + +### Toolbar + +Reaper's UI with the main toolbar highlighted. + +The **Toolbar** contains various tools that let you perform actions common to most audio workflows, such as: + +- Opening or saving a project. +- Accessing your project's settings. +- Enabling a metronome. +- Configuring ripple editing. +- Disabling audio track snapping behavior. + +As you get more familiar with Reaper, you can customize the Toolbar with additional commands and actions for your own workflows. + +### Track Control Panel + +Reaper's UI with the Track Control Panel highlighted. + +The **Track Control Panel** controls the behavior of your audio tracks, such as each track's volume, gain, and effects from plugins, as well as their relationships to other audio tracks. There is only one audio track in the example image, but you can add as many audio tracks as you need for your project. + +### Timeline + +Reaper's UI with the Timeline highlighted. + +The **Timeline** measures the length of your project and provides visual markers to help you position entire or segments of audio tracks in relation to each other. The Timeline in the example image measures time in both measures/beats and minutes/seconds, but you can customize its units of measurement for your own project requirements. + +### Arrange Area + +Reaper's UI with the Arrange Area highlighted. + +The **Arrange Area** lets you view and edit audio tracks within your project using the green scrubber, also known as the cursor. This area represents the main workspace for audio manipulation. + +### Transport Bar + +Reaper's UI with the Transport Bar highlighted. + +The **Transport Bar** lets you control audio recordings and playback, such as: + +- Jumping to the start or end of an audio track. +- Recording additional audio. +- Modifying the time signature, tempo, or playback rate. + +It's recommended to experiment with hotkeys for these actions to make your workflows for efficient. + +### Mixer Control Panel + +Reaper's UI with the Mixer Control Panel highlighted. + +The **Mixer Control Panel** offers a different way to view your tracks. Having the volume meters laid out horizontally in the mixer can allow for more visual clarity on what elements are the loudest in your arrangement, but this is simply a visual preference. All features of Reaper can be utilized with the mixer closed, and many sound designers don't even use the view. + +### FX Plugins + +Reaper's UI with the FX Plugins window highlighted. + +Similar to plugins in Studio, the **Plugins Window** lets you add additional features or functionality to Reaper to make audio editing and workflows easier. Reaper offers over 200 fx plugins with the creation suite for your convenience, and you can import additional plugins from third-party creators. + +## Common workflows + +Now that you know how to navigate the user interface, let's take a closer look at the most common audio editing workflows that allow you to create, manipulate, and export audio streams for Roblox experiences. + + +For more information on any of these workflows, see Reaper's official [Up and Running: A Reaper User Guide](https://www.reaper.fm/userguide.php) documentation. + + +### Create fade ins and outs + +In audio design, it's common to trim a small section off of an audio file, then fade it in and out to help smooth the sound's transition from start to finish. This process is important because ambient sounds in the real world don't often start and stop suddenly; if they did, it would feel extremely jarring. + +For example, let's review the following two audio clips of a wind gust; the first audio clip includes fade ins and outs to help the sound feel more natural while the second keeps the initial cut. As you listen to both, notice how the first clip feels realistic while the other feels abrupt. Without these transitions, the sound would break a player's sense of immersion in an experience. + + + + + + + + + + + + +
    Audio with transitionsAudio without transitions
    + +To create fades ins and outs: + +1. Import your audio file. + 1. Select a `.mp3`, `.ogg`, or `.wav` file on your computer. + 1. Drag-and-drop the audio file into the **Arrange Area**. +1. Crop the sample until you have a portion of the sound you want to play in your experience. + 1. Hover over the left-side of your audio file until your cursor changes to a double-sided arrow icon. + 1. Click-and-drag the audio sample to where you want to start your fade in. + 1. In a similar process, click-and-drag the right-side of your audio file to where you want to finish your fade out. + + + +1. Transition the sample in and out. + 1. Hover over the top-left corner of your audio sample until your cursor changes to a curve icon. + 1. Click-and-drag the audio sample to where you want to finish your fade in. + 1. In a similar process, click-and-drag the top-right corner of your audio sample to where you want to start your fade out. + + + +1. **(Optional)** Change the transition's curve type. + 1. Right-click either your fade in or out curve. A pop-up menu displays with multiple curve types. + 1. Select a new curve. The sound fades in or out according to the new curve type. + + + +### Compress audio + +In audio design, the dynamics of a sound refer to the sound's volume and how that volume changes over time. For example: + +- An explosion's sound is **dynamic** because it starts extremely loud, then fades to a quiet echo in a few seconds. +- A waterfall's sound is **non-dynamic** because even if you were to record the waterfall for a few minutes, it would likely remain at roughly the same volume. + +While both of these examples have their time and place in projects, compressing audio allows you to reduce the dynamic range of a sound by lowering the volume of loud peaks within a set ratio. This results in the loudest parts of a sound becoming more similar in volume to the quietest parts of a sound. + + + + + + + + + + + + +
    Audio with compressionAudio without compression
    + +This is important because without compression, some sounds can be significantly louder than others and drown out important audio cues throughout your experiences, especially when they play through speakers that struggle with wide dynamic ranges, like mobile devices. + +To compress audio: + +1. In the **Track Control Panel**, navigate to the audio track that you want to compress, then click the **FX** button. The **Plugins window** displays. +1. Search for **ReaComp**, short for Reaper Compressor, select the result, then click the **Add** button. A new compressor window displays. + + Reaper's Plugins Window with the ReaComp plugin highlighted. + +1. Lower the **Threshold** to the highest peak you want your audio to be able to have before it starts being compressed. + + Reaper's Compressor UI with the Threshold toggle highlighted. + +1. Play your audio while looking at the compressor window. A bright red section displays when sounds go over your set threshold. In the example image, the red meter reads roughly -8; this means that the loud parts of the sound have been turned down by about 8 decibels. + + Reaper's Compressor UI with the compression bar highlighted. + +1. For further compression configurations: + 1. Increase the **Ratio** to make the effect of volume reduction more pronounced. + 1. Customize your **Attack** and **Release** times to change how quickly the compressor starts and finishs compressing your audio track. + +### Equalize frequencies + +As you are editing your audio, it occasionally becomes necessary to make adjustments to its frequency balance so that you can do things like: + +- Increase the volume of its bright, high frequencies. +- Lower the volume of its bassy, low frequencies. +- Remove a shrill, harsh tone from the middle range of frequencies. + +This process is called **equalizing**, and it's important because it allows you to mimic realistic acoustics for different gameplay areas. For example, if a player is underwater, high frequencies would naturally be muffled and low frequencies would be easily audible, but if the player moved to an open space outside, no muffling would occur, and high frequencies would be audible again. + +Let's look at this in practice with two audio clips of a rain sound; the first audio clip includes a lowered high shelf while the second doesn't include any equalizing. As you listen to both, notice how the first clip feels muted and warm like it's hitting the window while you are inside, and the second clip feels cold like you are outside. + + + + + + + + + + + + +
    Audio with equalizing frequenciesAudio without equalizing frequencies
    + + +Equalizing frequencies is an art form, and it takes time to figure out what configurations work to meet the needs of your experiences. It's recommended to experiment often until you find what sounds best to you. + + +To equalize frequencies in a sound: + +1. In the **Track Control Panel**, navigate to the audio track that you want to equalize its frequencies, then click the **FX** button. The **Plugins window** displays. +1. Search for **ReaEQ**, short for Reaper Equalizer, select the result, then click the **Add** button. A new equalizer window displays with four enabled bands. + + Reaper's Plugins Window with the ReaEQ plugin highlighted. + +1. Select any of the enabled bands, then set **Type** according to what frequencies you want to equalize. Most use case use one of the following: + + - **Low Shelf** - Moves the gain below the frequency setting. This is typically the first band. + - **High Shelf** - Moves the gain above the frequency setting. This is typically the last band. + - **Band** - The volume is raised or lowered on either side of the frequency, and the range is determined by the bandwidth setting. + - **Low Pass** - Filters frequencies above the frequency setting. + - **High Pass** - Filters frequencies below the frequency setting. + + Reaper's Equalizer UI with the first band highlighted and the Type dropdown set to Low Shelf + +1. Play your audio while looking at the equalizer window, and make any necessary adjustments for the sound quality you want. + +### Reduce noise + +When you record audio, it is almost impossible to completely avoid capturing additional undesirable noise, such as the hum of an air conditioning unit, street traffic, or planes flying overhead. For this reason, it's important to reduce noise in your audio clips so that players can focus on what matters most without distraction. + + + + + + + + + + + + +
    Audio with noise reductionAudio without noise reduction
    + +While subtle noise reduction may seem unnecessary, when multiple layered sounds play at the same time, such as a character's footsteps, dialogue, and an ambient backdrop, the subtle noise becomes much more noticeable. This process ensures that all of our audio stands out, especially when players are wearing headphones. + +To reduce noise: + +1. In the **Track Control Panel**, navigate to the audio track that you want to equalize its frequencies, then click the **FX** button. The **Plugins window** displays. +1. Search for **ReaFir**, short for Reaper Finite Impulse Responser, select the result, then click the **Add** button. A new finite impulse response window displays. + + Reaper's Plugins Window with the ReaFir plugin highlighted. + +1. Configure the following settings: + + 1. Set **Mode** to **Subtract**. New settings display. + 1. Enable **Automatically build noise profile**. + + Reaper's Plugins Window with the noise reduction settings highlighted. + +1. Play the part of your sound that contains the noise you want to reduce for several seconds, but do **not** play the part of the sound you want to keep. This step teaches the plugin what the undesirable frequencies are. +1. When the plugin has learned the spectrum of your noise, disable **Automatically build noise profile**. +1. Play your audio to hear it again to hear it with reduced noise. + +### Create audio variations + +For audio design in experiences, it's important to create variations of sounds that players will hear often during their gameplay, such as footsteps, sword swings, or collection feedback. In the same way that real world sounds almost never repeat exactly the same, variations in sound improves player immersion and leads to a dynamic player experience. + + + + + + + + + + + + +
    Audio with variationsAudio without variations
    + +There are many ways to create variation in your audio, but the following step-by-step instruction will focus on a few simple steps you can take to create three alternatives in less than three minutes. + +To create variations in your audio: + +1. In the **Arrange Area**, duplicate your audio clip until you have three exact copies. The first copy will remain your original sound while the other two will become your variations. + + Reaper's Arrange Area with three copies of an audio segment. + +1. Right-click the second copy, then from the contextual menu, select **Item properties…**. The **Media Item Properties** window displays for the second copy. + + + +1. In the **Pitch Adjustment** field, raise or lower the pitch of the sound. +1. Click the **Apply** button. +1. Right-click the third copy, then from the contextual menu, select **Item properties…**. The **Media Item Properties** window displays for the third copy. +1. In the **Playback rate** field, increase or decrease the playback rate. +1. Click the **Apply** button, then play your original and both variations to hear the difference between all three. + +### Loop audio + + +For a step-by-step tutorial from an official Roblox Sound Designer on looping sounds for experiences, see [Creating Perfect Audio Loops](https://devforum.roblox.com/t/creating-perfect-audio-loops/2849057). + + +When you record an ambient sound in the real world, it almost never loops perfectly. Even monotonous, non-dynamic sounds like the hum of an air conditioner will click and pop as they loop, breaking player immersion and pulling them out of their gameplay. + + + + + + + + + + + + +
    Audio with seamless loopsAudio without seamless loops
    + +This becomes more obvious when there are multiple looping ambient tracks that layer on top of one another. For example, let's say you have an exploration experience with frog croaking, insects chirping, wind gently breezing by, and an upbeat background track. As these sounds loops, there may be harsh volume and/or frequency jumps. + +In the best case scenario, this just annoys players, but in the worst case scenario, it can cause them to leave the experience altogether. With a little extra effort, you can create seamless loops that keep your intended mood without disruption. + +To create a loop: + +1. Ensure your audio clip is long enough to avoid the risk of being too obvious if it loops. For most use cases, it should be at least 15 seconds. +1. In the **Arrange Area**, find a small point in the sound where your waveform(s) cross the Z axis, or `0`. This means that the sound has no amplitude, so it won't pop or click when the sound loops. + + An audio track with the cursor over the loop point. + +1. Press S to split the track. Your audio track is now cut into two segments. + + An audio track with two segments, seperated at the loop point. + +1. Move the second clip so that it plays before the first clip and has a slight overlap indicated by the red outline. + + + +1. Play your audio to hear it loop seamlessly. + + + +### Export audio + +After you finish editing your audio, you can export it for use in Studio. The following settings meet the requirements of most use cases, but as you become a more advanced user of Reaper, you can customize the settings for your own projects + +To export audio: + +1. In the **Arrange Area**, click-and-drag over your audio sample to highlight what you want to export. +1. In the menu bar, navigate to **File** > **Render…**. The **Render to File** window displays. + + + +1. Configure the following settings: + 1. Set **Source** to **Master mix**. + 1. Set **Bounds** to **Time selection** to export your selection in the Arrange Area. + 1. Set **Directory** to the location you want to download your file. + 1. Set **Name** to what you want to call your file. + 1. Set **Sample Rate** to `48000` **Hz** to ensure a high quality level at standard pitch, while also keeping the file size optimally small for lower memory footprint. + + + If you want a higher quality and plan to pitch the sound down at runtime dynamically, you can increase the quality to `96,000` **Hz**. + + + 1. Set **Channels** to **Stereo** for 2 channels or **Mono** for 1 channel. + 1. Set **Primary output format** to **OGG vorbis**. This is the preferred file type for experiences as it doesn't add any additional silence to the start or end of your audio. + + + Do not use the `.mp3` output format as it will add a few milliseconds of silence to the beginning of your audio. + + + 1. Set **VBR quality** to `0.9` to increase the quality. + 1. At the bottom of the window, click **Render 1 file**. A new window displays with a preview of what your audio looks like. + + + + +For information on how to use your new custom audio files in experiences, see the [Audio](../audio/index.md) guides. + diff --git a/.cursor/rules/roblox/art/test-classic-clothing.md b/.cursor/rules/roblox/art/test-classic-clothing.md new file mode 100644 index 00000000..9ab59c63 --- /dev/null +++ b/.cursor/rules/roblox/art/test-classic-clothing.md @@ -0,0 +1,71 @@ +--- +title: Test classic clothing +description: How to test your classic clothing items before uploading them to the Marketplace. +--- + + +Current user-generated avatars on the Marketplace do not support 2D classic clothing. For information on creating modern 3D cosmetics, including rigid accessories and clothing items, see [Get started](../avatar/index.md). + + +To ensure the best quality results, you can test your classic clothing before uploading or selling. You can test your clothes without needing to pay any fees by using [Roblox Studio](../studio/setup.md). + +1. From the toolbar's **Avatar** tab, click **Character**. +2. Choose a **Block Avatar** rig type from the popup menu. An avatar mannequin named **Rig** appears in the 3D workspace. + + + +3. In the **Explorer** window, hover over the **Rig** object, click the **⊕** button and insert either a **ShirtGraphic** (T‑shirt), **Shirt**, or **Pants** object according to the clothing you want to test. + +4. Locate and select the new **Shirt Graphic** or **Clothing** object parented under **Rig**. + + + +
    + +
    Shirt Graphic (T-shirt)
    +
    +
    + +
    + +
    Clothing (Shirt/Pants)
    +
    +
    +
    + +5. In the **Properties** window, locate the associated property as follows: + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Clothing TypeParent ClassProperty
    **T-Shirt**`Class.ShirtGraphic``Class.ShirtGraphic.Graphic|Graphic`
    **Shirt**`Class.Shirt``Class.Shirt.ShirtTemplate|ShirtTemplate`
    **Pants**`Class.Pants``Class.Pants.PantsTemplate|PantsTemplate`
    + +6. Click inside the property's row and select the image you uploaded to Roblox. This applies the clothing texture to the **Rig** character. + + + + +After testing, you can [upload and sell](./upload-classic-clothing.md) your asset to the Marketplace. + diff --git a/.cursor/rules/roblox/art/upload-classic-clothing.md b/.cursor/rules/roblox/art/upload-classic-clothing.md new file mode 100644 index 00000000..f6189969 --- /dev/null +++ b/.cursor/rules/roblox/art/upload-classic-clothing.md @@ -0,0 +1,40 @@ +--- +title: Upload classic clothing +description: How to upload your classic clothing to the Marketplace and check moderation status. +--- + + +Current user-generated avatars on the Marketplace do not support 2D classic clothing. For information on creating modern 3D cosmetics, including rigid accessories and clothing items, see [Get started](../avatar). + + +After [creating](./classic-clothing.md#creating-classic-clothing) and [testing](./test-classic-clothing.md) your classic clothing design, you can upload the clothing item to the Marketplace for a [fee](../marketplace/marketplace-fees-and-commissions.md#classic-clothing). + +## Upload new creations + +To upload a custom clothing item: + +1. Navigate to your [Creator Dashboard](https://create.roblox.com/dashboard/creations). +2. Navigate to **Avatar Items**. +3. Select the **Classics** tab. +4. Drag and drop your image file into the upload box. Alternatively, you can click **Upload Asset** and upload your file on the next page. +5. On the Upload Asset page, set the Asset Type dropdown to **T-Shirt**, **Shirt**, or **Pants**. +6. Complete the **Name** and **Description** fields. These fields help users find your assets and allow you to organize your creations. +7. Click the **Upload** button at the bottom of the page. + 1. See [Fees and commissions](../marketplace/marketplace-fees-and-commissions.md#classic-clothing) for more information on the fees for listing avatar items on the Marketplace. + 2. See [Manage existing assets](#manage-existing-assets) for information on modifying and selling your creations. + +## Manage existing assets + +To see your moderation status, place your item on sale, or modify your item settings: + +1. Navigate to your [Creator Dashboard](https://create.roblox.com/dashboard/creations). +2. Navigate to **Avatar Items**. +3. Select the **Classics** tab. +4. Use the **Classic Type** dropdown to filter by the type of classic clothing creation. +5. Click on the asset to navigate to the asset's Configure page. +6. You can modify the following fields: + 1. **Item Name** — sets the public-facing name of the asset. + 2. **Item Description** — sets the public-facing description of the asset. + 3. **On Sale** — when enabled, users can view and purchase this item on the Marketplace. + 4. **Set a price** — value of Robux that the creation sells for on the Marketplace. + 1. See [Fees and commissions](../marketplace/marketplace-fees-and-commissions.md#classic-clothing) for more information. diff --git a/.cursor/rules/roblox/art/validation-errors.md b/.cursor/rules/roblox/art/validation-errors.md new file mode 100644 index 00000000..dd64becb --- /dev/null +++ b/.cursor/rules/roblox/art/validation-errors.md @@ -0,0 +1,780 @@ +--- +title: Validation Errors +description: A list of all validation errors that can occur when uploading avatar items to the Marketplace. +--- + +When [uploading avatar items](../marketplace/publish-to-marketplace.md#upload-an-asset) to the Marketplace, Roblox validates the submission to ensure that the asset meets the appropriate specification for that asset type, such as [clothing specifications](./accessories/clothing-specifications.md). + + +Assets that aren't intended for the Marketplace, such as those used only in-experience, do not need to pass this validation process. However, you may find this validation check useful to troubleshoot issues with any custom accessories or bodies. + + +## Mesh + +Mesh validation errors refer to generic issues with your `Class.MeshPart`. This can range between geometry budget issues, size, missing IDs, unexpected data models, and more. + +See the following specifications for mesh requirements: + +- [Generic mesh specifications](./modeling/specifications.md) +- [Rigid accessory mesh specifications](./accessories/specifications.md#geometry-and-budgets) +- [Clothing mesh specifications](./accessories/clothing-specifications.md#geometry-and-budgets) +- [Body mesh specifications](./characters/specifications.md#triangle-budgets) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Error MessageAdditional notes
    `%s` asset size is larger than the max allowed bounding size of `%s`. You need to scale down or remodel the asset.

    Full body size is larger than the max allowed bounding size of `%s`. You need to scale down or remodel the asset
    Try rescaling your asset to keep the original aspect ratio. If that doesn't resolve the issue, try to scale along the axis that is failing validation.
    `%s` asset size is smaller than the min allowed bounding size of `%s`. You need to scale up or remodel the asset.

    Full body size is smaller than the min allowed bounding size of `%s`. You need to scale up or remodel the asset
    Try rescaling your asset to keep the original aspect ratio. If that doesn't resolve the issue, try to scale along the axis that is failing validation.
    `%s` has size larger than max allowed bounding size. The max size for type `%s` is [`%f`, `%f`, `%f`]Your model has one or more small pieces of geometry disconnected from your main mesh that contribute to the overall size. This issue is usually associated with small pieces or particles. You need to either remove these small pieces from your model or scale them to become visible.
    Mesh resolution of `%d` for model `%s` is higher than max supported number of triangles `%d`. You need to retopologize your model to reduce the triangle count. The resolution of your model mesh is too high. You need to retopologize the model to bring the resolution down below the [allowed limits](../art/modeling/specifications.md#geometry).
    Model mesh `%s` resolution of `%d` is higher than max supported value of `%d`. You need to retopologize your model and try again.

    Your mesh exceeds the max triangle limit for UGC upload requirements.
    The resolution of your model (number of triangles) is higher than the maximum [allowed limit](../art/modeling/specifications.md#geometry). You need to retopologize and remove enough triangles to bring the total count below this limit.
    `%s` is not visible enough from the `%s`. The most visible region found scored `%.2f` but needs to be above `%.2f`.

    Mesh for `%s` is completely invisible from the `%s`.
    Your accessory or body part is too thin along one dimension (`X`, `Y`, or `Z`) and can become invisible (or hardly visible) during gameplay. You need to scale up your asset along the axis failing validation.
    Model meshId mismatch between `MeshPart.MeshId` and `SpecialMesh.MeshId` for `%s`. You need to match the meshIds and try again.Verify `Class.Model` includes a `Class.MeshPart` or `Class.SpecialMesh` with the correct IDs.
    The total surface area of model mesh `%s` is `%f`, it cannot be greater than `%d`. You must reduce the number and/or size of all triangles.

    The total surface area of model mesh `%s` is greater than `%d`. You must reduce the number and/or size of all triangles.
    Your model mesh has too many triangles on screen that cannot be culled. This will cause performance problems during gameplay when using lower powered mobile devices. You need to reduce the triangle count of your model.
    Detected zero-area triangle in model mesh `%s`. You need to edit the mesh to remove zero-area triangles.Your model mesh has some vertices too close to each other that they create zero area triangles. You need to move these vertices apart to resolve this issue.
    Detected two or more vertices in model mesh `%s` sharing near identical positions. You need to position vertices by at least `%s` apart from each other.Make sure there are no coincident vertices in your model mesh.
    Bounds for the mesh `%s` are not centered at the origin. The max allowed distance is `%f`The asset model mesh is too far away from the origin. Usually the center of the model and the origin of the coordinate system should coincide.
    `%s` mesh is too small or made of disconnected pieces that are too small.

    Detected `%s` centered around `%s` that increases `%s` bounding box. Remove the geometry or increase its size so that it is more visible.
    The model mesh is too large. You need to scale it down.
    `%s` is more than max difference `%f` in size compared to the other mesh `%s`. You need to edit the model to adjust its size.The model mesh is too big. You need to scale it down.
    + +## Texture + +Texture errors refer to generic issues with your `Class.MeshPart.TextureID` or `Class.SurfaceAppearance`. Depending on the type of asset and texture you are creating, you may need to use a third-party software to fix and re-export. + +See the following resources: + +- [General texture requirements](./modeling/texture-specifications.md) +- [PBR texture overview](./modeling/surface-appearance.md) +- [Clothing texture requirements](./accessories/clothing-specifications.md#textures) +- [Body texture requirements](./characters/specifications.md#textures) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Error MessageAdditional notes
    Failed to execute UV check for `%s`. Make sure the UV map exists and try again.
    Failed to execute texture size check for `%s`. Make sure the textureId is valid and try again.
    Model textureId mismatch between `MeshPart.TextureID` and `SpecialMesh.TextureId` for `%s`. You need to match the textureIds and try again.Verify textures are properly set up.
    Invalid material setup for `%s`. Accepted values are: `%s`
    Invalid vertex color found in mesh model `%s`. You need to edit the color map to be all white and try again.

    Invalid vertex color found in mesh model `%s`. You need to edit the color map to be all white with no transparency and try again.
    TextureID and Surface Appearance are both defined for MeshPart `%s`. Publishing will only use Surface Appearance
    `%s` has an empty TextureID and no child surface appearance instance. You need to define at least one of them.
    Invalid textureID used in mesh `%s`. Make sure the texture exists and try again.
    Your textures exceeds the max texture size limit for UGC upload requirements.

    Texture resolution `%d`x`%d` px found in `%s` is higher than max size supported value of `%d`x`%d` px. You need to reduce the texture resolution.
    You need to change the [resolution of your textures](../art/modeling/specifications.md#textures) to be within the allowed limits.
    Model textureId mismatch with rigid accessory `SpecialMesh.TextureId` for `%s`. You need to match the textureIds and try again.Verify textures are properly set up.
    Failed to execute UV mismatch check for `%s`. Make sure UV map exists and try again.
    + +## Rigging and skinning + +Rigging and skinning errors refer to issues with your rigging and skinning data. Depending on the type of error, you may need to use a third-party software to fix and re-export. + +See the following specifications for rigging and skinning requirements: + +- [Generic mesh specifications](./modeling/specifications.md#rigging-and-skinning) +- [Clothing rigging specifications](./accessories/clothing-specifications.md#rigging-and-skinning) +- [Body rigging specifications](./characters/specifications.md#rigging) + +Skinning is the assignment of vertices of your rendered mesh to the underlying rig. For additional resources, see the rigging and skinning requirements for [clothing](./accessories/clothing-specifications.md#rigging-and-skinning) and [bodies](./characters/specifications.md#rigging). + + + + + + + + + + + + + + + + + + + +
    Error MessageAdditional notes
    Detected mismatch between model and skinned data for `%s`. You need to re-skin your model to fix this issue.The number of vertices in the model mesh do not match the number of skin weights provided. You need to reskin your model.
    Missing skinning data for `%s`. You need to skin your model.
    + +## Cage mesh + +Cage errors refer to generic issues with your `Class.WrapLayer` or `Class.WrapTarget`. Depending on the type of error, you may need to use a third-party software to fix and re-export. + +See the following resources for caging: + +- [Caging best practices and video](./accessories/caging-best-practices.md) +- [Clothing caging specifications](./accessories/clothing-specifications.md#cage-meshes) +- [Body outer cage specifications](./characters/specifications.md#outer-cages) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Error MessageAdditional notes
    WrapTarget `%s` found under `%s` has a CageOrigin position greater than %. You need to set `CageOrigin.Position` to `0`,`0`,`0`.Cage origin must be zero to properly align with its corresponding body or accessory.
    Average distance between outer cage to mesh is too high. Mesh seems to be outside of the outer cage.

    Average distance between outer cage to mesh is too high %. Make adjustment to cage to fit the mesh better.
    The outer cage is too far away from its corresponding body or accessory model mesh. You need to [remodel the outer cage](../art/accessories/caging-best-practices.md) and bring its vertices closer to the model mesh.
    Validation detected `%d`% of the accessory is outside its outer cage. Make adjustments to have more of the accessory placed between the cages.The outer cage needs to envelop the model mesh of its corresponding accessory. This check has detected a large portion of the model mesh is outside its outer cage. You need to edit the model and/or the cage to fix this issue.
    The average distance between the layered accessory `%s` and its outer cage is too large. You need to edit the cage to be within `%s` from the accessory.The outer cage is too far away from its corresponding body or accessory model mesh. You need to [remodel the outer cage](../art/accessories/caging-best-practices.md) and bring its vertices closer to the model mesh.
    There are cage vertices inside the layered accessory mesh `%s`, which could lead to interpenetration issues during fitting. You need to edit the cage mesh to fix this intersection issue.The layered accessory mesh vertices need to be positioned between the [inner and outer cages](../art/accessories/caging-best-practices.md). Whenever a mesh vertex passes through the cage mesh it causes rendering issues in the area making the accessory look like it is intersecting the body.
    The meshId reference for cage `%s` is invalid or doesn't exist. Please, verify you are using a valid mesh asset and try again.
    Outer cage of `%s` has mesh edits on regions that don't correspond to its current asset type `%s` (i.e. edits on the lower leg cages when asset type is set to 'Head'). You need to check the asset type for the layered accessory `%s`.Your outer cage was deformed in regions that don't envelop any part of your accessory. For example, the outer cage for a hat accessory is expected to deform on the head region and not the left foot. Make sure your outer cage is [properly setup](../art/accessories/caging-best-practices.md) and deforms only where is needed.
    Outer cage of `%s` has mesh edits that place vertices too far away from the model mesh. You need to edit the cage and enforce vertices are at most `%s` away from the model.Ideally the outer cage of an accessory completely envelops its model mesh. There are cases in which you may [intentionally not want to do that](../art/accessories/caging-best-practices.md#caging-protrusions). For example, if the accessory is a wing, you would want the outer cage to envelop only the base of the wing that connects it to the back of the avatar. If the entire wing is enveloped, it'll cause extreme deformations to any additional layered assets equipped.

    This validation checks that the outer cage is enveloping a large enough region of the accessory. You need to edit the outer cage to contain more vertices of the accessory mode mesh.
    Cage `%s` is not watertight (i.e. detected holes in the mesh). You need to edit the mesh and close the holes (may leave eyes and mouth areas open when applicable).There are holes in your cage mesh. You need to fix them and make your cage mesh watertight. For example, if you were to pour water inside the mesh it wouldn't leak.
    Failed to execute cage non-manifold check for `%s`. Make sure cage mesh exists and try again.
    Cage `%s` is non-manifold (i.e. there are edges with 3 or more incident faces). Some vertices are likely too close and welded together as a single vertex causing edges to collapse into a non-manifold. You need to edit the cage mesh to have vertices distant by at least `%s` from each other.There are edges in your cage model mesh that are connected to more than two faces, possibly caused by stacked or very closely positioned vertices. You need to remodel your cage to fix these issues.
    Failed to execute cage detection for `%s`. Make sure the cage mesh exists and try again.
    Detected too many coplanar triangles intersecting in model mesh `%s`. The maximum is `%d` intersections in a `%d` triangle mesh. Edit your mesh to reduce the number of coplanar triangle intersections.Your cage model mesh has an excessive number of triangle faces that are coplanar and intersecting. This causes a visual artifact during gameplay that makes your accessory look like it is blinking in the area of the coplanar triangles. You need to edit the vertex positions of these triangles to untangle the intersections.
    Missing cage for `%s`. You need to provide a cage mesh for each of the 15 body parts making up the R15 body.
    WrapLayer `ImportOrigin.Position` is `%f` from the origin. The max is `%f`. You should move the Position closer to the origin.The import origin position adds an offset between the cage and its corresponding asset. If this offset is too large than the cage will no longer envelope the asset (may end up completely outside the asset).

    This breaks the layered clothing system and makes the asset behave unexpectedly. Ensure that your import origin is set at (`0`,`0`,`0`).
    Failed to execute cage relevancy detection for `%s`. Make sure the cage mesh exists and try again.
    Validation detected `%d` % of the outer cage edits do not cover the accessory. Make sure you are moving the outer cage only where needed.This validation has detected that you moved out many vertices of your outer cage that weren't in the same region as your model geometry.

    You need to verify your outer cage is modified only enough to envelop the accessory model mesh, and stays consistent with the inner cage everywhere else.
    WrapLayer `%s` found under `%s`.`%s` has a CageOrigin position greater than `%f`. You need to set `CageOrigin.Position` to `0`,`0`,`0`.Cage origin position needs to be set to (`0`,`0`,`0`). Otherwise your cage will be moved out and may no longer envelop the accessory being deformed.
    Cage mesh verts referenced in `%s`.`%s`.`CageMeshId` were found that are `%.2f` studs outside the %s render mesh. `%s` studs is the maximum. Please reduce the size of your cage mesh.
    Failed to execute testing render mesh inside bounding box of outer cage modified area. Make sure both cage meshes and render mesh exist and try again.
    Only `%d%%` of the render mesh verts are situated in the modified %s area of the WrapLayer CageMesh (outer mesh). `%d%%` is required. Move the render mesh to be within the modified `%s` area of the WrapLayer CageMesh (outer mesh).
    Missing HSR data for `%s`. Please, try again.The HSR (Hidden Surface Removal) data is calculated in the cloud server and may take a few minutes to be updated for your assets. Wait some time and try again.
    Failed to execute body max cage distance check. Make sure all render meshes and their WrapTarget cage meshes exist, and try again.
    A vertex was found on the `%s`'s cage mesh that is `%.2f` studs away from the closest render mesh. `%s` studs is the maximum. Make the cage mesh more closely match the shape and size of the render mesh.
    + +## Cage UV + +Cage UV errors relate to cage mesh UV issues for layered accessories and bodies. Roblox recommends never altering or manipulating the UVs of your cage objects, although this may occur accidentally when modeling or within Studio. + +See the following for more information and resources: + +- [Caging best practices and video](./accessories/caging-best-practices.md) +- [Clothing caging specifications](./accessories/clothing-specifications.md#cage-meshes) +- [Body outer cage specifications](./characters/specifications.md#outer-cages) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Error MessageAdditional notes
    Failed to load UVs for Inner cage of `%s`. Make sure the UV map exists and try again.
    There are `%d` UV values in `%s` cage that do not belong to the template. Please correct the cage UV.The cage has an invalid UV map, possibly from using an old or third-party cage. Use the UV map and model mesh templates provided in the [official documentation resources](../avatar/resources.md#project-files).
    Failed to load UVs for `%s`. Make sure the model has a valid UV map and try again.
    Detected zero-area triangle in UV map of `%s`. You need to edit the UV map to fix this issue.Your UV map has zero area triangles. You need to fix it and verify all triangles connecting UV points have non-zero area.
    Found invalid UV value outside [`0`, `1`] range for `%s`. You need to edit the UV map to fix this issue.All UV maps need to have values within the range [`0`, `1`].
    Failed to execute UV check for `%s`. Make sure the UV map exists and try again.
    `%s`.`%s` ( `%s` ) should have `%d` unique UVs, but has `%d`. Please make sure the mesh has the required number of unique UVs and try again.Your UV map has many repeated UV values. Use the UV map and model mesh templates provided in the documentation.
    Inner and Outer cage UV for `%s` are mismatched. The Roblox provided cage template should be used to create inner and outer cages with no modifications to the UV map.The UV maps for cages should not be edited. You need to restore the UV map to match that of the templates provided in the documentation.
    Detected modified UV values for mesh `%s`. The original UV map for this model can't be altered.
    Failed to execute excluded modified cage UV check. Make sure both cage meshes exists and try again.
    `%d%%` of modified cage UVs in WrapLayer CageMesh (outer mesh) are outside the expected region of the body. For a `%s` no more than `%d%%` of the modified UVs can be outside the `%s` area. Move your asset to the correct area of the body.
    The WrapLayer CageMesh (outer mesh) for a %s must modify %d%% of the cage UVs in the `%s` area. Currently only `%d%%` are modified. Move your asset to the correct area of the body.
    + +## Accessory + +Accessory errors relate to the rigid or layered accessory components of your asset. + +See the following for more information: + +- [Rigid accessory specifications](./accessories/specifications.md) +- [Clothing specifications](./accessories/clothing-specifications.md) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Error MessageAdditional notes
    Upload of model has too many children assets (Meshes, Textures, etc.) and cannot be processed as is. You need to rearrange the model.
    Asset type `%s` is not a rigid accessory category. It can only be used with layered clothing.
    Model meshId mismatch with rigid accessory SpecialMesh.MeshId for `%s`. You need to match the meshIds and try again.Verify `Class.Model` includes a `Class.MeshPart` or `Class.SpecialMesh` with the correct IDs.
    Accessory MeshPart `%s` must contain a valid meshId. Make sure the mesh referred to by the meshId exists and try again.
    Accessory name must match "Accessory (Name)" format style (i.e. "Accessory (MyAccessory)" if you want to name your accessory ).
    + +## Layered clothing + +Layered clothing errors refer to the layered accessory components of your asset. + +See the following for more information on layered accessories: + +- [Clothing overview](./accessories/layered-clothing.md) +- [Clothing specifications](./accessories/clothing-specifications.md) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Error MessageAdditional notes
    `%s` has `%d` % of vertices too close to each other. Please edit the vertices to have at most `%d` % coincident or close to one another.Your accessory cage has too many vertices close together. This may cause the system to treat them as repeated vertices, or zero area triangles. You need to [edit and move](../art/accessories/caging-best-practices.md) the vertices away from each other in the region(s) they are almost coincident.
    Failed to load layered clothing accessory `%s`. Make sure mesh exists and try again.

    Failed to load texture for layered clothing accessory `%s`. Make sure texture exists and try again.

    Failed to load children assets (Meshes, Textures, etc.) for `%s`. Make sure the assets exist and try again.
    Asset type `%s` is not a layered clothing category. It can only be used with rigid accessories.
    Missing meshId on layered clothing accessory `%s`. Make sure you are using a valid meshId and try again.
    Missing WrapLayer on layered clothing accessory `%s`. You need to create a child WrapLayer and try again.Make sure you converted your model into a layered accessory (you might have [converted to a rigid accessory](../art/accessories/accessory-fitting-tool.md#rigid-accessories) instead or selected the wrong asset type).
    The maximum vertex density has been exceeded. Reduce the number of vertices that are very close to each other.Your accessory cage has too many vertices close together. This may cause the system to treat them as repeated vertices, or zero area triangles. You need to [edit and move the vertices away](../art/accessories/caging-best-practices.md) from each other in the region(s) they are almost coincident.
    + +## Body + +Body errors refer to issues related to body-specific components of your asset. + +See the following for more information on various character body components: + +- [Body specifications](./characters/specifications.md) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Error MessageAdditional notes
    Detected rotation in Attachment `%s`. You must reset all rotation values for this attachment to zero.

    Detected invalid orientation for `%s`. Attachment orientation should be `%s`, but can be rotated up to `%d` degrees in total
    Body attachments, except grip attachments, [should not have an applied rotation](../art/characters/specifications.md#attachments). This would affect all accessories connected to these attachments and can make some accessories look "broken" when equipped to the body.
    Attachment `%s` in `%s` is placed at a position `%s` that is outside the valid range. You need to adjust the attachment position.

    Attachment `%s` in `%s` is placed at a position `%s` that is outside the valid range of (`%s` to `%s`). You need to adjust the attachment position.
    Body attachments need to be within reasonable distance from the body[should not have an applied rotation](../art/characters/specifications.md#attachments) to avoid introducing unrealistic gaps when equipping accessories to those attachments.
    Body part `%s` does not follow R15 schema. The specific issues are: `%s`
    Failed to load body part mesh `%s`. Make sure body part exists and try again.
    Expected `%s` CollisionFidelity to be `%s`.
    Unable to run full body validation due to previous errors detected while processing individual body parts.Too many validation errors already detected and reported. You need to fix the reported ones first to have visibility on the additional ones remaining.
    Full body check did not receive the correct set of body part Asset Types (i.e. Head, Torso, LeftArm, RightArm, LeftLeg, RightLeg). Make sure the body model is valid and try again.
    Unable to run full body validation due to previous errors detected while processing individual body parts.Too many validation errors already detected and reported. You need to fix the reported ones first to have visibility on the additional ones remaining.
    `%s` is at a `%d` degree angle from the X,Y plane, it must be within `%d` degrees. Make sure the character is in I pose, A pose, or T pose.Validation detects that the body is not one of the following supported poses:

    • T-pose (arms are parallel to the floor and perpendicular to the torso)
    • A-pose (arms are about 45 degrees with respect to the floor)
    • I-pose (arms are perpendicular to the floor and parallel to the torso)
    The `AvatarPartScaleType` value in `%s` is invalid. Verify the value you are using is either `Classic`, `ProportionsSlender`, or `ProportionsNormal`.
    Attribute `%s` has different values in different children folders. You need to use the same value in all folders.Verify extra attributes are initialized the same way on all children folders.
    All MeshParts must have the same value in their `AvatarPartScaleType` child. Please verify the values match.The `AvatarPartScaleType` property is used to scale the MeshPart. Possible values are: `Classic`, `ProportionsNormal`, `ProportionsSlender`.

    Combining MeshParts with different scales (equipping an accessory to an avatar body) results in a visual mismatch that makes them look too large or too small compared to each another.
    + +## Head + +Head errors relate to issues with the head geometry or FACS animation data associated with your head geometry. + +See the following for more information on various character head components: + +- [Head specifications](./characters/specifications.md#facial-animations) + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Error MessageAdditional notes
    Failed to load model for dynamic head `%s`. Make sure model exists and try again.
    Failed validation for dynamic head `%s` due to missing FACS information. You need to provide FACS controls for at least 17 poses (see documentation).The face controls for dynamic heads need to have [at least 17 poses](../art/characters/specifications.md#facial-animations) connected to the rig. This is necessary to enforce a minimum level of face expressions for avatars during gameplay. You need to setup additional face controls that are missing.
    `%s` is missing FACS controls: `%s`
    `%s` has inactive FACS controls: `%s`
    Face controls need to be connected to the face rig. You need to reconnect the inactive controls.
    Unable to capture snapshot of DynamicHead `%s`

    Failed to read data from snapshot of DynamicHead `%s`

    DynamicHead `%s` when emoting surpasses the expected bounding box
    An animation pose is invalid or may extend past the expected bounding box. You need to recalibrate the face controls connected to the face rig.
    + +## Data model / runtime + +Data model or runtime errors refer to issues with loading parts of the data model or running checks. + +These errors can occur from modeling issues, exporting issues, studio importing issues, accidental changes to data model, or generic issues loading and processing parts of the asset. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Error MessageAdditional notes
    Asset could not be loaded
    Failed to execute max total surface area check for `%s`. Make sure mesh exists and try again.
    Failed to execute similarity mesh vertex check for `%s`. Make sure mesh exists and try again.
    Failed to load `meshHandle.Name`'s render mesh data.
    Failed to load detailed information for model assets. Make sure all model assets exist and try again.
    Failed to read mesh. Make sure the body part exists and try again.
    Failed to execute cage intersection detection for `%s`. Make sure the cage mesh exists and try again.
    Failed to load model mesh `%s`. Make sure the mesh exists and try again.
    Failed to retrieve mesh data to validate skinned mesh.

    Failed to load mesh for `%s`. Make sure mesh exists and try again.
    Failed to load mesh for accessory `%s`. Make sure mesh exists and try again.
    Failed to load model mesh `%s`. Make sure mesh exists and try again.
    Failed to load model mesh `%s`. Make sure the mesh exists and try again.
    Failed to execute triangle count check for `%s`. Make sure mesh exists and try again.
    Failed to load vertex color map for model mesh `%s`. Make sure it exists and try again.
    Failed to execute overlapping mesh vertex check for `%s`. Make sure mesh exists and try again.
    Failed to execute texture size check for `%s`. Make sure the textureId is valid and try again.
    Failed to load texture for `%s`. Make sure the texture exists and try again.
    Failed to execute validateUVSpace check on `%s`. Make sure the UV maps exists and try again.
    Failed to load layered clothing accessory `%s`. Make sure mesh exists and try again.

    Failed to load texture for layered clothing accessory `%s`. Make sure texture exists and try again.

    Failed to load children assets (Meshes, Textures, etc.) for `%s`. Make sure the assets exist and try again.
    `%s` contains attributes in its properties that are not allowed. You need to remove the following attributes: `%s`
    Failed to get triangle face information from model mesh `%s`. Make sure model exists and try again.
    Detected the following error(s): `%s`
    `%s` has an invalid name
    `%s` is of type `%s` which is not allowed
    Deprecated R6 folder for body part `%s` should be empty. You need to clear that folder and try again.
    Incorrect hierarchy for `%s` with the following missing folders: `%s`
    Failed to parse package data for model `%s`. Make sure the packageId is valid and try again.
    Property `%s` does not exist on type `%s`. Delete the property and try again.
    Trying to access property `%s`.`%s` using the incorrect type for it. Expected `%s` to be `%s`.
    Failed to execute render mesh inside outer mesh check for `%s` and `%s`. Make sure the meshes exists and try again.
    Selected more than one instance of type `%s`. Please, select a single instance of this type and try again.
    Failed to find an instance of the asset type `%s`. Make sure one exists and try again.
    Found the following instance tags which are not allowed: `%s`
    Invalid target asset for thumbnail generation. Expected it to be `%s`.
    Asset `%s` is positioned outside the thumbnail's camera view. You need to reposition the asset at the center of the camera view and try again.You need to move your asset to the origin of the coordinate system.
    Failed to execute vertex density check for `%s`. Make sure mesh exists and try again.
    Failed to execute body part max cage distance check. Make sure `meshHandle.Name`'s render mesh and its WrapTarget's cage mesh exist, and try again.
    + +## Permission / moderation + +Permission and moderation errors relate to issues with the asset's ownership or moderation review. Many moderation issues resolve after a period of time. + +Ensure that you or your group has permission to use all parts of your asset, including the model and texture assets. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Error MessageAdditional notes
    Asset `%s` is not owned by the current user. You can only validate assets that you or a group you belong to owns.You need to own the assets being validated.
    `%s`.`%s` ( `%s` ) being used is not owned by the experience creator or player. You can only publish assets that you own.You need to own the assets being validated.
    Asset `%s` is not owned by the current user. You can only validate assets that you or a group you belong to owns.You need to own the assets being validated.
    Failed to load asset `%s` that is still going through the review process. Please, wait for a notification of completion from the review process and try again.Your asset is currently in moderation queue. Roblox can only validate assets that have already passed moderation.
    Failed to parse feedback from model review for `%s`. Make sure the review process is complete and try again.
    Asset(s) failed to pass moderation: `%s`.
    Failed to fetch moderation results for `%s`. Make sure all assets are owned by the current user.
    Failed to parse moderation results for `%s`. Make sure moderation process is completed and try again.
    Failed to validate current user during moderation. Make sure you own the assets being validated and try again.You need to own the assets being validated.
    diff --git a/.cursor/rules/roblox/assets.md b/.cursor/rules/roblox/assets.md new file mode 100644 index 00000000..f13943c8 --- /dev/null +++ b/.cursor/rules/roblox/assets.md @@ -0,0 +1,134 @@ +--- +title: Create and access millions of assets +description: Learn how to create and sell assets on Roblox. +hideInPageNavigation: true +--- + +export const sections = [ + { + description: "Assets are anything you publish to the Roblox cloud, like 3D models with scripts, textures, multimedia files, Studio plugins, and much more. You can reuse assets across all of your creations and share them with the community.", + buttons: [ + { text: "Learn more about assets", href: "./projects/assets" }, + ], + content: [ + { + title: "Create in Studio, other third-party tools, or in experiences", + description: "Roblox Studio provides drag-and-drop tools and programmatic access to building and modeling with engine primitives such as parts and constraints. You can also import industry standard asset types for 3D modeling, audio, and more directly into Studio. Lastly, you can allow users to create assets directly in your experiences and save them to their own accounts.", + image: "/assets/getting-started/platform-overview/Everything-You-Need.jpg", + links: [ + { text: "Roblox Studio", href: "./art/overview-studio" }, + { text: "Third-party", href: "./art/overview-dcc" }, + { text: "In-experience", href: "./projects/assets/in-experience-asset-creation" } + ] + }, + { + title: "Reuse and update with packages", + description: "Packages are reusable sets of assets that can contain models, scripts, multimedia files, and more. They let you bundle, share, maintain, and update them across everywhere they're used in your projects, automatically.", + video: "https://www.youtube-nocookie.com/embed/AzKZy2BqIh8?si=psaB0UlA8UvaT8qv", + links: [ + { text: "Learn more", href: "./projects/assets/packages" }, + ] + }, + { + title: "Publish with privacy and moderation included ", + description: "You can create assets for exclusive use in your projects or share them with the community. Our moderation policies protect your creations from unapproved usage and our users from assets that violate Roblox policies.", + image: "./assets/landing/assets.png", + links: [ + { text: "Privacy", href: "./projects/assets/privacy" }, + { text: "Moderation", href: "./projects/assets#asset-moderation" }, + { text: "Manage and publish", href: "/projects/assets/manager" }, + ] + } + ] + } +]; + +{sections.map((section, index) => ( + + {section.title && ( + {section.title} + )} +
    + {section.description && ( +

    {section.description}

    + )} + {section.buttons && section.buttons.map((button, btnIndex) => ( + + ))} +
    + {section.stats && ( + + + {section.stats.map((stat, index) => ( + + + + {stat.header} + {stat.description} + + + + ))} + + + )} + {section.content.map((section, index) => ( + + +
    +

    {section.title}

    +

    {section.description}

    +
    + {section.links && section.links.map((link, linkIndex) => ( + + {link.text}
    +
    + ))} + {section.buttons && section.buttons.map((button, btnIndex) => ( + + ))} +
    +
    +
    + + {section.image && ( + {section.title} + )} + {section.video && ( + + )} + +
    + ))} +
    +))} diff --git a/.cursor/rules/roblox/assets/accessories/1_lc-blender-unhide-cages.mp4 b/.cursor/rules/roblox/assets/accessories/1_lc-blender-unhide-cages.mp4 new file mode 100644 index 00000000..16681a31 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/1_lc-blender-unhide-cages.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff55ad48aced7aef49bc5eebea44056a61bfa0ae688cd1531e2464cf22b91369 +size 2569657 diff --git a/.cursor/rules/roblox/assets/accessories/2_lc-blender-import-tshirt.mp4 b/.cursor/rules/roblox/assets/accessories/2_lc-blender-import-tshirt.mp4 new file mode 100644 index 00000000..a094e404 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/2_lc-blender-import-tshirt.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ebe30fd4e29b318fe2965583cdbfbcbe7a9cfc478981bf7d733fc603c4f476c +size 3692581 diff --git a/.cursor/rules/roblox/assets/accessories/3_lc-blender-parenting-a-mesh.mp4 b/.cursor/rules/roblox/assets/accessories/3_lc-blender-parenting-a-mesh.mp4 new file mode 100644 index 00000000..3641c646 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/3_lc-blender-parenting-a-mesh.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e87b009411d827f3784069097aaae1bc101bfae8a53e5b15c1512cb80aecaa31 +size 5705496 diff --git a/.cursor/rules/roblox/assets/accessories/4_lc-blender-outliner-cleanup.mp4 b/.cursor/rules/roblox/assets/accessories/4_lc-blender-outliner-cleanup.mp4 new file mode 100644 index 00000000..76b76db9 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/4_lc-blender-outliner-cleanup.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5422eea096c1226499fab02fb06d5835ec468672a43a00d93b88fbb74e81143 +size 1926773 diff --git a/.cursor/rules/roblox/assets/accessories/5_lc-blender-adjusting-viewport-settings.mp4 b/.cursor/rules/roblox/assets/accessories/5_lc-blender-adjusting-viewport-settings.mp4 new file mode 100644 index 00000000..65984ac0 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/5_lc-blender-adjusting-viewport-settings.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71462b58bfc451de84dc961b95b10ef4f9ea4bec4649fb6c0875526bb2920399 +size 16930443 diff --git a/.cursor/rules/roblox/assets/accessories/6_lc-blender-adjusting-outer-cage-vertices.mp4 b/.cursor/rules/roblox/assets/accessories/6_lc-blender-adjusting-outer-cage-vertices.mp4 new file mode 100644 index 00000000..e5a0a8e3 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/6_lc-blender-adjusting-outer-cage-vertices.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:952b2e00ed2f72f6fd37ec0c9f375b495ff9076ed42862f0cf4f8b5765af216c +size 26730143 diff --git a/.cursor/rules/roblox/assets/accessories/7_lc-adjusting-multiple-vertices.mp4 b/.cursor/rules/roblox/assets/accessories/7_lc-adjusting-multiple-vertices.mp4 new file mode 100644 index 00000000..ab31c1e5 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/7_lc-adjusting-multiple-vertices.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7aea49a2a8e7595ff3e1580c958b0543a3f11545244a58c0541471562bbd9932 +size 49747941 diff --git a/.cursor/rules/roblox/assets/accessories/8_lc-blender-finished-outer-cage.mp4 b/.cursor/rules/roblox/assets/accessories/8_lc-blender-finished-outer-cage.mp4 new file mode 100644 index 00000000..3eda1c83 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/8_lc-blender-finished-outer-cage.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db1881b5b649c843b7c99d1f2b525185b2bbdca9ace86fc819fef0fe8f249c38 +size 23352338 diff --git a/.cursor/rules/roblox/assets/accessories/Avatar-Item-Creation.png b/.cursor/rules/roblox/assets/accessories/Avatar-Item-Creation.png new file mode 100644 index 00000000..b178a4d0 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/Avatar-Item-Creation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77029f8a205a8cc9200d38dce464b0919d863116b0d19921dd27bb08ba045fcd +size 77146 diff --git a/.cursor/rules/roblox/assets/accessories/Layered-Clothing-Banner.jpg b/.cursor/rules/roblox/assets/accessories/Layered-Clothing-Banner.jpg new file mode 100644 index 00000000..c323b3e3 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/Layered-Clothing-Banner.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8b6bf7c38e585dea5378f9eb6c337f6d0f4bf7e17e3334a037de16f99210b54 +size 272219 diff --git a/.cursor/rules/roblox/assets/accessories/Layered-Clothing-Banner2.png b/.cursor/rules/roblox/assets/accessories/Layered-Clothing-Banner2.png new file mode 100644 index 00000000..e9d86e13 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/Layered-Clothing-Banner2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22014e2a4db3a5104113106ecf725c3add322f874855075472cd86abf10334ed +size 904779 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Accessory-Setup-Menu.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Accessory-Setup-Menu.png new file mode 100644 index 00000000..26abdb16 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Accessory-Setup-Menu.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9399452dcf0b860c866570efa7271b24e6547d7fb806f8406a09311189a5b09 +size 14511 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Animation-Example-1.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Animation-Example-1.png new file mode 100644 index 00000000..36636a69 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Animation-Example-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9c6306b0915bc373ef52b9a1ac1c8663b6b59340ddb5bde9b933424ab568129 +size 236481 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Animation-Example-2.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Animation-Example-2.png new file mode 100644 index 00000000..6b4828a2 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Animation-Example-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a07b8d01ed1dafb2b3ef0e1511daf529b9cd97f3a0c78bfcfdba5df864767a5 +size 244919 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Asset-Type-Dropdown.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Asset-Type-Dropdown.png new file mode 100644 index 00000000..edde8948 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Asset-Type-Dropdown.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d8a98facbcee0c1213d51fa8ee0660d70ddb39989ddaf8e9bfc1791c0487fc8 +size 19268 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Autoskin-Icon.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Autoskin-Icon.png new file mode 100644 index 00000000..5324eac2 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Autoskin-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57c6616f2576655d130e7f33ce3e79e8c4b8355d1f9a910a1a0b9e4822e69823 +size 1586 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Body-Example-1.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Body-Example-1.png new file mode 100644 index 00000000..6b6e1ae7 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Body-Example-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34b3e89bb319b0dd07d919373758e51f2425953601e78bbbc2c3c29503edb563 +size 239649 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Body-Example-2.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Body-Example-2.png new file mode 100644 index 00000000..ef003200 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Body-Example-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2f5173b6cb8e56f7e175c7b1cf87b13da0e2028952c4051f793331684fbfb07 +size 244741 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Bounding-Box-Example-1.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Bounding-Box-Example-1.png new file mode 100644 index 00000000..37f1f6d5 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Bounding-Box-Example-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f446187b429b7641e2d4c6fe5869fe1db5f8f02acff81676d213c248d6e2319b +size 654133 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Bounding-Box-Example-2.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Bounding-Box-Example-2.png new file mode 100644 index 00000000..82c13f2c --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Bounding-Box-Example-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ec8f1e499b88f03d6f5216f2d861dfd34b8a3f38dffd5d11164c8b30df3fec9 +size 662255 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Cage-Editing-Example.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Cage-Editing-Example.png new file mode 100644 index 00000000..77f9df64 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Cage-Editing-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a73584f6c922071fef2506475b8d3db1e8ae4594f34ad832f4b58c62f264d16b +size 947544 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Cage-Editing-Icon.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Cage-Editing-Icon.png new file mode 100644 index 00000000..ea62fc8e --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Cage-Editing-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2224941a7aa490aee2c0342a691f4693c38fc898f3b253cd261a906fcd0edac5 +size 1113 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Center-Mannequin.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Center-Mannequin.png new file mode 100644 index 00000000..a40a7eab --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Center-Mannequin.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8da703307576916defa9ee231d796465c5a42839887bd8124caa270d06f4b7f3 +size 1291 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Clothing-Example-1.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Clothing-Example-1.png new file mode 100644 index 00000000..4c5fe79f --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Clothing-Example-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:070769e083328c65be9fd423ca870cf762c2bd9a5b12c5a742fb77a4f47a471f +size 335320 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Clothing-Example-2.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Clothing-Example-2.png new file mode 100644 index 00000000..ed7033a9 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Clothing-Example-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9226992d05749a2c531bb93ed2fd38b836589813a009e3f50dcb275c6d0b37b6 +size 419838 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Custom-Asset-Icon.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Custom-Asset-Icon.png new file mode 100644 index 00000000..e08c49ab --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Custom-Asset-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d47983c5728c9ba8d66fbb8cbfcd7c03c0da1d01142e180a6092104e88501e9e +size 3698 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Custom-Asset.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Custom-Asset.png new file mode 100644 index 00000000..76b01a30 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Custom-Asset.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89f34e2e0b0991f94160328cd325f48617ff4bebdcd36d7514b596b5ba49d474 +size 53141 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Edit-Vertex-Example.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Edit-Vertex-Example.png new file mode 100644 index 00000000..eb5e04f0 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Edit-Vertex-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b2d026f4f0f289fa2177d99f16c8dce77d91ad2c2ae44dba0745797a288854b +size 954009 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Expand-Button.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Expand-Button.png new file mode 100644 index 00000000..f6d68c98 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Expand-Button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0152138a3843c3ce19a4aad81e9208edd7198716526a5231b96053bd70355970 +size 1092 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Generate-Legacy-Accessory.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Generate-Legacy-Accessory.png new file mode 100644 index 00000000..ce40a7e7 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Generate-Legacy-Accessory.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7619f29644837644208eb3e1cc3c244aff04a654b610877576bb36416b88c75c +size 7457 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/LC-Hierarchy.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/LC-Hierarchy.png new file mode 100644 index 00000000..b224d882 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/LC-Hierarchy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e07b4daadd7d9af8277249e4b4916c2cce8beb45f3f4738d39fed39340ef7b1 +size 11481 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Layered-Example.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Layered-Example.png new file mode 100644 index 00000000..34fad3b5 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Layered-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f235a78b57f10c1a9e54564c21861d430a919d0a83475a1cfb19540da9c1e89 +size 601246 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/MeshPart-Selected.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/MeshPart-Selected.png new file mode 100644 index 00000000..b29a585f --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/MeshPart-Selected.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0a8995ab8dfd4148b9b8ada9ade7e8bc4076aff4dbacbedea3ae240ff73c86d +size 896165 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Preview-Display.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Preview-Display.png new file mode 100644 index 00000000..c46ad72c --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Preview-Display.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4b4c13ceb1a3240c35bdcb1b3fc66a0fcc297ae8ebfcf8f8268a33b0fb03b27 +size 942053 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Rigid-Example.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Rigid-Example.png new file mode 100644 index 00000000..45cb2fcb --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Rigid-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de2e2e33585bf95cf9eb951f9bf5b91428a10d90306c0f46ab1747f0ab592416 +size 380366 diff --git a/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Rigid-Hierarchy.png b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Rigid-Hierarchy.png new file mode 100644 index 00000000..31238c15 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/accessory-fitting-tool/Rigid-Hierarchy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b559cd4830df199d8a7283246424a3b3c336d85f81d6ea0349f7b45694468f9e +size 12424 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/1-Uneven-Cage-A.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/1-Uneven-Cage-A.png new file mode 100644 index 00000000..7bb6ea52 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/1-Uneven-Cage-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:463a175ab5fd74d3894cd81db2e16049fb347d2daff39c425da04c8ab036eed6 +size 62899 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/1-Uneven-Cage-B.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/1-Uneven-Cage-B.png new file mode 100644 index 00000000..a8253214 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/1-Uneven-Cage-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51923028f6203743e29deec6b213c77e56cf4b6d76fcf387aee2c582dd4f2671 +size 165611 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/10-Even-Spacing-A.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/10-Even-Spacing-A.png new file mode 100644 index 00000000..570f6788 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/10-Even-Spacing-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:165a1f3147f50ddbd7db9b2cfa56eac00d82357e321f10da3f00322d81cd00e8 +size 181890 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/10-Even-Spacing-B.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/10-Even-Spacing-B.png new file mode 100644 index 00000000..d396adc3 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/10-Even-Spacing-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0c637b7b00a6be854312d69c3c40b289a34f18daf120ccbaf852f9564441531 +size 176327 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/11-Positioning-Along-Joints.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/11-Positioning-Along-Joints.png new file mode 100644 index 00000000..7b7af3b9 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/11-Positioning-Along-Joints.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:212c9572a09af6a24f9e07481d121d9c70457973ca9f7e8a912315c8d10c3e65 +size 189710 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/12-Protusions-A.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/12-Protusions-A.png new file mode 100644 index 00000000..c8339289 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/12-Protusions-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa6a2d935d9b11e045144d5667a207146fbaeea2b7a51de75768bea07b0a6174 +size 94730 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/12-Protusions-B.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/12-Protusions-B.png new file mode 100644 index 00000000..e67c52c9 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/12-Protusions-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97a2e9ed8944096c0c6fcaba1f4d0c84335161603e586bc5c158c04c32b42078 +size 95818 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/12-Protusions-C.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/12-Protusions-C.png new file mode 100644 index 00000000..fe9de877 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/12-Protusions-C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70bb1c1bc7cbb4e4a4f893b2887815859a44e7ebb0ec318624b817f4013becff +size 90144 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/13-Cage-Missing-Parts.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/13-Cage-Missing-Parts.png new file mode 100644 index 00000000..cb8c2c0e --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/13-Cage-Missing-Parts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6827a23d5db5acc8da950db693b93db66dadcf44c482e4fa05dac8f958cf86b3 +size 147497 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/14-Outer-Inside-Inner.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/14-Outer-Inside-Inner.png new file mode 100644 index 00000000..335772d5 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/14-Outer-Inside-Inner.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:abcf6bc0973d62fb1ecd877b1bc3fd8f991c4a9b65b14f558af0901d6178762a +size 251708 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/15-Orbitting-Accessory-A.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/15-Orbitting-Accessory-A.png new file mode 100644 index 00000000..a8743442 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/15-Orbitting-Accessory-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21a56bd4c8cf1b15b6f657e5ce047f85d2910ebd2acaecc446b27bf8bef9978f +size 20598 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/15-Orbitting-Accessory-B.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/15-Orbitting-Accessory-B.png new file mode 100644 index 00000000..8694aa5f --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/15-Orbitting-Accessory-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:091678061abe7ce6b7471dd579d9b4395615ef549045694194ba8f9dcc232a61 +size 141536 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/2-Inner-Outer-Identical-A.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/2-Inner-Outer-Identical-A.png new file mode 100644 index 00000000..a24a625d --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/2-Inner-Outer-Identical-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f3ef4d14373c968763f2393f19b1d69574d4bcdbc553b37523ebd5992320413 +size 63077 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/2-Inner-Outer-Identical-B.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/2-Inner-Outer-Identical-B.png new file mode 100644 index 00000000..3d8cb782 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/2-Inner-Outer-Identical-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cee59318d9e4988ad5ecb718e5cae82bad6ee53f9fb0f05e8d615f0dba87efac +size 156355 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/2-Inner-Outer-Identical.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/2-Inner-Outer-Identical.png new file mode 100644 index 00000000..7392983c --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/2-Inner-Outer-Identical.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d29a588ba81a3a3b800c805d38741699f5424497cf4ebc7428a6228f1780faa9 +size 388729 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/3-Clothing-Under-Inner-A.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/3-Clothing-Under-Inner-A.png new file mode 100644 index 00000000..7277b5c3 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/3-Clothing-Under-Inner-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83a75b68a7d0b7a059503c16836239248045937cfcc209450eff2d4c4cf3de19 +size 66274 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/3-Clothing-Under-Inner-B.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/3-Clothing-Under-Inner-B.png new file mode 100644 index 00000000..1a57b909 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/3-Clothing-Under-Inner-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e2da78ad0c77514546b8f1c1d27d90eadda8a60ea2a0834136cbd354ef485d8 +size 138518 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/4-Outer-Not-Fully-Covering-A.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/4-Outer-Not-Fully-Covering-A.png new file mode 100644 index 00000000..b1bbdc4e --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/4-Outer-Not-Fully-Covering-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7a7583c7ff81087db192da327eced53a18692ff15820af09455a2564837e90b +size 75089 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/4-Outer-Not-Fully-Covering-B.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/4-Outer-Not-Fully-Covering-B.png new file mode 100644 index 00000000..0e810c9f --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/4-Outer-Not-Fully-Covering-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60e2b1245259a334dc8a2c2619f6fe4a61278be08adbba7f7ab4d8502c0be7e5 +size 202616 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/6-Oversized-Cage.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/6-Oversized-Cage.png new file mode 100644 index 00000000..09d61c39 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/6-Oversized-Cage.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d7bab2e8d6d1f3dce49d13a5b0facf71aec2176fec9050da7f4fec91037472e +size 329226 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/7-Typical-Caging-Example-A.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/7-Typical-Caging-Example-A.png new file mode 100644 index 00000000..653afd4a --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/7-Typical-Caging-Example-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49764f8386fef0baf854aa58811000d797b3808a04a52ec9ee79da9c480a3410 +size 144176 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/7-Typical-Caging-Example-B.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/7-Typical-Caging-Example-B.png new file mode 100644 index 00000000..6a7bd01e --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/7-Typical-Caging-Example-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0015b15cac728168fc5ec681e9a6b1b0e13cbcb05b9312bc66c2b8c5f39b5640 +size 151207 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/7-Typical-Caging-Example-C.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/7-Typical-Caging-Example-C.png new file mode 100644 index 00000000..05165614 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/7-Typical-Caging-Example-C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2c8dd011250e38480e92d211cac7e6fcd4b7f2ab36af638832987c65437c466 +size 177920 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/7-Typical-Caging-Example-D.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/7-Typical-Caging-Example-D.png new file mode 100644 index 00000000..90e94e8e --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/7-Typical-Caging-Example-D.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:886fa70a78a7c759bcf6568e0d769b29cd2ae352511eb1631abe3583c41b74f2 +size 59731 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/8-Symmetry.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/8-Symmetry.png new file mode 100644 index 00000000..6431c673 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/8-Symmetry.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4254320daef65639187992f6118cf5c9eb13254a4539f8df5ac0100d6ac1d37a +size 265488 diff --git a/.cursor/rules/roblox/assets/accessories/caging-best-practices/9-Stacking-Vertices.png b/.cursor/rules/roblox/assets/accessories/caging-best-practices/9-Stacking-Vertices.png new file mode 100644 index 00000000..20e2aba1 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/caging-best-practices/9-Stacking-Vertices.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3007440c50100067d003e6ecf0315192bd3da26bf4daf46fcf5f44d08a03c5aa +size 107844 diff --git a/.cursor/rules/roblox/assets/accessories/classic-clothing/Block-Avatar-Default.jpg b/.cursor/rules/roblox/assets/accessories/classic-clothing/Block-Avatar-Default.jpg new file mode 100644 index 00000000..f188bd8b --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/classic-clothing/Block-Avatar-Default.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d809a83ac269448dae2991a52f32c8d18ecf0b2c96cfd6e3c158fe7b6a74ff1c +size 223116 diff --git a/.cursor/rules/roblox/assets/accessories/classic-clothing/Block-Avatar-Dressed.jpg b/.cursor/rules/roblox/assets/accessories/classic-clothing/Block-Avatar-Dressed.jpg new file mode 100644 index 00000000..7c4ff08c --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/classic-clothing/Block-Avatar-Dressed.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af800150d78275f4675a82510a13a4d58c608ded08f9b91f2e7975c20671ca4f +size 239371 diff --git a/.cursor/rules/roblox/assets/accessories/classic-clothing/Classic-Clothing-Templates.zip b/.cursor/rules/roblox/assets/accessories/classic-clothing/Classic-Clothing-Templates.zip new file mode 100644 index 00000000..dd90fa86 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/classic-clothing/Classic-Clothing-Templates.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:678ddad004667f74dce223c7d1259e9dd437153c763639d7e668f3b532487c5d +size 124778 diff --git a/.cursor/rules/roblox/assets/accessories/classic-clothing/Pants-Template-Bad.jpg b/.cursor/rules/roblox/assets/accessories/classic-clothing/Pants-Template-Bad.jpg new file mode 100644 index 00000000..e9524ea0 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/classic-clothing/Pants-Template-Bad.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d128afe518743c8f4b005b6d4f31048e1b234a38d0b511bdae3858781a238782 +size 108442 diff --git a/.cursor/rules/roblox/assets/accessories/classic-clothing/Pants-Template-Good.jpg b/.cursor/rules/roblox/assets/accessories/classic-clothing/Pants-Template-Good.jpg new file mode 100644 index 00000000..53e34e8c --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/classic-clothing/Pants-Template-Good.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ccb82b89643045f3670252b5c4f2f013610193c23afe9bc1d3c470190e34dab3 +size 121975 diff --git a/.cursor/rules/roblox/assets/accessories/classic-clothing/Template-Pants-R15.png b/.cursor/rules/roblox/assets/accessories/classic-clothing/Template-Pants-R15.png new file mode 100644 index 00000000..964029dd --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/classic-clothing/Template-Pants-R15.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c57244d5bb9605f1e3b7de245c201666741b0fb147905703f3371c0aef17c73b +size 64099 diff --git a/.cursor/rules/roblox/assets/accessories/classic-clothing/Template-Shirts-R15.png b/.cursor/rules/roblox/assets/accessories/classic-clothing/Template-Shirts-R15.png new file mode 100644 index 00000000..e16420d8 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/classic-clothing/Template-Shirts-R15.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c87e4dfbc6cbee15e7f7283a74983f3762b715b1b366c0514754316474697d8c +size 66301 diff --git a/.cursor/rules/roblox/assets/accessories/classic-clothing/Types-of-classic-clothing.png b/.cursor/rules/roblox/assets/accessories/classic-clothing/Types-of-classic-clothing.png new file mode 100644 index 00000000..fe9f213c --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/classic-clothing/Types-of-classic-clothing.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4de3cd026dcb7b21beb45d7c4572ac0f62cbe1497fb364fdd949f9d230ffdbf +size 655401 diff --git a/.cursor/rules/roblox/assets/accessories/lc-blender-append-cages.png b/.cursor/rules/roblox/assets/accessories/lc-blender-append-cages.png new file mode 100644 index 00000000..14f1eb9b --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/lc-blender-append-cages.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c376f417f89db946ae6f0915b90a1561c189f57b2f958219bb859687f70bde6d +size 26022 diff --git a/.cursor/rules/roblox/assets/accessories/lc-blender-append.png b/.cursor/rules/roblox/assets/accessories/lc-blender-append.png new file mode 100644 index 00000000..db6adb66 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/lc-blender-append.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78715041e537c2ac51ef4bebc2f14b91a4f368596d95daa9bd35a64a46027397 +size 115448 diff --git a/.cursor/rules/roblox/assets/accessories/lc-blender-hide-symbol.png b/.cursor/rules/roblox/assets/accessories/lc-blender-hide-symbol.png new file mode 100644 index 00000000..611d2829 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/lc-blender-hide-symbol.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a423e7b7730e64d0668a40bc505a979de5a06dbc8a8ba43e694f8fcb75013320 +size 873 diff --git a/.cursor/rules/roblox/assets/accessories/lc-blender-selecting-cage-in-outlier.png b/.cursor/rules/roblox/assets/accessories/lc-blender-selecting-cage-in-outlier.png new file mode 100644 index 00000000..4467079a --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/lc-blender-selecting-cage-in-outlier.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1ebc801e14d7a955d9892ed041859483ebc2ddaa18597105df46992fddcf966 +size 19305 diff --git a/.cursor/rules/roblox/assets/accessories/lc-blender-template-opened.png b/.cursor/rules/roblox/assets/accessories/lc-blender-template-opened.png new file mode 100644 index 00000000..c6c1c605 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/lc-blender-template-opened.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b63057d19d8be1813933b8a24741a657b052466f7bb35679e90358e279b4971 +size 1055892 diff --git a/.cursor/rules/roblox/assets/accessories/lc-blender-workspace-cages.png b/.cursor/rules/roblox/assets/accessories/lc-blender-workspace-cages.png new file mode 100644 index 00000000..428444ba --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/lc-blender-workspace-cages.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89bf87d2cb20885d5a5495981d35692d1588624cac470ce7bdeff25ca9942bb4 +size 998859 diff --git a/.cursor/rules/roblox/assets/accessories/lc-requirements-innercage-outliner.png b/.cursor/rules/roblox/assets/accessories/lc-requirements-innercage-outliner.png new file mode 100644 index 00000000..fc80562e --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/lc-requirements-innercage-outliner.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4ee1699830b57ac0c4af777bd69f3b72703b2157c8e26d5eebf3b21fb453e8b +size 61739 diff --git a/.cursor/rules/roblox/assets/accessories/lc-requirements-innercage.png b/.cursor/rules/roblox/assets/accessories/lc-requirements-innercage.png new file mode 100644 index 00000000..2a11c328 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/lc-requirements-innercage.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5029be33b47f197f2f3c91b4e6db45f41670d81895616b3ad51d361f5b838e98 +size 292575 diff --git a/.cursor/rules/roblox/assets/accessories/lc-requirements-maya-settings-with-animation.png b/.cursor/rules/roblox/assets/accessories/lc-requirements-maya-settings-with-animation.png new file mode 100644 index 00000000..453845c8 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/lc-requirements-maya-settings-with-animation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:280ff3b4434114977511ea3110a808b3c3aeff376f0bc4cc3f16111fc183cacc +size 88284 diff --git a/.cursor/rules/roblox/assets/accessories/lc-requirements-maya-settings.png b/.cursor/rules/roblox/assets/accessories/lc-requirements-maya-settings.png new file mode 100644 index 00000000..2cbcd17b --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/lc-requirements-maya-settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37624b57af8ab6d6f32e60c08e2d742cc6763b427a9b9dddecf6b2cbeaeec56a +size 90041 diff --git a/.cursor/rules/roblox/assets/accessories/lc-requirements-outercage-outliner.png b/.cursor/rules/roblox/assets/accessories/lc-requirements-outercage-outliner.png new file mode 100644 index 00000000..85b3a2d4 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/lc-requirements-outercage-outliner.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:473e570d85cbc35c0a7a4fc1a6598bdd315236c3f038f0a0787302ebb84f1568 +size 66013 diff --git a/.cursor/rules/roblox/assets/accessories/lc-requirements-outercage.png b/.cursor/rules/roblox/assets/accessories/lc-requirements-outercage.png new file mode 100644 index 00000000..8268ce7a --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/lc-requirements-outercage.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a3bd6b23bcd4035e8136c504c290d42f0c3993c7a17406529e5877222f0c449 +size 253440 diff --git a/.cursor/rules/roblox/assets/accessories/reference-files/Additional-FBX-assets.zip b/.cursor/rules/roblox/assets/accessories/reference-files/Additional-FBX-assets.zip new file mode 100644 index 00000000..a3ac0cba --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/reference-files/Additional-FBX-assets.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:caa8e1d1f4b0f0acab9f07d2d12413f52f2765f9380b568505c48aac4607fc1e +size 24712270 diff --git a/.cursor/rules/roblox/assets/accessories/reference-files/Bow-rigid.rbxm b/.cursor/rules/roblox/assets/accessories/reference-files/Bow-rigid.rbxm new file mode 100644 index 00000000..f035503c --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/reference-files/Bow-rigid.rbxm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd82c3708fcb031d5a4d0d218b5921c64e43fd559b818aa38e3b54d055cb94e4 +size 3459 diff --git a/.cursor/rules/roblox/assets/accessories/reference-files/Caging-examples.zip b/.cursor/rules/roblox/assets/accessories/reference-files/Caging-examples.zip new file mode 100644 index 00000000..2509def9 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/reference-files/Caging-examples.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b86a711fb0a91a3c41264fc8027812fd6c0dd3720bf3bd577db9d1f0c8064f37 +size 8937314 diff --git a/.cursor/rules/roblox/assets/accessories/reference-files/Tshirt-caged.fbx b/.cursor/rules/roblox/assets/accessories/reference-files/Tshirt-caged.fbx new file mode 100644 index 00000000..71a32f49 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/reference-files/Tshirt-caged.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc57301b402c10c067bf85daa15d201caa3d306d73b2091d12941166e7aa6a99 +size 534940 diff --git a/.cursor/rules/roblox/assets/accessories/reference-files/Tshirt-model.fbx b/.cursor/rules/roblox/assets/accessories/reference-files/Tshirt-model.fbx new file mode 100644 index 00000000..129bd3bd --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/reference-files/Tshirt-model.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79343852f6ead85411a6e6b69212c50dc8d75065cb9365c66101f97970a35748 +size 337708 diff --git a/.cursor/rules/roblox/assets/accessories/validation-tool/Blender-Add-On-Preferences.png b/.cursor/rules/roblox/assets/accessories/validation-tool/Blender-Add-On-Preferences.png new file mode 100644 index 00000000..ae81ab2d --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/validation-tool/Blender-Add-On-Preferences.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:558d5cc63e335f69694e63449b2852dfd8591d99beb0565ce85455665b31f8e6 +size 168195 diff --git a/.cursor/rules/roblox/assets/accessories/validation-tool/Blender-Enable-Add-On.png b/.cursor/rules/roblox/assets/accessories/validation-tool/Blender-Enable-Add-On.png new file mode 100644 index 00000000..6ed5773b --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/validation-tool/Blender-Enable-Add-On.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a8bacd0d75175319a454bee79a2c60b6d9458cfef344d9363a97887c087b20e +size 141292 diff --git a/.cursor/rules/roblox/assets/accessories/validation-tool/Blender-Failed-Check-Example.png b/.cursor/rules/roblox/assets/accessories/validation-tool/Blender-Failed-Check-Example.png new file mode 100644 index 00000000..07d629db --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/validation-tool/Blender-Failed-Check-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e73d3c09f93ef162cd422b2a905c9dd71e3f58dbb2111d9b0d7e9688d8927a4 +size 62059 diff --git a/.cursor/rules/roblox/assets/accessories/validation-tool/Blender-Failed-Check-Viewport.png b/.cursor/rules/roblox/assets/accessories/validation-tool/Blender-Failed-Check-Viewport.png new file mode 100644 index 00000000..be5e18f2 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/validation-tool/Blender-Failed-Check-Viewport.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66f8ff54d32f24d4f8dd03da56cf4888cf3431219eee2ed63dbc93c5a2c8653d +size 403154 diff --git a/.cursor/rules/roblox/assets/accessories/validation-tool/Blender-Sidebar-Indicator.png b/.cursor/rules/roblox/assets/accessories/validation-tool/Blender-Sidebar-Indicator.png new file mode 100644 index 00000000..0931f8a4 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/validation-tool/Blender-Sidebar-Indicator.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1df60c5cd854c2337e31b285e59a2ef20ca6b8d1ba197868da07c5ec6d8d79cd +size 202558 diff --git a/.cursor/rules/roblox/assets/accessories/validation-tool/Blender-Validation-Tool-Opened.png b/.cursor/rules/roblox/assets/accessories/validation-tool/Blender-Validation-Tool-Opened.png new file mode 100644 index 00000000..6801da6f --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/validation-tool/Blender-Validation-Tool-Opened.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82d848b4285bc455d409b4edadd9d07b2329a447832e0a33867c1ee46483a111 +size 35974 diff --git a/.cursor/rules/roblox/assets/accessories/validation-tool/Blender-Validation-Tool.png b/.cursor/rules/roblox/assets/accessories/validation-tool/Blender-Validation-Tool.png new file mode 100644 index 00000000..62baa5ef --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/validation-tool/Blender-Validation-Tool.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0bbf63ef440acd34aabc6ca067ef3e44d4a7cff126be3adcb5d0149f3f64dd61 +size 36344 diff --git a/.cursor/rules/roblox/assets/accessories/validation-tool/Mac-Right-Click-Install.png b/.cursor/rules/roblox/assets/accessories/validation-tool/Mac-Right-Click-Install.png new file mode 100644 index 00000000..01692a56 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/validation-tool/Mac-Right-Click-Install.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c98142dfcd5e42571c17958435cc8183a47c9bac7a9da2237aa073f1c7f2480 +size 46641 diff --git a/.cursor/rules/roblox/assets/accessories/validation-tool/Maya-Command-Prompt-Success.png b/.cursor/rules/roblox/assets/accessories/validation-tool/Maya-Command-Prompt-Success.png new file mode 100644 index 00000000..7824fef1 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/validation-tool/Maya-Command-Prompt-Success.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14637761058426f422f1e3e1aee38e31e8e7a037854bb5411fa3f853e43cebc3 +size 3833 diff --git a/.cursor/rules/roblox/assets/accessories/validation-tool/Maya-Install-Prompt-1.png b/.cursor/rules/roblox/assets/accessories/validation-tool/Maya-Install-Prompt-1.png new file mode 100644 index 00000000..d5e50d95 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/validation-tool/Maya-Install-Prompt-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24ddf22f0f0a6ad5cffea4b1945f34c6dbf9b29463c7a2cd2a3d23dcf23a2a52 +size 2782 diff --git a/.cursor/rules/roblox/assets/accessories/validation-tool/Maya-Install-Python-Settings.png b/.cursor/rules/roblox/assets/accessories/validation-tool/Maya-Install-Python-Settings.png new file mode 100644 index 00000000..3b3b3197 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/validation-tool/Maya-Install-Python-Settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15ffba468ed51cca0f88c03071690a08e7f5570c3155d265c6e791da10a77731 +size 315784 diff --git a/.cursor/rules/roblox/assets/accessories/validation-tool/Maya-Script-Editor-Menu.png b/.cursor/rules/roblox/assets/accessories/validation-tool/Maya-Script-Editor-Menu.png new file mode 100644 index 00000000..9d344a5c --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/validation-tool/Maya-Script-Editor-Menu.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20279e92bca718cb35a8c47b0d25e82c44d0e966495a45d10d332afc96128c12 +size 80518 diff --git a/.cursor/rules/roblox/assets/accessories/validation-tool/Maya-Script-Editor.png b/.cursor/rules/roblox/assets/accessories/validation-tool/Maya-Script-Editor.png new file mode 100644 index 00000000..15f99062 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/validation-tool/Maya-Script-Editor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:354e207be9577fcc61b92d7252465226d23921843f5fadb0dd2de232b9b2c68b +size 4914 diff --git a/.cursor/rules/roblox/assets/accessories/validation-tool/Maya-Shortcut.png b/.cursor/rules/roblox/assets/accessories/validation-tool/Maya-Shortcut.png new file mode 100644 index 00000000..ab64fd8c --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/validation-tool/Maya-Shortcut.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cad5ecce531b112b4cff0c79d66dbedb84365d859d028a22e5e5b04fd2b94df +size 27023 diff --git a/.cursor/rules/roblox/assets/accessories/validation-tool/Maya-Validation-Tool-Opened.png b/.cursor/rules/roblox/assets/accessories/validation-tool/Maya-Validation-Tool-Opened.png new file mode 100644 index 00000000..f70af509 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/validation-tool/Maya-Validation-Tool-Opened.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3b49b173c71d5f057624f5915e13076de7e2409ccb43f48dbb6f9b84286e523 +size 77784 diff --git a/.cursor/rules/roblox/assets/accessories/validation-tool/ValidationTool_Blender.zip b/.cursor/rules/roblox/assets/accessories/validation-tool/ValidationTool_Blender.zip new file mode 100644 index 00000000..93a18ff0 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/validation-tool/ValidationTool_Blender.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78404cb269cefa2fc3abda7724148ccc9d7681ddc7324460b5a0456c68e08828 +size 8025 diff --git a/.cursor/rules/roblox/assets/accessories/validation-tool/ValidationTool_Maya.zip b/.cursor/rules/roblox/assets/accessories/validation-tool/ValidationTool_Maya.zip new file mode 100644 index 00000000..cbd639b5 --- /dev/null +++ b/.cursor/rules/roblox/assets/accessories/validation-tool/ValidationTool_Maya.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63da746b46f498d9f06e5565977f55a7ce0435ce4b5d1b5caad1deb3e40529eb +size 20908 diff --git a/.cursor/rules/roblox/assets/analytics/acquisition/New-Users-Funnel.png b/.cursor/rules/roblox/assets/analytics/acquisition/New-Users-Funnel.png new file mode 100644 index 00000000..e9b44f35 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/acquisition/New-Users-Funnel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:017d674b8b818d1fbee24a802be0961b214755ae01437c365384b6f1d6bb65e3 +size 220551 diff --git a/.cursor/rules/roblox/assets/analytics/acquisition/Qualified-Play-Through-Rate.png b/.cursor/rules/roblox/assets/analytics/acquisition/Qualified-Play-Through-Rate.png new file mode 100644 index 00000000..83ad399b --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/acquisition/Qualified-Play-Through-Rate.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7677ad0b1d94be809787121e118b5967c64d6cf4596c23ab83a1a5107b0a6ede +size 200468 diff --git a/.cursor/rules/roblox/assets/analytics/acquisition/Share-Link-Acquisition-Dashboard.png b/.cursor/rules/roblox/assets/analytics/acquisition/Share-Link-Acquisition-Dashboard.png new file mode 100644 index 00000000..bbe24bb8 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/acquisition/Share-Link-Acquisition-Dashboard.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a0523e823b11d4aee27830fb5fe0cffe8cd0b10ee88d8416ba3377869a45b2f +size 225311 diff --git a/.cursor/rules/roblox/assets/analytics/acquisition/Unique-Users-by-Source.png b/.cursor/rules/roblox/assets/analytics/acquisition/Unique-Users-by-Source.png new file mode 100644 index 00000000..c668e722 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/acquisition/Unique-Users-by-Source.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b59b451844ec2e05e7fdc3088eaea5e545412608d66e824c2f1a147b487951c +size 332133 diff --git a/.cursor/rules/roblox/assets/analytics/acquisition/conversion.png b/.cursor/rules/roblox/assets/analytics/acquisition/conversion.png new file mode 100644 index 00000000..642ba57b --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/acquisition/conversion.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3ac0fe7ebabdb5ae16caa1b78f792a78cc355b05f27dcc8dd261b55251912f4 +size 221856 diff --git a/.cursor/rules/roblox/assets/analytics/acquisition/qualified-playthrough-rate.png b/.cursor/rules/roblox/assets/analytics/acquisition/qualified-playthrough-rate.png new file mode 100644 index 00000000..2e0a06d6 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/acquisition/qualified-playthrough-rate.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58cb3e65a502142cecd58463701499907cecfc67313f095c3b59c6795dc431af +size 119687 diff --git a/.cursor/rules/roblox/assets/analytics/acquisition/traffic-sources.png b/.cursor/rules/roblox/assets/analytics/acquisition/traffic-sources.png new file mode 100644 index 00000000..35ecd5b2 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/acquisition/traffic-sources.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ea68155a21173f77d318ccfca9560b49291b60f222f18dfffd8d50ca6ed14f9 +size 172754 diff --git a/.cursor/rules/roblox/assets/analytics/analytics-dashboard/Explore-Mode-Preview.png b/.cursor/rules/roblox/assets/analytics/analytics-dashboard/Explore-Mode-Preview.png new file mode 100644 index 00000000..8f7fbeb3 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/analytics-dashboard/Explore-Mode-Preview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d5a35f027aa5770160829c4fdf8f5fadf6cc3aa18893d2156b9a49bdf67bb51 +size 86583 diff --git a/.cursor/rules/roblox/assets/analytics/analytics-dashboard/Explore-Mode.png b/.cursor/rules/roblox/assets/analytics/analytics-dashboard/Explore-Mode.png new file mode 100644 index 00000000..5ec2de46 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/analytics-dashboard/Explore-Mode.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5224642ac37fed5305f7a0f3f2324b7e52917cf70a3ee301c2b680a705a4af5 +size 40712 diff --git a/.cursor/rules/roblox/assets/analytics/analytics-dashboard/Metrics-Unavailable.png b/.cursor/rules/roblox/assets/analytics/analytics-dashboard/Metrics-Unavailable.png new file mode 100644 index 00000000..59820b5f --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/analytics-dashboard/Metrics-Unavailable.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35e20ad1c01c61c104d72da398df3eae4cdd55691c3d35ddae3d22f41bc3a675 +size 17289 diff --git a/.cursor/rules/roblox/assets/analytics/analytics-dashboard/benchmark-similar-exp.png b/.cursor/rules/roblox/assets/analytics/analytics-dashboard/benchmark-similar-exp.png new file mode 100644 index 00000000..f3e63395 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/analytics-dashboard/benchmark-similar-exp.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2472642cb23a65e2207b4d4380dfa3a5adf582a53cd8632d1e0487008782fb3f +size 91588 diff --git a/.cursor/rules/roblox/assets/analytics/analytics-dashboard/benchmark-transition.png b/.cursor/rules/roblox/assets/analytics/analytics-dashboard/benchmark-transition.png new file mode 100644 index 00000000..b16185fa --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/analytics-dashboard/benchmark-transition.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9bac5133c2b068fd0139c0a0e4a846c0182f8b7d15b763edd66b9d95406183fe +size 198083 diff --git a/.cursor/rules/roblox/assets/analytics/bans/bans-overview.png b/.cursor/rules/roblox/assets/analytics/bans/bans-overview.png new file mode 100644 index 00000000..69caacd5 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/bans/bans-overview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c3aa0074dfaa6b92051b5a0f85c42e827672b2037fff22e7a7bba54f6f9fd8f +size 89903 diff --git a/.cursor/rules/roblox/assets/analytics/configs/configs-history.png b/.cursor/rules/roblox/assets/analytics/configs/configs-history.png new file mode 100644 index 00000000..67d2fd0b --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/configs/configs-history.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e724db3c26e7b6a26c4944369a93faf67e0f5e3eb9b6b2c882538020f2ce57a1 +size 100907 diff --git a/.cursor/rules/roblox/assets/analytics/configs/configs-overview.png b/.cursor/rules/roblox/assets/analytics/configs/configs-overview.png new file mode 100644 index 00000000..49974e64 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/configs/configs-overview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eff9b6df469c149972abc966b3b51f1d5c8cebef7cfd8ffc033868bd8ecf0ea0 +size 64242 diff --git a/.cursor/rules/roblox/assets/analytics/configs/configs-publish.png b/.cursor/rules/roblox/assets/analytics/configs/configs-publish.png new file mode 100644 index 00000000..a88b7e43 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/configs/configs-publish.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8599d56faf80f4adb05c86bf41a8ae09cbbd0d8effb8374ce2245a08310cf9c +size 51453 diff --git a/.cursor/rules/roblox/assets/analytics/configs/configs-studio.png b/.cursor/rules/roblox/assets/analytics/configs/configs-studio.png new file mode 100644 index 00000000..bf8d2838 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/configs/configs-studio.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c374a2917affdede7a9d9406cf01b0e4d941e1cc9e4a374ef48bfec686b097e +size 65464 diff --git a/.cursor/rules/roblox/assets/analytics/configs/experiment-confidence.png b/.cursor/rules/roblox/assets/analytics/configs/experiment-confidence.png new file mode 100644 index 00000000..e8ffcd38 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/configs/experiment-confidence.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8620d21904bbb5f1cf8d501ccfbbe0945240e7ca70408cf0aad30912e7b41e52 +size 69127 diff --git a/.cursor/rules/roblox/assets/analytics/configs/experiment-details.png b/.cursor/rules/roblox/assets/analytics/configs/experiment-details.png new file mode 100644 index 00000000..df865ec9 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/configs/experiment-details.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f01ead2b8e1c91ceb3b1da767d6f15ddcf7c7ee4a1e9a8d173443bf7da580ee +size 90969 diff --git a/.cursor/rules/roblox/assets/analytics/configs/experiment-mde.png b/.cursor/rules/roblox/assets/analytics/configs/experiment-mde.png new file mode 100644 index 00000000..71c338e2 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/configs/experiment-mde.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:62aef5fc64e9da4ceb5b4fd153e747ceca5e6ec86a476357fef79b53dbe9f504 +size 13986 diff --git a/.cursor/rules/roblox/assets/analytics/configs/experiment-overview.png b/.cursor/rules/roblox/assets/analytics/configs/experiment-overview.png new file mode 100644 index 00000000..f3b1ca00 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/configs/experiment-overview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:709a4cc4be6b02939d35ed3f6c235ce80b0c6e29dd9ee14cc8c8f8fb8f72f757 +size 49425 diff --git a/.cursor/rules/roblox/assets/analytics/configs/experiment-results.png b/.cursor/rules/roblox/assets/analytics/configs/experiment-results.png new file mode 100644 index 00000000..bc64bc6b --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/configs/experiment-results.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b262b45c63825a75525e7c41afc103bf6e2582e16c5f7a05e3b18b33c0eaf3a6 +size 265830 diff --git a/.cursor/rules/roblox/assets/analytics/configs/experiment-variant-place.png b/.cursor/rules/roblox/assets/analytics/configs/experiment-variant-place.png new file mode 100644 index 00000000..f81742c5 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/configs/experiment-variant-place.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c972c2ab64e8f2b8a0af06b738c3add69bf062f5ce19afee60feff7ac9d7597 +size 81655 diff --git a/.cursor/rules/roblox/assets/analytics/configs/experiment-variant.png b/.cursor/rules/roblox/assets/analytics/configs/experiment-variant.png new file mode 100644 index 00000000..6184d06f --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/configs/experiment-variant.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae7c21d37a490e3580b1c392d7be4d2513e3287f445bbc52ab9df3f3f4131ff1 +size 66887 diff --git a/.cursor/rules/roblox/assets/analytics/demographics/analytics-demographics.png b/.cursor/rules/roblox/assets/analytics/demographics/analytics-demographics.png new file mode 100644 index 00000000..0f0c6314 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/demographics/analytics-demographics.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a95348c37b8cc63a80bef1e5f4cb2161df79ddd3e0d2004105ebf19b6684642 +size 433952 diff --git a/.cursor/rules/roblox/assets/analytics/developer-stats/Chart-Visits.png b/.cursor/rules/roblox/assets/analytics/developer-stats/Chart-Visits.png new file mode 100644 index 00000000..15bd643f --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/developer-stats/Chart-Visits.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7af5671f04ddbbd180aa209082558d1c02754816107299cf7be15d194b698b2 +size 143135 diff --git a/.cursor/rules/roblox/assets/analytics/developer-stats/Live-Stats.png b/.cursor/rules/roblox/assets/analytics/developer-stats/Live-Stats.png new file mode 100644 index 00000000..56197817 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/developer-stats/Live-Stats.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60e410619cabe0f55e76aa80454657691b0086382e32126aa5685d518124b196 +size 89265 diff --git a/.cursor/rules/roblox/assets/analytics/discovery/Below-Benchmark-Charts.png b/.cursor/rules/roblox/assets/analytics/discovery/Below-Benchmark-Charts.png new file mode 100644 index 00000000..394e1393 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/discovery/Below-Benchmark-Charts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:daef21cfd58ffb03530fda1a8c95c9eaa32f4a4ccff9740b69b4fb4314463faf +size 184440 diff --git a/.cursor/rules/roblox/assets/analytics/discovery/Daily-Benchmark-Graphs.png b/.cursor/rules/roblox/assets/analytics/discovery/Daily-Benchmark-Graphs.png new file mode 100644 index 00000000..740f66a6 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/discovery/Daily-Benchmark-Graphs.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74fb3622140d63fb73f437d093c89a1edf4a35d3c2f3b8b9bd5a601c3f17bad6 +size 140263 diff --git a/.cursor/rules/roblox/assets/analytics/discovery/Experience-Overview-Graph.png b/.cursor/rules/roblox/assets/analytics/discovery/Experience-Overview-Graph.png new file mode 100644 index 00000000..1293a6fb --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/discovery/Experience-Overview-Graph.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fa62476e37711e053e660a5ba8db6065ac06ac27675cc7028945411e2b8acae +size 38961 diff --git a/.cursor/rules/roblox/assets/analytics/discovery/Explore-And-Expand-Graph.png b/.cursor/rules/roblox/assets/analytics/discovery/Explore-And-Expand-Graph.png new file mode 100644 index 00000000..f7c29544 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/discovery/Explore-And-Expand-Graph.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1d75e4d657bce0a41d6a38e90413ae057ce74a7d2bde147e3a4c135eae9abe4 +size 85055 diff --git a/.cursor/rules/roblox/assets/analytics/discovery/Home-Recommendation-Impressions.png b/.cursor/rules/roblox/assets/analytics/discovery/Home-Recommendation-Impressions.png new file mode 100644 index 00000000..447b035f --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/discovery/Home-Recommendation-Impressions.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ebe36fbe8fc9ec4404ab12894c30e5767211897f7fb16892f9b884e74f6a4b65 +size 260965 diff --git a/.cursor/rules/roblox/assets/analytics/discovery/Qualified-Play-Through-Impressions.png b/.cursor/rules/roblox/assets/analytics/discovery/Qualified-Play-Through-Impressions.png new file mode 100644 index 00000000..fd19a74e --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/discovery/Qualified-Play-Through-Impressions.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2c30bff24e7b3963690ec7e7aa65873f987ac0ff1f340d4052cd20dfc0ddb86 +size 274405 diff --git a/.cursor/rules/roblox/assets/analytics/discovery/Qualified-Play-Through-Rate.png b/.cursor/rules/roblox/assets/analytics/discovery/Qualified-Play-Through-Rate.png new file mode 100644 index 00000000..49f896e1 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/discovery/Qualified-Play-Through-Rate.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1797d6d751b2b4d8530a9c15f59c599dc140288e2cbd019c75d71850bc1ddae7 +size 48082 diff --git a/.cursor/rules/roblox/assets/analytics/discovery/Retrieval-And-Ranking-Diagram.png b/.cursor/rules/roblox/assets/analytics/discovery/Retrieval-And-Ranking-Diagram.png new file mode 100644 index 00000000..2456df5f --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/discovery/Retrieval-And-Ranking-Diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:741660cb3437de4ef628b6b0775863e997177b08c4dad1ec4a1c4c5d75d0b15b +size 258092 diff --git a/.cursor/rules/roblox/assets/analytics/discovery/Similar-Experiences.png b/.cursor/rules/roblox/assets/analytics/discovery/Similar-Experiences.png new file mode 100644 index 00000000..448c0379 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/discovery/Similar-Experiences.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:231887c966f2a958d65ff83687e87d9aa77a83814d5aee54bf0ebadb6ad81ad1 +size 128477 diff --git a/.cursor/rules/roblox/assets/analytics/error-report/error-report-graph.png b/.cursor/rules/roblox/assets/analytics/error-report/error-report-graph.png new file mode 100644 index 00000000..7270ab93 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/error-report/error-report-graph.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c3efa4d30154471b654eef9bbd5a856c213dd5eb1d7e2cf2cbf7baf77a83dc9 +size 82807 diff --git a/.cursor/rules/roblox/assets/analytics/error-report/error-report-table.png b/.cursor/rules/roblox/assets/analytics/error-report/error-report-table.png new file mode 100644 index 00000000..34ce7e05 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/error-report/error-report-table.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c89afeeb07d96382da46bfa7590e71c11b79b49347302db22a4b10f459643483 +size 155944 diff --git a/.cursor/rules/roblox/assets/analytics/event-types/All-Sources-Sinks.png b/.cursor/rules/roblox/assets/analytics/event-types/All-Sources-Sinks.png new file mode 100644 index 00000000..53271c57 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/event-types/All-Sources-Sinks.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28a74d5f46ef6ffa548131edc575208f39a52acd41525a20e5cfc865534cff41 +size 76596 diff --git a/.cursor/rules/roblox/assets/analytics/event-types/Average-Wallet.png b/.cursor/rules/roblox/assets/analytics/event-types/Average-Wallet.png new file mode 100644 index 00000000..5ca45cef --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/event-types/Average-Wallet.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2fd41853eeb921624331017aeceb0f819c72fe2c7b6bada3a50af6fed610454 +size 54541 diff --git a/.cursor/rules/roblox/assets/analytics/event-types/Custom-Event-Aggregations.png b/.cursor/rules/roblox/assets/analytics/event-types/Custom-Event-Aggregations.png new file mode 100644 index 00000000..2a5d3f05 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/event-types/Custom-Event-Aggregations.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a60135af0a396db770bbf648068e06cc9a1801f3d0fe4716c33c938bf465043d +size 48856 diff --git a/.cursor/rules/roblox/assets/analytics/event-types/Custom-Event-Breakdown.png b/.cursor/rules/roblox/assets/analytics/event-types/Custom-Event-Breakdown.png new file mode 100644 index 00000000..88716d68 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/event-types/Custom-Event-Breakdown.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48acd32882ddc8d8c9dac6927636c56c76e2c97d308d00ac87d9636b5e48f08f +size 61963 diff --git a/.cursor/rules/roblox/assets/analytics/event-types/Custom-Event-Graph.png b/.cursor/rules/roblox/assets/analytics/event-types/Custom-Event-Graph.png new file mode 100644 index 00000000..961395e0 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/event-types/Custom-Event-Graph.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72037b9a6d95dab395c46c970ebeb14c7d7fa726b0cb4a1949ac1186d9f6af14 +size 203657 diff --git a/.cursor/rules/roblox/assets/analytics/event-types/Event-Tracking.png b/.cursor/rules/roblox/assets/analytics/event-types/Event-Tracking.png new file mode 100644 index 00000000..bc05f0a1 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/event-types/Event-Tracking.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:577a44966aba72525c124873a635814119a18f8cf07a4cd3f56b07de18caa3bd +size 217881 diff --git a/.cursor/rules/roblox/assets/analytics/event-types/Overview-Economy-Funnels.png b/.cursor/rules/roblox/assets/analytics/event-types/Overview-Economy-Funnels.png new file mode 100644 index 00000000..1e505065 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/event-types/Overview-Economy-Funnels.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9eaf4b460da1aec0e482a4881f5260a90828f00a6d2b6060ae3f13364d3d8bcf +size 295952 diff --git a/.cursor/rules/roblox/assets/analytics/event-types/Plant-Game-Funnel.png b/.cursor/rules/roblox/assets/analytics/event-types/Plant-Game-Funnel.png new file mode 100644 index 00000000..6ea2c392 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/event-types/Plant-Game-Funnel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d12e0a2fe053df9fb6df0f5aa380db7cba9b724d06f94fa2ba9332de2928cff2 +size 117939 diff --git a/.cursor/rules/roblox/assets/analytics/event-types/Plant-Game-Prompts.png b/.cursor/rules/roblox/assets/analytics/event-types/Plant-Game-Prompts.png new file mode 100644 index 00000000..d14f5d8c --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/event-types/Plant-Game-Prompts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9dfd934c14f1203812afb765086d24e99493b8aef996c3154c186882a60f5af7 +size 1335935 diff --git a/.cursor/rules/roblox/assets/analytics/event-types/Plant-Game-Warning.png b/.cursor/rules/roblox/assets/analytics/event-types/Plant-Game-Warning.png new file mode 100644 index 00000000..263f1145 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/event-types/Plant-Game-Warning.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5fcb5c4c653d52230b249c2db874f01a00ac6dc365e36aebe67f859c959e3646 +size 13885 diff --git a/.cursor/rules/roblox/assets/analytics/event-types/Top-Sources-Sinks.png b/.cursor/rules/roblox/assets/analytics/event-types/Top-Sources-Sinks.png new file mode 100644 index 00000000..91a00eeb --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/event-types/Top-Sources-Sinks.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e369a32efc46062f1eb0c2139005aca68454afa558b328a2f8423daca18154bc +size 56977 diff --git a/.cursor/rules/roblox/assets/analytics/event-types/Total-Sources-Sinks.png b/.cursor/rules/roblox/assets/analytics/event-types/Total-Sources-Sinks.png new file mode 100644 index 00000000..421e454c --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/event-types/Total-Sources-Sinks.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:667296e8339dad6afb4961f68f13c45b0457811087b4931ff2a093192a31048f +size 78056 diff --git a/.cursor/rules/roblox/assets/analytics/feedback/AnalyticsAssistantFeedbackReport.png b/.cursor/rules/roblox/assets/analytics/feedback/AnalyticsAssistantFeedbackReport.png new file mode 100644 index 00000000..2452cc08 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/feedback/AnalyticsAssistantFeedbackReport.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42ef9ce8d3044806d8f96999b36b6c0b2cef229f4794755191524232af85f035 +size 139308 diff --git a/.cursor/rules/roblox/assets/analytics/feedback/AnalyticsFeedbackAssistant.png b/.cursor/rules/roblox/assets/analytics/feedback/AnalyticsFeedbackAssistant.png new file mode 100644 index 00000000..ca23b56a --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/feedback/AnalyticsFeedbackAssistant.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e0cbdf4135a8c9f894848424fbef11a4cbb5e205780251120d15b4467c8737d +size 138742 diff --git a/.cursor/rules/roblox/assets/analytics/feedback/Date-Range-Selector.png b/.cursor/rules/roblox/assets/analytics/feedback/Date-Range-Selector.png new file mode 100644 index 00000000..1d8acd2b --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/feedback/Date-Range-Selector.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a17e680c494f78e759115cc664de124143fc05be69958c9e92c7e35089f801e +size 203314 diff --git a/.cursor/rules/roblox/assets/analytics/feedback/Detailed-View.png b/.cursor/rules/roblox/assets/analytics/feedback/Detailed-View.png new file mode 100644 index 00000000..e5efd1c7 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/feedback/Detailed-View.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f3d771ecc3a8280dc7e51507d4fc93fd034c92afb718da95953068fb02786454 +size 73647 diff --git a/.cursor/rules/roblox/assets/analytics/feedback/Export-Chart-Data.png b/.cursor/rules/roblox/assets/analytics/feedback/Export-Chart-Data.png new file mode 100644 index 00000000..3e0f644e --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/feedback/Export-Chart-Data.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68cd6de16a94dc8d983081361ca04db5ac8d14dea210fd1f2b9122581e3b1fa0 +size 144773 diff --git a/.cursor/rules/roblox/assets/analytics/feedback/Export-Detailed-Data.png b/.cursor/rules/roblox/assets/analytics/feedback/Export-Detailed-Data.png new file mode 100644 index 00000000..a0d149fe --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/feedback/Export-Detailed-Data.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64c263b8a53eb4fe46efe8464fc44515d1e69e382a8adc1932f9cc0ecbd82447 +size 58898 diff --git a/.cursor/rules/roblox/assets/analytics/feedback/Feedback-Breakdown.png b/.cursor/rules/roblox/assets/analytics/feedback/Feedback-Breakdown.png new file mode 100644 index 00000000..c3a61cb9 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/feedback/Feedback-Breakdown.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e58eca14fd101d5ffabc117840397cb2755f5b28bfb0735da3f30509af1140a3 +size 53706 diff --git a/.cursor/rules/roblox/assets/analytics/feedback/Feedback-Options-Button.png b/.cursor/rules/roblox/assets/analytics/feedback/Feedback-Options-Button.png new file mode 100644 index 00000000..1ab656f5 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/feedback/Feedback-Options-Button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fec2248ddcc68ae56190b98e66f196ae8eb6b557bf6ba8cc020b6d46993ea29 +size 33397 diff --git a/.cursor/rules/roblox/assets/analytics/feedback/Feedback-Widget.png b/.cursor/rules/roblox/assets/analytics/feedback/Feedback-Widget.png new file mode 100644 index 00000000..be732e67 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/feedback/Feedback-Widget.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0a905381758ebf8b779501b344c7af67f2caff7fe329713e39b6551e95cc618 +size 162179 diff --git a/.cursor/rules/roblox/assets/analytics/feedback/Relative-Percentage.png b/.cursor/rules/roblox/assets/analytics/feedback/Relative-Percentage.png new file mode 100644 index 00000000..eb9a8539 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/feedback/Relative-Percentage.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:546ae05ab8e145f20c9f1903c38ccd6bee49babb58116b45b39e22083746683c +size 56386 diff --git a/.cursor/rules/roblox/assets/analytics/monetization/monetization-overview.png b/.cursor/rules/roblox/assets/analytics/monetization/monetization-overview.png new file mode 100644 index 00000000..9ef9d5e3 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/monetization/monetization-overview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e2ef0f2f4a6aa7b379f7ab29774207ca18c591190191058754772c7437a2298 +size 23728 diff --git a/.cursor/rules/roblox/assets/analytics/overview/Achievements.png b/.cursor/rules/roblox/assets/analytics/overview/Achievements.png new file mode 100644 index 00000000..a0465ec9 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/overview/Achievements.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ec71c5bd4f05cc2022838385fb53f77fe7de7c7a8ac65e6a879c8b1c372f678 +size 31496 diff --git a/.cursor/rules/roblox/assets/analytics/overview/AnalyticsAssistantInsights.png b/.cursor/rules/roblox/assets/analytics/overview/AnalyticsAssistantInsights.png new file mode 100644 index 00000000..4102e95d --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/overview/AnalyticsAssistantInsights.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9fc3c54a5c8eba9d0096f16bbfe8f15ee32bc3f694f555b66c23b021d777cdb +size 59109 diff --git a/.cursor/rules/roblox/assets/analytics/overview/AnalyticsAssistantReport.png b/.cursor/rules/roblox/assets/analytics/overview/AnalyticsAssistantReport.png new file mode 100644 index 00000000..ed61d40f --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/overview/AnalyticsAssistantReport.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c276d896113c6e8af38cc2da419313ba261f517896b2751d7c29cd412f4d929b +size 396453 diff --git a/.cursor/rules/roblox/assets/analytics/overview/AnalyticsInsights.png b/.cursor/rules/roblox/assets/analytics/overview/AnalyticsInsights.png new file mode 100644 index 00000000..732d24eb --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/overview/AnalyticsInsights.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b43b7c61007b6f07f1320b964e1c3b5dd922d57486b2ebd7cb0244066a1e19f +size 102945 diff --git a/.cursor/rules/roblox/assets/analytics/overview/Benchmarks-Similar.png b/.cursor/rules/roblox/assets/analytics/overview/Benchmarks-Similar.png new file mode 100644 index 00000000..c75ac0e9 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/overview/Benchmarks-Similar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d42153dc149808364aa78eeeebae80d653a5054c49c294e49156b35957b748c +size 172474 diff --git a/.cursor/rules/roblox/assets/analytics/overview/Insights.png b/.cursor/rules/roblox/assets/analytics/overview/Insights.png new file mode 100644 index 00000000..28981a2a --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/overview/Insights.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75ff01241738a0c1a244fbcb2093311a9099cdd43aaa438f4b6aa9f517d43d74 +size 138513 diff --git a/.cursor/rules/roblox/assets/analytics/overview/Roblox_Analytics_Insights.png b/.cursor/rules/roblox/assets/analytics/overview/Roblox_Analytics_Insights.png new file mode 100644 index 00000000..da26c7ae --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/overview/Roblox_Analytics_Insights.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:060bb46d5ddcc96ddc40fd2bb322c18d219623f1948924bcc48571a0cefcb79a +size 171459 diff --git a/.cursor/rules/roblox/assets/analytics/overview/avatar-sales-and-revenue.png b/.cursor/rules/roblox/assets/analytics/overview/avatar-sales-and-revenue.png new file mode 100644 index 00000000..216a70c9 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/overview/avatar-sales-and-revenue.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:754566464f10ace898494140a6674c9f07c86522c300f1770547811b81a01281 +size 232737 diff --git a/.cursor/rules/roblox/assets/analytics/overview/step1.png b/.cursor/rules/roblox/assets/analytics/overview/step1.png new file mode 100644 index 00000000..6d5d6e0e --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/overview/step1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b013f989eddf421bd873d9a33b1d05c5663f1c0380ac0928d1b15b0eeffec057 +size 86679 diff --git a/.cursor/rules/roblox/assets/analytics/overview/step2.png b/.cursor/rules/roblox/assets/analytics/overview/step2.png new file mode 100644 index 00000000..2e0a06d6 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/overview/step2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58cb3e65a502142cecd58463701499907cecfc67313f095c3b59c6795dc431af +size 119687 diff --git a/.cursor/rules/roblox/assets/analytics/overview/step3.png b/.cursor/rules/roblox/assets/analytics/overview/step3.png new file mode 100644 index 00000000..4c07b758 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/overview/step3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ca2b70954981dae2c31e52661149332c525ab906269f407e161bfffdb27ff54 +size 394506 diff --git a/.cursor/rules/roblox/assets/analytics/overview/watchlist.png b/.cursor/rules/roblox/assets/analytics/overview/watchlist.png new file mode 100644 index 00000000..3c20ce18 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/overview/watchlist.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74c0c6bba7efc3b1a543843dd6e7033b864cbdeac4c379174870644a80ab1fe0 +size 1423102 diff --git a/.cursor/rules/roblox/assets/analytics/performance/client-api-calls.png b/.cursor/rules/roblox/assets/analytics/performance/client-api-calls.png new file mode 100644 index 00000000..b2c46b4e --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/performance/client-api-calls.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c1bee7560e7777f645d6f286e79617551de93d19e8af22eb5f60fdbc90b6ded +size 105980 diff --git a/.cursor/rules/roblox/assets/analytics/performance/client-performance.png b/.cursor/rules/roblox/assets/analytics/performance/client-performance.png new file mode 100644 index 00000000..6c7082a9 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/performance/client-performance.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:620df7c65048f636fa884616d1810d12e2214ea2f190d8718c2ce481f58f17f5 +size 145318 diff --git a/.cursor/rules/roblox/assets/analytics/performance/perf-client-crashes.png b/.cursor/rules/roblox/assets/analytics/performance/perf-client-crashes.png new file mode 100644 index 00000000..c8e55aae --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/performance/perf-client-crashes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5875740c05a5284f76732c574aa1123e270dff9462256020b4a6c156e761e225 +size 72913 diff --git a/.cursor/rules/roblox/assets/analytics/performance/perf-dash-dev.png b/.cursor/rules/roblox/assets/analytics/performance/perf-dash-dev.png new file mode 100644 index 00000000..05daac1b --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/performance/perf-dash-dev.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc3b491437355b195fd9704d7df434fa1b75f6c0081c480b727459979c45a75b +size 463553 diff --git a/.cursor/rules/roblox/assets/analytics/performance/perf-dash-drilldown.png b/.cursor/rules/roblox/assets/analytics/performance/perf-dash-drilldown.png new file mode 100644 index 00000000..8d936463 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/performance/perf-dash-drilldown.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aed96affad40783e669abfac3a66f5bb518e84f537946f5581ada385c761d479 +size 304687 diff --git a/.cursor/rules/roblox/assets/analytics/performance/perf-dash-filter.png b/.cursor/rules/roblox/assets/analytics/performance/perf-dash-filter.png new file mode 100644 index 00000000..6716b44a --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/performance/perf-dash-filter.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3fee71232aaeceeed7d2c03266f55f3273757659b42ae94a1b092a2c026d00fb +size 42584 diff --git a/.cursor/rules/roblox/assets/analytics/performance/perf-dash-micro.png b/.cursor/rules/roblox/assets/analytics/performance/perf-dash-micro.png new file mode 100644 index 00000000..22589756 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/performance/perf-dash-micro.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c698a13127a73f80b1eccbacf7b21c4644cfe0bf3f70575191b2d130878f828d +size 214604 diff --git a/.cursor/rules/roblox/assets/analytics/performance/perf-dash-overview.png b/.cursor/rules/roblox/assets/analytics/performance/perf-dash-overview.png new file mode 100644 index 00000000..5a656848 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/performance/perf-dash-overview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea98f5fcbc831f08264bb2d18f169cbd53a2508e2d570041e155fc716a07311e +size 203982 diff --git a/.cursor/rules/roblox/assets/analytics/performance/perf-dash-ui.png b/.cursor/rules/roblox/assets/analytics/performance/perf-dash-ui.png new file mode 100644 index 00000000..00be316e --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/performance/perf-dash-ui.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5f304fa337de428b19211fdc6a694930a5b932f3b8d0dfe12c82a8c46155a51 +size 171169 diff --git a/.cursor/rules/roblox/assets/analytics/performance/perf-place-version-filter.png b/.cursor/rules/roblox/assets/analytics/performance/perf-place-version-filter.png new file mode 100644 index 00000000..391c0f17 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/performance/perf-place-version-filter.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec0f1a0ddb142c55d2d02e6e07cc95eab222b7c99a080f412032f38cb1cdec5d +size 108588 diff --git a/.cursor/rules/roblox/assets/analytics/performance/server-stats.png b/.cursor/rules/roblox/assets/analytics/performance/server-stats.png new file mode 100644 index 00000000..e869d4fd --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/performance/server-stats.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e77d028d2c3d7ea193c876416ed6e058023ad708f2550649b41b667d18e21a7 +size 49593 diff --git a/.cursor/rules/roblox/assets/analytics/retention/AnalyticsRetentionChart.png b/.cursor/rules/roblox/assets/analytics/retention/AnalyticsRetentionChart.png new file mode 100644 index 00000000..9f55e6a1 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/retention/AnalyticsRetentionChart.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34db120c8fcb2191e7429cf3cd30939d0b4753828b904cd7e1328d74eb80af61 +size 243850 diff --git a/.cursor/rules/roblox/assets/analytics/retention/CohortAnalysis.png b/.cursor/rules/roblox/assets/analytics/retention/CohortAnalysis.png new file mode 100644 index 00000000..9e510a7f --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/retention/CohortAnalysis.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5050b79b839acb39598ec1205060214d78d11a6204bcd5b7cff1636487f386af +size 89529 diff --git a/.cursor/rules/roblox/assets/analytics/retention/CohortAnalysis2.png b/.cursor/rules/roblox/assets/analytics/retention/CohortAnalysis2.png new file mode 100644 index 00000000..e59d7d00 --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/retention/CohortAnalysis2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:830e324ba24a0241f94a652c7dc9fb870b6406d920421008c1533797acfacb70 +size 143972 diff --git a/.cursor/rules/roblox/assets/analytics/sales-data-calendar.png b/.cursor/rules/roblox/assets/analytics/sales-data-calendar.png new file mode 100644 index 00000000..cc81a2ba --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/sales-data-calendar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:acbd96406aee64a1381eebe0844f8250b44f55715e7ee3ba93a8cfb9e7667988 +size 99924 diff --git a/.cursor/rules/roblox/assets/analytics/sales-of-good.png b/.cursor/rules/roblox/assets/analytics/sales-of-good.png new file mode 100644 index 00000000..59da72ab --- /dev/null +++ b/.cursor/rules/roblox/assets/analytics/sales-of-good.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:091728451ee28f4a1d142a1cd8f2567137786bf65a9ace0d61a746c62b27b850 +size 15170 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Add-Multiple-Keyframes.png b/.cursor/rules/roblox/assets/animation/animation-editor/Add-Multiple-Keyframes.png new file mode 100644 index 00000000..6f19a9b0 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Add-Multiple-Keyframes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e16c56b84ab24755acbae1fc7ecab60a0edcb0f3df595726001f365c53020291 +size 29436 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Animation-Events-Add-Event.png b/.cursor/rules/roblox/assets/animation/animation-editor/Animation-Events-Add-Event.png new file mode 100644 index 00000000..f95d7d52 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Animation-Events-Add-Event.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46374cfb402ed00f0c5c2a401f9af6563ab62df356e8bd09f76598490f65313b +size 13005 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Animation-Events-Bar.png b/.cursor/rules/roblox/assets/animation/animation-editor/Animation-Events-Bar.png new file mode 100644 index 00000000..ad7e8615 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Animation-Events-Bar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8d919a6e14d1c293770ada538cec95ce373822c670afe8494d171b9b37b9155 +size 31177 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Animation-Events-Edit-Button.png b/.cursor/rules/roblox/assets/animation/animation-editor/Animation-Events-Edit-Button.png new file mode 100644 index 00000000..12dccb94 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Animation-Events-Edit-Button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae05208573e7e90a2fc3fd46fb3a7b0ffd242f50c1b1a7e0b9c7ebfb5f59b152 +size 29791 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Animation-Events-Marker-In-Timeline.png b/.cursor/rules/roblox/assets/animation/animation-editor/Animation-Events-Marker-In-Timeline.png new file mode 100644 index 00000000..968c4841 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Animation-Events-Marker-In-Timeline.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74bd137a72973c09348b2c573de216e6da164535b29283f7fd1a2233a6605c84 +size 31898 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Animation-Events-Marker-Pasted.png b/.cursor/rules/roblox/assets/animation/animation-editor/Animation-Events-Marker-Pasted.png new file mode 100644 index 00000000..3939c235 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Animation-Events-Marker-Pasted.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b83ec82f991290c5e576defd814940a5ca78254bfe6e2a515174f73023d69aad +size 32774 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Animation-Events-Marker-Selected.png b/.cursor/rules/roblox/assets/animation/animation-editor/Animation-Events-Marker-Selected.png new file mode 100644 index 00000000..77eae5ba --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Animation-Events-Marker-Selected.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3eb1aa90f0abbffb3daba90fc5fc6e71b9b1bc942598c0666a24c7d939da33f1 +size 32312 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Animation-Poses.mp4 b/.cursor/rules/roblox/assets/animation/animation-editor/Animation-Poses.mp4 new file mode 100644 index 00000000..ec7dae3c --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Animation-Poses.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb4f90d27a0fb045e7accead3cf75e6f067a3178c704c97faff868a2c11a6669 +size 2260572 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Animation-Name.png b/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Animation-Name.png new file mode 100644 index 00000000..73af236d --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Animation-Name.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2c73c1cc85685cb46caea6ab0e01844ff9500f04651d1fce8022f02dbf88851 +size 11728 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Controls-File-Menu.png b/.cursor/rules/roblox/assets/animation/animation-editor/Controls-File-Menu.png new file mode 100644 index 00000000..644aad6d --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Controls-File-Menu.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7842e462100d31ab7a7380d6049bc04ff707e29486f7d6bb53c451fab527ca59 +size 14784 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Controls-First-Key.png b/.cursor/rules/roblox/assets/animation/animation-editor/Controls-First-Key.png new file mode 100644 index 00000000..4afcd065 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Controls-First-Key.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3cb41f693c1e463f378628b4ca4791a60c711f81a23ae87a42740df37773412b +size 14853 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Last-Key.png b/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Last-Key.png new file mode 100644 index 00000000..54920b4f --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Last-Key.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7acbe51702505396addfa3ba405f3188cf318f8fdc3024ada63c1192b2aeef24 +size 14786 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Looping.png b/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Looping.png new file mode 100644 index 00000000..51dcf4a4 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Looping.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d50a280d0fa21bbe384433078e4df60bcf50a7f419d85a14cb4c26a2932052b +size 14797 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Next-Key.png b/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Next-Key.png new file mode 100644 index 00000000..fb9364c8 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Next-Key.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a75d30ba06822c4c277561090c440a8c3ca509c1a12f8e4a3448af44c70f632a +size 14913 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Pause.png b/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Pause.png new file mode 100644 index 00000000..12abc8d8 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Pause.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58883d0c04cb7165f9530969c8f55b245f6c85e03a2e7cc07953f952f71163d7 +size 14918 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Position-Indicator.png b/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Position-Indicator.png new file mode 100644 index 00000000..78c48fef --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Position-Indicator.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:995aef17762e1fc9adce6b72e913eded6e5d2b95285d680bb3ca6ace84b396c7 +size 11443 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Preview-Reverse.png b/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Preview-Reverse.png new file mode 100644 index 00000000..fd731c5e --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Preview-Reverse.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e93973eb98336c58e9c3cf3d81c7db823ae4c9127702179a2cc716e52bb37756 +size 14785 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Preview.png b/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Preview.png new file mode 100644 index 00000000..ac6590d4 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Preview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4683fb92e64c2b19a7c4b30281b31dad23bab4b3a6744dc860f6a8fd7aa12695 +size 14895 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Previous-Key.png b/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Previous-Key.png new file mode 100644 index 00000000..3b3ff310 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Controls-Previous-Key.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e0e2cbdb3a59ff943c57a89ca7846a7ce0f73e180aca3c368fccdb5a56c2353 +size 14841 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Create-Animation-Dialog.png b/.cursor/rules/roblox/assets/animation/animation-editor/Create-Animation-Dialog.png new file mode 100644 index 00000000..3cfdc604 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Create-Animation-Dialog.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e1b73bb201df27169ff8f2a871f8f5dbff5898539f84f393aa065be72d674a3 +size 15174 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Easing-Cubic.mp4 b/.cursor/rules/roblox/assets/animation/animation-editor/Easing-Cubic.mp4 new file mode 100644 index 00000000..bc63ddaa --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Easing-Cubic.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:342c1036d85a40cf3bd744bffa5efc53ebaf6e3c62ac74832afc9ffe4f56519f +size 2166347 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Easing-Linear.mp4 b/.cursor/rules/roblox/assets/animation/animation-editor/Easing-Linear.mp4 new file mode 100644 index 00000000..4f84bb2c --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Easing-Linear.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d371315160b465eb4065e67606f51d16be594732995b6fa115b6502656ad0c20 +size 2263480 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Editor-Sections-Labeled.png b/.cursor/rules/roblox/assets/animation/animation-editor/Editor-Sections-Labeled.png new file mode 100644 index 00000000..6e6157ea --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Editor-Sections-Labeled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e34c6c094413cdd5bae29eb947bef2bea0b46db8dbfaf6f5fdbfbd994a614a80 +size 39908 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Migrate-Animations.png b/.cursor/rules/roblox/assets/animation/animation-editor/Migrate-Animations.png new file mode 100644 index 00000000..30828683 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Migrate-Animations.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a9eeba64125165951cb885e3cd93a8d4522ca2ccbb760b67bf940bc174692bf +size 29432 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Optimization-Preview.png b/.cursor/rules/roblox/assets/animation/animation-editor/Optimization-Preview.png new file mode 100644 index 00000000..8433528d --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Optimization-Preview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3bd2ca268a718dd6ee492672a79a9ec6dcf40e8fcc7e2a82fe90c34bd94bf483 +size 701018 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Optimization-Slider.png b/.cursor/rules/roblox/assets/animation/animation-editor/Optimization-Slider.png new file mode 100644 index 00000000..19f5a9c0 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Optimization-Slider.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75084223fc22d5b4925033ad674e09036260c3bf18c4ea03b89966216685c9f1 +size 9317 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Optimize-Keyframes.png b/.cursor/rules/roblox/assets/animation/animation-editor/Optimize-Keyframes.png new file mode 100644 index 00000000..c35af1bb --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Optimize-Keyframes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9573036e996e03b7849fa15430e84402e7f355acdbc77f34bc14e169d609467d +size 6763 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Saved-Animation.png b/.cursor/rules/roblox/assets/animation/animation-editor/Saved-Animation.png new file mode 100644 index 00000000..76dc3f9d --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Saved-Animation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6069dcfb7e63ae1a2071cb316f98f7ba55d7b9e2dc6cf3c6d9e8fe9f43086ff5 +size 31219 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Scrubber-0-15.png b/.cursor/rules/roblox/assets/animation/animation-editor/Scrubber-0-15.png new file mode 100644 index 00000000..4f8779bc --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Scrubber-0-15.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80a908a622a38a74960838083b5340f290e561ac44586330d3f538e3ed1a4282 +size 15667 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Select-Final-Keyframe.png b/.cursor/rules/roblox/assets/animation/animation-editor/Select-Final-Keyframe.png new file mode 100644 index 00000000..d684c046 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Select-Final-Keyframe.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27e0759fdab5c45653ecd29f7e571531684605d924d57dc531dd0d7b10aeeec0 +size 21921 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Select-Multiple-Keyframes.png b/.cursor/rules/roblox/assets/animation/animation-editor/Select-Multiple-Keyframes.png new file mode 100644 index 00000000..d57a32e6 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Select-Multiple-Keyframes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6fb1e0eafbb1eb7007234c415d92b5aef89ccc9f305df9b941f230524425c83 +size 37404 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Select-Single-Keyframe.png b/.cursor/rules/roblox/assets/animation/animation-editor/Select-Single-Keyframe.png new file mode 100644 index 00000000..ee027389 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Select-Single-Keyframe.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd3640fad28c46a386d091dfb0676df617ff7ef0bb89ee6e93773cd9b1f040c0 +size 27199 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Timeline-Expand-Contract.png b/.cursor/rules/roblox/assets/animation/animation-editor/Timeline-Expand-Contract.png new file mode 100644 index 00000000..72c7705b --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Timeline-Expand-Contract.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae50d8d8bb0f499cca2795a1fa669be8cfb2e545328c83b0c922b0b12fc1eda6 +size 12805 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Timeline-Keyframe.png b/.cursor/rules/roblox/assets/animation/animation-editor/Timeline-Keyframe.png new file mode 100644 index 00000000..37cfe83c --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Timeline-Keyframe.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a81a959d21f63a44e0c0fd56b66040050a12f40d26fce918288cded3c2fdbcf4 +size 17688 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Timeline-Options-Menu.png b/.cursor/rules/roblox/assets/animation/animation-editor/Timeline-Options-Menu.png new file mode 100644 index 00000000..9880bd2c --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Timeline-Options-Menu.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30487cb779f371528d17a1479f8ab6693d655dd92ca62c7ed46b979f4525525d +size 17527 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Timeline-Scrubber-Bar.png b/.cursor/rules/roblox/assets/animation/animation-editor/Timeline-Scrubber-Bar.png new file mode 100644 index 00000000..215b9233 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Timeline-Scrubber-Bar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff308d88427124da0b2f7d3dbbd93dd19bab151a36b316952f499b7be9b9ad81 +size 12399 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Timeline-Time-Units.png b/.cursor/rules/roblox/assets/animation/animation-editor/Timeline-Time-Units.png new file mode 100644 index 00000000..70441fad --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Timeline-Time-Units.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17bb7439255b817535d48e37fc77c2d5ca3a3f5f68451813a0ef85c36da1b877 +size 12313 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Track-Keyframe-Added.png b/.cursor/rules/roblox/assets/animation/animation-editor/Track-Keyframe-Added.png new file mode 100644 index 00000000..947477d4 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Track-Keyframe-Added.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80aeed8c8dc75aabd690e744a3f3221dd1f41fba9a30606e3ee112ad2e437e8b +size 23182 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Track-List-Add-Tracks.png b/.cursor/rules/roblox/assets/animation/animation-editor/Track-List-Add-Tracks.png new file mode 100644 index 00000000..fc13e8b8 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Track-List-Add-Tracks.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc79293dd0ca6535532c2a8430c347110e969b71e8734f7f92d60331a02cc348 +size 67803 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Track-List-IK-Button.png b/.cursor/rules/roblox/assets/animation/animation-editor/Track-List-IK-Button.png new file mode 100644 index 00000000..934bbde9 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Track-List-IK-Button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:481877bf8e0ee500a2b5e8c9f5270ee6ff152530e18c2e42f5ff0184686dfac0 +size 12570 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Track-List-Rig-Name.png b/.cursor/rules/roblox/assets/animation/animation-editor/Track-List-Rig-Name.png new file mode 100644 index 00000000..ebfd5656 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Track-List-Rig-Name.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0a74a4d77c4327c320aca8557ad5bbac18304e66aba9c3651dbbc86dc10287a +size 12558 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Track-List-Track-Name.png b/.cursor/rules/roblox/assets/animation/animation-editor/Track-List-Track-Name.png new file mode 100644 index 00000000..cf0e1df6 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Track-List-Track-Name.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb5e52ed42a38daf75c6b0cdd147e0a54acc1eeddac05f3e59c50dd11a3aeabc +size 12134 diff --git a/.cursor/rules/roblox/assets/animation/animation-editor/Track-List-Track-Options.png b/.cursor/rules/roblox/assets/animation/animation-editor/Track-List-Track-Options.png new file mode 100644 index 00000000..b6d90a2c --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/animation-editor/Track-List-Track-Options.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b05dd0f83cf30db7aa3fcdc4ec125b0cda213719db009464d32bedc2c1e93015 +size 68436 diff --git a/.cursor/rules/roblox/assets/animation/curve-editor/Convert-Euler-Angles.png b/.cursor/rules/roblox/assets/animation/curve-editor/Convert-Euler-Angles.png new file mode 100644 index 00000000..59d127bb --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/curve-editor/Convert-Euler-Angles.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3af29d7cca38ffbce135c7f318fd2e2e023a966f948b4e84c45cf2d5205afea0 +size 34141 diff --git a/.cursor/rules/roblox/assets/animation/curve-editor/Convert-Quaternion-Angles.png b/.cursor/rules/roblox/assets/animation/curve-editor/Convert-Quaternion-Angles.png new file mode 100644 index 00000000..470695c8 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/curve-editor/Convert-Quaternion-Angles.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b0d62e3eb8494b36349a7c944d3613b44803cde68a11cb643a4f2f6755f1c5d +size 33498 diff --git a/.cursor/rules/roblox/assets/animation/curve-editor/Curve-Editor-Example.png b/.cursor/rules/roblox/assets/animation/curve-editor/Curve-Editor-Example.png new file mode 100644 index 00000000..8418ac4f --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/curve-editor/Curve-Editor-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:687f5a39ee4ce65319ed81eef6d159d1be5732ee6bf8d923506c0d5a3e355707 +size 15351 diff --git a/.cursor/rules/roblox/assets/animation/curve-editor/Dope-Sheet-Editor.png b/.cursor/rules/roblox/assets/animation/curve-editor/Dope-Sheet-Editor.png new file mode 100644 index 00000000..59c7d280 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/curve-editor/Dope-Sheet-Editor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8c3ae881a73375bbc6a0be1c3b1ffdeefb04f768448ff73eb0c6dbf8efc4d60 +size 16374 diff --git a/.cursor/rules/roblox/assets/animation/curve-editor/Euler-Angle-Curve-Tangents.png b/.cursor/rules/roblox/assets/animation/curve-editor/Euler-Angle-Curve-Tangents.png new file mode 100644 index 00000000..ebfc37e9 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/curve-editor/Euler-Angle-Curve-Tangents.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:463175e80c894512149cc8930a33aca09147c5eb5a7f3fcfe6a2e6cde2874230 +size 11471 diff --git a/.cursor/rules/roblox/assets/animation/curve-editor/Euler-Angle-Curve.png b/.cursor/rules/roblox/assets/animation/curve-editor/Euler-Angle-Curve.png new file mode 100644 index 00000000..cdf64b2e --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/curve-editor/Euler-Angle-Curve.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:264b17c66d137964b37f7581e146ebe72305216549817deee7ca5d9d5fc92ec2 +size 22385 diff --git a/.cursor/rules/roblox/assets/animation/curve-editor/Gear-Icon.png b/.cursor/rules/roblox/assets/animation/curve-editor/Gear-Icon.png new file mode 100644 index 00000000..8fa49222 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/curve-editor/Gear-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ee31eb8029e363e60ffab004169931b55eae068edd6babfbc2a5c39788eedc7 +size 64278 diff --git a/.cursor/rules/roblox/assets/animation/curve-editor/Interpolation-Mode.png b/.cursor/rules/roblox/assets/animation/curve-editor/Interpolation-Mode.png new file mode 100644 index 00000000..6013f9bf --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/curve-editor/Interpolation-Mode.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:baf55e2c89dacef565982546c787852b23297daefa9d4880b95b413e9c8fdb3a +size 103726 diff --git a/.cursor/rules/roblox/assets/animation/curve-editor/Opening-Curve-Editor.png b/.cursor/rules/roblox/assets/animation/curve-editor/Opening-Curve-Editor.png new file mode 100644 index 00000000..2b0e9cef --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/curve-editor/Opening-Curve-Editor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7611c5deb0a3587501b88fc2e2149a3c6126299c488f416d890ee484b04519bd +size 23419 diff --git a/.cursor/rules/roblox/assets/animation/curve-editor/Quaternion-Curve-Interpolation.png b/.cursor/rules/roblox/assets/animation/curve-editor/Quaternion-Curve-Interpolation.png new file mode 100644 index 00000000..6e9739bb --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/curve-editor/Quaternion-Curve-Interpolation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bd06d1f92ff2be8b1c608d5e857d3dc0f656ce96e99ecee9bc2e3effdb4f7cc +size 19076 diff --git a/.cursor/rules/roblox/assets/animation/curve-editor/Quaternion-Curve-Tangents.png b/.cursor/rules/roblox/assets/animation/curve-editor/Quaternion-Curve-Tangents.png new file mode 100644 index 00000000..2a585bf7 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/curve-editor/Quaternion-Curve-Tangents.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30926fa2136200c97db1c5f552fa722b17d99820742f2dbb6e5fa00674adefa8 +size 10345 diff --git a/.cursor/rules/roblox/assets/animation/curve-editor/Tangent.png b/.cursor/rules/roblox/assets/animation/curve-editor/Tangent.png new file mode 100644 index 00000000..124cea72 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/curve-editor/Tangent.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e9150dbc61a45091230d13e27a0ffba91ca174e7427730e4025d4a4bf645988 +size 2375 diff --git a/.cursor/rules/roblox/assets/animation/curve-editor/UI-Overview.png b/.cursor/rules/roblox/assets/animation/curve-editor/UI-Overview.png new file mode 100644 index 00000000..cfbebcdb --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/curve-editor/UI-Overview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a19a67c4abdca228c6dccb20a2cc94eb3c23093db8373e6519b86903bcf27bba +size 70459 diff --git a/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Bake-Animation.jpg b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Bake-Animation.jpg new file mode 100644 index 00000000..a51c7e98 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Bake-Animation.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b25966a3f4792eb5dd21eed3fd30a7ad787a46e88318d6cf7f1ee02f937da02c +size 46121 diff --git a/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Export-All.png b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Export-All.png new file mode 100644 index 00000000..f307f581 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Export-All.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db04a2ed39942d550b86c5268eeb0627f6aba3114cf5d582ab275b173ae22a4c +size 54938 diff --git a/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/FBX-File-Format.jpg b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/FBX-File-Format.jpg new file mode 100644 index 00000000..cc524e20 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/FBX-File-Format.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54df0a67754fb3c35c8a1afd51f0c440fe8fbb62b38a96caf759d1e9e12aa8a2 +size 49672 diff --git a/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Importing-From-FBX-Animation.jpg b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Importing-From-FBX-Animation.jpg new file mode 100644 index 00000000..bb9b1552 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Importing-From-FBX-Animation.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6da2de800de693aa598dd6df521a68cdfb700bce8ca1b209f0434304d4c1e08d +size 47323 diff --git a/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Loaded-and-AutoLoad-Radio-Buttons.jpg b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Loaded-and-AutoLoad-Radio-Buttons.jpg new file mode 100644 index 00000000..ee193115 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Loaded-and-AutoLoad-Radio-Buttons.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:acc8f67dcd3df5e2cc4fb58223657b9e7c6c65846e1d34fb7df93960ce4d5abf +size 63387 diff --git a/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Moving-Rig.mp4 b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Moving-Rig.mp4 new file mode 100644 index 00000000..cd9a0bd8 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Moving-Rig.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f34e9f502117f436ddb3b610527b3dcfb13ff2a4282b3564a0d1f4b8ca3750ed +size 123217 diff --git a/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Mute-Selected.jpg b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Mute-Selected.jpg new file mode 100644 index 00000000..5ba007f3 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Mute-Selected.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a319b3625997dc6c7e7bcf809ded4545b1b7a2f5f40c2a883e567169d6b06c74 +size 49623 diff --git a/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Muted-TranslateZ.jpg b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Muted-TranslateZ.jpg new file mode 100644 index 00000000..e05d51ac --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Muted-TranslateZ.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1731ca32511f0d7e0e7d58f8996d36bffa8ba3e14b4e123e291eb821f68b8ffb +size 25018 diff --git a/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Opening-GraphEditor-and-TimeSlider.jpg b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Opening-GraphEditor-and-TimeSlider.jpg new file mode 100644 index 00000000..2839aed8 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Opening-GraphEditor-and-TimeSlider.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d476c282d7533a9a13b559e74c9de91929cfb28ee4a8f8fe6b29c9c481724b4 +size 143141 diff --git a/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Overview-Mannequin.jpg b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Overview-Mannequin.jpg new file mode 100644 index 00000000..adb1de48 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Overview-Mannequin.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e39c2893568fa50700c6b8e15e9b314fb6ec47bac92fcdec3787ddec7e0e4b17 +size 50609 diff --git a/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Plugin-Manager.jpg b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Plugin-Manager.jpg new file mode 100644 index 00000000..a38a29e5 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Plugin-Manager.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db7b32a3a8380f9608269c04c73bdd1b0b3ce13ccd5c63aab564112b7a1e00a5 +size 149133 diff --git a/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/R15-Mannequin-Rig.ma b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/R15-Mannequin-Rig.ma new file mode 100644 index 00000000..50f51965 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/R15-Mannequin-Rig.ma @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4549d371d54604f685c7223f72ca6d1322ac8ed327881735becd3912fa2c1b96 +size 2581483 diff --git a/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Time-Marker.jpg b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Time-Marker.jpg new file mode 100644 index 00000000..d0bc3768 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/exporting-avatar-animations-from-maya/Time-Marker.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a428aef50cd5a42a6c42910923230f735779194baaac298e44b6cd50150d2d7d +size 52688 diff --git a/.cursor/rules/roblox/assets/animation/face-recorder/Countdown-Button.jpg b/.cursor/rules/roblox/assets/animation/face-recorder/Countdown-Button.jpg new file mode 100644 index 00000000..56c00670 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/face-recorder/Countdown-Button.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8519e15d807c387e07748e781b9039ba9f0e9888681e2908e513cbe473f43bb +size 3599 diff --git a/.cursor/rules/roblox/assets/animation/face-recorder/Face-Recorder-Button.jpg b/.cursor/rules/roblox/assets/animation/face-recorder/Face-Recorder-Button.jpg new file mode 100644 index 00000000..3a8fe003 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/face-recorder/Face-Recorder-Button.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:689e5263564daab447eb482e203dc674951f317e7340b43b2945479d9d8a77d6 +size 17550 diff --git a/.cursor/rules/roblox/assets/animation/face-recorder/Face-Recorder.mp4 b/.cursor/rules/roblox/assets/animation/face-recorder/Face-Recorder.mp4 new file mode 100644 index 00000000..1e6c3431 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/face-recorder/Face-Recorder.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3797cc3197c7381349a40e2c158dace8e7d8781bf784f1193b91fd11c0049b63 +size 5851736 diff --git a/.cursor/rules/roblox/assets/animation/face-recorder/Ready-Button.jpg b/.cursor/rules/roblox/assets/animation/face-recorder/Ready-Button.jpg new file mode 100644 index 00000000..f0b6b4ab --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/face-recorder/Ready-Button.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a27caec678920683b5ed71b8c96263f74998c2e7e8ed54dc0c3d31c3d9823d5c +size 3540 diff --git a/.cursor/rules/roblox/assets/animation/importing-custom-3d-rigs/Birdcaller-Imported.jpeg b/.cursor/rules/roblox/assets/animation/importing-custom-3d-rigs/Birdcaller-Imported.jpeg new file mode 100644 index 00000000..a5a0974b --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/importing-custom-3d-rigs/Birdcaller-Imported.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed70fd430ee4b5a31b197a102d4ec4e2c5de146786150a8e04b9a8e35aca97b0 +size 82853 diff --git a/.cursor/rules/roblox/assets/animation/importing-custom-3d-rigs/Rig-Custom-Puffer-Blender.png b/.cursor/rules/roblox/assets/animation/importing-custom-3d-rigs/Rig-Custom-Puffer-Blender.png new file mode 100644 index 00000000..808d4d90 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/importing-custom-3d-rigs/Rig-Custom-Puffer-Blender.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:249d25774bd8a692e662d2de41062f588d23a9694749c4c812ff736356b53b37 +size 127012 diff --git a/.cursor/rules/roblox/assets/animation/importing-custom-3d-rigs/Rig-Hierarchy-Birdcaller-Blender-Bones.png b/.cursor/rules/roblox/assets/animation/importing-custom-3d-rigs/Rig-Hierarchy-Birdcaller-Blender-Bones.png new file mode 100644 index 00000000..4c5fd77b --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/importing-custom-3d-rigs/Rig-Hierarchy-Birdcaller-Blender-Bones.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d0d56294bf6ba7ca3759009074668a4de568f1664515474866b88ff8d3dd386 +size 56175 diff --git a/.cursor/rules/roblox/assets/animation/importing-custom-3d-rigs/Rig-Hierarchy-Custom-Blender-Bones.png b/.cursor/rules/roblox/assets/animation/importing-custom-3d-rigs/Rig-Hierarchy-Custom-Blender-Bones.png new file mode 100644 index 00000000..7b080d31 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/importing-custom-3d-rigs/Rig-Hierarchy-Custom-Blender-Bones.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1e7e186e3324747dcecf8d42c423effb46969459993e8056e4d747fba2f6972 +size 59427 diff --git a/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Add-Attachment.png b/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Add-Attachment.png new file mode 100644 index 00000000..3a394bd6 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Add-Attachment.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ebd697464b1fe194a64bf1e28ce3ec06ed860252029c9070987370b098e1a2b5 +size 26885 diff --git a/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Body-Part.mp4 b/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Body-Part.mp4 new file mode 100644 index 00000000..da65d991 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Body-Part.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22f75f9674db338fd1d3ad79aa79199fe13f17a2bae7eeaf03f1775d47bae7df +size 1352682 diff --git a/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Drag-Accessory.mp4 b/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Drag-Accessory.mp4 new file mode 100644 index 00000000..44d2b492 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Drag-Accessory.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29ed674a30ef424ddd67d045b518ea7db2af61d628fc149b021af2bab9585217 +size 448963 diff --git a/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Drag-Hand.mp4 b/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Drag-Hand.mp4 new file mode 100644 index 00000000..0f10b028 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Drag-Hand.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60e2e378d4866902b1cdfee83be875e75eb819bc672484654bc7ca7b76d228f4 +size 370270 diff --git a/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Explorer-Humanoid.png b/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Explorer-Humanoid.png new file mode 100644 index 00000000..39906a9e --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Explorer-Humanoid.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a369b5fe38413d395168bcae16423383f3b5cb27ec160df41808600720106d7 +size 34012 diff --git a/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Humanoid-Add.png b/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Humanoid-Add.png new file mode 100644 index 00000000..fe94cacd --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Humanoid-Add.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f888daea0e5427f79f6820707aa392f29a09f02bc3773023c7f3dacfe91f4f8 +size 18103 diff --git a/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-IKControl-Property.png b/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-IKControl-Property.png new file mode 100644 index 00000000..43c3d600 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-IKControl-Property.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ead2a84894db0f31cd4290dd960f625aefebc204bac39dc5b3e957963c646e53 +size 27261 diff --git a/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Move-Attachment.png b/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Move-Attachment.png new file mode 100644 index 00000000..bcb9c9b6 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Move-Attachment.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23a45c803d560b47eb6895767e1589c62150f5ef109e013e292a7efbf28f0858 +size 439534 diff --git a/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Place-Hand.mp4 b/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Place-Hand.mp4 new file mode 100644 index 00000000..3029b97a --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Place-Hand.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87adc67c1f231cce156d8be6836642ef9b22aaf6bbe90b0694e3adb93e8a9caf +size 277882 diff --git a/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Uneven-Surfaces.mp4 b/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Uneven-Surfaces.mp4 new file mode 100644 index 00000000..0ba412ec --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/inverse-kinematics/IK-Uneven-Surfaces.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf3443b47e0762beacb8fc2fa2a091aafc0e73b5dfe1095154ebbc11d6dedc0b +size 544176 diff --git a/.cursor/rules/roblox/assets/animation/inverse-kinematics/ball-socket-constraint.mp4 b/.cursor/rules/roblox/assets/animation/inverse-kinematics/ball-socket-constraint.mp4 new file mode 100644 index 00000000..9e441865 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/inverse-kinematics/ball-socket-constraint.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80fbc20fa4567863ae91eba84590e2697e06766a45e318eab82e27e4194f84c7 +size 12074867 diff --git a/.cursor/rules/roblox/assets/animation/inverse-kinematics/elbow-natural-pose.png b/.cursor/rules/roblox/assets/animation/inverse-kinematics/elbow-natural-pose.png new file mode 100644 index 00000000..51e71641 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/inverse-kinematics/elbow-natural-pose.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f7151449c4196768f6b8d52372c60490d99442d638d14e8d97ae56ddb902998 +size 575724 diff --git a/.cursor/rules/roblox/assets/animation/inverse-kinematics/elbow-primary-axis.png b/.cursor/rules/roblox/assets/animation/inverse-kinematics/elbow-primary-axis.png new file mode 100644 index 00000000..bf71ad19 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/inverse-kinematics/elbow-primary-axis.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8d896c6b6011cc7b6fcba33af37fd953913edb506741b48129cfb80352e476b +size 547162 diff --git a/.cursor/rules/roblox/assets/animation/inverse-kinematics/elbow-unnatural-pose.png b/.cursor/rules/roblox/assets/animation/inverse-kinematics/elbow-unnatural-pose.png new file mode 100644 index 00000000..e4f932d0 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/inverse-kinematics/elbow-unnatural-pose.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24eb60c080a72089c420f8da8d05f05cdbbf97847ae11e8feb32227248173ca2 +size 596404 diff --git a/.cursor/rules/roblox/assets/animation/inverse-kinematics/hinge-constraint.mp4 b/.cursor/rules/roblox/assets/animation/inverse-kinematics/hinge-constraint.mp4 new file mode 100644 index 00000000..ec76067f --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/inverse-kinematics/hinge-constraint.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:760dc3e226f7e71d833779ca93488d0046dcb6d6c7efbc9674e3624a2c5ddf2d +size 21489696 diff --git a/.cursor/rules/roblox/assets/animation/inverse-kinematics/wrist-cone.png b/.cursor/rules/roblox/assets/animation/inverse-kinematics/wrist-cone.png new file mode 100644 index 00000000..fe830cd7 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/inverse-kinematics/wrist-cone.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6d5bd01be3cf6a2521280082688613b0d83e5fa8c2bb7e9fa2af28c4b5d7793 +size 353021 diff --git a/.cursor/rules/roblox/assets/animation/inverse-kinematics/wrist-primary-axis.png b/.cursor/rules/roblox/assets/animation/inverse-kinematics/wrist-primary-axis.png new file mode 100644 index 00000000..c754ef4e --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/inverse-kinematics/wrist-primary-axis.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9f94058c765ac248fa9e4551b8ff61245d55c3093ab06ba5637f64a38bf766f +size 375167 diff --git a/.cursor/rules/roblox/assets/animation/inverse-kinematics/wrist-unnatural-pose.png b/.cursor/rules/roblox/assets/animation/inverse-kinematics/wrist-unnatural-pose.png new file mode 100644 index 00000000..2849d997 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/inverse-kinematics/wrist-unnatural-pose.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b952b31051f0b1d910d8998de3412f2e32751057d38d85b015398972959fc41 +size 536472 diff --git a/.cursor/rules/roblox/assets/animation/live-animation-creator/Live-Animation-Creator.mp4 b/.cursor/rules/roblox/assets/animation/live-animation-creator/Live-Animation-Creator.mp4 new file mode 100644 index 00000000..6f022fad --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/live-animation-creator/Live-Animation-Creator.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9ae963e81f3f90817ea1bc5b6315160ae94a5cf5609670aca7b0d8c3c805ec4 +size 14940872 diff --git a/.cursor/rules/roblox/assets/animation/live-animation-creator/Media-Playback-Controls.jpg b/.cursor/rules/roblox/assets/animation/live-animation-creator/Media-Playback-Controls.jpg new file mode 100644 index 00000000..79a03a37 --- /dev/null +++ b/.cursor/rules/roblox/assets/animation/live-animation-creator/Media-Playback-Controls.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:550288fc61a9b807ab6ee440655c7525fb12bde972c3b22f54e8e0b483c3bf73 +size 9579 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/After-Unwrap.png b/.cursor/rules/roblox/assets/art/3p-software/blender/After-Unwrap.png new file mode 100644 index 00000000..14272371 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/After-Unwrap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6a11c44af588865669a8e4da6623971698335f18ed272d21c4a1148d2fe9715 +size 648714 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/Before-Unwrap.png b/.cursor/rules/roblox/assets/art/3p-software/blender/Before-Unwrap.png new file mode 100644 index 00000000..e8b8b062 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/Before-Unwrap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa0c6906c47d0eb064ebb6d48f20eb71e78bc7a2361aa39da5b1ca748e1109fe +size 829835 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/BlenderFileView-Export.png b/.cursor/rules/roblox/assets/art/3p-software/blender/BlenderFileView-Export.png new file mode 100644 index 00000000..9c3759b1 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/BlenderFileView-Export.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ba7ffccd2acbdd79682ed30fa1b01247017062a07ad18483d9b651c1f66c376 +size 71373 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/BlenderFileView-Import.png b/.cursor/rules/roblox/assets/art/3p-software/blender/BlenderFileView-Import.png new file mode 100644 index 00000000..0a827309 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/BlenderFileView-Import.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8419572a6a7d071a1b46e34c3ba3d67c0c61e1fd15d831823739029293a7938e +size 167667 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/ColorAttribute.png b/.cursor/rules/roblox/assets/art/3p-software/blender/ColorAttribute.png new file mode 100644 index 00000000..caa4c87a --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/ColorAttribute.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:394f7e18a602107257bb6b6d3d0507876e28ff970243590abeb02ff64ce29efb +size 93504 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/CubeMap.png b/.cursor/rules/roblox/assets/art/3p-software/blender/CubeMap.png new file mode 100644 index 00000000..4252476d --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/CubeMap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0e412aa285d166f80eb8cf60a9ddf82677d09eef9c46f32f263389ec4b881ac +size 520336 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/CubeProjection.png b/.cursor/rules/roblox/assets/art/3p-software/blender/CubeProjection.png new file mode 100644 index 00000000..3e5dedc8 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/CubeProjection.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be60c3cf445b8bb48e3b38fd189fa7fde6b26642d031452420626c756755f88c +size 775841 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/Edge.png b/.cursor/rules/roblox/assets/art/3p-software/blender/Edge.png new file mode 100644 index 00000000..2dc7badc --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/Edge.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7a120aa348968e032a349f7f5c7bb76103d87911483af73dfe48d8e38670d26 +size 100924 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/ExampleTexture.png b/.cursor/rules/roblox/assets/art/3p-software/blender/ExampleTexture.png new file mode 100644 index 00000000..f02074b9 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/ExampleTexture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d02823f445199eb7979d564102bbbe12fe5a7151e50daaf61c26402e743967a2 +size 13892 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/Face.png b/.cursor/rules/roblox/assets/art/3p-software/blender/Face.png new file mode 100644 index 00000000..eebc5da4 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/Face.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aed89f4487dd32d500be1c387f77697533f4bbc9ea1536f91830f4b741ef08e1 +size 115645 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/FollowActiveQuads.mp4 b/.cursor/rules/roblox/assets/art/3p-software/blender/FollowActiveQuads.mp4 new file mode 100644 index 00000000..6acb4306 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/FollowActiveQuads.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:852ddeef0ca5460150f4ff71b90db06f1805c26392655bd5f97c57f8aa4b416e +size 646590 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/Layout_Workspace.png b/.cursor/rules/roblox/assets/art/3p-software/blender/Layout_Workspace.png new file mode 100644 index 00000000..c4b6034f --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/Layout_Workspace.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:075f8a56f91f2595e6ce9c48f262306de06824c159a381768e4232c99678f8ec +size 35168 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/MM-Tool.mp4 b/.cursor/rules/roblox/assets/art/3p-software/blender/MM-Tool.mp4 new file mode 100644 index 00000000..a67aa225 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/MM-Tool.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b74e630a25f1a36edbe185bf21156badc51133363fa901544343987a1319e7c4 +size 250068 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/MS-Seams-Gun.png b/.cursor/rules/roblox/assets/art/3p-software/blender/MS-Seams-Gun.png new file mode 100644 index 00000000..8e37fad2 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/MS-Seams-Gun.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e168218523eff6e64c9f55808fec0c6855ffb63f628b9a0b7b77d4ac672ea1d9 +size 267713 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/MS-UVMap-Gun.png b/.cursor/rules/roblox/assets/art/3p-software/blender/MS-UVMap-Gun.png new file mode 100644 index 00000000..ca96cdbe --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/MS-UVMap-Gun.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29c19edc33f949a5785d1da7a62ba5c35f9451cac341dbeb77590566bc4ab0ea +size 484121 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/Modeling_Workspace.png b/.cursor/rules/roblox/assets/art/3p-software/blender/Modeling_Workspace.png new file mode 100644 index 00000000..54836c77 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/Modeling_Workspace.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55225e3ba88bebe856e57bd3f096f6fca32b63ac49ab1c98bbb97609accea8c8 +size 34918 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/NavigationGizmo.jpg b/.cursor/rules/roblox/assets/art/3p-software/blender/NavigationGizmo.jpg new file mode 100644 index 00000000..a3b771b3 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/NavigationGizmo.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5be225b11ad5aa9ff5c215af66d77b2417d18213c6b43e9880739631b237d2c8 +size 6228 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/NoTexture.png b/.cursor/rules/roblox/assets/art/3p-software/blender/NoTexture.png new file mode 100644 index 00000000..73b4b184 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/NoTexture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e3fccba4903cb83dfefd6765d62ef95cd847036427c4120b13afbde0b3d1702 +size 774230 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/Sculpting_Workspace.png b/.cursor/rules/roblox/assets/art/3p-software/blender/Sculpting_Workspace.png new file mode 100644 index 00000000..ed05dd0f --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/Sculpting_Workspace.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:820287dcc3325259b3c777ea56cd19f209a82a5c57277c4679173cad94218ee0 +size 35177 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/SmartUVProject.png b/.cursor/rules/roblox/assets/art/3p-software/blender/SmartUVProject.png new file mode 100644 index 00000000..dde6d9ce --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/SmartUVProject.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8fc6a593e22c8baf3014e559047811fd0cd8272c676c429a009238bcf98ace5e +size 659368 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/Snapping.png b/.cursor/rules/roblox/assets/art/3p-software/blender/Snapping.png new file mode 100644 index 00000000..e52b1e73 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/Snapping.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85806de8cc8a8f6cbfc10d4aec8e7bef7e2014e47b4147eae70a057b347f14e9 +size 35704 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/Studio-Import.png b/.cursor/rules/roblox/assets/art/3p-software/blender/Studio-Import.png new file mode 100644 index 00000000..4dc64b97 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/Studio-Import.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e6c1298de48062529fc7819d7d1ed230d7cf74d19d3f0a2a57f3796144b09fc +size 324219 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/Subdivide-Panel.png b/.cursor/rules/roblox/assets/art/3p-software/blender/Subdivide-Panel.png new file mode 100644 index 00000000..95f8a0b6 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/Subdivide-Panel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b601912adb31ad71a2ebad7039ebab8e95c71b44eba7cd5a0d5a9f5283e36a36 +size 94705 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/TexturePaint_Workspace.png b/.cursor/rules/roblox/assets/art/3p-software/blender/TexturePaint_Workspace.png new file mode 100644 index 00000000..9440901f --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/TexturePaint_Workspace.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3af4aa04d4a907d5043e98f2049a7bf368e08addf506b28c18d576a99b851721 +size 34984 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/UV-Cube.png b/.cursor/rules/roblox/assets/art/3p-software/blender/UV-Cube.png new file mode 100644 index 00000000..e59210f0 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/UV-Cube.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab4f494c4dccaeee62b0e2e9865e241a55a9ed58858dfc5a6033b7c4ccf0661c +size 556139 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/UVEditing_Workspace.png b/.cursor/rules/roblox/assets/art/3p-software/blender/UVEditing_Workspace.png new file mode 100644 index 00000000..8abde789 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/UVEditing_Workspace.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5ac80ee6038f408f7edb1a0875036a25044b430e7db9bf036a9b43c1d20a144 +size 34014 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/VP-NoColor.png b/.cursor/rules/roblox/assets/art/3p-software/blender/VP-NoColor.png new file mode 100644 index 00000000..16fd1bbb --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/VP-NoColor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82ec26d7b3903ffd7e4866b30987b6d866eb1c0ea501f678452a369103f72f1c +size 1044798 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/VP-WithColor.png b/.cursor/rules/roblox/assets/art/3p-software/blender/VP-WithColor.png new file mode 100644 index 00000000..415f49b2 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/VP-WithColor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:62ff9d43e48c2cd7fdbd34b8cf0b13cc52003d3d83f8bc5397f63e0346cf93e5 +size 1021718 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/VP-WithTexture.png b/.cursor/rules/roblox/assets/art/3p-software/blender/VP-WithTexture.png new file mode 100644 index 00000000..87cc0139 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/VP-WithTexture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e763c4a2e14e37e27817751895ec5afbd41868b69dbc8bae645c2c686d26ee08 +size 1075453 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/Vertex.png b/.cursor/rules/roblox/assets/art/3p-software/blender/Vertex.png new file mode 100644 index 00000000..e7ab7faf --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/Vertex.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b404aafbc55e503d25cc82493f2288ae4a18f03f2066d0c23a0dc6f61445248 +size 111019 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/ViewSelector.jpg b/.cursor/rules/roblox/assets/art/3p-software/blender/ViewSelector.jpg new file mode 100644 index 00000000..c1fa0a75 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/ViewSelector.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0e672251947bb71a48813556590085b86c03bc28ebc803daf3dca8576203d84 +size 2881 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/WithTexture.png b/.cursor/rules/roblox/assets/art/3p-software/blender/WithTexture.png new file mode 100644 index 00000000..8afa18a0 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/WithTexture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08c325211c4384d6dab78ac7493e82de3271c268317f45ec3f40012e3d2e5099 +size 842907 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/bel-tool.mp4 b/.cursor/rules/roblox/assets/art/3p-software/blender/bel-tool.mp4 new file mode 100644 index 00000000..387b4e0f --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/bel-tool.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5e089614dd1703ab5fd3ac95473b0430389b5587a73ada98e4f2305c8470192 +size 415393 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/delete-tool.mp4 b/.cursor/rules/roblox/assets/art/3p-software/blender/delete-tool.mp4 new file mode 100644 index 00000000..a1ec6dc0 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/delete-tool.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bb0d9212223045271f2bba01befc1b5e471a89c0b52274b41474427f9974a17 +size 296980 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/dissolve-tool.mp4 b/.cursor/rules/roblox/assets/art/3p-software/blender/dissolve-tool.mp4 new file mode 100644 index 00000000..fe219e4d --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/dissolve-tool.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe47e0928b6e7bfb273bce3eeab06d7de5f31a2378c8beb676f357c763af0066 +size 45469 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/extrude-tool.mp4 b/.cursor/rules/roblox/assets/art/3p-software/blender/extrude-tool.mp4 new file mode 100644 index 00000000..3a91e9fd --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/extrude-tool.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1640feab634562875f973ac1cdc2f5af176b3c7fc44c13239e21c106da66bf9d +size 484956 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/fill-tool.mp4 b/.cursor/rules/roblox/assets/art/3p-software/blender/fill-tool.mp4 new file mode 100644 index 00000000..dfef57a1 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/fill-tool.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cae9f615fd79f6eee5c7cd2692e98ecc23d5050fc0348e18da5470d6c1d4d0c1 +size 46386 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/grab-tool.mp4 b/.cursor/rules/roblox/assets/art/3p-software/blender/grab-tool.mp4 new file mode 100644 index 00000000..af83c8c2 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/grab-tool.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c49aa1438c11a007878da7af3fd70c32af977ff24fa4c4c76df6f2867f936bb +size 403905 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/inset-tool.mp4 b/.cursor/rules/roblox/assets/art/3p-software/blender/inset-tool.mp4 new file mode 100644 index 00000000..47d0dd65 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/inset-tool.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0abf633d59ed9065c24b2a56c33defecfd29ad306ad4a139bc095a4d898c0894 +size 65659 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/nffe-tool.mp4 b/.cursor/rules/roblox/assets/art/3p-software/blender/nffe-tool.mp4 new file mode 100644 index 00000000..2ce22a6f --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/nffe-tool.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:183fc6bac524e3d94e5bb47a2f986a7325878dcea25ed793c1fd25b53a9a2408 +size 47801 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/snap-tool.mp4 b/.cursor/rules/roblox/assets/art/3p-software/blender/snap-tool.mp4 new file mode 100644 index 00000000..8d8507c9 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/snap-tool.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55fd1c69e329677ce853ce90f77e01826880f15637d23d4ea589c85f465963dc +size 171663 diff --git a/.cursor/rules/roblox/assets/art/3p-software/blender/subdivide-tool.mp4 b/.cursor/rules/roblox/assets/art/3p-software/blender/subdivide-tool.mp4 new file mode 100644 index 00000000..44c9c3bd --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/blender/subdivide-tool.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20c477874009cd8d1c99f0ce03798ebb43d8f2159d8ed05b23ae45d67366469f +size 112831 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/ArrangeArea.png b/.cursor/rules/roblox/assets/art/3p-software/reaper/ArrangeArea.png new file mode 100644 index 00000000..eadf1af6 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/ArrangeArea.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c2f8e1217337efd4291cda2fd5af6b169ea9bb88acd51c1fdf027779e53b9cb +size 119599 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/Compress-CompressionBar.png b/.cursor/rules/roblox/assets/art/3p-software/reaper/Compress-CompressionBar.png new file mode 100644 index 00000000..f6b378a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/Compress-CompressionBar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c467227b8010a3739dfd90540fb412a5daa221b1377f650a8037bee4a9b7ac8 +size 79956 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/Compress-ReaComp.png b/.cursor/rules/roblox/assets/art/3p-software/reaper/Compress-ReaComp.png new file mode 100644 index 00000000..7f511eaf --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/Compress-ReaComp.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18c70eabc8590ac651f44cda1c06f6a8c272c2998ca7066614dbb559c2855f45 +size 144821 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/Compress-Threshold.png b/.cursor/rules/roblox/assets/art/3p-software/reaper/Compress-Threshold.png new file mode 100644 index 00000000..0ce74e00 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/Compress-Threshold.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:151c10ec406cf7d5a3dc6dd140317c977309be2df394d8908c1efe6533d831f5 +size 78554 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/Compression.mp3 b/.cursor/rules/roblox/assets/art/3p-software/reaper/Compression.mp3 new file mode 100644 index 00000000..5fd56df6 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/Compression.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49c564a7624ea03b89ca9a64bb24432274e8c7aa51ba8370b51a74730b2c99c0 +size 38400 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/EQ.ogg b/.cursor/rules/roblox/assets/art/3p-software/reaper/EQ.ogg new file mode 100644 index 00000000..6f363bd8 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/EQ.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c223d1bf8e863309f6577993402f44d966e00d0a01e7217f578b652a55703017 +size 444754 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/Equalize-ReaEQ.png b/.cursor/rules/roblox/assets/art/3p-software/reaper/Equalize-ReaEQ.png new file mode 100644 index 00000000..db0ed796 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/Equalize-ReaEQ.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e9c427006d64de4a63356940db4a9abc0c83920b5feb568f76aeeddfd17f637 +size 136748 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/Equalize-Type.png b/.cursor/rules/roblox/assets/art/3p-software/reaper/Equalize-Type.png new file mode 100644 index 00000000..881135e4 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/Equalize-Type.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8df51f9fa7ae2d598c69cbcbe32acaa9d859a2de431d10cf5117066d1b98ca64 +size 70122 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/FXPlugins.png b/.cursor/rules/roblox/assets/art/3p-software/reaper/FXPlugins.png new file mode 100644 index 00000000..e52cb07b --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/FXPlugins.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:618d9adbe115672b7a70102626e57237da234c91aa7a2cd3ac4d94e3e5215c2e +size 196794 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/Fades-Crop.mp4 b/.cursor/rules/roblox/assets/art/3p-software/reaper/Fades-Crop.mp4 new file mode 100644 index 00000000..3d792b8c --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/Fades-Crop.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f535d7e317fb03ab3833bd827e744bc685dd711cd1615fa7eedf2786932400c +size 1176107 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/Fades-CurveType.mp4 b/.cursor/rules/roblox/assets/art/3p-software/reaper/Fades-CurveType.mp4 new file mode 100644 index 00000000..af79ddce --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/Fades-CurveType.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be6a0838f369425558dce197e6505190d9a65ded77d3bc7fa4760bb115e284c6 +size 370769 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/Fades-Transition.mp4 b/.cursor/rules/roblox/assets/art/3p-software/reaper/Fades-Transition.mp4 new file mode 100644 index 00000000..8fc22e7d --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/Fades-Transition.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fff0c5e4fa1d78a00b7195295a12f5e1c94c391ea2d652a513d77a7fae6a62f4 +size 851405 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/FileRender.png b/.cursor/rules/roblox/assets/art/3p-software/reaper/FileRender.png new file mode 100644 index 00000000..605f046c --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/FileRender.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e49009af41081824e1909a156533f613b9b97668ef52cc6aa5fcb14fad6595d +size 111481 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/Loop-LoopPoint.png b/.cursor/rules/roblox/assets/art/3p-software/reaper/Loop-LoopPoint.png new file mode 100644 index 00000000..90629f56 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/Loop-LoopPoint.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:502c03ab2b73c0b952e96b81209a1e0d8841f601cd7532d38582cfe4014ea09c +size 151723 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/Loop-MoveClips.mp4 b/.cursor/rules/roblox/assets/art/3p-software/reaper/Loop-MoveClips.mp4 new file mode 100644 index 00000000..76e60781 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/Loop-MoveClips.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:504c74306fb1e5d6199b4636f12c5d9e567b7cba77fed4947fd0f14898ca6df9 +size 2589396 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/Loop-Play.mp4 b/.cursor/rules/roblox/assets/art/3p-software/reaper/Loop-Play.mp4 new file mode 100644 index 00000000..89fe9602 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/Loop-Play.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eaaabcf6427816ec32b50323c2e509765a324f09f0176d00534d666ea01d76fc +size 2240252 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/Loop-Split.png b/.cursor/rules/roblox/assets/art/3p-software/reaper/Loop-Split.png new file mode 100644 index 00000000..ae329207 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/Loop-Split.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e524615050f428137796d1c681a8f3f1c6c8d4042cc4850f00ac720bcbaf212 +size 155940 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/Loops.ogg b/.cursor/rules/roblox/assets/art/3p-software/reaper/Loops.ogg new file mode 100644 index 00000000..260442d5 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/Loops.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa00e3d257a4f398deb705dfd0b7c0164ab709fb8a7271492f52156feedb3c0c +size 905974 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/MixerControlPanel.png b/.cursor/rules/roblox/assets/art/3p-software/reaper/MixerControlPanel.png new file mode 100644 index 00000000..23a67f98 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/MixerControlPanel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0b598836f3b4aaac41ecb2f100a233e47500f1c6a7d4b13a0bf66611cac5b61 +size 120095 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/NoCompression.mp3 b/.cursor/rules/roblox/assets/art/3p-software/reaper/NoCompression.mp3 new file mode 100644 index 00000000..de45db48 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/NoCompression.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f8cc53bcb0042ed8bd84c597541e9b2226ee6b65a17a1f5ed8633f46bb88326 +size 38400 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/NoEQ.ogg b/.cursor/rules/roblox/assets/art/3p-software/reaper/NoEQ.ogg new file mode 100644 index 00000000..28be7848 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/NoEQ.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c45297e4d9a3396f52486ca56d26c14811d5943033598df32e2a40a00fc3dce +size 592248 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/NoLoops.ogg b/.cursor/rules/roblox/assets/art/3p-software/reaper/NoLoops.ogg new file mode 100644 index 00000000..ed3e06da --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/NoLoops.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43421454a35d96e8002cec28d6eda9440cf0aa700e84e3eb40ddbef8f27fc71b +size 1104462 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/NoNoiseReduction.ogg b/.cursor/rules/roblox/assets/art/3p-software/reaper/NoNoiseReduction.ogg new file mode 100644 index 00000000..f1fd194d --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/NoNoiseReduction.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ed528cd6c6030ece0b0e5083000f104f33cad6a8c18c277e6d83ad4f1523a19 +size 78122 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/NoTransitions.ogg b/.cursor/rules/roblox/assets/art/3p-software/reaper/NoTransitions.ogg new file mode 100644 index 00000000..79848628 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/NoTransitions.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd1281fe3011e3595db383f9427f4a9a0e7323078aec9f081c38a408f336432e +size 172266 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/NoVariations.ogg b/.cursor/rules/roblox/assets/art/3p-software/reaper/NoVariations.ogg new file mode 100644 index 00000000..65234c32 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/NoVariations.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9a0412d6d115b83794f9ba97a41ac8d37e63eff872752d24b4499f61fe99883 +size 35508 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/Noise-ReaFir.png b/.cursor/rules/roblox/assets/art/3p-software/reaper/Noise-ReaFir.png new file mode 100644 index 00000000..bd2786f7 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/Noise-ReaFir.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8eb03d6ee5cebf190d373cba78e98f137e833083a79c0bcdd71cdcb6f9e22618 +size 153290 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/Noise-Subtract.png b/.cursor/rules/roblox/assets/art/3p-software/reaper/Noise-Subtract.png new file mode 100644 index 00000000..755b60ab --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/Noise-Subtract.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec0fb32079e28dfc6576a65009409fcb1f41306675364baf132d211ecc47bbca +size 75066 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/NoiseReduction.ogg b/.cursor/rules/roblox/assets/art/3p-software/reaper/NoiseReduction.ogg new file mode 100644 index 00000000..25e8b95d --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/NoiseReduction.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:edf15ca93e18834ed75e855549308a800eb9416aaed8630a72d91a8f70c91f40 +size 28571 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/RenderToFileSettings.png b/.cursor/rules/roblox/assets/art/3p-software/reaper/RenderToFileSettings.png new file mode 100644 index 00000000..4ea23eb0 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/RenderToFileSettings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:154fe7e8ede75db31ad917093a21dda93a74de163b595cc90048fc83091a15f0 +size 330123 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/Timeline.png b/.cursor/rules/roblox/assets/art/3p-software/reaper/Timeline.png new file mode 100644 index 00000000..8a700200 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/Timeline.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:991c49cdc9a85b6bd390e4eea5eeb28c9a13ec05c95c6f8912c3690cce034d4d +size 118050 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/Toolbar.png b/.cursor/rules/roblox/assets/art/3p-software/reaper/Toolbar.png new file mode 100644 index 00000000..a43f9691 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/Toolbar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60e94d47eabb6f3c742a8daaa935b8070f315f3246c4da8b652f987c0d9f6788 +size 118536 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/TrackControlPanel.png b/.cursor/rules/roblox/assets/art/3p-software/reaper/TrackControlPanel.png new file mode 100644 index 00000000..1092146b --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/TrackControlPanel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18c6b005774b8bd95400d9c1ed485bb269dbeb94119554adedf511c8cd23cb8d +size 117466 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/Transitions.ogg b/.cursor/rules/roblox/assets/art/3p-software/reaper/Transitions.ogg new file mode 100644 index 00000000..983f78ab --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/Transitions.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c41241592de7b6474f7ccd1483495284fc808cd429f334d3f619bc63b484a90d +size 167517 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/TransportBar.png b/.cursor/rules/roblox/assets/art/3p-software/reaper/TransportBar.png new file mode 100644 index 00000000..e43d90af --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/TransportBar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70013c015ecc0110fd5276f0fedcb762e782bddceb53de7e944ee0141d5e838c +size 120971 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/Variations-Copies.png b/.cursor/rules/roblox/assets/art/3p-software/reaper/Variations-Copies.png new file mode 100644 index 00000000..f357e442 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/Variations-Copies.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49de93ce592e2e0dd792fe94a07b02e010183dbc8338b15a1a2d1e5e89767f80 +size 25709 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/Variations-ItemProperties.png b/.cursor/rules/roblox/assets/art/3p-software/reaper/Variations-ItemProperties.png new file mode 100644 index 00000000..4654ce50 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/Variations-ItemProperties.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:890d9f90395692b9b155416a35f9081e766fe94db27e2724d3951ddd8d78f884 +size 52407 diff --git a/.cursor/rules/roblox/assets/art/3p-software/reaper/Variations.ogg b/.cursor/rules/roblox/assets/art/3p-software/reaper/Variations.ogg new file mode 100644 index 00000000..6c6787b1 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/3p-software/reaper/Variations.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80377e3ab1cc149954840665129d60f0639b5de1dc6a6224018367a8a03b5a8e +size 38788 diff --git a/.cursor/rules/roblox/assets/art/Additional-Caging-Examples.png b/.cursor/rules/roblox/assets/art/Additional-Caging-Examples.png new file mode 100644 index 00000000..6d56e8e9 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/Additional-Caging-Examples.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8c7e04c7e7133dc1a070b90897cf6fc78d36e8ee5e480cc0963261a00fe6e29 +size 329005 diff --git a/.cursor/rules/roblox/assets/art/Basic-Mesh-Combined-Example.png b/.cursor/rules/roblox/assets/art/Basic-Mesh-Combined-Example.png new file mode 100644 index 00000000..20558cb8 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/Basic-Mesh-Combined-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f9842bc9cdb8b6b71441ee919300d15707c5a1748f1762006e3ec63a9172a9b +size 737262 diff --git a/.cursor/rules/roblox/assets/art/Basic-Mesh-Example.png b/.cursor/rules/roblox/assets/art/Basic-Mesh-Example.png new file mode 100644 index 00000000..4dbcb94a --- /dev/null +++ b/.cursor/rules/roblox/assets/art/Basic-Mesh-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad2fefc5aac0f27fccf5b4ab20cfe11ba2a6ef3c9ba322a2621505fa6dcb76c5 +size 390527 diff --git a/.cursor/rules/roblox/assets/art/Basic-Texture-Example.png b/.cursor/rules/roblox/assets/art/Basic-Texture-Example.png new file mode 100644 index 00000000..a2568110 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/Basic-Texture-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:427ac425f76ca5a2028e43831d9137b6e9052f95c2855ee9cc2abc9ac4fc55ef +size 499214 diff --git a/.cursor/rules/roblox/assets/art/Body-Scale-Diagram.png b/.cursor/rules/roblox/assets/art/Body-Scale-Diagram.png new file mode 100644 index 00000000..9f3ccb28 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/Body-Scale-Diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d63de967780e73bf79422dd6406f0ccb7d00357dc3b129e5ea660bc4360538be +size 355485 diff --git a/.cursor/rules/roblox/assets/art/Cap-A.png b/.cursor/rules/roblox/assets/art/Cap-A.png new file mode 100644 index 00000000..e73c66ae --- /dev/null +++ b/.cursor/rules/roblox/assets/art/Cap-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8f62916db86baa59094b47e822403e089e32eaf8b1cda5b408c8d87a0dec9e7 +size 38830 diff --git a/.cursor/rules/roblox/assets/art/Cap-B.png b/.cursor/rules/roblox/assets/art/Cap-B.png new file mode 100644 index 00000000..84028f70 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/Cap-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2bfb06404580d9a3f020f628491ea729bc1c8df85e00b872c88cad88c25e0cf6 +size 30973 diff --git a/.cursor/rules/roblox/assets/art/Cap-C.png b/.cursor/rules/roblox/assets/art/Cap-C.png new file mode 100644 index 00000000..8a046ab6 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/Cap-C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29181365ade412741004b2db023e20a16587977a5bdfebd48e79172eef087900 +size 41000 diff --git a/.cursor/rules/roblox/assets/art/Cap-D.png b/.cursor/rules/roblox/assets/art/Cap-D.png new file mode 100644 index 00000000..1e23eea9 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/Cap-D.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca538cb29b36a3df6faa1a7d48b71f16626929ca42ec9dfce9613f5d03906048 +size 42658 diff --git a/.cursor/rules/roblox/assets/art/Generic-Icon.png b/.cursor/rules/roblox/assets/art/Generic-Icon.png new file mode 100644 index 00000000..cb95ac6e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/Generic-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32ad381ebe78289c248b35ca147e7562b94afe46ec23228a858528801385c69a +size 7115 diff --git a/.cursor/rules/roblox/assets/art/Helmet-A.png b/.cursor/rules/roblox/assets/art/Helmet-A.png new file mode 100644 index 00000000..5203d0aa --- /dev/null +++ b/.cursor/rules/roblox/assets/art/Helmet-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3483006d9aeecbb80b71ab385dd3f22eed2fb4643952eb978071f4c62a385d20 +size 643123 diff --git a/.cursor/rules/roblox/assets/art/Helmet-B.png b/.cursor/rules/roblox/assets/art/Helmet-B.png new file mode 100644 index 00000000..b945fbdd --- /dev/null +++ b/.cursor/rules/roblox/assets/art/Helmet-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:493d9f30033203c707ec140a2112c728c871abe210d583b4b5a02a6c7f5bd26f +size 664916 diff --git a/.cursor/rules/roblox/assets/art/Helmet-C.png b/.cursor/rules/roblox/assets/art/Helmet-C.png new file mode 100644 index 00000000..93721e70 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/Helmet-C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3df0355a73b9b398934c9ae5c127e55fed9951d77c947aae279856aeb8448872 +size 660209 diff --git a/.cursor/rules/roblox/assets/art/Helmet-D.png b/.cursor/rules/roblox/assets/art/Helmet-D.png new file mode 100644 index 00000000..214387ea --- /dev/null +++ b/.cursor/rules/roblox/assets/art/Helmet-D.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e64f64c394696366c219b26e7e62bddd74f8b11b3a8887cf863a18499890382 +size 604127 diff --git a/.cursor/rules/roblox/assets/art/Helmet-E.png b/.cursor/rules/roblox/assets/art/Helmet-E.png new file mode 100644 index 00000000..847387b6 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/Helmet-E.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91f78601e21300d1dd0398af80756e03e0e8050debc132ebe639bf0f72301465 +size 174604 diff --git a/.cursor/rules/roblox/assets/art/RobloxBlenderPluginDemo.mp4 b/.cursor/rules/roblox/assets/art/RobloxBlenderPluginDemo.mp4 new file mode 100644 index 00000000..104a37ca --- /dev/null +++ b/.cursor/rules/roblox/assets/art/RobloxBlenderPluginDemo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f95838fa18d730cf303ebfcdad02be9daabc78b9a7a5f90e041212926255f23 +size 61727371 diff --git a/.cursor/rules/roblox/assets/art/Shrine-Detailed.jpg b/.cursor/rules/roblox/assets/art/Shrine-Detailed.jpg new file mode 100644 index 00000000..675ce3dd --- /dev/null +++ b/.cursor/rules/roblox/assets/art/Shrine-Detailed.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:62374eca806cec977d57b8d4f49b30af1f67f3976f7573f0da2fb6bdbf6fee99 +size 449663 diff --git a/.cursor/rules/roblox/assets/art/Thumbnail-Buttes.jpeg b/.cursor/rules/roblox/assets/art/Thumbnail-Buttes.jpeg new file mode 100644 index 00000000..4b0d556d --- /dev/null +++ b/.cursor/rules/roblox/assets/art/Thumbnail-Buttes.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30e34b22cb18b3032508c55a72db3057a141c29225cb7b14ed51b999d550ad89 +size 94473 diff --git a/.cursor/rules/roblox/assets/art/Thumbnail-Looping.png b/.cursor/rules/roblox/assets/art/Thumbnail-Looping.png new file mode 100644 index 00000000..92d2a04a --- /dev/null +++ b/.cursor/rules/roblox/assets/art/Thumbnail-Looping.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:625d4a587acc18c8a0a6fe05e15a0ea1df3d58a53032fd60ffedc4fa80ae1f3d +size 28316 diff --git a/.cursor/rules/roblox/assets/art/Thumbnail-Radial.png b/.cursor/rules/roblox/assets/art/Thumbnail-Radial.png new file mode 100644 index 00000000..01d6188e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/Thumbnail-Radial.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3545757ceeeab7fa43d835a09babd0f4c1a306c078876704afbaf744a438b844 +size 46453 diff --git a/.cursor/rules/roblox/assets/art/Thumbnail-Shrine.png b/.cursor/rules/roblox/assets/art/Thumbnail-Shrine.png new file mode 100644 index 00000000..8c7d3ec0 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/Thumbnail-Shrine.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20a1f48c160c2f5139b041b9a810b321598c652d02b895fe88137c88b8adb138 +size 357896 diff --git a/.cursor/rules/roblox/assets/art/Thumbnail-Tinting.jpeg b/.cursor/rules/roblox/assets/art/Thumbnail-Tinting.jpeg new file mode 100644 index 00000000..0c8cfd7f --- /dev/null +++ b/.cursor/rules/roblox/assets/art/Thumbnail-Tinting.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f9ddfe3198acd3af72851147213e2e26eb2fb33d9d139bb8e51b572bc4d2d37 +size 111682 diff --git a/.cursor/rules/roblox/assets/art/Traffic-Cone.png b/.cursor/rules/roblox/assets/art/Traffic-Cone.png new file mode 100644 index 00000000..016c8b9e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/Traffic-Cone.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b063092d5095967375504b0eab9e5563c0ce5e954ca536806a0571d122c3cd6b +size 19237 diff --git a/.cursor/rules/roblox/assets/art/ValidationTool_V2.zip b/.cursor/rules/roblox/assets/art/ValidationTool_V2.zip new file mode 100644 index 00000000..f24446fe --- /dev/null +++ b/.cursor/rules/roblox/assets/art/ValidationTool_V2.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3bdf26b4903c074962dd967470952a96d7a057cad0669b2b3839c25b6addf1f +size 295094 diff --git a/.cursor/rules/roblox/assets/art/accessories/AFT-Eyebrows-Example.png b/.cursor/rules/roblox/assets/art/accessories/AFT-Eyebrows-Example.png new file mode 100644 index 00000000..c94b86a1 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/AFT-Eyebrows-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8b6f74d9ae6821953fd7bcc4fb7130e5d83627749332dd61529f5af798fa72b +size 16765 diff --git a/.cursor/rules/roblox/assets/art/accessories/Anime-Girl-Eyebrows-Example.png b/.cursor/rules/roblox/assets/art/accessories/Anime-Girl-Eyebrows-Example.png new file mode 100644 index 00000000..ce0c026a --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/Anime-Girl-Eyebrows-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cddb1ac29a7c526b1a71658e42da0d1a1dacf912123c0e2eed72a7c83333153b +size 125746 diff --git a/.cursor/rules/roblox/assets/art/accessories/Attachment-Data-Model-Example.png b/.cursor/rules/roblox/assets/art/accessories/Attachment-Data-Model-Example.png new file mode 100644 index 00000000..ed9e1f69 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/Attachment-Data-Model-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69c5e8cfafc57301b71c2cd4498896f9b503def45bdfbf04188a9832dc48a978 +size 11027 diff --git a/.cursor/rules/roblox/assets/art/accessories/Attachment-Example.png b/.cursor/rules/roblox/assets/art/accessories/Attachment-Example.png new file mode 100644 index 00000000..17f04429 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/Attachment-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24edde36dc64dc2d50874d35139b86ce4e9615c29853a32fa733e9e1e737a565 +size 259205 diff --git a/.cursor/rules/roblox/assets/art/accessories/Eyebrows-Eyelashes-Only.png b/.cursor/rules/roblox/assets/art/accessories/Eyebrows-Eyelashes-Only.png new file mode 100644 index 00000000..b7e13f67 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/Eyebrows-Eyelashes-Only.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29d4b3dbcf543a1236715ed7a06c2aa6a3265c68933630c541b5449d3df965d6 +size 717449 diff --git a/.cursor/rules/roblox/assets/art/accessories/Face-Accessory-Hierarchy.png b/.cursor/rules/roblox/assets/art/accessories/Face-Accessory-Hierarchy.png new file mode 100644 index 00000000..370f0be6 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/Face-Accessory-Hierarchy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56be60a55864dd53b7fb4693e698d9b61000da5bcaefc87b4bce4c0d96684714 +size 11524 diff --git a/.cursor/rules/roblox/assets/art/accessories/Inner-Cage-Example.png b/.cursor/rules/roblox/assets/art/accessories/Inner-Cage-Example.png new file mode 100644 index 00000000..3f4e57f9 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/Inner-Cage-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:660fc60db12cfa514104f2b70df36fe25b4f531988f92f42651c8cc92c6128fb +size 944619 diff --git a/.cursor/rules/roblox/assets/art/accessories/Mesh-Bow-Example.png b/.cursor/rules/roblox/assets/art/accessories/Mesh-Bow-Example.png new file mode 100644 index 00000000..486a5a53 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/Mesh-Bow-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d447465e6cc5e48e7a52585f6dfd85914ad2ff19fc65c3a41a31ffa9e1d3737e +size 103851 diff --git a/.cursor/rules/roblox/assets/art/accessories/Mesh-Example.png b/.cursor/rules/roblox/assets/art/accessories/Mesh-Example.png new file mode 100644 index 00000000..41a14c30 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/Mesh-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f972eeec49251724a427a3796e4583ec6fa136badab2c7f68e701209b6f325e9 +size 195695 diff --git a/.cursor/rules/roblox/assets/art/accessories/Nature-Girl-No-Accessories.png b/.cursor/rules/roblox/assets/art/accessories/Nature-Girl-No-Accessories.png new file mode 100644 index 00000000..d84ddd7d --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/Nature-Girl-No-Accessories.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc89b3c618ab5daafa842bd2fe03876d7a22826c81bedc5bb3a43bd3f5fcb70c +size 898471 diff --git a/.cursor/rules/roblox/assets/art/accessories/Nature-Girl-With-Face-Accessories.png b/.cursor/rules/roblox/assets/art/accessories/Nature-Girl-With-Face-Accessories.png new file mode 100644 index 00000000..3d25b7d8 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/Nature-Girl-With-Face-Accessories.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5044ca30c30e5ee123f7c870adf50c204a53036470941fa26b59f7140a63f24 +size 898992 diff --git a/.cursor/rules/roblox/assets/art/accessories/Outer-Cage-Example.png b/.cursor/rules/roblox/assets/art/accessories/Outer-Cage-Example.png new file mode 100644 index 00000000..8688c864 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/Outer-Cage-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc01e270a034474e8b85a133968d4fc2a08ce6ce61daaf1d908fd11f37d79407 +size 978408 diff --git a/.cursor/rules/roblox/assets/art/accessories/Rigging-Example.png b/.cursor/rules/roblox/assets/art/accessories/Rigging-Example.png new file mode 100644 index 00000000..f56493fa --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/Rigging-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63307c5545f15023a799f2576823af59e73b21ccdcf2b406dffc2a273c6095df +size 356830 diff --git a/.cursor/rules/roblox/assets/art/accessories/Rigging-Pose-Example.png b/.cursor/rules/roblox/assets/art/accessories/Rigging-Pose-Example.png new file mode 100644 index 00000000..9c3634df --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/Rigging-Pose-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30e0395ed7dfcd283493352ab8a8741211a0182e7c84660068105746c20be6eb +size 411752 diff --git a/.cursor/rules/roblox/assets/art/accessories/Texture-Applied-Example.png b/.cursor/rules/roblox/assets/art/accessories/Texture-Applied-Example.png new file mode 100644 index 00000000..8f1c1297 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/Texture-Applied-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5459e652c8d40dbb57a84ca7a06daad4e0bfd888e493b8366a3e948621bab765 +size 1021145 diff --git a/.cursor/rules/roblox/assets/art/accessories/Texture-Example.png b/.cursor/rules/roblox/assets/art/accessories/Texture-Example.png new file mode 100644 index 00000000..dc34d8f1 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/Texture-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5dc7c0989b79482921a674539164cd2cf481f81fbecea3bb2445b837f2290e19 +size 300174 diff --git a/.cursor/rules/roblox/assets/art/accessories/Workflow-Layered.png b/.cursor/rules/roblox/assets/art/accessories/Workflow-Layered.png new file mode 100644 index 00000000..2753be49 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/Workflow-Layered.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d733cdc23ec02c4fa3b51016fddd510a2f4d026758f597042b61cce610fde76d +size 51590 diff --git a/.cursor/rules/roblox/assets/art/accessories/Workflow-Rigid.png b/.cursor/rules/roblox/assets/art/accessories/Workflow-Rigid.png new file mode 100644 index 00000000..0ac1b22e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/Workflow-Rigid.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0d72a013319bec5399db190a51d7e98cdf7091b76987169ca76cad0e4c20a22 +size 36996 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/3D-Importer.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/3D-Importer.png new file mode 100644 index 00000000..b3fb222d --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/3D-Importer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3ce468fdd15e099e93cee8aebaa98cb270e0af4aa028607b3cbac549a6fc7da +size 105734 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/AFT-Add-Avatar-Panel.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/AFT-Add-Avatar-Panel.png new file mode 100644 index 00000000..3252e799 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/AFT-Add-Avatar-Panel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e320ab90ddd9bcae0e1b2bd4d4b1449d0fb83fb7b69583f4ff8dc3507bb7bf7 +size 74518 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/AFT-Select-Mesh.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/AFT-Select-Mesh.png new file mode 100644 index 00000000..728fc539 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/AFT-Select-Mesh.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7cefd1347bd4d23db3b3ce01ca3dba85678b8b16c14c79b912557db832c4c2f2 +size 10061 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/AFT-Select-Type.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/AFT-Select-Type.png new file mode 100644 index 00000000..1c2629bb --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/AFT-Select-Type.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:958f807c305dc6c588be2d69a8a68737aaeb3853854239141800ea24f3614310 +size 15894 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Adding-New-Material.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Adding-New-Material.mp4 new file mode 100644 index 00000000..6726f351 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Adding-New-Material.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0768c1499ca136288d56c7453c29ad5a9b1518cc9d3c399f0e93e778e298e15d +size 7541118 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Adding-PBR.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Adding-PBR.mp4 new file mode 100644 index 00000000..7c896b48 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Adding-PBR.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:145eef6b7824f70ce3c62852112805ea956100ae8e568142d3af53aee695b34b +size 19179061 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Adding-Surface-Appearance.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Adding-Surface-Appearance.png new file mode 100644 index 00000000..8aea6e2b --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Adding-Surface-Appearance.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d72b4c259c033db417466914ba8f26bb5d53f494c1c8320aed69b9955af8c205 +size 14363 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Albedo-Node.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Albedo-Node.png new file mode 100644 index 00000000..9470d752 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Albedo-Node.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59b3ff1334df83ba577ba629a1dabb46ed74ce84a351b3230f30b0d3aa588987 +size 115868 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Blender-Apply-Transforms.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Blender-Apply-Transforms.png new file mode 100644 index 00000000..5cc2b932 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Blender-Apply-Transforms.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e6debfc5b31edf413a7f7ec0f007c632e09f59b9f1a20bfff79a05df106317e +size 54051 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Blender-Empty-Node.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Blender-Empty-Node.png new file mode 100644 index 00000000..b55c57ee --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Blender-Empty-Node.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:310dd3774bb8ce400c9952e08a601e3b06cda97094d2871fa220f832740798fe +size 65980 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Blender-Mask-Preview.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Blender-Mask-Preview.png new file mode 100644 index 00000000..726a9ca5 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Blender-Mask-Preview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:790f7bf6971ad88e7b20145023444a46e81c402128c622424403938d615daf95 +size 203860 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Blender-New-Material.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Blender-New-Material.png new file mode 100644 index 00000000..d249410f --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Blender-New-Material.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c1ebb43f87dcf7f681e8e3bdc437ebf9b13e3cb8855a7134568792caeb8d6f6 +size 9546 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Blender-Scale-1.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Blender-Scale-1.png new file mode 100644 index 00000000..640f07d6 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Blender-Scale-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8626623bda200e45edc6799f07ac12423402978025365c16efafe1b79dce92f6 +size 27292 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Chest-Blender.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Chest-Blender.png new file mode 100644 index 00000000..fbf22fe8 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Chest-Blender.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2073c6eb3da8c25be94271eec8b444e33443b53a285fe337e25bffbe542e4e58 +size 389650 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Chest-Modeling-Complete.blend b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Chest-Modeling-Complete.blend new file mode 100644 index 00000000..c89f0849 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Chest-Modeling-Complete.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bcb2290ec1f6a20f86d2fcacdbe1ae5feb0846567f9efb9c8ab0b6077b5aa9ec +size 902024 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Chest-Studio.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Chest-Studio.png new file mode 100644 index 00000000..0ed61fba --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Chest-Studio.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe1dbf04ad18efcc9c2aa03140a008deb848d8f541ea45983d19a0956607f65d +size 474667 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Chest-Texturing-Complete.blend b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Chest-Texturing-Complete.blend new file mode 100644 index 00000000..672e61cc --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Chest-Texturing-Complete.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4e026a37fedb8fd1b863618b55d1f93737f9fc9d33147d9a8f3826485e43be0 +size 927388 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Chest-Texturing-Complete.fbx b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Chest-Texturing-Complete.fbx new file mode 100644 index 00000000..36dd4149 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Chest-Texturing-Complete.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb6f6115f42d81780e665254678086e2010fb0b26caf99d42de3784b579545d5 +size 69980 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Complete-Border.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Complete-Border.mp4 new file mode 100644 index 00000000..38660617 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Complete-Border.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ee8ac82bfddf54fa976fcef5bef052a5961ab4fa16155da6e7a68c9dae64881 +size 47004807 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Converting.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Converting.mp4 new file mode 100644 index 00000000..40e37afe --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Converting.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2374469ba7ac0d565305d1d60a72a8cc4dcaef4a4b5fc5bf3fd49af696cfee15 +size 41036628 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Copy-Marketplace-URL.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Copy-Marketplace-URL.png new file mode 100644 index 00000000..b74d0b5c --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Copy-Marketplace-URL.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:211155608e55fe787769c7fee6f440da9cff9bce944524216f73de41a40f5914 +size 42469 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Exporting.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Exporting.mp4 new file mode 100644 index 00000000..ca3e3949 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Exporting.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e2ba94f714e6d0df19459ebf349e1996c1e22365af9b87e5b360d4903ac8e71 +size 8150644 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Fitting-Mask.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Fitting-Mask.mp4 new file mode 100644 index 00000000..3a6a821f --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Fitting-Mask.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:503871e8446dee1fda402d5644d9f88a81fe49e324c3149f5e355777081ad0d2 +size 19584457 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/General-Shape.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/General-Shape.mp4 new file mode 100644 index 00000000..e33c8d50 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/General-Shape.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a6da8404e5367e6b3b1e3f51db949be61a1ece4cf012f7158abf0ed4af663a1 +size 17368470 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Horizontal-Loop-Cuts.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Horizontal-Loop-Cuts.mp4 new file mode 100644 index 00000000..053c4ca5 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Horizontal-Loop-Cuts.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b93e7d79132c992054b3af50d4b0ffcb46272484fc61dade243fe29978fbf73 +size 15458541 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Importing.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Importing.mp4 new file mode 100644 index 00000000..6f705491 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Importing.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73fc1292927393686de1f0fe72b136cf0bcb164a28796b237a1bac84c47b38fb +size 19662790 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Marketplace-Listing.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Marketplace-Listing.png new file mode 100644 index 00000000..81c32169 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Marketplace-Listing.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13ee4fca3c4f9a2be25b8cc0013755b45099a00c274cfbf3bac7614054c52a1e +size 125495 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Marking-3d-Object.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Marking-3d-Object.mp4 new file mode 100644 index 00000000..7a81ebf3 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Marking-3d-Object.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f25820e82b5aca3d0945499e72aebc8e16e518947c8a55cdad74521f4c33d91b +size 33532059 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Metal-Node.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Metal-Node.png new file mode 100644 index 00000000..1729defe --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Metal-Node.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21612f76097a1ba6c059f5299b093242f5fd2a0d99089b31fb246799c4c6df96 +size 116862 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Modeling-Complete.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Modeling-Complete.png new file mode 100644 index 00000000..a41e19eb --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Modeling-Complete.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c6ee27473f76ab72504a4102ed5b93a5a82034592519f433cfec190fc7b9470 +size 1554364 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Normal-Node.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Normal-Node.png new file mode 100644 index 00000000..087b22bc --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Normal-Node.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:351853f5c118a2f02a036e3531fb695f370797f48d4b95ad913fbbdc7dc565dd +size 142981 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Outliner-Save-To-Roblox.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Outliner-Save-To-Roblox.png new file mode 100644 index 00000000..b184d97b --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Outliner-Save-To-Roblox.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77f265b0a73856cc3505bca6ce78af4e416a359d2092d5eefb90d6aca1e9d8e1 +size 11449 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Painting-2d-Map.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Painting-2d-Map.mp4 new file mode 100644 index 00000000..14ff9955 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Painting-2d-Map.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a60a745eb0f0f4eacd19545233254118999a779613aa5ee9d56ad04268d3db3 +size 28910332 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Publishing-Moderation-Pending.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Publishing-Moderation-Pending.png new file mode 100644 index 00000000..e15a584a --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Publishing-Moderation-Pending.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aac57dcd6ad1fcb6af0e835c3b157aa67cb77e43d78876c3981c27e773a07711 +size 81115 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Publishing-Ready-For-Sale.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Publishing-Ready-For-Sale.png new file mode 100644 index 00000000..363e2495 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Publishing-Ready-For-Sale.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44451f767848adb895d9ffc66ac35f914bd699aa899a80fada0543565e1e8d0c +size 90203 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Publishing.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Publishing.mp4 new file mode 100644 index 00000000..c5a5ab6c --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Publishing.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36ed5de3ba40fb4557b5c682d68939053653214fc44334fef4889df77ba5aaab +size 38538668 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Rigid_Mask_Export.fbx b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Rigid_Mask_Export.fbx new file mode 100644 index 00000000..ef3f3783 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Rigid_Mask_Export.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6840d925a66a784775e9c5dde951ec3376a1e8823db9653b2b8f085f5f6d7b67 +size 316332 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Rigid_Mask_Model-Only.fbx b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Rigid_Mask_Model-Only.fbx new file mode 100644 index 00000000..c6ed0364 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Rigid_Mask_Model-Only.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf2a3b94a3e38811dfe9965e8a5ab4515526195472b3b8788948d2e7e7735618 +size 45564 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Rigid_Mask_Textures.zip b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Rigid_Mask_Textures.zip new file mode 100644 index 00000000..8a551396 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Rigid_Mask_Textures.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5602fc68dee42b289276e3706649ec4b25f60e7e23b197fdf876d50bae3abb31 +size 264533 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Rigid_Mask_Texturing-Completed.blend b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Rigid_Mask_Texturing-Completed.blend new file mode 100644 index 00000000..645aff45 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Rigid_Mask_Texturing-Completed.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32fdf9ebe5a3f927166acc44abe5050f0c39f33384d19da932884ac2e87d0d00 +size 1258840 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Rough-Node.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Rough-Node.png new file mode 100644 index 00000000..9dd0cb7d --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Rough-Node.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e676035b58b0c05778d7b4460d7f0b2c7ae1b2b8f5a272d345f799230029955 +size 117454 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Rounded-Lid.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Rounded-Lid.mp4 new file mode 100644 index 00000000..b7f6e359 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Rounded-Lid.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:159f2c18d46f747250644bb7fd01f2cba874cb671e2a9af98ff7f399f1c73445 +size 24317361 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Scaling-FBX-Import.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Scaling-FBX-Import.mp4 new file mode 100644 index 00000000..418ebe61 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Scaling-FBX-Import.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f26103ea7379aa06d0aeecd6ed24be74bfdc228e34efb033783f7ef003e5e7b0 +size 6943708 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Side-Insets.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Side-Insets.mp4 new file mode 100644 index 00000000..1d92b7e8 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Side-Insets.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9cc079c458a0b18b2dfb5a224279f9af69c499b4a465a38bd0f7e788aa851595 +size 21447871 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Studio-Mask-Preview-Cropped.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Studio-Mask-Preview-Cropped.png new file mode 100644 index 00000000..e4cfe4e6 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Studio-Mask-Preview-Cropped.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d8c22ce992a5814d9ce9e701f660ccce6bf58d5e10de5710c316cd1c2ce39c0 +size 720770 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Studio-Mask-Preview.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Studio-Mask-Preview.png new file mode 100644 index 00000000..36655661 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Studio-Mask-Preview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:220619316d239206a276e9992b227cb8ec6f8fac8012737edce2c5c3bb7ce01a +size 928355 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Surface-Appearance-Asset-Dropdown.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Surface-Appearance-Asset-Dropdown.png new file mode 100644 index 00000000..c298d8a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Surface-Appearance-Asset-Dropdown.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67f52409e4cdfa8b65e6641e04a7e3277dce69e2943e9ccb07f27fedcb8f47c7 +size 34609 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/TXT_Rigid_Mask_ALB.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/TXT_Rigid_Mask_ALB.png new file mode 100644 index 00000000..e7b78907 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/TXT_Rigid_Mask_ALB.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75a1a4cad283ff7d0b6888cc3a71b1caecf1ad797154bbb5ddaa3251d1c3cc40 +size 93947 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/TXT_Rigid_Mask_MET.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/TXT_Rigid_Mask_MET.png new file mode 100644 index 00000000..3928e478 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/TXT_Rigid_Mask_MET.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50dc33039bbf63e2a84c6c27020f9e1687e9a6d751d37071a44ee8f5617f1749 +size 12108 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/TXT_Rigid_Mask_NOR.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/TXT_Rigid_Mask_NOR.png new file mode 100644 index 00000000..06bfce19 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/TXT_Rigid_Mask_NOR.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95ca57867fd391464ae2ebabef2a224f9446772be945d43aada834b386d1b5ba +size 107292 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/TXT_Rigid_Mask_RGH.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/TXT_Rigid_Mask_RGH.png new file mode 100644 index 00000000..dbeb35cb --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/TXT_Rigid_Mask_RGH.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7b699b9ecce47bf6f7d6c41cfa1bd4d86d25f04a67dba10116b85312446802a +size 50326 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Testing.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Testing.mp4 new file mode 100644 index 00000000..99ab5f98 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Testing.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:274b4ccfe3bcf73d98b43e4fc79b90b60113e6577745a9a9dc506b5808d858f7 +size 33517143 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Texturing-Complete.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Texturing-Complete.png new file mode 100644 index 00000000..08916b45 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Texturing-Complete.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e42057000fecbb0fb6c9ad0998b7c18af90dbe0910f1ff4b0be10c09645ec4b1 +size 1568038 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/UV-Projecting.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/UV-Projecting.mp4 new file mode 100644 index 00000000..0f2b7144 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/UV-Projecting.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:958f52de730ce17c5de38a7164dc3d97ce2d5996cd8c37b964501f07e22914c1 +size 5309961 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Validation-Successful.png b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Validation-Successful.png new file mode 100644 index 00000000..89b35426 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Validation-Successful.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:516f54ec91a08b8e5ef70ab00a0c0fcd7b9e65daf1c3fd6ba989e653c4d56d56 +size 46098 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Vertical-Loop-Cuts.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Vertical-Loop-Cuts.mp4 new file mode 100644 index 00000000..a2ab95e7 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating-rigid/Vertical-Loop-Cuts.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81210d3c80963e4525d6b32f469fda04b5aaf81298c687a80ac24a0fd1a5a8e3 +size 6828620 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Caging-Complete.png b/.cursor/rules/roblox/assets/art/accessories/creating/Caging-Complete.png new file mode 100644 index 00000000..eab04aab --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Caging-Complete.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc8e20f6ff17c3ae32f38f1a8046abe10cba045f056cd7fd398e7e1f24a8a506 +size 161058 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Caging-Outer-Cage-Properties.png b/.cursor/rules/roblox/assets/art/accessories/creating/Caging-Outer-Cage-Properties.png new file mode 100644 index 00000000..89262868 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Caging-Outer-Cage-Properties.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bc0e8d55c0753d8aff009b5d235c498892c504880582e2dffce4920cfac0c05 +size 39516 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Caging-Outliner-Setup.png b/.cursor/rules/roblox/assets/art/accessories/creating/Caging-Outliner-Setup.png new file mode 100644 index 00000000..ccf94e5f --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Caging-Outliner-Setup.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4db346897574a56b3930b41da215dfef8484c8c4c39a050d1b8a65d92ad5e7ce +size 19805 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Caging_01.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating/Caging_01.mp4 new file mode 100644 index 00000000..8e0a9c45 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Caging_01.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f8114c057dfb88d2244c16d7b50efa0d6fb8d1feef8299377dfa911514e9e2f +size 7675914 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Caging_02.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating/Caging_02.mp4 new file mode 100644 index 00000000..a9dc75ea --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Caging_02.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5486959a8bb2f64ce2b914d673cd53be8a0ae0ea4d0171c6facfb2afbc5c0ab8 +size 41379546 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Caging_03.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating/Caging_03.mp4 new file mode 100644 index 00000000..53e8bab2 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Caging_03.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a8eb8a62d85347518882af7b51223596ea4b680307616d6319a2cb34c1b76a4 +size 74576591 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Example-Product.png b/.cursor/rules/roblox/assets/art/accessories/creating/Example-Product.png new file mode 100644 index 00000000..9cefc7de --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Example-Product.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b21059b35cba50c2a2701561f62fd453d81e1022194faaa9f49df89ba5cd7ff +size 309419 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Exporting-Accessory-Explorer.png b/.cursor/rules/roblox/assets/art/accessories/creating/Exporting-Accessory-Explorer.png new file mode 100644 index 00000000..73a4cf42 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Exporting-Accessory-Explorer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:062defc915fce1ffd0d30883bd747d7873d7aea83c3d36ac6051ef387e475fef +size 33866 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Exporting-Clothing-In-Studio.png b/.cursor/rules/roblox/assets/art/accessories/creating/Exporting-Clothing-In-Studio.png new file mode 100644 index 00000000..ebdfd982 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Exporting-Clothing-In-Studio.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c37c914f56111e5c5f3657c6b5d2355b6b126d9395a2e403f992dc32b0045e11 +size 580789 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Exporting-Clothing-in-Studio-Highlight.png b/.cursor/rules/roblox/assets/art/accessories/creating/Exporting-Clothing-in-Studio-Highlight.png new file mode 100644 index 00000000..aa0f6d68 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Exporting-Clothing-in-Studio-Highlight.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee7c4a9a7b70289be4b5a6f510bad24a153216333337e3699995314bf9fd945f +size 809763 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Long_Sleeve_Export.fbx b/.cursor/rules/roblox/assets/art/accessories/creating/Long_Sleeve_Export.fbx new file mode 100644 index 00000000..1b309619 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Long_Sleeve_Export.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e3b54928a64b11375a1af5df3f32abe03797754b383551dffeee334ee1f0036 +size 395196 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-Cage-Copied.png b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-Cage-Copied.png new file mode 100644 index 00000000..607b4e58 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-Cage-Copied.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6c1f41e63cca9dda716b87a65031c58e360d91c4c5aa35e465f09e7cf410bfa +size 14346 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-Cages-Selected.png b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-Cages-Selected.png new file mode 100644 index 00000000..a4231604 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-Cages-Selected.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e6e637830ac130df8d39353318513a663cb850585f40431aa89599520e4195d +size 133085 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-Clear-Vertex-Colors.png b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-Clear-Vertex-Colors.png new file mode 100644 index 00000000..fa324df3 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-Clear-Vertex-Colors.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1168bc4fe0476e79148be87ab782da808c46c43d071ca85e94c66f0b7780da04 +size 37819 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-Complete-2.png b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-Complete-2.png new file mode 100644 index 00000000..8b49cad3 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-Complete-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b62d8251b7c46e057d44ac4fd12f351bac6e11f5354e1d6ad10db053ed8ca69 +size 243430 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-Mannequin-Start.png b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-Mannequin-Start.png new file mode 100644 index 00000000..95d9e2c8 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-Mannequin-Start.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f87ad0ab8cdb725eda7cc115c3fdcbc43293d328aebdad249bd6a130238b5df1 +size 198161 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-No-Modifier.png b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-No-Modifier.png new file mode 100644 index 00000000..f1115d5e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-No-Modifier.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27011ac49e5f94eec3bc12d8c211bb02f48c96e73c87230b21b610444d22e65b +size 689312 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-Positioning-and-Scaling.png b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-Positioning-and-Scaling.png new file mode 100644 index 00000000..434227a6 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-Positioning-and-Scaling.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2648601ee3520e139dc31cd0ffda3f6c7afa9f830b89f57c59ef3c46c184b1b4 +size 504928 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-SubDiv-Modifier.png b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-SubDiv-Modifier.png new file mode 100644 index 00000000..7392a022 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-SubDiv-Modifier.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca55ea0e20bc0b52c9b4624d10995ad9e78e296e9fe1387f93d0a368f21f2045 +size 667292 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-Wireframe-View.png b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-Wireframe-View.png new file mode 100644 index 00000000..fd0ccfec --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling-Wireframe-View.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab8761f2b7c118a63fa59b342240672dcd53fe2a05380080f2feb197c0c69700 +size 246830 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_00.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_00.mp4 new file mode 100644 index 00000000..39415c37 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_00.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:deed55a4cfb00b9d94cfea9945725de36e9315bc1432cfbc98bc40a735f8ecac +size 16852473 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_01.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_01.mp4 new file mode 100644 index 00000000..4ced8665 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_01.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9092a1b951d06bff16fee97fc6b936eea62518cc3e9ccccdda90480621debae +size 3002734 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_02.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_02.mp4 new file mode 100644 index 00000000..17150dca --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_02.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81fe92a8dccf5c4f00ec46bcf3e56f2d084022470cc5353dc17d91b5c37b5094 +size 86085218 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_03.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_03.mp4 new file mode 100644 index 00000000..34d5030c --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_03.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a535cb53f6702969b8b1a9296e165a631bf9f2df484381a9dd27e05847d71b4a +size 8600186 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_04.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_04.mp4 new file mode 100644 index 00000000..4e5bc263 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_04.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9853d1668a0ae14c93128629cde450dd4c6bbc5f9f726ccd34adc9ac76e4aaf +size 42676599 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_05.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_05.mp4 new file mode 100644 index 00000000..97ee6501 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_05.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2aa0ba1d47181c7b1b70294e75c3c113bfce33decd6d01527e10362376278d57 +size 37686757 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_06.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_06.mp4 new file mode 100644 index 00000000..6ab5efed --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_06.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34fab3ce0fefc4446cb382ee8d7ec3c444785fdaa27d5994bda28b46a946cf45 +size 37588086 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_07.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_07.mp4 new file mode 100644 index 00000000..7abf2833 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_07.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b604faf6910332d11ae3ecbd7ed98e62ebdb3f2058d3f27d3a154ce9f0421f4 +size 36420265 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_08.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_08.mp4 new file mode 100644 index 00000000..9bfa144f --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Modeling_08.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4336d4708ef851e24de7e9a1d729fff9cb2b2b4f2ba73bdd2e7eac5c84f35cf +size 108067041 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Rigging-Append-Browser.png b/.cursor/rules/roblox/assets/art/accessories/creating/Rigging-Append-Browser.png new file mode 100644 index 00000000..5faba59f --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Rigging-Append-Browser.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2c2f6c0a7247136368e45856e7c746864ffb4b7f97a495707051ec1bbbde6bd +size 58496 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Rigging-Armature-Appended.png b/.cursor/rules/roblox/assets/art/accessories/creating/Rigging-Armature-Appended.png new file mode 100644 index 00000000..46a8ab3f --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Rigging-Armature-Appended.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4624d54ec4ea96cb3ee21a4a2a0a7164a4293833b7a53d40d42110a87635c19d +size 519770 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Rigging-Auto-Weights.png b/.cursor/rules/roblox/assets/art/accessories/creating/Rigging-Auto-Weights.png new file mode 100644 index 00000000..e46bbb1f --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Rigging-Auto-Weights.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:674b46b59a36871dd713f9325d31f3dbfe6c3a1ce830300b1a505b4f7fb6bf17 +size 41858 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Rigging-Bones-In-Front.png b/.cursor/rules/roblox/assets/art/accessories/creating/Rigging-Bones-In-Front.png new file mode 100644 index 00000000..dbba1eae --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Rigging-Bones-In-Front.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3095b851656e0a25cbb087f116db7d44f4b55fd400239adfa97304eb2de22839 +size 26733 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Rigging-Freeze-Transforms.png b/.cursor/rules/roblox/assets/art/accessories/creating/Rigging-Freeze-Transforms.png new file mode 100644 index 00000000..684154f3 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Rigging-Freeze-Transforms.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77ca1ffcee0855c181255176a62cdfd4143e59ba870a07d3bdccfdd4ec3aac54 +size 65448 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Rigging-Pose-Tests.png b/.cursor/rules/roblox/assets/art/accessories/creating/Rigging-Pose-Tests.png new file mode 100644 index 00000000..50474fd5 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Rigging-Pose-Tests.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14a3a4246cb2ffd264594c7d53c2e3edce40c07020e79c512095d324af8a949b +size 240659 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Rigging_01.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating/Rigging_01.mp4 new file mode 100644 index 00000000..5828fdc6 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Rigging_01.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bff9196b564cfb913495cb0d2402940f0ac43b6dab88f9e761db4eda23efe98 +size 12953713 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Rigging_02.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating/Rigging_02.mp4 new file mode 100644 index 00000000..fe54e5f0 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Rigging_02.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:88364de8a21475ee0531fdf810b9293e532c10c386c7801ffe3cf3c4be8a4fb2 +size 3785662 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Rigging_03.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating/Rigging_03.mp4 new file mode 100644 index 00000000..dbf60bc7 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Rigging_03.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa92ce13370bfc6d76eff8bf68d4496e14994fe9516c68c4882c109a947ebe18 +size 22278201 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Texturing-Add-Base.png b/.cursor/rules/roblox/assets/art/accessories/creating/Texturing-Add-Base.png new file mode 100644 index 00000000..1a15be00 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Texturing-Add-Base.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c3e894e848ba75397edbcf6b544bcf0186356210ba935ca30a4d2e500c15714 +size 156924 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Texturing-Add-Image.png b/.cursor/rules/roblox/assets/art/accessories/creating/Texturing-Add-Image.png new file mode 100644 index 00000000..6325c45c --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Texturing-Add-Image.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03f03b38889439479256c39e3d88842ca4f2cd2a98307f450eaebbe3bf15b3b7 +size 18563 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Texturing-Complete-3.png b/.cursor/rules/roblox/assets/art/accessories/creating/Texturing-Complete-3.png new file mode 100644 index 00000000..5266c75a --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Texturing-Complete-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd73699372797d3bcca341facb7589b81b02fadffa631067776e56d6dc7db421 +size 240749 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Texturing-Complete.png b/.cursor/rules/roblox/assets/art/accessories/creating/Texturing-Complete.png new file mode 100644 index 00000000..16fddcc8 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Texturing-Complete.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c59d39369045af5138bbbac991f1629a5c27a3b8ad9bfeee7efa304848a316a3 +size 204656 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Texturing-Start.png b/.cursor/rules/roblox/assets/art/accessories/creating/Texturing-Start.png new file mode 100644 index 00000000..f5c9ece5 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Texturing-Start.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3bed64f275690dea6bc091576c339755a875014a3c39649f0fb6e74ea698c6e1 +size 165166 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Texturing-UV-Maps.png b/.cursor/rules/roblox/assets/art/accessories/creating/Texturing-UV-Maps.png new file mode 100644 index 00000000..61f968b2 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Texturing-UV-Maps.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c0a4e551e81a0a66a7b4b8d167354c99801fd35fb201142cacca200e18594f6 +size 122695 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Texturing_01.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating/Texturing_01.mp4 new file mode 100644 index 00000000..00b58e1b --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Texturing_01.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:568095b2fd577b7ef1e181bca04a96aadf81dac4e4256d8eac8ec1323a95d2e2 +size 35336519 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Texturing_02.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating/Texturing_02.mp4 new file mode 100644 index 00000000..79740fcb --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Texturing_02.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0911f4230a3317299c2b28d9c239fcb923619b0735b55a6b23e6eaf4b169157 +size 4544377 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Texturing_03.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating/Texturing_03.mp4 new file mode 100644 index 00000000..497f4ae0 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Texturing_03.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67f16a10f3fab5bacce7c5323197a06ba064a7344347e1d2489407d48ade3dfb +size 17255372 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Texturing_04.mp4 b/.cursor/rules/roblox/assets/art/accessories/creating/Texturing_04.mp4 new file mode 100644 index 00000000..0efd13b5 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Texturing_04.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:227f74be7cad2eb472409f866ebd8bd808b9f982c62f7f97deb436bef5223905 +size 22191193 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Watertight-Bottom.png b/.cursor/rules/roblox/assets/art/accessories/creating/Watertight-Bottom.png new file mode 100644 index 00000000..6b0406a7 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Watertight-Bottom.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:450cd8230ca5299e4f72591a4667fde3c88f7eb0e233e5d7897be2ffb15a4762 +size 516015 diff --git a/.cursor/rules/roblox/assets/art/accessories/creating/Watertight-Top.png b/.cursor/rules/roblox/assets/art/accessories/creating/Watertight-Top.png new file mode 100644 index 00000000..165dbfcc --- /dev/null +++ b/.cursor/rules/roblox/assets/art/accessories/creating/Watertight-Top.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ab2a1542291733659dbcc535c4beae8090d9ac81f78aedfeb946a44bdbc3fcd +size 484716 diff --git a/.cursor/rules/roblox/assets/art/avatar/Acc-Antenna.png b/.cursor/rules/roblox/assets/art/avatar/Acc-Antenna.png new file mode 100644 index 00000000..708ff116 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Acc-Antenna.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be5babc21db05ae1ce2846634539e63ce0189368218fff28c1ffaafc30497734 +size 46204 diff --git a/.cursor/rules/roblox/assets/art/avatar/Acc-Antlers-A.png b/.cursor/rules/roblox/assets/art/avatar/Acc-Antlers-A.png new file mode 100644 index 00000000..0631a8b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Acc-Antlers-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d8f9a7e73675f1f3864e31ad1d7a6a0e3fbcf98305edeb4dad5927a2a88dbba +size 49552 diff --git a/.cursor/rules/roblox/assets/art/avatar/Acc-Antlers-B.png b/.cursor/rules/roblox/assets/art/avatar/Acc-Antlers-B.png new file mode 100644 index 00000000..f1938945 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Acc-Antlers-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e1e9f9f41c7663876d74b0db22812f40ae225d89116c70ac1eb0adae75e5671 +size 60147 diff --git a/.cursor/rules/roblox/assets/art/avatar/Acc-Demon-Horns-A.png b/.cursor/rules/roblox/assets/art/avatar/Acc-Demon-Horns-A.png new file mode 100644 index 00000000..d63a16a7 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Acc-Demon-Horns-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef2bce459049ea99da7febbe641af1ca26f0e8be6d82add1c98ba55b50538cb7 +size 99340 diff --git a/.cursor/rules/roblox/assets/art/avatar/Acc-Demon-Horns-B.png b/.cursor/rules/roblox/assets/art/avatar/Acc-Demon-Horns-B.png new file mode 100644 index 00000000..444a91ee --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Acc-Demon-Horns-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d020bfcdb37cc193ff710e261de4bd5c4fbabe1a65f4e32d7d1fb0fccfee8c07 +size 90856 diff --git a/.cursor/rules/roblox/assets/art/avatar/Acc-Feathers.png b/.cursor/rules/roblox/assets/art/avatar/Acc-Feathers.png new file mode 100644 index 00000000..7e093262 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Acc-Feathers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95963512a34f1d21d1cd9a8ee92a48b5e3773ec6f6b4683760c78571a85f72fd +size 152329 diff --git a/.cursor/rules/roblox/assets/art/avatar/Acc-Glasses.png b/.cursor/rules/roblox/assets/art/avatar/Acc-Glasses.png new file mode 100644 index 00000000..db963547 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Acc-Glasses.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33d50627d385d87a3cc598ac21f194bdc17659154c580fa82114252257d5feeb +size 33807 diff --git a/.cursor/rules/roblox/assets/art/avatar/Acc-Horn-A.png b/.cursor/rules/roblox/assets/art/avatar/Acc-Horn-A.png new file mode 100644 index 00000000..2f30ce03 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Acc-Horn-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49ed524a41a1e38c2896dc596ab07ed4975bea685a8ed83c689fcf3324aefc69 +size 87374 diff --git a/.cursor/rules/roblox/assets/art/avatar/Acc-Horn-B.png b/.cursor/rules/roblox/assets/art/avatar/Acc-Horn-B.png new file mode 100644 index 00000000..a3f2a96e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Acc-Horn-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f5505c54c649b1a91e4cbc11abe50171192c84fa172244e5bc180cec7936922 +size 54275 diff --git a/.cursor/rules/roblox/assets/art/avatar/Acc-Robot-Arms.png b/.cursor/rules/roblox/assets/art/avatar/Acc-Robot-Arms.png new file mode 100644 index 00000000..b925c821 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Acc-Robot-Arms.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8753590a1939109396ea0f6bbab48a820ddf62e15bed4d095780bc9cbbfdda48 +size 81976 diff --git a/.cursor/rules/roblox/assets/art/avatar/Acc-Skin-Example.png b/.cursor/rules/roblox/assets/art/avatar/Acc-Skin-Example.png new file mode 100644 index 00000000..8e742418 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Acc-Skin-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ddedd7b06bbfabcef8ac43f6b984a6af88c3018bf8d5360bb8b51090605a576 +size 45557 diff --git a/.cursor/rules/roblox/assets/art/avatar/Acc-Sunglasses.png b/.cursor/rules/roblox/assets/art/avatar/Acc-Sunglasses.png new file mode 100644 index 00000000..9960f0d4 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Acc-Sunglasses.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84d8ea7d397d293e94962f23c8111b2c72ac6efb1b407e263e4d1858bf795869 +size 36306 diff --git a/.cursor/rules/roblox/assets/art/avatar/Acc-Tail-A.png b/.cursor/rules/roblox/assets/art/avatar/Acc-Tail-A.png new file mode 100644 index 00000000..5681f9bd --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Acc-Tail-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f819dbc25582f5be8ea0fd5be4bdecc9429d3af3a7016cf560c0da5cb2538398 +size 92317 diff --git a/.cursor/rules/roblox/assets/art/avatar/Acc-Tail-B.png b/.cursor/rules/roblox/assets/art/avatar/Acc-Tail-B.png new file mode 100644 index 00000000..34f2f265 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Acc-Tail-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1026d600ee2b57da50781dd5b4df88d7bcd379e80714eda911a3a8d83b6c190 +size 54823 diff --git a/.cursor/rules/roblox/assets/art/avatar/Acc-Tattoos.png b/.cursor/rules/roblox/assets/art/avatar/Acc-Tattoos.png new file mode 100644 index 00000000..2455c4c6 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Acc-Tattoos.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9334c3fbc784b6d15e837467128365050dbba26da14d7d309a3c96510fd6ecb9 +size 67229 diff --git a/.cursor/rules/roblox/assets/art/avatar/Acc-Whiskers.png b/.cursor/rules/roblox/assets/art/avatar/Acc-Whiskers.png new file mode 100644 index 00000000..5fe1a43b --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Acc-Whiskers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7963e0f5f841dffc2ba8de8cc0117d7513c7aca2f8c14ad5aeef3780bc284048 +size 18681 diff --git a/.cursor/rules/roblox/assets/art/avatar/Acc-Wings-A.png b/.cursor/rules/roblox/assets/art/avatar/Acc-Wings-A.png new file mode 100644 index 00000000..4659371e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Acc-Wings-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf31bbc121c1d190cdeb154ad03ae489afab9f1ee184887bd06a623d4f47ff4a +size 41418 diff --git a/.cursor/rules/roblox/assets/art/avatar/Acc-Wings-B.png b/.cursor/rules/roblox/assets/art/avatar/Acc-Wings-B.png new file mode 100644 index 00000000..27584898 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Acc-Wings-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3674860a0f0ea85c47b32823ad4ed1500ed4f2d5c2c030bf45c251c140ee095 +size 44972 diff --git a/.cursor/rules/roblox/assets/art/avatar/Attachments-Data-Model.png b/.cursor/rules/roblox/assets/art/avatar/Attachments-Data-Model.png new file mode 100644 index 00000000..9a642af4 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Attachments-Data-Model.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1502e2a0717d4ee6dea5e034128de50ff690cb9dcde677c9612975b7a675307d +size 23250 diff --git a/.cursor/rules/roblox/assets/art/avatar/Attachments-Visual.png b/.cursor/rules/roblox/assets/art/avatar/Attachments-Visual.png new file mode 100644 index 00000000..8a861dee --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Attachments-Visual.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a921e1b31b4987660bf8d234828de695e618b41b5e704e37aa213a5740596c1a +size 270722 diff --git a/.cursor/rules/roblox/assets/art/avatar/Avatar-3D-Importer.png b/.cursor/rules/roblox/assets/art/avatar/Avatar-3D-Importer.png new file mode 100644 index 00000000..ecf085d8 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Avatar-3D-Importer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c25088255a710eb7b91e378501e11953ff2ca50937970fb33eee04a416fd5069 +size 72424 diff --git a/.cursor/rules/roblox/assets/art/avatar/Avatar-Data-Model.png b/.cursor/rules/roblox/assets/art/avatar/Avatar-Data-Model.png new file mode 100644 index 00000000..fe78246a --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Avatar-Data-Model.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1cc5651212025847f188e75db1d7704396d8c4ab9a8282d34b1ab84cb9a93f1 +size 31297 diff --git a/.cursor/rules/roblox/assets/art/avatar/Avatar-Item-Creation.png b/.cursor/rules/roblox/assets/art/avatar/Avatar-Item-Creation.png new file mode 100644 index 00000000..55e92673 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Avatar-Item-Creation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2f38cdcd0e873a05263bcdb6741cb8a061a4890b7bbfcdaf234072c2764c2db +size 65254 diff --git a/.cursor/rules/roblox/assets/art/avatar/Avatar-Rig-Scale.png b/.cursor/rules/roblox/assets/art/avatar/Avatar-Rig-Scale.png new file mode 100644 index 00000000..d2a66928 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Avatar-Rig-Scale.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e06afb686265d16a54a775a7bfa51f12e5e201f0940aecb432a5b6a6269a5767 +size 16765 diff --git a/.cursor/rules/roblox/assets/art/avatar/Avatar-Roughness-Map.png b/.cursor/rules/roblox/assets/art/avatar/Avatar-Roughness-Map.png new file mode 100644 index 00000000..61c056d2 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Avatar-Roughness-Map.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0989a0c9bdfbb6f37e2953b4999d6584e2622a9e9ed81ba18d7343f8496aab9 +size 22687 diff --git a/.cursor/rules/roblox/assets/art/avatar/Avatar-Studio-Example.png b/.cursor/rules/roblox/assets/art/avatar/Avatar-Studio-Example.png new file mode 100644 index 00000000..474929f2 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Avatar-Studio-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30d0036357242145170f0c4a53165fc2834c6fcc20dbbcec04fb2c3fc29d26cd +size 505430 diff --git a/.cursor/rules/roblox/assets/art/avatar/Avatar-Surface-Appearance.png b/.cursor/rules/roblox/assets/art/avatar/Avatar-Surface-Appearance.png new file mode 100644 index 00000000..80153e9d --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Avatar-Surface-Appearance.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:136dac764b4dc7015974c1c0752c216bacd373aa90cbd720598f53d926cd603e +size 32878 diff --git a/.cursor/rules/roblox/assets/art/avatar/Avatar-Thumbnail.png b/.cursor/rules/roblox/assets/art/avatar/Avatar-Thumbnail.png new file mode 100644 index 00000000..4ae3fe4b --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Avatar-Thumbnail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9503093a873fd87234838dfc33117a6e52535b03edf42af00b82729d6925223 +size 354244 diff --git a/.cursor/rules/roblox/assets/art/avatar/Bodies-Thumbnail.png b/.cursor/rules/roblox/assets/art/avatar/Bodies-Thumbnail.png new file mode 100644 index 00000000..adf98595 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Bodies-Thumbnail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc4563b6445672c462fa9ab5d3c020d65e4706880dc6f98cfdea52a4d1e2ce87 +size 80289 diff --git a/.cursor/rules/roblox/assets/art/avatar/Bodies-Tutorial.png b/.cursor/rules/roblox/assets/art/avatar/Bodies-Tutorial.png new file mode 100644 index 00000000..95fd61a3 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Bodies-Tutorial.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df07211202456308e7013e7372d49f09aad47fac8942ff04925d105f390e6ccc +size 291531 diff --git a/.cursor/rules/roblox/assets/art/avatar/Body-Parts-Data-Model.png b/.cursor/rules/roblox/assets/art/avatar/Body-Parts-Data-Model.png new file mode 100644 index 00000000..1e9c523c --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Body-Parts-Data-Model.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e8ee55c47fb567470df4f807b42979c21f40a9d7e71c701899b50f6134db073 +size 19301 diff --git a/.cursor/rules/roblox/assets/art/avatar/Body-Parts-Visual.png b/.cursor/rules/roblox/assets/art/avatar/Body-Parts-Visual.png new file mode 100644 index 00000000..a16f1ec9 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Body-Parts-Visual.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17319da276562310b14582a0de72b063bbdfecc454a3e77467ea4c888fa0653b +size 170351 diff --git a/.cursor/rules/roblox/assets/art/avatar/Cage-Mesh-Data-Model.png b/.cursor/rules/roblox/assets/art/avatar/Cage-Mesh-Data-Model.png new file mode 100644 index 00000000..fa2049b9 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Cage-Mesh-Data-Model.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:413b70ecf916845919da3dd29cc550532b4cfb44080ecd5c473d9f8cd1b9089e +size 35354 diff --git a/.cursor/rules/roblox/assets/art/avatar/Cage-Mesh-Visual.png b/.cursor/rules/roblox/assets/art/avatar/Cage-Mesh-Visual.png new file mode 100644 index 00000000..bb91e203 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Cage-Mesh-Visual.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42ae41a2fa62c6c58d0d8fa57f7be373780e29ac23ec3f1adc63bf56bf564891 +size 803667 diff --git a/.cursor/rules/roblox/assets/art/avatar/Character-Data-Model-Cages.png b/.cursor/rules/roblox/assets/art/avatar/Character-Data-Model-Cages.png new file mode 100644 index 00000000..dc897c4b --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Character-Data-Model-Cages.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dca002f428eff8d8fbd5f3b2b0be425d65855c44188f4d271cd1de3db1d76c1f +size 47477 diff --git a/.cursor/rules/roblox/assets/art/avatar/Character-Data-Model-Collapsed.png b/.cursor/rules/roblox/assets/art/avatar/Character-Data-Model-Collapsed.png new file mode 100644 index 00000000..b59d21c5 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Character-Data-Model-Collapsed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc8fd2d134ec90da02eebe8d4da49163da13ca100af975a99604d1a7e27fd0fa +size 7619 diff --git a/.cursor/rules/roblox/assets/art/avatar/Character-Data-Model-Joints.png b/.cursor/rules/roblox/assets/art/avatar/Character-Data-Model-Joints.png new file mode 100644 index 00000000..3a6aab10 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Character-Data-Model-Joints.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6f668c8c8bf77fc799327790b39353bcc1ce9a623f4ee5dc987672964574c40 +size 99248 diff --git a/.cursor/rules/roblox/assets/art/avatar/Classic-Thumbnail.png b/.cursor/rules/roblox/assets/art/avatar/Classic-Thumbnail.png new file mode 100644 index 00000000..0099e78e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Classic-Thumbnail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:292150c9739e5d774c8875a75a45126b1961a9a1abd7af2e4fa5813eed3eae5c +size 51961 diff --git a/.cursor/rules/roblox/assets/art/avatar/Clothing-Thumbnail.png b/.cursor/rules/roblox/assets/art/avatar/Clothing-Thumbnail.png new file mode 100644 index 00000000..a5929b70 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Clothing-Thumbnail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42c35e0a3141de538699d187e2db2dae638f1624298410eae386794ff4c80ea4 +size 118883 diff --git a/.cursor/rules/roblox/assets/art/avatar/Clothing-Tutorial-Blender.png b/.cursor/rules/roblox/assets/art/avatar/Clothing-Tutorial-Blender.png new file mode 100644 index 00000000..33d1f998 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Clothing-Tutorial-Blender.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:253eb7f6c8d92704e096b401584d4b8ff8e5979b45ad567cbcc7d43bb8c8de73 +size 244740 diff --git a/.cursor/rules/roblox/assets/art/avatar/Clothing-Tutorial-Studio.png b/.cursor/rules/roblox/assets/art/avatar/Clothing-Tutorial-Studio.png new file mode 100644 index 00000000..509428c0 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Clothing-Tutorial-Studio.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea4a4b117b4b424b1d00f59cd7ac7dbe098aa9bdabac87dd27376051c1d3198d +size 346086 diff --git a/.cursor/rules/roblox/assets/art/avatar/Component-Attachments.png b/.cursor/rules/roblox/assets/art/avatar/Component-Attachments.png new file mode 100644 index 00000000..3514215f --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Component-Attachments.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5152423020208928e1e4f992537b6419e1c3c1c8f2b58e0eef610bb0b8bc0548 +size 367844 diff --git a/.cursor/rules/roblox/assets/art/avatar/Component-Body-Parts.png b/.cursor/rules/roblox/assets/art/avatar/Component-Body-Parts.png new file mode 100644 index 00000000..7fca9107 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Component-Body-Parts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9bd60d30a84012e9e8ff8dbed061e118105e3327e8131a22b77b8b75d78f3061 +size 499813 diff --git a/.cursor/rules/roblox/assets/art/avatar/Component-Cage-Mesh.png b/.cursor/rules/roblox/assets/art/avatar/Component-Cage-Mesh.png new file mode 100644 index 00000000..25f701ad --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Component-Cage-Mesh.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e1d24b9af697f0c2e2b3ef95d7b530597c7a58c806ce3b12407de8d14c368f5 +size 1035877 diff --git a/.cursor/rules/roblox/assets/art/avatar/Component-Facial-Animation-Data.png b/.cursor/rules/roblox/assets/art/avatar/Component-Facial-Animation-Data.png new file mode 100644 index 00000000..d1b420b0 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Component-Facial-Animation-Data.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99259b49a840a26ac862d44cff133a723cab7d08515ff5e2177a6f803c17abc2 +size 374928 diff --git a/.cursor/rules/roblox/assets/art/avatar/Component-Rigging.png b/.cursor/rules/roblox/assets/art/avatar/Component-Rigging.png new file mode 100644 index 00000000..78a57264 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Component-Rigging.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb751099bf9680b06b85ed5737cc561f45c4f69db94fa6676d2bae4be61aefb1 +size 191947 diff --git a/.cursor/rules/roblox/assets/art/avatar/Component-Texture-Map.png b/.cursor/rules/roblox/assets/art/avatar/Component-Texture-Map.png new file mode 100644 index 00000000..a2c1aeee --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Component-Texture-Map.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91bd5a3c44ad945a2dd7c6088864ed619eb6057de4e8a7dc30fbcbda0886d320 +size 1229494 diff --git a/.cursor/rules/roblox/assets/art/avatar/DCC-Thumbnail.png b/.cursor/rules/roblox/assets/art/avatar/DCC-Thumbnail.png new file mode 100644 index 00000000..3cbdb3b7 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/DCC-Thumbnail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:325f42f0f62240d55b9977298be158c06b5f132ca9fe40d1386171f650569233 +size 276546 diff --git a/.cursor/rules/roblox/assets/art/avatar/Facial-Animation-Timeline.png b/.cursor/rules/roblox/assets/art/avatar/Facial-Animation-Timeline.png new file mode 100644 index 00000000..10cf4746 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Facial-Animation-Timeline.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90915a60958caf9b04e8019a7d86a17ca8da96df223db9a40a4b2d3245d1049c +size 18413 diff --git a/.cursor/rules/roblox/assets/art/avatar/Facial-Properties.png b/.cursor/rules/roblox/assets/art/avatar/Facial-Properties.png new file mode 100644 index 00000000..d2cae349 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Facial-Properties.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c72cab2878f50e36fcd60373a82c4c847a01f36c284d0a46455a2713e08bd90 +size 58421 diff --git a/.cursor/rules/roblox/assets/art/avatar/Facial-Rig-Visual.png b/.cursor/rules/roblox/assets/art/avatar/Facial-Rig-Visual.png new file mode 100644 index 00000000..415a3c3f --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Facial-Rig-Visual.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:851fe1903887539c5b3a40058090d56d070c7313b5856a164f5c62bcba115d30 +size 339696 diff --git a/.cursor/rules/roblox/assets/art/avatar/Invalid-Visibility.png b/.cursor/rules/roblox/assets/art/avatar/Invalid-Visibility.png new file mode 100644 index 00000000..c12b2e68 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Invalid-Visibility.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf870edd2661e65a1bc9c92820239d4c86e7ada319a4dfd5ee0d227516347fd7 +size 263085 diff --git a/.cursor/rules/roblox/assets/art/avatar/Makeup-Example-A.png b/.cursor/rules/roblox/assets/art/avatar/Makeup-Example-A.png new file mode 100644 index 00000000..57dc4bcf --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Makeup-Example-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b83d84921858259a7f5e5b16794a6023e0036c75a06edff7c84839334599bbfd +size 73091 diff --git a/.cursor/rules/roblox/assets/art/avatar/Makeup-Example-B.png b/.cursor/rules/roblox/assets/art/avatar/Makeup-Example-B.png new file mode 100644 index 00000000..bf54e415 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Makeup-Example-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2e37e9e132f1cdc59a2bd434ad6fda7e6ef64033d90eb7d97bddcf4430936be +size 67814 diff --git a/.cursor/rules/roblox/assets/art/avatar/Makeup-Example-C.png b/.cursor/rules/roblox/assets/art/avatar/Makeup-Example-C.png new file mode 100644 index 00000000..3a4ee3e2 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Makeup-Example-C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90b0a18a848013420239fab4cccf1fa0099e49ffa5667aeb83f8e38d5afc8b00 +size 93926 diff --git a/.cursor/rules/roblox/assets/art/avatar/Makeup-Example-D.png b/.cursor/rules/roblox/assets/art/avatar/Makeup-Example-D.png new file mode 100644 index 00000000..8c825ed2 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Makeup-Example-D.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b10e55f1f2de04e658000bb0fff2801ae1d00f255e22bf6406ab52d68fbea09 +size 76102 diff --git a/.cursor/rules/roblox/assets/art/avatar/Makeup-Example-E.png b/.cursor/rules/roblox/assets/art/avatar/Makeup-Example-E.png new file mode 100644 index 00000000..d49d283d --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Makeup-Example-E.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d72e5cd166a75a3a04a1582fa5ba03506344a1be892ed7d972cb9b896b3ab474 +size 61019 diff --git a/.cursor/rules/roblox/assets/art/avatar/Makeup-Example-F.png b/.cursor/rules/roblox/assets/art/avatar/Makeup-Example-F.png new file mode 100644 index 00000000..d140c8f7 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Makeup-Example-F.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb9d11e5a68548f5bbe6e4cb8919d4526ce14159d06056ae3a22a221e1df593c +size 65934 diff --git a/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-A.png b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-A.png new file mode 100644 index 00000000..6f8985df --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5277a586498e74162687aa387024a836cc81686d87e3d8d77caeaa4cadc1d512 +size 42626 diff --git a/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-B.png b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-B.png new file mode 100644 index 00000000..091152e1 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8079dd241c454c4c09e360c9db6e2cc29ee467ea019c278b81d57eeb75aac667 +size 109715 diff --git a/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-C-Cyber.png b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-C-Cyber.png new file mode 100644 index 00000000..58de4adb --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-C-Cyber.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:986e3235592ec4bceeadf1645435c2f826d056cb33fa0177edb7aefb9bec730f +size 48345 diff --git a/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-C-Giga.png b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-C-Giga.png new file mode 100644 index 00000000..e42d16e7 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-C-Giga.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43822e669c390b84b00efa4ad4066154bdf022207f0394dfed5c1d88ef89faf2 +size 51095 diff --git a/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-Claire.png b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-Claire.png new file mode 100644 index 00000000..34a76020 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-Claire.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87b36ac3e38fe0fe5b147af4ca19d3c143a63e30cb49bd35a09f7d914f9da561 +size 71226 diff --git a/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-Clawed-Companion.png b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-Clawed-Companion.png new file mode 100644 index 00000000..6502fba2 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-Clawed-Companion.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f5421dbf4607216aaf7deca4f1ea22544eef23c80a92579d43b1e52f5a57fb4 +size 83823 diff --git a/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-D-Greaser.png b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-D-Greaser.png new file mode 100644 index 00000000..0463c976 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-D-Greaser.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a52809831036d3bcf47c68445a344a795c6626b9302d2a094124b2da6dfe5d1 +size 65610 diff --git a/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-D-Tela.png b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-D-Tela.png new file mode 100644 index 00000000..46e8633f --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-D-Tela.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8da9d04bbd72bebeb5b08fd46e347178c9837df6840ddb85811372793356323c +size 63216 diff --git a/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-E-Great-Bear.png b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-E-Great-Bear.png new file mode 100644 index 00000000..be66fa14 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-E-Great-Bear.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dafed0f685490d0bff77c2a2515cc523d4283fbc966be8b78f4dcfca07f38f46 +size 68749 diff --git a/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-E-Polar.png b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-E-Polar.png new file mode 100644 index 00000000..c00e68d9 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-E-Polar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f526aaf1a294ad953e4f9d5f7afa0107a7d00aac9a0ae6b1b7ab72c11351d6d +size 73227 diff --git a/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-F-Scare.png b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-F-Scare.png new file mode 100644 index 00000000..fa2e6d0a --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-F-Scare.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f902f5969bfa38c2ef68012b1d12c46d12b40626c95ab2451b9ca941fff7185a +size 64088 diff --git a/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-F-Scarlett.png b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-F-Scarlett.png new file mode 100644 index 00000000..c8c74144 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-F-Scarlett.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:722d2596ec010e110515c449c123b8d227cba8fab53264f401eb12844fffead2 +size 48311 diff --git a/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-G-Dragon.png b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-G-Dragon.png new file mode 100644 index 00000000..bca5440e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-G-Dragon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d02a0348f9e3af6537babc6f0434449772f117acd6f8be16efe4fb6829f53eb +size 76137 diff --git a/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-G-Teddy.png b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-G-Teddy.png new file mode 100644 index 00000000..9dd3269a --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-G-Teddy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5ea2952cb24b6cfa446d1c0544d6b411b3ac177baa84c6d895207aacda12cba +size 51836 diff --git a/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-Gang-O-Fries.png b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-Gang-O-Fries.png new file mode 100644 index 00000000..2a0b0277 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-Gang-O-Fries.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8910b99f78cff88670a581a94855877d57568357a13831e0597ec5543e03947b +size 77490 diff --git a/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-H-Bungling.png b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-H-Bungling.png new file mode 100644 index 00000000..dd7a664d --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-H-Bungling.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e93e3c7f3b793b2069075909ddf69059b7db1e308fd15e9c71dc558f7fb27a0f +size 57096 diff --git a/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-H-Pumpkin.png b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-H-Pumpkin.png new file mode 100644 index 00000000..5f6726e8 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-H-Pumpkin.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40cc8e85866c32a3f45e6d428d0bc887a0ba711fc19340e7fc5fda23cb32acc3 +size 51450 diff --git a/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-Ivory.png b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-Ivory.png new file mode 100644 index 00000000..af2c0efe --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-Ivory.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:109e1a315dc160f7fde25752d00bee05ee4e16aeb572fb5a91fe1813667a8622 +size 59201 diff --git a/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-Mr-Toilet.png b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-Mr-Toilet.png new file mode 100644 index 00000000..1de99984 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-Mr-Toilet.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:062814f4e280288437c4fde0784b4e3f630ff25728dbc4b8fb17c2f23a54fbaf +size 49224 diff --git a/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-Skeleton.png b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-Skeleton.png new file mode 100644 index 00000000..a096ee26 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Example-Skeleton.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b88727b4eaba64f9378f01c9cd2fd27aae6370cd48d6c436f39cf8aaca7540b2 +size 71295 diff --git a/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Upper-Torso-Back.png b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Upper-Torso-Back.png new file mode 100644 index 00000000..aab4ad3e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Upper-Torso-Back.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ef95505aa0d708e0dc0c606e083f55e2ac3c10c5e5538271208eef34be2bcad +size 579891 diff --git a/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Variations.png b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Variations.png new file mode 100644 index 00000000..cf43e2af --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Modesty-Layer-Variations.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1503b68e492411cbc4e0595ea1e02de634068863701fc007461414d61f0c4926 +size 2631415 diff --git a/.cursor/rules/roblox/assets/art/avatar/Rigging-Data-Model.png b/.cursor/rules/roblox/assets/art/avatar/Rigging-Data-Model.png new file mode 100644 index 00000000..5df012f7 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Rigging-Data-Model.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:916d0a0f430641797af0d180fecf71b0f5c835155a3253cd65af5e534d269809 +size 28404 diff --git a/.cursor/rules/roblox/assets/art/avatar/Rigging-Visual.png b/.cursor/rules/roblox/assets/art/avatar/Rigging-Visual.png new file mode 100644 index 00000000..935ea8b9 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Rigging-Visual.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8af3d8983d8fb303e0210fba532c57464bd80ae360720b5340167a2cff4e3319 +size 178379 diff --git a/.cursor/rules/roblox/assets/art/avatar/Rigid-Thumbnail.png b/.cursor/rules/roblox/assets/art/avatar/Rigid-Thumbnail.png new file mode 100644 index 00000000..265850c2 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Rigid-Thumbnail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ecc999081fc8b3145899c1d1840ad9f328cce6001a6792dadaf79ce41c6e3142 +size 114419 diff --git a/.cursor/rules/roblox/assets/art/avatar/Tattoo-Samy-A.png b/.cursor/rules/roblox/assets/art/avatar/Tattoo-Samy-A.png new file mode 100644 index 00000000..ce3259dc --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Tattoo-Samy-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09e7a72e63755bdc7a44ec83b4427969b7d8a41d6a20d835a5985575a228614d +size 74663 diff --git a/.cursor/rules/roblox/assets/art/avatar/Tattoo-Samy-B.png b/.cursor/rules/roblox/assets/art/avatar/Tattoo-Samy-B.png new file mode 100644 index 00000000..b90147ce --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Tattoo-Samy-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:643c5a78556955afd34be7671a5bdfae7c3dfe640f33d7843e0864875ddc5673 +size 70012 diff --git a/.cursor/rules/roblox/assets/art/avatar/Textures-Blue.png b/.cursor/rules/roblox/assets/art/avatar/Textures-Blue.png new file mode 100644 index 00000000..6f0f34b5 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Textures-Blue.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1640a2c4cbdbb79773953020e4d1d27b5e8eec3e5a9b57541cf61c30e30ce617 +size 537225 diff --git a/.cursor/rules/roblox/assets/art/avatar/Textures-Brown.png b/.cursor/rules/roblox/assets/art/avatar/Textures-Brown.png new file mode 100644 index 00000000..07898295 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Textures-Brown.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80f502fb88090a51a27ce85ebac440216ad3ececa72bdde7394b8f613ffd1db6 +size 537450 diff --git a/.cursor/rules/roblox/assets/art/avatar/Tutorial-Thumbnail.png b/.cursor/rules/roblox/assets/art/avatar/Tutorial-Thumbnail.png new file mode 100644 index 00000000..c4827aa1 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Tutorial-Thumbnail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:420136e0f62c332a69192d4c61026c14299162af070401a6faec8480567e34a8 +size 107700 diff --git a/.cursor/rules/roblox/assets/art/avatar/Valid-Visibility.png b/.cursor/rules/roblox/assets/art/avatar/Valid-Visibility.png new file mode 100644 index 00000000..88280d1c --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Valid-Visibility.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e274f6d8e1c859ca37ff8e492fe1f80907b27ead7f8c71a7619a38e228c485f3 +size 406673 diff --git a/.cursor/rules/roblox/assets/art/avatar/Validation-Tool-Preview.png b/.cursor/rules/roblox/assets/art/avatar/Validation-Tool-Preview.png new file mode 100644 index 00000000..4a62e642 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Validation-Tool-Preview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a09ef8d0b16591632863c2c00194c2f0de38e9d75ae37b74e89c7876fe7b327f +size 996688 diff --git a/.cursor/rules/roblox/assets/art/avatar/Validation-Tool-Test.mp4 b/.cursor/rules/roblox/assets/art/avatar/Validation-Tool-Test.mp4 new file mode 100644 index 00000000..956aaf1c --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Validation-Tool-Test.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:afd14b34c9bacc550db83c4f2e19d44424eb374e71ca5d1216c4762ce9adc279 +size 4334191 diff --git a/.cursor/rules/roblox/assets/art/avatar/Validation-Tool.png b/.cursor/rules/roblox/assets/art/avatar/Validation-Tool.png new file mode 100644 index 00000000..42f86568 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Validation-Tool.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01a9d850f9de3190d9aea8a11336c78b1cd6f1b15487f956d012494de008b04b +size 53518 diff --git a/.cursor/rules/roblox/assets/art/avatar/Workflow-Bodies-Templates.png b/.cursor/rules/roblox/assets/art/avatar/Workflow-Bodies-Templates.png new file mode 100644 index 00000000..4fd38a15 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Workflow-Bodies-Templates.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:223a6bdbf15e24514834dae0c1903e959abaed7f904f066c1d7d750275df2ade +size 79787 diff --git a/.cursor/rules/roblox/assets/art/avatar/Workflow-Bodies-Traditional.png b/.cursor/rules/roblox/assets/art/avatar/Workflow-Bodies-Traditional.png new file mode 100644 index 00000000..0d094f7b --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/Workflow-Bodies-Traditional.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7a216e8146baf5e2ffa3a7b04eea34ea3524c18c1511cc5cbea18517786eb63 +size 130714 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Blender-Animation-Start-End.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Blender-Animation-Start-End.png new file mode 100644 index 00000000..28db9a34 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Blender-Animation-Start-End.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5fa38ff59d8ed3e34993b9667758d0f41d650e885ef23b1815cef87fe2755eaf +size 48615 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Caging-Outer-Cage-Objects.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Caging-Outer-Cage-Objects.png new file mode 100644 index 00000000..8dddf148 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Caging-Outer-Cage-Objects.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11bd9b5445a090e0e4698decc52c8f3a8d924b000b3da0a3ecfea3ad8aed5ae3 +size 40602 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Caging-Symmetry-Settings.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Caging-Symmetry-Settings.png new file mode 100644 index 00000000..db59cd03 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Caging-Symmetry-Settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b711ae444a72bd9c01a1cba2c68b5f045f060fadc1c00791310e4988b5b9048 +size 69239 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Caging_01.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Caging_01.mp4 new file mode 100644 index 00000000..bb7709dd --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Caging_01.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52c0f2d20d7f094a1a374057fbc7966fefa473b77881b209a8645c540a903337 +size 4106019 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Caging_02.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Caging_02.mp4 new file mode 100644 index 00000000..82716b91 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Caging_02.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4f9d29e274faafb7e6b3197d2e50015161fd63eafab4994516d09407308bbdf +size 45395018 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Caging_03.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Caging_03.mp4 new file mode 100644 index 00000000..00fa34ba --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Caging_03.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce11e6f18f3f2ffa3e5532e19a7f978ef4ec157db7c793c4c49d14d0e7c9f166 +size 157863987 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Caging_04.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Caging_04.mp4 new file mode 100644 index 00000000..24d2c223 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Caging_04.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1407c76605b9fd74121ddd4e08be380be5128807a19b651ef9477d26c837aa5 +size 111251596 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Cleanup-Disconnect-Node.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Cleanup-Disconnect-Node.png new file mode 100644 index 00000000..27a6949a --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Cleanup-Disconnect-Node.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3dfd7137ae09a5d4f55c1fe14a39b53556fdd9a41be1c334f4cd7564469f9cac +size 60570 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Cleanup-Mix-Node.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Cleanup-Mix-Node.png new file mode 100644 index 00000000..1d3aad96 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Cleanup-Mix-Node.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57ccbf12c009016b48954077e61005b0c5ad3c1f6cf0515070e615757c851393 +size 64499 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Cleanup-Node-B.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Cleanup-Node-B.png new file mode 100644 index 00000000..1cf1f778 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Cleanup-Node-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a94949331e81dbc12da5d6e501384aa74c7e625a4c9904e94cfa60ea17d5e70 +size 146366 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Cleanup-Object-Select.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Cleanup-Object-Select.png new file mode 100644 index 00000000..fe0f36a2 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Cleanup-Object-Select.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d73bcd2b7e82b981c427556c56653a67939a2e28e4bff306529b36b5a24e3745 +size 46396 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Cleanup_01-1.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Cleanup_01-1.mp4 new file mode 100644 index 00000000..d0040a4f --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Cleanup_01-1.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9969e47ece0739cb2d77d037f9b1c2c5af0cfdd1c3a9557e8a7c2212fdc279e +size 2452676 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Cleanup_01.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Cleanup_01.mp4 new file mode 100644 index 00000000..368810ea --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Cleanup_01.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac1d5e2f055406c69909d30061de558d66a2fc0d9fd197109a9254233010d55c +size 4480260 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Cleanup_02.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Cleanup_02.mp4 new file mode 100644 index 00000000..3611461e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Cleanup_02.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7d3adf52b1ef91c3cd7d91d8010b2af829c7d1337c8f3c324f33c08a73eefa6 +size 9131865 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Color_Picker_01.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Color_Picker_01.mp4 new file mode 100644 index 00000000..1e63b342 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Color_Picker_01.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a55afe7b9094d964922fc96d17ae23a8c48bf3ba3a319c4fcc65f81385c92b19 +size 6195838 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Eyebrow-A.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Eyebrow-A.png new file mode 100644 index 00000000..8d7818ac --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Eyebrow-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e25419fc08fda322810200c00266bef380588c4f43fc783c2dd6423de966d22 +size 425487 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Eyebrow-B.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Eyebrow-B.png new file mode 100644 index 00000000..d0c61bf8 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Eyebrow-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:869f0610d9d1c81ab34629fc9643e19cb294ffb71d023189d158a23349bb43ec +size 161454 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Eyes-A.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Eyes-A.png new file mode 100644 index 00000000..3f5897fc --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Eyes-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7dd792b65193ad3acb77e41343993cd2ed232ab44856a901adcdfe82d32c1fe +size 426503 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Eyes-B.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Eyes-B.png new file mode 100644 index 00000000..a547c7f9 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Eyes-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a91860581367180bc8564a77a33c9cd0f0fc1f42f5375d1b921f9e2f675631c0 +size 165672 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Mouth-A.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Mouth-A.png new file mode 100644 index 00000000..211613bd --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Mouth-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:468203b62e1e040182fb8f94367d12af93639eca16bfeffe5bf7ccbadd829458 +size 423427 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Mouth-B.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Mouth-B.png new file mode 100644 index 00000000..d806de40 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Mouth-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c77f45132ffe95dcdf19d525a657158392edc372973146986a4ea85a375f60c7 +size 164276 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Nasolabial-A.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Nasolabial-A.png new file mode 100644 index 00000000..5fdac616 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Nasolabial-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c16287f74a9824c5742a8bb486762dcde1c80b348a7e1f29a23facabe15affd9 +size 426387 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Nasolabial-B.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Nasolabial-B.png new file mode 100644 index 00000000..fd159dac --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Edge-Flow-Nasolabial-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d91b0ba56b0de3827ebb496baef0423450258755b6fe0b606ead7e0bca411047 +size 163170 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Export-Settings.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Export-Settings.png new file mode 100644 index 00000000..3a730139 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Export-Settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9328e0dedeef7d1a2df276ef505d2d027dadd417ecc17a8b8170e1780289d726 +size 123214 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Exporting-Pack-Resources.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Exporting-Pack-Resources.png new file mode 100644 index 00000000..3c442c12 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Exporting-Pack-Resources.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8099bbd65dc06f959f2e598958f464c54d9adbf89336f6170121566f8d49dff +size 118499 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Exporting_01.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Exporting_01.mp4 new file mode 100644 index 00000000..fdf70f59 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Exporting_01.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a91b4c41140e697a8a3b41d06549bbc6757a56b4f623d85f1d216f34c796dd14 +size 3389490 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Attachment.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Attachment.png new file mode 100644 index 00000000..d71ebf4a --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Attachment.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a810d62913cdc5e685ef5db3a447fac1cfc9d07cf8fda0a8a722435cd3dce74 +size 252413 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Caging.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Caging.png new file mode 100644 index 00000000..9798f70e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Caging.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5233ed6b7688f5ec91ed4a897cb41757dd5848664ccd3932dca18203e580fe5e +size 390520 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Sculpting.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Sculpting.png new file mode 100644 index 00000000..95f436c4 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Sculpting.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:faf9c76d1436177e53fdad87763a59e5097fdd69fa43e27c9dffbac9ef82b2b5 +size 177308 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Texturing-A.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Texturing-A.png new file mode 100644 index 00000000..2b42df8e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Texturing-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d413730e49f7ca7192c1d833ccf26889ce8a321946c1327911111636eac69180 +size 257925 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Texturing-B.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Texturing-B.png new file mode 100644 index 00000000..fe954422 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Texturing-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:561f575bcc35c2b2f754862081d655bc98850dda5628519357273790ca330e29 +size 243832 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Texturing-C.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Texturing-C.png new file mode 100644 index 00000000..6dcdc1ac --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Texturing-C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9aa2f4b9b7112c2babb956341bd6c3ab770089c99f406c4b0b1ed01eb2a279e +size 259346 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Texturing.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Texturing.png new file mode 100644 index 00000000..45a9010e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Texturing.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ffeb21bde2e927f697d4556ba9d22f397d38c3442c7c26a902d068be0f5c38a +size 327621 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Tutorial.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Tutorial.png new file mode 100644 index 00000000..e6ef0827 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Post-Tutorial.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a716145f36b2cd89999bc9e6a6d2df6685e014ac9f76757d42496c615cfa271 +size 907183 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Pre-Attachment.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Pre-Attachment.png new file mode 100644 index 00000000..41fe9c92 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Pre-Attachment.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e145aa9b90d2b2099564fff8d5b66e57d8bf6c2bc6d7b9448e1693630c99b8d +size 255136 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Pre-Caging.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Pre-Caging.png new file mode 100644 index 00000000..f07e2b5b --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Pre-Caging.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:94433d1e01bcde2f3efde8ccf24cacca9bc259390c9d07cb3e3431786a45c0c9 +size 459215 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Pre-Sculpting.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Pre-Sculpting.png new file mode 100644 index 00000000..4a83e1c1 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Pre-Sculpting.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb80d94d15748d96c806d5a50beb211db9dfdd0d0812366d68415c6dc9f5508a +size 158460 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Pre-Texturing.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Pre-Texturing.png new file mode 100644 index 00000000..cfe18ee1 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Pre-Texturing.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c74e01cb05aa64b28893f74891616462d9b1662a7e4ec4fca8076631248e7657 +size 323572 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Pre-Tutorial.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Pre-Tutorial.png new file mode 100644 index 00000000..e9508ded --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Pre-Tutorial.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db6ed40df59cdc6527a28c60f505f7b6f70553835b478e587ca06d704efee145 +size 879333 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Sculpting-Crash-Example.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Sculpting-Crash-Example.png new file mode 100644 index 00000000..054e482e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Sculpting-Crash-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2953fbc8150276736305919a98b2ef1d8277f4cc77992e912173d6ace319fa3 +size 62048 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Sculpting_01.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Sculpting_01.mp4 new file mode 100644 index 00000000..491dbcb2 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Sculpting_01.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fd3dd67c1adeff3a2870d71bf7b67625573280d9ee1a432c7fca213221b82a4 +size 2171268 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Sculpting_02.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Sculpting_02.mp4 new file mode 100644 index 00000000..88d15b54 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Sculpting_02.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5d6e85032432799c7e64b39fa9cd176d57028665e1316658b6484e94e2ef6a0 +size 13903594 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Sculpting_03.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Sculpting_03.mp4 new file mode 100644 index 00000000..2097335d --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Sculpting_03.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da2c8590c291abe423985e95f76688dcfad735de67584a9cad60045760df5548 +size 14388099 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Sculpting_04.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Sculpting_04.mp4 new file mode 100644 index 00000000..bfb1f450 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Sculpting_04.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d0d729c63522abd608882a2a6decf95773ebbe987690e230b376e434fb5fbc7 +size 13719422 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Sculpting_06.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Sculpting_06.mp4 new file mode 100644 index 00000000..43fa4789 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Sculpting_06.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc0f724203f5a0388abf474245fa241d47a0e53146139272bcc7635d6f4bee75 +size 13289148 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Sculpting_07.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Sculpting_07.mp4 new file mode 100644 index 00000000..29ad91ba --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Sculpting_07.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef91482838283ec5349c4d4e0e5ab70bb3c7b522e0a9beb43f1630efbe29758d +size 26253286 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Select-Bone-Objects.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Select-Bone-Objects.png new file mode 100644 index 00000000..020514e3 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Select-Bone-Objects.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d8ee4bfbff0744d0bdf18c4cfa91e39f37f78410aa851c09b509bc0bef441a2 +size 22979 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Select-Joint-Objects.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Select-Joint-Objects.png new file mode 100644 index 00000000..cb2a196c --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Select-Joint-Objects.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aab824d5c9b03c74949d66ff78aa13da6476b14bba12b3d2a7a55056629f9996 +size 12938 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Template-Face-Objects.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Template-Face-Objects.png new file mode 100644 index 00000000..078a0e51 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Template-Face-Objects.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cab4673c963a7b758d6c7fbdc7512a825f2611f8a98afc2d7efa76efb25e4b6 +size 17947 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-3d-Importer.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-3d-Importer.png new file mode 100644 index 00000000..f5e4e140 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-3d-Importer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f41567a8c7ea356ee1343fc78a0a089356b4bce02096f959c0491164dc26359 +size 66219 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Animation-Timeline.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Animation-Timeline.png new file mode 100644 index 00000000..795d0267 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Animation-Timeline.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d004c5ffdb7b0597b5fca15a695f024b81b2188a60ed67dd3c3bcdfff501897a +size 18583 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Asset-Upload.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Asset-Upload.png new file mode 100644 index 00000000..3027efc3 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Asset-Upload.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:499137d8624dfba7c704e961f15392e09e439d81315f1c126cedc72f36bd0177 +size 13899 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Avatar-Test-Place.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Avatar-Test-Place.png new file mode 100644 index 00000000..f5319248 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Avatar-Test-Place.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79a1b946428e1bde6703b65f9298b4c72d7e3bdf99d94c3b31ca1aeee4e7333d +size 34595 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Clothing-Try-On.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Clothing-Try-On.png new file mode 100644 index 00000000..6b29afe8 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Clothing-Try-On.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c546a395e9151e4eaf8a78e7308eb11209f53672a71226fbc09af984b3a30bf9 +size 297954 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Clothing.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Clothing.png new file mode 100644 index 00000000..f55a50f4 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Clothing.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c544e88c0a93cb731fa59f95c0ad01ba554b787071ceee778059d19fc2f2668 +size 363588 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Custom-Properties.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Custom-Properties.png new file mode 100644 index 00000000..4313610d --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Custom-Properties.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1985bf7557ca3865dd3f351a0b8a88a4f82d5c3f71b16d0c26b0036aef3bc3e +size 120869 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Emotes.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Emotes.png new file mode 100644 index 00000000..7216da82 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Emotes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7eb7ee2beedea4f04c9552e3b8909b80e35b675f72fda06415a9d9582130a6cd +size 322431 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Face-Animation.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Face-Animation.png new file mode 100644 index 00000000..1acd8466 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Face-Animation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81ffa59e6cebde156ee6ffb53ae7de12b09cbc829aa5a6f6be7d9bf4c3893ef9 +size 297148 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Lighting.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Lighting.png new file mode 100644 index 00000000..e1f57f24 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Lighting.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fddbd27789e15a316428cec87cdfcd0d8c8685ae6d5b053dec5f87bbc80deea1 +size 237164 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Outdoor-Environment.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Outdoor-Environment.png new file mode 100644 index 00000000..2e66438b --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Outdoor-Environment.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f10ec4773edbe4ac97395c5f2331b182d5580d62374804a916530d235fde5612 +size 1014457 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Ramps.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Ramps.png new file mode 100644 index 00000000..f5edfa37 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Ramps.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd7146fc2f76ed3ab6d0fd1f96f969f716970dbaa93042d4b3c3a92d03f037d1 +size 292770 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Rig-Type.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Rig-Type.png new file mode 100644 index 00000000..015cd5cf --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Rig-Type.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fca07f9b4c2b36e59e3659cc188e41fa8c7caeb42f644d515ff95ee5bbaa6567 +size 22322 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Skin-Tone.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Skin-Tone.png new file mode 100644 index 00000000..d8084de4 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Skin-Tone.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a741a63025c6464899a6c17f58edda0a766e2392eed7fd16f1492eb320e3169 +size 306376 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-StarterPlayer.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-StarterPlayer.png new file mode 100644 index 00000000..cc0d5516 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-StarterPlayer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9bcc12025b231c5f96e62eead0e3ee0cf454352f189dec14f71ac0f82d64e53c +size 5825 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Studio.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Studio.png new file mode 100644 index 00000000..0f4652da --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Studio.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1eda3be7e4e721eceddfcd28f821765895d96d18b0815c5b49569bf511aa794 +size 856420 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Surface-Appearance-Applied.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Surface-Appearance-Applied.png new file mode 100644 index 00000000..3d07aba6 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Surface-Appearance-Applied.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:883e1ff6ef1de83b123bc8525a9e050f51cac647efe6dc968e2013067f16dc1f +size 46048 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Surface-Appearance.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Surface-Appearance.png new file mode 100644 index 00000000..368fbde5 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Surface-Appearance.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98afed547ba7ae857c3cb23f74fd3614924ad30d4f90aac86b87ffcb155dd52e +size 54992 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-UI-Clothing.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-UI-Clothing.png new file mode 100644 index 00000000..2d811285 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-UI-Clothing.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac6d790a33b20fb63249ff0df9c2d99450f4b28a93efed08fc81225c83af7e23 +size 4068 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-UI-Emote.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-UI-Emote.png new file mode 100644 index 00000000..3c795451 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-UI-Emote.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8dd4146ec7ee2b230eb79f7364d91808328696f67c27a6131b326e779777b7a8 +size 33202 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-UI-Face.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-UI-Face.png new file mode 100644 index 00000000..6a9d526e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-UI-Face.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5fd3b8ed46d362fa4ad3012f88c68cb0d853635b4521c27bc55aabc96c1a90b3 +size 38037 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-UI-Lighting.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-UI-Lighting.png new file mode 100644 index 00000000..ae373930 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-UI-Lighting.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fba284eaaff41cb64cba6fd543949391d2676873e06e8d9ffc608dbdac5c9823 +size 3808 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-UI-Movement.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-UI-Movement.png new file mode 100644 index 00000000..bdf33131 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-UI-Movement.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04a08bcf3039282b0ed7707ebc086931f89b5eb8cfa5880904d5ed7fbf38716c +size 7745 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-UI-Settings.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-UI-Settings.png new file mode 100644 index 00000000..67110e50 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-UI-Settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a18a99a1e54259b5c8bb4cef0620562292533494712cfb5ce80fe31a3f5773de +size 4286 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-UI-Skin-Tone.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-UI-Skin-Tone.png new file mode 100644 index 00000000..6c39d2fb --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-UI-Skin-Tone.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:713da519178ca02483ec35512434b7dac37fe9fef21949e14ea6d580df05ef6a +size 55557 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Water.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Water.png new file mode 100644 index 00000000..23508160 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing-Water.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02c8dea99b85c6a346065687e11e13a4c42c964bb5b0a93e0b188308bb360dac +size 239770 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing_01.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing_01.mp4 new file mode 100644 index 00000000..2b615196 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing_01.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fae7c2b2bb1ba4b1218f1f40ad1b2b7887697a54dd27469ac5b40bec7419e7ff +size 11943374 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing_02.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing_02.mp4 new file mode 100644 index 00000000..077bb1e9 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing_02.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef2895e8ab1445a11a62662bf350e411c8c3bea4c8e0753d47c3e4d11d2476c0 +size 16372733 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing_03.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing_03.mp4 new file mode 100644 index 00000000..72916abb --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Testing_03.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:283989b287bf9d7de5e49ddb15d5cca055fb7c210e2ed375dd6e21c5c9b96ea9 +size 8702823 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texture-Resolution-A.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texture-Resolution-A.png new file mode 100644 index 00000000..7c9f07ab --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texture-Resolution-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa869016c202d6b3f5a37120a9ba9d1f17378ff4e62d158786db853b0150e594 +size 284426 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texture-Resolution-B.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texture-Resolution-B.png new file mode 100644 index 00000000..826cb55c --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texture-Resolution-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb3fceaaab7ad2dfc48f6d2d515477a4ff01ee389434a4e17f3e27b6d0f50ef9 +size 314022 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texture-Symmetry-Tool-Setting.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texture-Symmetry-Tool-Setting.png new file mode 100644 index 00000000..8aea0bcc --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texture-Symmetry-Tool-Setting.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98b105ea7f9350c55aa0d96efdcbe793edab5d85ab1b64d4f20414f85dc77b46 +size 53642 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing-Inner-Eye.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing-Inner-Eye.png new file mode 100644 index 00000000..a1450ad4 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing-Inner-Eye.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5982b313062be4669b4bf371e1e121cb689459d0ed519da3e03541dfeae2ac1 +size 23185 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing-Outer-Brush-Settings.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing-Outer-Brush-Settings.png new file mode 100644 index 00000000..d2e5f27f --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing-Outer-Brush-Settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb38135a26383924b397cd95fdb0982d427ed81e6e9fa592d44b6b2589aa8d1a +size 25894 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing-Pupil-Brush-Settings.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing-Pupil-Brush-Settings.png new file mode 100644 index 00000000..a49af7ab --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing-Pupil-Brush-Settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80d46932a07c507c0e62290c7081aa745137ad7b496a178cc8a72cfd15d0541f +size 15897 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing-Shadow-Settings.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing-Shadow-Settings.png new file mode 100644 index 00000000..0057b2ba --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing-Shadow-Settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ffb19bb9c5125e9ced6800bae24b3b760fc0deb0c0d58f27cd0c2275220207c +size 18045 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing-Wireframe-Toggle.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing-Wireframe-Toggle.png new file mode 100644 index 00000000..eff7eb13 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing-Wireframe-Toggle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd41fec9d222ee691c989eab610d5a0b5f6be5a70f34f43350c457882947b5dc +size 54497 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing-X-Symmetry.png b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing-X-Symmetry.png new file mode 100644 index 00000000..ed1111a9 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing-X-Symmetry.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d9ced5db5f220f14d7206da1aacaa92eec96adc9eaa3847255ba9d64841457a +size 21673 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_01.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_01.mp4 new file mode 100644 index 00000000..04730e84 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_01.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cddcb846b3a4adb5c867d1b0d1b0ef0aef930e10b5761a5b9f1cf44a4216c26e +size 3550997 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_02.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_02.mp4 new file mode 100644 index 00000000..4cc6bd8f --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_02.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b656325fe8fb6eee1a0114427cc3a32a1ca86313f77bbfb0991108357c989399 +size 1254686 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_03.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_03.mp4 new file mode 100644 index 00000000..1f555e9f --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_03.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06f667ad9c44783c0bc136dc4c95982d9bb7145dc0ef0f364aed656f27ba08ae +size 6071350 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_04.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_04.mp4 new file mode 100644 index 00000000..4a2d9fde --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_04.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c5a3cb1b63a6d128de34dcc9726c407cb9fa7a835b51b0d893d22f9d3b00b63 +size 9967119 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_05.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_05.mp4 new file mode 100644 index 00000000..fbb34d73 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_05.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6597158bf484bf5525c573ef2b0b5ccc0b6bb99d8ee1bf6e5ea22236019111a6 +size 3565942 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_06.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_06.mp4 new file mode 100644 index 00000000..197a9f82 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_06.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72e54f2d0883ae00a0f910643cac7404c31f48670c4ffdef5707c9aeffbbc390 +size 16376330 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_07.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_07.mp4 new file mode 100644 index 00000000..99da0175 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_07.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc901f547fa2ecb1c2fa2a8790ed41604eacc00eadf34318a275469374aadf8c +size 21615765 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_08.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_08.mp4 new file mode 100644 index 00000000..b42bd7b1 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_08.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c296e93d7c32275c1d5eeb6aefda9584bf256c6d172140a51bcfe0e7fbddc3ad +size 9519958 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_09.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_09.mp4 new file mode 100644 index 00000000..aaf53b37 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_09.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb3a8e5f1a94fa4dc36a27b4e31896aba3a0fb358b70226726ee3ac81ea9b663 +size 4911903 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_10.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_10.mp4 new file mode 100644 index 00000000..27496083 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_10.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bee0d82a3023f3198741418c999aa769f5fc5c7c7f5b19ab31d2f2bf08f45269 +size 12380092 diff --git a/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_11.mp4 b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_11.mp4 new file mode 100644 index 00000000..161e8955 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/basic-creation/Texturing_11.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:62373a8d22c50fd57034c56dfa2117a91ae0fd7ca28517de589cddb6d946cb13 +size 7052365 diff --git a/.cursor/rules/roblox/assets/art/avatar/templates/Anime-Templates.png b/.cursor/rules/roblox/assets/art/avatar/templates/Anime-Templates.png new file mode 100644 index 00000000..dbe2d3e0 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/templates/Anime-Templates.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1be3310f46d725c07a3fbce77905fbf18280954563a7185c9a565e9afc3dca9 +size 335696 diff --git a/.cursor/rules/roblox/assets/art/avatar/templates/Caricature-Templates.png b/.cursor/rules/roblox/assets/art/avatar/templates/Caricature-Templates.png new file mode 100644 index 00000000..714d1418 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/templates/Caricature-Templates.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0088da0c5f594bd561253a6315fad31e57b69c9c9f804ced83b845baf42a84d5 +size 130099 diff --git a/.cursor/rules/roblox/assets/art/avatar/templates/Custom-Skin-Tones.png b/.cursor/rules/roblox/assets/art/avatar/templates/Custom-Skin-Tones.png new file mode 100644 index 00000000..de204b55 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/templates/Custom-Skin-Tones.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4556b0e5c1c2195d426d6f4803ea7e28178b8e5fbb49a9f339ac3870eaf310b +size 406583 diff --git a/.cursor/rules/roblox/assets/art/avatar/templates/Muzzle-Concepts.png b/.cursor/rules/roblox/assets/art/avatar/templates/Muzzle-Concepts.png new file mode 100644 index 00000000..0769cee8 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/templates/Muzzle-Concepts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4153be3d34ecc85c769cd7b0deca8eb100ac2683344640ca20bfa91a2b5f8a1f +size 310776 diff --git a/.cursor/rules/roblox/assets/art/avatar/templates/Muzzle-Head-Templates.png b/.cursor/rules/roblox/assets/art/avatar/templates/Muzzle-Head-Templates.png new file mode 100644 index 00000000..f080a3da --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/templates/Muzzle-Head-Templates.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:595db7a6cf667732fd1f97088d612a85dcd344d3c51f49a6bea841b4b921a93f +size 612369 diff --git a/.cursor/rules/roblox/assets/art/avatar/templates/Muzzle-Prototype.png b/.cursor/rules/roblox/assets/art/avatar/templates/Muzzle-Prototype.png new file mode 100644 index 00000000..94a020e2 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/templates/Muzzle-Prototype.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b44e3eebf91d849aaee64426653c1b3ba20056a3f41317eb0a19a7bba8b77efd +size 121045 diff --git a/.cursor/rules/roblox/assets/art/avatar/templates/Round-Concepts.png b/.cursor/rules/roblox/assets/art/avatar/templates/Round-Concepts.png new file mode 100644 index 00000000..cd7d9e56 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/templates/Round-Concepts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:175e80d7abf75a45ef13d08bf72be464fd2a2b0bba94212ebfce8382ca0b574d +size 239854 diff --git a/.cursor/rules/roblox/assets/art/avatar/templates/Round-Head-Templates.png b/.cursor/rules/roblox/assets/art/avatar/templates/Round-Head-Templates.png new file mode 100644 index 00000000..f1682c8f --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/templates/Round-Head-Templates.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ef37a05e333fecf8ade67621dd4d3b042a60f43d5eb112f9f8f06405fff8e8b +size 597334 diff --git a/.cursor/rules/roblox/assets/art/avatar/templates/Round-Prototype.png b/.cursor/rules/roblox/assets/art/avatar/templates/Round-Prototype.png new file mode 100644 index 00000000..1f75def1 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/templates/Round-Prototype.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8c56af0232cdf056723b41f3882f9b0c0f827377c2e26fff266060dc0714404 +size 102867 diff --git a/.cursor/rules/roblox/assets/art/avatar/templates/SemiRealistic-Templates.png b/.cursor/rules/roblox/assets/art/avatar/templates/SemiRealistic-Templates.png new file mode 100644 index 00000000..0dcb31d6 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/templates/SemiRealistic-Templates.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03e7ef49c26db106b785b31f0f4eccffcdfd5c3236ccd9f6ec4faa0c0874ae72 +size 320818 diff --git a/.cursor/rules/roblox/assets/art/avatar/templates/Square-Head-Templates.png b/.cursor/rules/roblox/assets/art/avatar/templates/Square-Head-Templates.png new file mode 100644 index 00000000..16831c46 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/templates/Square-Head-Templates.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5c55197cd41892e8122c9a851e59b43def0b9ae14209ca2c013c07f1af0efcd +size 620049 diff --git a/.cursor/rules/roblox/assets/art/avatar/templates/Stylized-Templates.png b/.cursor/rules/roblox/assets/art/avatar/templates/Stylized-Templates.png new file mode 100644 index 00000000..0356c4c8 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/templates/Stylized-Templates.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f37c14f113cf8295cc07d97652f22e24f62e2be2e90bb0b7d8e529931d54d58 +size 148889 diff --git a/.cursor/rules/roblox/assets/art/avatar/templates/Texture-Map.png b/.cursor/rules/roblox/assets/art/avatar/templates/Texture-Map.png new file mode 100644 index 00000000..5b27f2f1 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/avatar/templates/Texture-Map.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b0e67800deb346cdf422846337e3c754e013a5913a65ed20d61c2625de917ada +size 734590 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/3DCursor.png b/.cursor/rules/roblox/assets/art/blender-ui/3DCursor.png new file mode 100644 index 00000000..c4d42729 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/3DCursor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:322fa860993fec54ccaab419c0b830f60ce0493185003e1c46daf7e1467488e3 +size 592822 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/3DViewport.png b/.cursor/rules/roblox/assets/art/blender-ui/3DViewport.png new file mode 100644 index 00000000..d3bf7304 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/3DViewport.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d4b3c2d564af5bc5d90790df281ccc056c87afd945d178c849cb3d8a9e5efe7 +size 614809 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/ActiveSwatch.png b/.cursor/rules/roblox/assets/art/blender-ui/ActiveSwatch.png new file mode 100644 index 00000000..a6809503 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/ActiveSwatch.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:796c7b89f4cd3200f402f8c0bc8da51aaa24465f87b2c5840349417d1292446e +size 35026 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/Blender-Project-Objects.png b/.cursor/rules/roblox/assets/art/blender-ui/Blender-Project-Objects.png new file mode 100644 index 00000000..aa444d17 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/Blender-Project-Objects.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4753f385c65f3957558b0bec88f305047aad60d91d9873fbe3b0d92ef78597e4 +size 28023 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/Data-Tab.png b/.cursor/rules/roblox/assets/art/blender-ui/Data-Tab.png new file mode 100644 index 00000000..0d6d836f --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/Data-Tab.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df82ff90229d43597f87ca6b432da07692ebed4d64050f111ebeee591d8661d3 +size 231694 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/Disabled-Icon.png b/.cursor/rules/roblox/assets/art/blender-ui/Disabled-Icon.png new file mode 100644 index 00000000..448cdb99 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/Disabled-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99c51255b2e70bd3ed91f60da8031f564f6ade0a61ba1f02b75ba4618baaee9d +size 3925 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/Edit-Mode.jpg b/.cursor/rules/roblox/assets/art/blender-ui/Edit-Mode.jpg new file mode 100644 index 00000000..9f85bbec --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/Edit-Mode.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa219003c3ace7c2ae84d1ab63995170f9caac93cfcfd90c10db83cb1e08aeb5 +size 24224 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/Face-Bones.png b/.cursor/rules/roblox/assets/art/blender-ui/Face-Bones.png new file mode 100644 index 00000000..020514e3 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/Face-Bones.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d8ee4bfbff0744d0bdf18c4cfa91e39f37f78410aa851c09b509bc0bef441a2 +size 22979 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/Face-Objects.png b/.cursor/rules/roblox/assets/art/blender-ui/Face-Objects.png new file mode 100644 index 00000000..e470177b --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/Face-Objects.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6a6d62849f3411f486479dc436fbb4575c509255274a863f797b8e69af6124a +size 29612 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/Modes.png b/.cursor/rules/roblox/assets/art/blender-ui/Modes.png new file mode 100644 index 00000000..980c0f04 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/Modes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c070e7fa72ae7d9ca4f1eeae51a0a77ae6518c629a90ef6597919d06d0040ebd +size 595055 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/Modifiers-Tab.png b/.cursor/rules/roblox/assets/art/blender-ui/Modifiers-Tab.png new file mode 100644 index 00000000..8636c4f1 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/Modifiers-Tab.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:550def2dd2dc79e2124df8c2dd7cba620b53e945c487900f8e847e1c8628eabe +size 38829 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/Object-Mode.jpg b/.cursor/rules/roblox/assets/art/blender-ui/Object-Mode.jpg new file mode 100644 index 00000000..8d5f508a --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/Object-Mode.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03bcfb413b1ece8d061d501a7f855c0e6d1bde9e12bbaaa8f6a873a063e98f22 +size 24553 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/Object-Select-Icon.png b/.cursor/rules/roblox/assets/art/blender-ui/Object-Select-Icon.png new file mode 100644 index 00000000..d9d3e917 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/Object-Select-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ae39c598b8fdd8612118d36e79b455a1dc3a611a8816fdb258a37b5cd36902a +size 665 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/Outliner-Disabled-Enabled.png b/.cursor/rules/roblox/assets/art/blender-ui/Outliner-Disabled-Enabled.png new file mode 100644 index 00000000..b43e7a2e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/Outliner-Disabled-Enabled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ed2cac17ea22a7015266c82cac1afed5f177d04731be824346966f6f193719f +size 24871 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/Outliner-Filter.png b/.cursor/rules/roblox/assets/art/blender-ui/Outliner-Filter.png new file mode 100644 index 00000000..916a1247 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/Outliner-Filter.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac23d945ba52466aa8dad05c8251fe6209ccaa9688c15e1fa091fe8017d2f43e +size 33490 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/Outliner-Menu.png b/.cursor/rules/roblox/assets/art/blender-ui/Outliner-Menu.png new file mode 100644 index 00000000..0aa45590 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/Outliner-Menu.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8981ad7cbf8b80e95b6c6c3fe3fec2e34fb91f481c35d6bd7bf337b55689ab6b +size 50559 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/Scene-Options.png b/.cursor/rules/roblox/assets/art/blender-ui/Scene-Options.png new file mode 100644 index 00000000..22d3f67e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/Scene-Options.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6dbb46bc5e2e0540d54782b64e2fb56a0fa58a0c2f7dbef8a68ff0cb3388da61 +size 41881 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/Sculpt-Mode.jpg b/.cursor/rules/roblox/assets/art/blender-ui/Sculpt-Mode.jpg new file mode 100644 index 00000000..0268704a --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/Sculpt-Mode.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c3bd9e95ea914c0cea1ce96d73ff942b314f3ca46281de9629b3f69aa81e843 +size 24765 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/TexturePaint-Mode.jpg b/.cursor/rules/roblox/assets/art/blender-ui/TexturePaint-Mode.jpg new file mode 100644 index 00000000..8f41b7c0 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/TexturePaint-Mode.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c68f155a6b7f625b15b982ddc127255484e47eff91586a708aa06bd8c6ecd9c +size 24738 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/Timeline-Frames.png b/.cursor/rules/roblox/assets/art/blender-ui/Timeline-Frames.png new file mode 100644 index 00000000..1dcf6a34 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/Timeline-Frames.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e17e2bcc17647b7889f328d0bd1564a95fa59371462daafa35bb9b30676406d +size 6900 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/Toolbar.png b/.cursor/rules/roblox/assets/art/blender-ui/Toolbar.png new file mode 100644 index 00000000..e09bd31e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/Toolbar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75ba1488f1c381da8f6dddb865142ec27c85d5c54371d5438624d5e61219a3c1 +size 593220 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/VertexPaint-Mode.jpg b/.cursor/rules/roblox/assets/art/blender-ui/VertexPaint-Mode.jpg new file mode 100644 index 00000000..59e3522e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/VertexPaint-Mode.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0df989afcc49da862b2cc88299e2466212eb346e75e5aa62c485807162c1dddb +size 24715 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/Viewport-Shading-Setting.png b/.cursor/rules/roblox/assets/art/blender-ui/Viewport-Shading-Setting.png new file mode 100644 index 00000000..76adf938 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/Viewport-Shading-Setting.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a55f7c858e7376f75fb16da66f938e88f190d44db4b163d65e8f4cf0a9841e7 +size 2867 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/ViewportShading-Solid.png b/.cursor/rules/roblox/assets/art/blender-ui/ViewportShading-Solid.png new file mode 100644 index 00000000..bbdfcf4d --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/ViewportShading-Solid.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec7df34fadc609e80f54295a85e016fbefb2363fcec5530b03c5f3d55b4b2051 +size 43846 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/Visibility-Icon.png b/.cursor/rules/roblox/assets/art/blender-ui/Visibility-Icon.png new file mode 100644 index 00000000..9a267d51 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/Visibility-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf23a1375bc2452c02853a293291ab7f751c431c60c402534f0135c044790b50 +size 1883 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/WeightPaint-Mode.jpg b/.cursor/rules/roblox/assets/art/blender-ui/WeightPaint-Mode.jpg new file mode 100644 index 00000000..12bd1253 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/WeightPaint-Mode.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3365e700557b947602a3525450543be6660f7725c48f49560afa11c04c92b8ef +size 24716 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/Workspaces.png b/.cursor/rules/roblox/assets/art/blender-ui/Workspaces.png new file mode 100644 index 00000000..caefcf68 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/Workspaces.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43873e10a2657448da6be6bb45ea4531e7f5d27e7182fdca7a103883e72aff1e +size 598309 diff --git a/.cursor/rules/roblox/assets/art/blender-ui/scene-tab.jpg b/.cursor/rules/roblox/assets/art/blender-ui/scene-tab.jpg new file mode 100644 index 00000000..80279096 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/blender-ui/scene-tab.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70adb447cbd80a8b3ecc4de0ecff20b3fdf3f4c48cdaedd81cfb249ca11bedb1 +size 37311 diff --git a/.cursor/rules/roblox/assets/art/reference-files/AnimeFemale-Studio-Ready.fbx b/.cursor/rules/roblox/assets/art/reference-files/AnimeFemale-Studio-Ready.fbx new file mode 100644 index 00000000..f856a1d2 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/AnimeFemale-Studio-Ready.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:542ce8dec4c11d3a3710a9cf4e9bb2da08a370babbfee20ebd25c0b5c34425ed +size 6371052 diff --git a/.cursor/rules/roblox/assets/art/reference-files/AnimeFemale.zip b/.cursor/rules/roblox/assets/art/reference-files/AnimeFemale.zip new file mode 100644 index 00000000..ddf95630 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/AnimeFemale.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f95021c79f4c5a014d5482ff49b4d691983f080ebf5ac60d6c08d339703be0e8 +size 11439708 diff --git a/.cursor/rules/roblox/assets/art/reference-files/AnimeMale.zip b/.cursor/rules/roblox/assets/art/reference-files/AnimeMale.zip new file mode 100644 index 00000000..ddfc548b --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/AnimeMale.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bce3d403800dec5b87d004d03ddd54e120ddf42169a544107e0a3c081f514acc +size 10537703 diff --git a/.cursor/rules/roblox/assets/art/reference-files/Caricature.zip b/.cursor/rules/roblox/assets/art/reference-files/Caricature.zip new file mode 100644 index 00000000..1e3e2511 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/Caricature.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4932dacc460223d2c829e8fda0f0d0217a7b58e16aa463d1dda851fff10a0ff2 +size 7126073 diff --git a/.cursor/rules/roblox/assets/art/reference-files/ClassicMannequin.fbx b/.cursor/rules/roblox/assets/art/reference-files/ClassicMannequin.fbx new file mode 100644 index 00000000..69e70e1e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/ClassicMannequin.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:970edb3a94e2863655044bef3391557eb2971dc24f74aea3f35d877879154b08 +size 573324 diff --git a/.cursor/rules/roblox/assets/art/reference-files/ClassicMannequin_With-Cages.fbx b/.cursor/rules/roblox/assets/art/reference-files/ClassicMannequin_With-Cages.fbx new file mode 100644 index 00000000..7140e3b7 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/ClassicMannequin_With-Cages.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72eb65745962a377d9e78500eb2961f4abe3f1b0f4be74ef20cd346435c76ef1 +size 557468 diff --git a/.cursor/rules/roblox/assets/art/reference-files/Eyebrows.fbx b/.cursor/rules/roblox/assets/art/reference-files/Eyebrows.fbx new file mode 100644 index 00000000..3841c8a4 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/Eyebrows.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8430afded33cea8965c6693a77af872a0f47f9ad410acfc3898e346ff8839e0e +size 1928540 diff --git a/.cursor/rules/roblox/assets/art/reference-files/Eyelashes.fbx b/.cursor/rules/roblox/assets/art/reference-files/Eyelashes.fbx new file mode 100644 index 00000000..2571221e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/Eyelashes.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad8471699463aca91c2a812325a5c6f33f1c3968360b75e20c46f36fc0112be5 +size 1939820 diff --git a/.cursor/rules/roblox/assets/art/reference-files/MuzzleFemale.zip b/.cursor/rules/roblox/assets/art/reference-files/MuzzleFemale.zip new file mode 100644 index 00000000..3496769e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/MuzzleFemale.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1190a6637922e9b682a46251b15de0966dfe0898e3eff4d3174c8ac8946149f8 +size 7245881 diff --git a/.cursor/rules/roblox/assets/art/reference-files/MuzzleMale.zip b/.cursor/rules/roblox/assets/art/reference-files/MuzzleMale.zip new file mode 100644 index 00000000..47d7ff80 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/MuzzleMale.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:921624c31a65196d826f1b968d47184fd8c7228fed6be390d507b82b84fd4d78 +size 6635865 diff --git a/.cursor/rules/roblox/assets/art/reference-files/NatureArcherGirl-AutoSetup.zip b/.cursor/rules/roblox/assets/art/reference-files/NatureArcherGirl-AutoSetup.zip new file mode 100644 index 00000000..7f704656 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/NatureArcherGirl-AutoSetup.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7fbc5722c4948baa2085fa75efbf034bc25b5849f5dcc15b093127d0947efe30 +size 9299933 diff --git a/.cursor/rules/roblox/assets/art/reference-files/NatureArcherGirl.zip b/.cursor/rules/roblox/assets/art/reference-files/NatureArcherGirl.zip new file mode 100644 index 00000000..d13af7d6 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/NatureArcherGirl.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:581c16738feda7baff0fce45aaadfc86feb004d1f38795d037471aa5cf2ba384 +size 259988601 diff --git a/.cursor/rules/roblox/assets/art/reference-files/RoundFemale.zip b/.cursor/rules/roblox/assets/art/reference-files/RoundFemale.zip new file mode 100644 index 00000000..893e06d0 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/RoundFemale.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e59ef5b5cdd698f8cece5952bfd353796de2986c5d397b57cfdb3a20d047eb1 +size 7002038 diff --git a/.cursor/rules/roblox/assets/art/reference-files/RoundMale.zip b/.cursor/rules/roblox/assets/art/reference-files/RoundMale.zip new file mode 100644 index 00000000..4fcdbf79 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/RoundMale.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8777d1b3183452940c9f04d3d7a4e9f75a245dccd65d883a03b38c7c0dd58560 +size 6359982 diff --git a/.cursor/rules/roblox/assets/art/reference-files/RthroMannequin.fbx b/.cursor/rules/roblox/assets/art/reference-files/RthroMannequin.fbx new file mode 100644 index 00000000..5be5a6d0 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/RthroMannequin.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6db9e67326b9f5adc8ac47cf62903217d82e4554d19a65eca4281c4f104d838 +size 544236 diff --git a/.cursor/rules/roblox/assets/art/reference-files/RthroMannequin_With-Cages.fbx b/.cursor/rules/roblox/assets/art/reference-files/RthroMannequin_With-Cages.fbx new file mode 100644 index 00000000..3e482ec0 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/RthroMannequin_With-Cages.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8519448131dde042830bce938cca86f211ef535ad80713b1938d3512320b249 +size 1160556 diff --git a/.cursor/rules/roblox/assets/art/reference-files/RthroSlenderMannequin.fbx b/.cursor/rules/roblox/assets/art/reference-files/RthroSlenderMannequin.fbx new file mode 100644 index 00000000..61160854 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/RthroSlenderMannequin.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:995a0a4af01e5299be8e77d96f75c11bd48b5d88ae65568e0f4bb523b6e28a1a +size 567484 diff --git a/.cursor/rules/roblox/assets/art/reference-files/RthroSlenderMannequin_With-Cages.fbx b/.cursor/rules/roblox/assets/art/reference-files/RthroSlenderMannequin_With-Cages.fbx new file mode 100644 index 00000000..eb931b54 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/RthroSlenderMannequin_With-Cages.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1f92f00e37e98095a0e14e4254a35d1f87c190c780c447f0c684eff9694b532 +size 1180124 diff --git a/.cursor/rules/roblox/assets/art/reference-files/SemiRealisticFemale.zip b/.cursor/rules/roblox/assets/art/reference-files/SemiRealisticFemale.zip new file mode 100644 index 00000000..34f9d1d5 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/SemiRealisticFemale.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b5d7137dae47cee2c78467df2f1e26ca556554348fa080f15e010e23ac773a3 +size 12750832 diff --git a/.cursor/rules/roblox/assets/art/reference-files/SemiRealisticMale.zip b/.cursor/rules/roblox/assets/art/reference-files/SemiRealisticMale.zip new file mode 100644 index 00000000..e519dc44 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/SemiRealisticMale.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2bcc469944905d5c393d45fafd33455cf229eed195b158661de08817de048bc3 +size 12348036 diff --git a/.cursor/rules/roblox/assets/art/reference-files/Snow.fbx b/.cursor/rules/roblox/assets/art/reference-files/Snow.fbx new file mode 100644 index 00000000..a0a2cfc2 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/Snow.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0bcbdc354fc1539057d1a0f5c784afe53961c594692bcf32049b297e665a4d58 +size 2742960 diff --git a/.cursor/rules/roblox/assets/art/reference-files/SquareFemale.zip b/.cursor/rules/roblox/assets/art/reference-files/SquareFemale.zip new file mode 100644 index 00000000..113070cc --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/SquareFemale.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:948e438b136547ef7e753b888222b84c7b523bb2e386a752798e5646e97952ed +size 4137004 diff --git a/.cursor/rules/roblox/assets/art/reference-files/SquareMale.zip b/.cursor/rules/roblox/assets/art/reference-files/SquareMale.zip new file mode 100644 index 00000000..e0862d1d --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/SquareMale.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55e09e3585ad3e0a38ce8eb526183b5c4116cfecaa24e3721d996f952686f51f +size 5366921 diff --git a/.cursor/rules/roblox/assets/art/reference-files/StylizedHuman.zip b/.cursor/rules/roblox/assets/art/reference-files/StylizedHuman.zip new file mode 100644 index 00000000..eeddc42e --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/StylizedHuman.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af9bd355b8c5c060c172420d3796548e562eb36223d00c0bed1b72b0f3665065 +size 7980049 diff --git a/.cursor/rules/roblox/assets/art/reference-files/StylizedMale-AutoSetup.zip b/.cursor/rules/roblox/assets/art/reference-files/StylizedMale-AutoSetup.zip new file mode 100644 index 00000000..7cc7ba79 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/StylizedMale-AutoSetup.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32757c0a592eba56a7e76167fcdea52f7d4b2cf009ce4cb948a6cb7c7ffd2063 +size 3749120 diff --git a/.cursor/rules/roblox/assets/art/reference-files/StylizedMaleWithClothing.zip b/.cursor/rules/roblox/assets/art/reference-files/StylizedMaleWithClothing.zip new file mode 100644 index 00000000..45762a97 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/StylizedMaleWithClothing.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:389286ea7045d74aab928e535fb74674c47a18033cd4d1a8a05a87c522bd1929 +size 189362776 diff --git a/.cursor/rules/roblox/assets/art/reference-files/checkpoint/1_Goblin-sculpted.blend b/.cursor/rules/roblox/assets/art/reference-files/checkpoint/1_Goblin-sculpted.blend new file mode 100644 index 00000000..d90126fa --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/checkpoint/1_Goblin-sculpted.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a351ee9b6a999008212068c7674bf0e2281db04865f0c8ff49ab67d9ede2631 +size 29778228 diff --git a/.cursor/rules/roblox/assets/art/reference-files/checkpoint/1_LongSleeve-Modeling-Complete.blend b/.cursor/rules/roblox/assets/art/reference-files/checkpoint/1_LongSleeve-Modeling-Complete.blend new file mode 100644 index 00000000..7e5c002d --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/checkpoint/1_LongSleeve-Modeling-Complete.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d38e4eebd324050a92e50cd6896704c49dd586ca99c624eced4fd043620ebe7 +size 1483700 diff --git a/.cursor/rules/roblox/assets/art/reference-files/checkpoint/2_Goblin-textured.blend b/.cursor/rules/roblox/assets/art/reference-files/checkpoint/2_Goblin-textured.blend new file mode 100644 index 00000000..18183c1d --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/checkpoint/2_Goblin-textured.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c276708d58c7b23548426e93fa85368f5fbb0194ec36fcb7065c9dcb429bc8ac +size 29268668 diff --git a/.cursor/rules/roblox/assets/art/reference-files/checkpoint/2_LongSleeve-Texturing-Complete.blend b/.cursor/rules/roblox/assets/art/reference-files/checkpoint/2_LongSleeve-Texturing-Complete.blend new file mode 100644 index 00000000..d3e56203 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/checkpoint/2_LongSleeve-Texturing-Complete.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3a5448d3d3aad444a6f54eb1594f813ef0de9c0bce550feaf49297d4001363f +size 1619944 diff --git a/.cursor/rules/roblox/assets/art/reference-files/checkpoint/3_Goblin-caged.blend b/.cursor/rules/roblox/assets/art/reference-files/checkpoint/3_Goblin-caged.blend new file mode 100644 index 00000000..c4d67fee --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/checkpoint/3_Goblin-caged.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a0aa2aa7fdec6b40f9fe0e1d02c15d083c417f4b1852fe37d30ab4777e2cdd1 +size 29287772 diff --git a/.cursor/rules/roblox/assets/art/reference-files/checkpoint/3_LongSleeve-Rigging-Complete.blend b/.cursor/rules/roblox/assets/art/reference-files/checkpoint/3_LongSleeve-Rigging-Complete.blend new file mode 100644 index 00000000..2616a7d4 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/checkpoint/3_LongSleeve-Rigging-Complete.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c61907717563cedd981d534704e18cdd5c122c614927a8612d5c3bc5391517bc +size 1664140 diff --git a/.cursor/rules/roblox/assets/art/reference-files/checkpoint/4_LongSleeve-Caging-Complete.blend b/.cursor/rules/roblox/assets/art/reference-files/checkpoint/4_LongSleeve-Caging-Complete.blend new file mode 100644 index 00000000..1e21b88a --- /dev/null +++ b/.cursor/rules/roblox/assets/art/reference-files/checkpoint/4_LongSleeve-Caging-Complete.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b8cd6bb20089129b90ba07cd16e7ee881a40524366481450932d355807cb16f +size 1661108 diff --git a/.cursor/rules/roblox/assets/art/resources/Archer-Girl-Preview.png b/.cursor/rules/roblox/assets/art/resources/Archer-Girl-Preview.png new file mode 100644 index 00000000..b6ef58b2 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/resources/Archer-Girl-Preview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82efa4914cdd3a8da264655e6ac39a9ca0bd410f40d60295cf768f4312dcaddd +size 473951 diff --git a/.cursor/rules/roblox/assets/art/resources/Blocky-Resource.png b/.cursor/rules/roblox/assets/art/resources/Blocky-Resource.png new file mode 100644 index 00000000..61ec5cb4 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/resources/Blocky-Resource.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a486c6e861948c8889a1745ffc2973e81eb4e09c26fc8fd197c3721285eb408 +size 362651 diff --git a/.cursor/rules/roblox/assets/art/resources/Body-Cages-Resource.png b/.cursor/rules/roblox/assets/art/resources/Body-Cages-Resource.png new file mode 100644 index 00000000..146b3b82 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/resources/Body-Cages-Resource.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a25fe3e243156eb960fb40a9336297bcf26740d36271e58c9690e33cb9dca84 +size 216279 diff --git a/.cursor/rules/roblox/assets/art/resources/Body-Scale-Classic.png b/.cursor/rules/roblox/assets/art/resources/Body-Scale-Classic.png new file mode 100644 index 00000000..47c354fc --- /dev/null +++ b/.cursor/rules/roblox/assets/art/resources/Body-Scale-Classic.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2abb2f126e20b5a40556f25029d6f7655c9a4157ecfd6ac1350b4a250a9f30ca +size 200258 diff --git a/.cursor/rules/roblox/assets/art/resources/Body-Scale-Rthro-Normal.png b/.cursor/rules/roblox/assets/art/resources/Body-Scale-Rthro-Normal.png new file mode 100644 index 00000000..3e2a8aa2 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/resources/Body-Scale-Rthro-Normal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5519b9a56b6076f4dc33a33fb06cbf7fa9797c4b87aef929a45fe1f10aeaf954 +size 185724 diff --git a/.cursor/rules/roblox/assets/art/resources/Body-Scale-Rthro-Slender.png b/.cursor/rules/roblox/assets/art/resources/Body-Scale-Rthro-Slender.png new file mode 100644 index 00000000..cdc721bd --- /dev/null +++ b/.cursor/rules/roblox/assets/art/resources/Body-Scale-Rthro-Slender.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd88bc94d812723f429a43ad7c0085c22966b4280674262c22b77a4297f63438 +size 156209 diff --git a/.cursor/rules/roblox/assets/art/resources/Clothing-Cage-Resource.png b/.cursor/rules/roblox/assets/art/resources/Clothing-Cage-Resource.png new file mode 100644 index 00000000..72c1d270 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/resources/Clothing-Cage-Resource.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e07addf3180d4edfcd56914a0cf989b20a746675c9b1447ed1ccbaa6c89f260 +size 156970 diff --git a/.cursor/rules/roblox/assets/art/resources/Creature-Resource.png b/.cursor/rules/roblox/assets/art/resources/Creature-Resource.png new file mode 100644 index 00000000..8bcf6aa6 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/resources/Creature-Resource.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f8ba540a84cc6e959b5c228d7693fdc3d3650afd7d220bee7fa0d985735ee69 +size 431153 diff --git a/.cursor/rules/roblox/assets/art/resources/Fish-Person-Resource.png b/.cursor/rules/roblox/assets/art/resources/Fish-Person-Resource.png new file mode 100644 index 00000000..543243ac --- /dev/null +++ b/.cursor/rules/roblox/assets/art/resources/Fish-Person-Resource.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7de6d4430ecfff0184db0615cd071ab319fa902dfb5be5374951d81a495510df +size 292928 diff --git a/.cursor/rules/roblox/assets/art/resources/Goblin-Resource.png b/.cursor/rules/roblox/assets/art/resources/Goblin-Resource.png new file mode 100644 index 00000000..c8389689 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/resources/Goblin-Resource.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8dfd8df2a94de5631652d0dea9bad2a2569c7ea41958e6b11900fdba91019979 +size 454695 diff --git a/.cursor/rules/roblox/assets/art/resources/Lola-Resource.png b/.cursor/rules/roblox/assets/art/resources/Lola-Resource.png new file mode 100644 index 00000000..3e32b5f7 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/resources/Lola-Resource.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4b6af836df72f171baa802048678f53a2bfafefe1a86186969840d0b769b6ef +size 254110 diff --git a/.cursor/rules/roblox/assets/art/resources/Rig-And-Attachments-Resource.png b/.cursor/rules/roblox/assets/art/resources/Rig-And-Attachments-Resource.png new file mode 100644 index 00000000..15cd91b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/resources/Rig-And-Attachments-Resource.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c25402f23e333a58baa7ddc87b4a65848a0b4197c9a5b9f32bc272b519eee9c0 +size 99674 diff --git a/.cursor/rules/roblox/assets/art/resources/Shoebot-Resource.png b/.cursor/rules/roblox/assets/art/resources/Shoebot-Resource.png new file mode 100644 index 00000000..63742c76 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/resources/Shoebot-Resource.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f78f3d48248c4595400d0f4df29a90c539847beb52ddee3f10a0c370d3d6b8e +size 196244 diff --git a/.cursor/rules/roblox/assets/art/resources/StylizedMale-Preview.png b/.cursor/rules/roblox/assets/art/resources/StylizedMale-Preview.png new file mode 100644 index 00000000..801b128a --- /dev/null +++ b/.cursor/rules/roblox/assets/art/resources/StylizedMale-Preview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8efd96e4013a4c1be286adad258b5e148038a279c79d5efdc91874e0b4e70921 +size 464878 diff --git a/.cursor/rules/roblox/assets/art/resources/Tree-Resource.png b/.cursor/rules/roblox/assets/art/resources/Tree-Resource.png new file mode 100644 index 00000000..3a1f67c5 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/resources/Tree-Resource.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f49a2d70f39ae05553ad9b381a7cd9fa955819512581b38135b883a2afe0324 +size 811397 diff --git a/.cursor/rules/roblox/assets/art/resources/Tshirt-Resource.png b/.cursor/rules/roblox/assets/art/resources/Tshirt-Resource.png new file mode 100644 index 00000000..6f8bad93 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/resources/Tshirt-Resource.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e90ff93674b862cbc087bed303b415ebcba42caeb6461d200485b39cce504ce +size 241379 diff --git a/.cursor/rules/roblox/assets/art/staff-articles/PBR-Textures-Substance-Painter.zip b/.cursor/rules/roblox/assets/art/staff-articles/PBR-Textures-Substance-Painter.zip new file mode 100644 index 00000000..0a108cef --- /dev/null +++ b/.cursor/rules/roblox/assets/art/staff-articles/PBR-Textures-Substance-Painter.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e14cc82bccd8d72a18672f1259652543ceb8b220b2ab90b39fab7283f8ec5354 +size 14836679 diff --git a/.cursor/rules/roblox/assets/art/staff-articles/PBR-Textures-Substance-Sampler.zip b/.cursor/rules/roblox/assets/art/staff-articles/PBR-Textures-Substance-Sampler.zip new file mode 100644 index 00000000..f4d05920 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/staff-articles/PBR-Textures-Substance-Sampler.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c87137a3cb889be45e695b6d99a17c9ddfa31b359a281e4b70fc0558f6aab4e +size 44628112 diff --git a/.cursor/rules/roblox/assets/art/staff-articles/Rock-Sculpting-References.zip b/.cursor/rules/roblox/assets/art/staff-articles/Rock-Sculpting-References.zip new file mode 100644 index 00000000..7ba721f5 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/staff-articles/Rock-Sculpting-References.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9995cb0675f7b1959fad2e9b3da8b6784d057be7ff29d57d7a768b1884356905 +size 652655684 diff --git a/.cursor/rules/roblox/assets/art/staff-articles/Tileable_Textures_Photoshop_Sampler.zip b/.cursor/rules/roblox/assets/art/staff-articles/Tileable_Textures_Photoshop_Sampler.zip new file mode 100644 index 00000000..c7755788 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/staff-articles/Tileable_Textures_Photoshop_Sampler.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48c8038f66885ba9ae98b8e0f1e680b7ff30ea525ad4addb1ed1f448432daae0 +size 42076245 diff --git a/.cursor/rules/roblox/assets/art/staff-articles/Transparency_Maps_Substance_Sampler.zip b/.cursor/rules/roblox/assets/art/staff-articles/Transparency_Maps_Substance_Sampler.zip new file mode 100644 index 00000000..ee6c810a --- /dev/null +++ b/.cursor/rules/roblox/assets/art/staff-articles/Transparency_Maps_Substance_Sampler.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3105176fd4c3117b825fe9a6dcbbf589176fbe48d6945beb5dd6b66701783e18 +size 18212395 diff --git a/.cursor/rules/roblox/assets/art/staff-articles/ZBrushProject_Radial_Symmetry.zip b/.cursor/rules/roblox/assets/art/staff-articles/ZBrushProject_Radial_Symmetry.zip new file mode 100644 index 00000000..5aca8588 --- /dev/null +++ b/.cursor/rules/roblox/assets/art/staff-articles/ZBrushProject_Radial_Symmetry.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9571d6dbed24ff604a14c49f78a660c216127705794cf54ceaad3bb08229b02 +size 63486480 diff --git a/.cursor/rules/roblox/assets/assistant/AssistantDocumentationSite.png b/.cursor/rules/roblox/assets/assistant/AssistantDocumentationSite.png new file mode 100644 index 00000000..f61e9aca --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/AssistantDocumentationSite.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bee127cb2ac3b1643dce3ed9d37b70a41b541aa537fb6cb2df7e88a277dfd967 +size 67578 diff --git a/.cursor/rules/roblox/assets/assistant/AssistantStudioExample.png b/.cursor/rules/roblox/assets/assistant/AssistantStudioExample.png new file mode 100644 index 00000000..13e14e12 --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/AssistantStudioExample.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be8fac6a191c3993e4ee334df67ff6c5aea271121b6ba7c7eb3ccacd1b97343a +size 222631 diff --git a/.cursor/rules/roblox/assets/assistant/Documentation-Button.png b/.cursor/rules/roblox/assets/assistant/Documentation-Button.png new file mode 100644 index 00000000..c6bc02af --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/Documentation-Button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8aaa62d56e975b9fb8e2cbbea381e24a9ed4de93fa4d13687538926699fa0644 +size 27990 diff --git a/.cursor/rules/roblox/assets/assistant/Documentation-Options.png b/.cursor/rules/roblox/assets/assistant/Documentation-Options.png new file mode 100644 index 00000000..af182324 --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/Documentation-Options.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68716941e6e81233ace5931dab17f3aee37e9e8fe30c5b275492c9da1c10a941 +size 16846 diff --git a/.cursor/rules/roblox/assets/assistant/Documentation-Prompts.png b/.cursor/rules/roblox/assets/assistant/Documentation-Prompts.png new file mode 100644 index 00000000..15209600 --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/Documentation-Prompts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3ed9bf3ede8cd6dc5581f390050fe9734299779992d069d4215ec8b83ae360d +size 68106 diff --git a/.cursor/rules/roblox/assets/assistant/Studio-Explain-Code.png b/.cursor/rules/roblox/assets/assistant/Studio-Explain-Code.png new file mode 100644 index 00000000..524ad2c0 --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/Studio-Explain-Code.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1e6f704fbcf6120c75ec57a15426dde4245ed6d32775fbce040599f5464ee9a +size 76433 diff --git a/.cursor/rules/roblox/assets/assistant/Studio-General-UI.png b/.cursor/rules/roblox/assets/assistant/Studio-General-UI.png new file mode 100644 index 00000000..0672a478 --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/Studio-General-UI.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f579f591a223b7ca48d100a3ada1af53cb4303fc87e41af7916d5816dbd883c3 +size 59435 diff --git a/.cursor/rules/roblox/assets/assistant/Studio-Generated-Green-Dragon.jpg b/.cursor/rules/roblox/assets/assistant/Studio-Generated-Green-Dragon.jpg new file mode 100644 index 00000000..4110759e --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/Studio-Generated-Green-Dragon.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f01c86a2ff5906ebd7c911a7ff9dd560176a5fe3ce76935da01c6db0460c1d9 +size 79080 diff --git a/.cursor/rules/roblox/assets/assistant/Studio-Object-Insert.png b/.cursor/rules/roblox/assets/assistant/Studio-Object-Insert.png new file mode 100644 index 00000000..585d2e74 --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/Studio-Object-Insert.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8afde417ac50751d819ce7d00d1bbd18eb9407b50d156e5de06599d2a162e1e3 +size 43137 diff --git a/.cursor/rules/roblox/assets/assistant/Studio-Quick-Styling-Material.png b/.cursor/rules/roblox/assets/assistant/Studio-Quick-Styling-Material.png new file mode 100644 index 00000000..74c84d07 --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/Studio-Quick-Styling-Material.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:282c2eb4318e2a76052e7facddd18d9a5fca5a6ac98309b0548ecba2897144ea +size 449968 diff --git a/.cursor/rules/roblox/assets/assistant/Studio-Script-Insert.png b/.cursor/rules/roblox/assets/assistant/Studio-Script-Insert.png new file mode 100644 index 00000000..4d3a2d08 --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/Studio-Script-Insert.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f88cb8225d09aead9266a5739311318619e65ec59b1d8c7ce067d330b4f0a35 +size 106173 diff --git a/.cursor/rules/roblox/assets/assistant/prompt1.webm b/.cursor/rules/roblox/assets/assistant/prompt1.webm new file mode 100644 index 00000000..b3634500 --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/prompt1.webm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:322ba009092bfe8c7472c7c651a261e033ae4a8de0f9a78580589c91c4f0f61d +size 248299 diff --git a/.cursor/rules/roblox/assets/assistant/prompt10.png b/.cursor/rules/roblox/assets/assistant/prompt10.png new file mode 100644 index 00000000..29e4a3c4 --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/prompt10.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6cf04456b9e2db488548e6b0212b278de54c7dd6d4d41d1db61ee598a42fa06b +size 1094906 diff --git a/.cursor/rules/roblox/assets/assistant/prompt11.webm b/.cursor/rules/roblox/assets/assistant/prompt11.webm new file mode 100644 index 00000000..8833e84c --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/prompt11.webm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d04a03627f33a54e84f949388b69b8e598b66f47cbb6214457b7857c40e26568 +size 238920 diff --git a/.cursor/rules/roblox/assets/assistant/prompt12.png b/.cursor/rules/roblox/assets/assistant/prompt12.png new file mode 100644 index 00000000..e4da73ff --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/prompt12.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:084c06c3f82a063f8f96651fb359e7cac9cb68fe97505a64dc04d893f12c7d57 +size 1249581 diff --git a/.cursor/rules/roblox/assets/assistant/prompt13.webm b/.cursor/rules/roblox/assets/assistant/prompt13.webm new file mode 100644 index 00000000..7ed57ff3 --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/prompt13.webm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7fabbb334cd45cbed247345f813588bc19f3359e659bf4528f89e15bedee6f3 +size 134915 diff --git a/.cursor/rules/roblox/assets/assistant/prompt14.webm b/.cursor/rules/roblox/assets/assistant/prompt14.webm new file mode 100644 index 00000000..014adcca --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/prompt14.webm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa5672768c836f46bda6574d81a51f9ea2ca1dba5594e7d8387f6a5318583be0 +size 538210 diff --git a/.cursor/rules/roblox/assets/assistant/prompt15.webm b/.cursor/rules/roblox/assets/assistant/prompt15.webm new file mode 100644 index 00000000..6215af0e --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/prompt15.webm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a83607f54a864e6bdc49a523ddd4050abd6d768fa63bf94470dbfb12d4cf463f +size 1144113 diff --git a/.cursor/rules/roblox/assets/assistant/prompt16.webm b/.cursor/rules/roblox/assets/assistant/prompt16.webm new file mode 100644 index 00000000..65e1fafc --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/prompt16.webm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1684785644843d1b252d02d794f9f61bc9d9310ef622bc508198a0418473cf58 +size 1136379 diff --git a/.cursor/rules/roblox/assets/assistant/prompt17.webm b/.cursor/rules/roblox/assets/assistant/prompt17.webm new file mode 100644 index 00000000..3f03bccb --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/prompt17.webm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d79ed8ad84cbd02105eaeaadaf2c281b89a62b05b7c5cf521c64aa0fb20d197 +size 714254 diff --git a/.cursor/rules/roblox/assets/assistant/prompt18.webm b/.cursor/rules/roblox/assets/assistant/prompt18.webm new file mode 100644 index 00000000..6cf514a9 --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/prompt18.webm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:365e802bb0c549fa982d14957e4c9db32c715905c71f2a6d268250f71deaa807 +size 745539 diff --git a/.cursor/rules/roblox/assets/assistant/prompt19.webm b/.cursor/rules/roblox/assets/assistant/prompt19.webm new file mode 100644 index 00000000..d59daa36 --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/prompt19.webm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ee6d43394cd302b74f28df85d2f880cbb7ffdcdddae0e4c8faead9fb01a0855 +size 812117 diff --git a/.cursor/rules/roblox/assets/assistant/prompt2.webm b/.cursor/rules/roblox/assets/assistant/prompt2.webm new file mode 100644 index 00000000..dd9f5bc2 --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/prompt2.webm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35f3b2cd3574946d5429bbf9881aafb24d1f552293c170016b734286a3d4b839 +size 252338 diff --git a/.cursor/rules/roblox/assets/assistant/prompt20.webm b/.cursor/rules/roblox/assets/assistant/prompt20.webm new file mode 100644 index 00000000..cfd94c9e --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/prompt20.webm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a139043f27ebc4283fd2fe98167ad366e60dc48e4f694b291ed2f13e68fe66b +size 863888 diff --git a/.cursor/rules/roblox/assets/assistant/prompt21.webm b/.cursor/rules/roblox/assets/assistant/prompt21.webm new file mode 100644 index 00000000..18184c81 --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/prompt21.webm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a84b6f207212f4e6cf03c88c6d364b7268d366e673dec33388d33225bcb2b703 +size 119984 diff --git a/.cursor/rules/roblox/assets/assistant/prompt3.webm b/.cursor/rules/roblox/assets/assistant/prompt3.webm new file mode 100644 index 00000000..6ea8cfcc --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/prompt3.webm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc8fd6c2a8c6b8c339fc7f1804bf7554592b6e1f3da917842811f7af4bc9d554 +size 126842 diff --git a/.cursor/rules/roblox/assets/assistant/prompt4.webm b/.cursor/rules/roblox/assets/assistant/prompt4.webm new file mode 100644 index 00000000..3e976631 --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/prompt4.webm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21c7fb430ff1f3a889920db20feb0a18b5af6ec137c780e7dc6f2f5913893ee3 +size 475285 diff --git a/.cursor/rules/roblox/assets/assistant/prompt5.webm b/.cursor/rules/roblox/assets/assistant/prompt5.webm new file mode 100644 index 00000000..5d774e94 --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/prompt5.webm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00cfd10bc39f9900ce4f6dd4deba711240b5660a63d4145ab193ef5eb5219fd9 +size 391786 diff --git a/.cursor/rules/roblox/assets/assistant/prompt6.png b/.cursor/rules/roblox/assets/assistant/prompt6.png new file mode 100644 index 00000000..77597be4 --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/prompt6.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df5604bf9b7e18443104624eea4658ac54d7907a263ec816bff3c2cc6f9e8267 +size 1576822 diff --git a/.cursor/rules/roblox/assets/assistant/prompt7.webm b/.cursor/rules/roblox/assets/assistant/prompt7.webm new file mode 100644 index 00000000..bbe8861f --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/prompt7.webm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd2df0a0f538c9f388b03d181c085ee964b11ceb015b1c7e7e7c1878ff20739d +size 163491 diff --git a/.cursor/rules/roblox/assets/assistant/prompt8.webm b/.cursor/rules/roblox/assets/assistant/prompt8.webm new file mode 100644 index 00000000..6911b1e5 --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/prompt8.webm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8350f989719e08f16450bb0588e4cce5d67886cfeb2f42f7eae698eafa3d83f6 +size 424473 diff --git a/.cursor/rules/roblox/assets/assistant/prompt9.webm b/.cursor/rules/roblox/assets/assistant/prompt9.webm new file mode 100644 index 00000000..24e493da --- /dev/null +++ b/.cursor/rules/roblox/assets/assistant/prompt9.webm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d831ea75a7e0792d4b30278ba13ba82abe3227222b1901b6af071a82da87c6ec +size 2423870 diff --git a/.cursor/rules/roblox/assets/audio/audio-objects/2D-Audio-Diagram.png b/.cursor/rules/roblox/assets/audio/audio-objects/2D-Audio-Diagram.png new file mode 100644 index 00000000..129398b6 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/audio-objects/2D-Audio-Diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:370094d2c9ee08c4c5504e86967d0ab6d84f13abdaabd8f53ae7b338a3ae0fbb +size 84414 diff --git a/.cursor/rules/roblox/assets/audio/audio-objects/3D-Audio-Diagram.png b/.cursor/rules/roblox/assets/audio/audio-objects/3D-Audio-Diagram.png new file mode 100644 index 00000000..77f32ab6 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/audio-objects/3D-Audio-Diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85f066b5fdeae77446b5504d5bf081f9740be86c6f3c9376da746adf06076410 +size 235715 diff --git a/.cursor/rules/roblox/assets/audio/audio-objects/Australian-Female-Voice.wav b/.cursor/rules/roblox/assets/audio/audio-objects/Australian-Female-Voice.wav new file mode 100644 index 00000000..c8ef12df --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/audio-objects/Australian-Female-Voice.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b6c59898c7b7d9090f89108feece61b5c0f8a144d9f0c4b71683682e6cea7cc +size 265644 diff --git a/.cursor/rules/roblox/assets/audio/audio-objects/Australian-Male-Voice.wav b/.cursor/rules/roblox/assets/audio/audio-objects/Australian-Male-Voice.wav new file mode 100644 index 00000000..4791bb74 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/audio-objects/Australian-Male-Voice.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ad7e5de1f1ae7c1418cb11b0028b7ffc50f310d740b47287604984f10412731 +size 265644 diff --git a/.cursor/rules/roblox/assets/audio/audio-objects/British-Female-Voice.wav b/.cursor/rules/roblox/assets/audio/audio-objects/British-Female-Voice.wav new file mode 100644 index 00000000..b538a67a --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/audio-objects/British-Female-Voice.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ee76211162dfe310cea658c47c6b9d329a51b7c30b57659c8cd6cd7fce8eb4f +size 220844 diff --git a/.cursor/rules/roblox/assets/audio/audio-objects/British-Male-Voice.wav b/.cursor/rules/roblox/assets/audio/audio-objects/British-Male-Voice.wav new file mode 100644 index 00000000..a01b9eca --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/audio-objects/British-Male-Voice.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3bd337c03da99f603112a688269aab2482eea26b27321fba2efd834de5aef749 +size 220844 diff --git a/.cursor/rules/roblox/assets/audio/audio-objects/DistanceAttenuation.png b/.cursor/rules/roblox/assets/audio/audio-objects/DistanceAttenuation.png new file mode 100644 index 00000000..0a8930c2 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/audio-objects/DistanceAttenuation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:88df06814257c607dcb62a6d238335218821331d405d6be3c1f23cf5bd9f65b9 +size 60086 diff --git a/.cursor/rules/roblox/assets/audio/audio-objects/Retro-Voice-1.wav b/.cursor/rules/roblox/assets/audio/audio-objects/Retro-Voice-1.wav new file mode 100644 index 00000000..cc5dbd79 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/audio-objects/Retro-Voice-1.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5e0b12ed6d6ff80adb672898a34e4e008cb82cc062ee4332d8d9072590911a5 +size 140890 diff --git a/.cursor/rules/roblox/assets/audio/audio-objects/Retro-Voice-2.wav b/.cursor/rules/roblox/assets/audio/audio-objects/Retro-Voice-2.wav new file mode 100644 index 00000000..c831b096 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/audio-objects/Retro-Voice-2.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aebb39e3b1f2df8f14f26f879afc69c586330871c966ca24e943b82c0753b520 +size 141396 diff --git a/.cursor/rules/roblox/assets/audio/audio-objects/STT-Audio-Diagram.png b/.cursor/rules/roblox/assets/audio/audio-objects/STT-Audio-Diagram.png new file mode 100644 index 00000000..e9fe5196 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/audio-objects/STT-Audio-Diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7cfe07ebce7e15772fe98cc675172233b09b9ada5b49374ef39218731f939bf2 +size 108188 diff --git a/.cursor/rules/roblox/assets/audio/audio-objects/TTS2D-Audio-Diagram.png b/.cursor/rules/roblox/assets/audio/audio-objects/TTS2D-Audio-Diagram.png new file mode 100644 index 00000000..c264e30a --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/audio-objects/TTS2D-Audio-Diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5863d30db1eb3446f75de0ede774e48a3ba7be9ad74c43656798cb57640d5d4a +size 480609 diff --git a/.cursor/rules/roblox/assets/audio/audio-objects/TTS3D-Audio-Diagram.png b/.cursor/rules/roblox/assets/audio/audio-objects/TTS3D-Audio-Diagram.png new file mode 100644 index 00000000..297c26c7 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/audio-objects/TTS3D-Audio-Diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:adca14ca02f4b091eafca552457a8e1e112f0bc720d7066d06359d759fcc2f13 +size 536767 diff --git a/.cursor/rules/roblox/assets/audio/audio-objects/US-Female-Voice-1.wav b/.cursor/rules/roblox/assets/audio/audio-objects/US-Female-Voice-1.wav new file mode 100644 index 00000000..1e4e5717 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/audio-objects/US-Female-Voice-1.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56a76393c0b19351b0f8b688652b6095cb84b2213e5b8d90e125721b2a2bfb8d +size 201644 diff --git a/.cursor/rules/roblox/assets/audio/audio-objects/US-Female-Voice-2.wav b/.cursor/rules/roblox/assets/audio/audio-objects/US-Female-Voice-2.wav new file mode 100644 index 00000000..b3e77e94 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/audio-objects/US-Female-Voice-2.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6d434149dbceea91d5cce6864ce40554ce11c12ba18b33d033192de8b32d801 +size 264078 diff --git a/.cursor/rules/roblox/assets/audio/audio-objects/US-Male-Voice-1.wav b/.cursor/rules/roblox/assets/audio/audio-objects/US-Male-Voice-1.wav new file mode 100644 index 00000000..8a2b1029 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/audio-objects/US-Male-Voice-1.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53db9049f1e4b860100f0b7821ce0abdc8bd50fac307dfbb7f609a227bcc9dcf +size 201644 diff --git a/.cursor/rules/roblox/assets/audio/audio-objects/US-Male-Voice-2.wav b/.cursor/rules/roblox/assets/audio/audio-objects/US-Male-Voice-2.wav new file mode 100644 index 00000000..1cd8e986 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/audio-objects/US-Male-Voice-2.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff70b05255636a00875a98dcf554dac6d4133fc142ec0b0e1a69d7fc9f30801e +size 262478 diff --git a/.cursor/rules/roblox/assets/audio/dynamic-effects/chorus.mp3 b/.cursor/rules/roblox/assets/audio/dynamic-effects/chorus.mp3 new file mode 100644 index 00000000..c0addbe2 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/dynamic-effects/chorus.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:537b6e9663651a12b5a0f87586ffdf9f8407a359ca4d195df5090a1801394c0a +size 301886 diff --git a/.cursor/rules/roblox/assets/audio/dynamic-effects/compressor.mp3 b/.cursor/rules/roblox/assets/audio/dynamic-effects/compressor.mp3 new file mode 100644 index 00000000..0bdb68de --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/dynamic-effects/compressor.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:070cf1b1e2dff7df32ea0e875fb8c7d2acc3a78b1821b62ddd78d5dc6b60defa +size 342608 diff --git a/.cursor/rules/roblox/assets/audio/dynamic-effects/distortion.mp3 b/.cursor/rules/roblox/assets/audio/dynamic-effects/distortion.mp3 new file mode 100644 index 00000000..c3b819a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/dynamic-effects/distortion.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f52fdbac80c9c2e9e05d0638b5a24b5594ee6eb94a7795086616b2513587807b +size 304934 diff --git a/.cursor/rules/roblox/assets/audio/dynamic-effects/echo.mp3 b/.cursor/rules/roblox/assets/audio/dynamic-effects/echo.mp3 new file mode 100644 index 00000000..77623437 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/dynamic-effects/echo.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea943d7fd1709bd07d109d6392c6cc66b3644e6e2b5d411bb2b9b1d6859e9607 +size 542240 diff --git a/.cursor/rules/roblox/assets/audio/dynamic-effects/equalizer.mp3 b/.cursor/rules/roblox/assets/audio/dynamic-effects/equalizer.mp3 new file mode 100644 index 00000000..71bbc867 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/dynamic-effects/equalizer.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f65b30da3406e6b6bc6c015098a57875b09506689a0f38a5a1ce7a97932248a +size 405386 diff --git a/.cursor/rules/roblox/assets/audio/dynamic-effects/flange.mp3 b/.cursor/rules/roblox/assets/audio/dynamic-effects/flange.mp3 new file mode 100644 index 00000000..2427784b --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/dynamic-effects/flange.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d11ec7bb3bf67fc7a3a568920cb659ff3fa4bcbb7ea429a35ee321be7187738a +size 283766 diff --git a/.cursor/rules/roblox/assets/audio/dynamic-effects/no-effect.mp3 b/.cursor/rules/roblox/assets/audio/dynamic-effects/no-effect.mp3 new file mode 100644 index 00000000..9013d921 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/dynamic-effects/no-effect.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1edd53eaeccca634f8e1062a090899ac6e3525e69b17f104860e14c75e7be908 +size 354140 diff --git a/.cursor/rules/roblox/assets/audio/dynamic-effects/pitch-shift.mp3 b/.cursor/rules/roblox/assets/audio/dynamic-effects/pitch-shift.mp3 new file mode 100644 index 00000000..4c2807a0 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/dynamic-effects/pitch-shift.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7738297ee826bd4deeface6f362dd84d7a19348ae6eb4ef3052af565d80dd2a3 +size 271418 diff --git a/.cursor/rules/roblox/assets/audio/dynamic-effects/reverb.mp3 b/.cursor/rules/roblox/assets/audio/dynamic-effects/reverb.mp3 new file mode 100644 index 00000000..c52e04dd --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/dynamic-effects/reverb.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0bade3076eb844e19f35eeb9913aa32cd4ad028650a074790ee6211fa0a74371 +size 1030826 diff --git a/.cursor/rules/roblox/assets/audio/dynamic-effects/tremolo.mp3 b/.cursor/rules/roblox/assets/audio/dynamic-effects/tremolo.mp3 new file mode 100644 index 00000000..f279602f --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/dynamic-effects/tremolo.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05f4001ab3b667e74ab64b04b436319a5351fb35956646fe4fdd90cfbeb3c626 +size 175376 diff --git a/.cursor/rules/roblox/assets/audio/effects/AudioEffect-Layered.png b/.cursor/rules/roblox/assets/audio/effects/AudioEffect-Layered.png new file mode 100644 index 00000000..e72cd5b2 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/effects/AudioEffect-Layered.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e060aa27e4735dd26403b8ba39c9dbb4d8368516371792de3e983f16d18ed32 +size 57401 diff --git a/.cursor/rules/roblox/assets/audio/effects/AudioEffect-Multiple.png b/.cursor/rules/roblox/assets/audio/effects/AudioEffect-Multiple.png new file mode 100644 index 00000000..2a82a7b1 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/effects/AudioEffect-Multiple.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ddfa13cf2f32af0549ef6ea850ee0f65e81890bae905c91fd5d505ab76eaf103 +size 109931 diff --git a/.cursor/rules/roblox/assets/audio/effects/AudioEffect-Single.png b/.cursor/rules/roblox/assets/audio/effects/AudioEffect-Single.png new file mode 100644 index 00000000..d414bf6d --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/effects/AudioEffect-Single.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c129e1056904b8ff97859f73a1d6a9424b3c0ec3c700fe38e0c6bf46b2235567 +size 242835 diff --git a/.cursor/rules/roblox/assets/audio/sound-groups/Dynamic-Effect-Properties.png b/.cursor/rules/roblox/assets/audio/sound-groups/Dynamic-Effect-Properties.png new file mode 100644 index 00000000..f9fdd149 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/sound-groups/Dynamic-Effect-Properties.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb401fa4673e09c9cdb110e2f137369ff64c4fb50e2c20c238164a14d7e43c4c +size 18749 diff --git a/.cursor/rules/roblox/assets/audio/sound-groups/Mix-Tree.png b/.cursor/rules/roblox/assets/audio/sound-groups/Mix-Tree.png new file mode 100644 index 00000000..a6285b25 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/sound-groups/Mix-Tree.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8a7333bba461399caadd018b756c8ceb0f5cf82f88c040800c6aac8ae50334f +size 52715 diff --git a/.cursor/rules/roblox/assets/audio/sound-objects/CarHorn_DoubleSpeed.mp3 b/.cursor/rules/roblox/assets/audio/sound-objects/CarHorn_DoubleSpeed.mp3 new file mode 100644 index 00000000..f90f5d19 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/sound-objects/CarHorn_DoubleSpeed.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5bf23ecdaa18a9acfa1fbbb763f01ecfe4b71ac526b17305c920c7e59590514c +size 30720 diff --git a/.cursor/rules/roblox/assets/audio/sound-objects/CarHorn_HalfSpeed.mp3 b/.cursor/rules/roblox/assets/audio/sound-objects/CarHorn_HalfSpeed.mp3 new file mode 100644 index 00000000..5a538675 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/sound-objects/CarHorn_HalfSpeed.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea0a7c78207eea4e0e8d05c35ab4c6f6c991802ecea1d6dd89c4f67360916abb +size 244800 diff --git a/.cursor/rules/roblox/assets/audio/sound-objects/CarHorn_NormalSpeed.mp3 b/.cursor/rules/roblox/assets/audio/sound-objects/CarHorn_NormalSpeed.mp3 new file mode 100644 index 00000000..0758fee5 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/sound-objects/CarHorn_NormalSpeed.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f03318975fa8f6014358dd638d303b189827ffa4d338b669610232dade3472e +size 61440 diff --git a/.cursor/rules/roblox/assets/audio/sound-objects/RollOffMode-Chart.png b/.cursor/rules/roblox/assets/audio/sound-objects/RollOffMode-Chart.png new file mode 100644 index 00000000..14d068e4 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/sound-objects/RollOffMode-Chart.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0f9bd56d30a6f2a6b3f7caac67aff8d038f15074ce5291eb2fb4ac6ae2f0d4b +size 514106 diff --git a/.cursor/rules/roblox/assets/audio/sound-objects/Sound-Point-RollOff.jpg b/.cursor/rules/roblox/assets/audio/sound-objects/Sound-Point-RollOff.jpg new file mode 100644 index 00000000..b42808d9 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/sound-objects/Sound-Point-RollOff.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd752fbf3cad85320da79b054ebacda06345035502b9641d4adb0a629c923885 +size 146918 diff --git a/.cursor/rules/roblox/assets/audio/sound-objects/Sound-Point-Source.mp4 b/.cursor/rules/roblox/assets/audio/sound-objects/Sound-Point-Source.mp4 new file mode 100644 index 00000000..b2cd3870 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/sound-objects/Sound-Point-Source.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fdda5cd70f9c3ce536129dd8743b0fca8befbd27983103d883362ff5793c6cd +size 3054670 diff --git a/.cursor/rules/roblox/assets/audio/sound-objects/Sound-Volumetric-RollOff.jpg b/.cursor/rules/roblox/assets/audio/sound-objects/Sound-Volumetric-RollOff.jpg new file mode 100644 index 00000000..2b49f084 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/sound-objects/Sound-Volumetric-RollOff.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47edfb4bdab0b6423029d1856622e0249f0c64d058cdc0531ce8c747f1328fac +size 162361 diff --git a/.cursor/rules/roblox/assets/audio/sound-objects/Volumetric-Demo.mp4 b/.cursor/rules/roblox/assets/audio/sound-objects/Volumetric-Demo.mp4 new file mode 100644 index 00000000..af435103 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/sound-objects/Volumetric-Demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbc95a61d60f989e3e2c331f65f0ca0eef5b3150ec7c55e49e7e128f1690bd52 +size 11941881 diff --git a/.cursor/rules/roblox/assets/audio/sound-objects/Volumetric-Sound-Diagram.jpg b/.cursor/rules/roblox/assets/audio/sound-objects/Volumetric-Sound-Diagram.jpg new file mode 100644 index 00000000..9de44427 --- /dev/null +++ b/.cursor/rules/roblox/assets/audio/sound-objects/Volumetric-Sound-Diagram.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39b17fb53480d24c3b992530be57bd28c2f0b721738f010a2cf9fd6a7928cc7a +size 197255 diff --git a/.cursor/rules/roblox/assets/avatar/AvatarSample.png b/.cursor/rules/roblox/assets/avatar/AvatarSample.png new file mode 100644 index 00000000..f6c1b260 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/AvatarSample.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e14fd75cb84bbdfbf68cb6bae9885cce16f975f304039150ba9bbfb855b7ef55 +size 472730 diff --git a/.cursor/rules/roblox/assets/avatar/adaptive-animation/Assign-Joints-A.png b/.cursor/rules/roblox/assets/avatar/adaptive-animation/Assign-Joints-A.png new file mode 100644 index 00000000..d53a9dbb --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/adaptive-animation/Assign-Joints-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83f376b34539209f6dffadadbdd296a246bc3d351453c910bfb7cab0d0b8ad9b +size 589122 diff --git a/.cursor/rules/roblox/assets/avatar/adaptive-animation/Assign-Joints-B.png b/.cursor/rules/roblox/assets/avatar/adaptive-animation/Assign-Joints-B.png new file mode 100644 index 00000000..3284004c --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/adaptive-animation/Assign-Joints-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3a6e53769ec990d673352ba47378e1e15ed5ddf7b0540b4d2736c19ff26ed56 +size 580159 diff --git a/.cursor/rules/roblox/assets/avatar/adaptive-animation/HRD-Select.png b/.cursor/rules/roblox/assets/avatar/adaptive-animation/HRD-Select.png new file mode 100644 index 00000000..88cc9278 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/adaptive-animation/HRD-Select.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dac751ee5d4cf3cc1721b4bc3efb50c1a8aaac99e3e9ce0c1c14e9e52d270014 +size 525842 diff --git a/.cursor/rules/roblox/assets/avatar/adaptive-animation/Import-Custom-Humanoid.png b/.cursor/rules/roblox/assets/avatar/adaptive-animation/Import-Custom-Humanoid.png new file mode 100644 index 00000000..d314e8c8 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/adaptive-animation/Import-Custom-Humanoid.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a901369e845d10a043d1e4e6bade10c27d6c2a37aa3af5fb0425569c194f7dae +size 161328 diff --git a/.cursor/rules/roblox/assets/avatar/adaptive-animation/Test-Animation.png b/.cursor/rules/roblox/assets/avatar/adaptive-animation/Test-Animation.png new file mode 100644 index 00000000..e9e55e29 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/adaptive-animation/Test-Animation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8b191eb90854f19327eb236a4b3843acb2998e98370241fe25bbd78d42394f2 +size 519822 diff --git a/.cursor/rules/roblox/assets/avatar/adaptive-animation/Tool-Select.png b/.cursor/rules/roblox/assets/avatar/adaptive-animation/Tool-Select.png new file mode 100644 index 00000000..4c56f328 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/adaptive-animation/Tool-Select.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba5c59fb348a9eace8c8e9449aa26a1f2dc691e3db20578b71f8e4ad4881aedb +size 7414 diff --git a/.cursor/rules/roblox/assets/avatar/adaptive-animation/Toolbar.png b/.cursor/rules/roblox/assets/avatar/adaptive-animation/Toolbar.png new file mode 100644 index 00000000..7e4fde86 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/adaptive-animation/Toolbar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd38a2c3f720a7a3613d0c232a6673bd491ebc544e05a768cfce757680c9c965 +size 14675 diff --git a/.cursor/rules/roblox/assets/avatar/adaptive-animation/Tpose-Display.png b/.cursor/rules/roblox/assets/avatar/adaptive-animation/Tpose-Display.png new file mode 100644 index 00000000..4c22c070 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/adaptive-animation/Tpose-Display.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a29b4f5dfbe2bdf42247e0684b752b36c9b98dc957099e922b15b4c221f05317 +size 594260 diff --git a/.cursor/rules/roblox/assets/avatar/adaptive-animation/Tpose-Rotation-A.png b/.cursor/rules/roblox/assets/avatar/adaptive-animation/Tpose-Rotation-A.png new file mode 100644 index 00000000..ca2d80af --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/adaptive-animation/Tpose-Rotation-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6bee5e2401927ac33d77813ac107fcc5056c106d60073c0bcaf63c2a1227fdf5 +size 556564 diff --git a/.cursor/rules/roblox/assets/avatar/adaptive-animation/Tpose-Rotation-B.png b/.cursor/rules/roblox/assets/avatar/adaptive-animation/Tpose-Rotation-B.png new file mode 100644 index 00000000..50ed9f79 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/adaptive-animation/Tpose-Rotation-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1a83a4f1b9567c13516747663d952fd95c4e9c66e43e5814e78c37a71012efa +size 811665 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-editor-service/Avatar-Editor-Access-Items.png b/.cursor/rules/roblox/assets/avatar/avatar-editor-service/Avatar-Editor-Access-Items.png new file mode 100644 index 00000000..2f085fc6 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-editor-service/Avatar-Editor-Access-Items.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fcbb2ab97a33f4f18de5209260b8d7406ba489953c220d1aa8c15d8db1c86272 +size 20720 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-editor-service/Avatar-Editor-Equip-Items.png b/.cursor/rules/roblox/assets/avatar/avatar-editor-service/Avatar-Editor-Equip-Items.png new file mode 100644 index 00000000..2f2122e0 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-editor-service/Avatar-Editor-Equip-Items.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28ad500f0c86b506a952e67d2e101fff3e1198267953d8a84ce4894c27d7b577 +size 139797 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-editor-service/Avatar-Editor-Example.jpg b/.cursor/rules/roblox/assets/avatar/avatar-editor-service/Avatar-Editor-Example.jpg new file mode 100644 index 00000000..4e5e6703 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-editor-service/Avatar-Editor-Example.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:758e3d4b5d52c83968b2e2af01dd8b91fa3f4b36af7d5f301f8c445e5953c196 +size 185810 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-editor-service/Avatar-Editor-Save-Outfit.png b/.cursor/rules/roblox/assets/avatar/avatar-editor-service/Avatar-Editor-Save-Outfit.png new file mode 100644 index 00000000..73c47ac8 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-editor-service/Avatar-Editor-Save-Outfit.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6050cf2aa9efe9702feb6a12d6a56c67eedb200baaa543d580c98cd3aedb9df +size 197361 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-emotes/Animation-Editor-Curve-Animation-Icon.png b/.cursor/rules/roblox/assets/avatar/avatar-emotes/Animation-Editor-Curve-Animation-Icon.png new file mode 100644 index 00000000..162f300c --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-emotes/Animation-Editor-Curve-Animation-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da437fbd30382a1399171f010d477c0d548619e5cc0cd1b498a11af14af8282d +size 12414 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-emotes/Animation-Editor-Curve-Prompt.png b/.cursor/rules/roblox/assets/avatar/avatar-emotes/Animation-Editor-Curve-Prompt.png new file mode 100644 index 00000000..be998a2f --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-emotes/Animation-Editor-Curve-Prompt.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:651507b750fd4b4fc23b55cdc7e62258083f0085acbe57cc38853500a9e5c844 +size 10582 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-emotes/Animation-Editor-Import-From-Roblox.png b/.cursor/rules/roblox/assets/avatar/avatar-emotes/Animation-Editor-Import-From-Roblox.png new file mode 100644 index 00000000..552ee685 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-emotes/Animation-Editor-Import-From-Roblox.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1345982cb3cb0e709773942cd6f8d5ae63c885e4e18d195afba4054fbe0ab1f8 +size 29568 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-emotes/Animation-Editor-Import.png b/.cursor/rules/roblox/assets/avatar/avatar-emotes/Animation-Editor-Import.png new file mode 100644 index 00000000..69b0e8f7 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-emotes/Animation-Editor-Import.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5218fc35a3e1ce423621e34fdf10832fef5373014e15d44722dc7fca40f28896 +size 23997 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-emotes/Animation-Editor-Publish.png b/.cursor/rules/roblox/assets/avatar/avatar-emotes/Animation-Editor-Publish.png new file mode 100644 index 00000000..59aa4829 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-emotes/Animation-Editor-Publish.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74fc9e084a52cd9da15a84aea7fc4bbb574514feb8d28de2dcd502ecf77241af +size 42611 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-emotes/Animation-Explorer.png b/.cursor/rules/roblox/assets/avatar/avatar-emotes/Animation-Explorer.png new file mode 100644 index 00000000..c119ceff --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-emotes/Animation-Explorer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c94812859da219b52b093daf40233d6d32829c3284d55b8a60e531863e87709 +size 13843 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-emotes/Animation-Properties.png b/.cursor/rules/roblox/assets/avatar/avatar-emotes/Animation-Properties.png new file mode 100644 index 00000000..5f3120f9 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-emotes/Animation-Properties.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d28796f70b23670b5837a8d98184ebc5daf9f158c15f79ad5ee8ca1662f9d80c +size 15273 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-emotes/Avatar-Emotes.mp4 b/.cursor/rules/roblox/assets/avatar/avatar-emotes/Avatar-Emotes.mp4 new file mode 100644 index 00000000..bb5f7767 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-emotes/Avatar-Emotes.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44302bd3166b9b21d22f2da44f21c2adc8d49279757365c02712489c60ac1856 +size 4945988 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-emotes/Explorer-Upload.png b/.cursor/rules/roblox/assets/avatar/avatar-emotes/Explorer-Upload.png new file mode 100644 index 00000000..39535ded --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-emotes/Explorer-Upload.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c61d8c6a2f52f54d58df00072e1dbdb500a3dcfcbcd6ec4a8dc5f425ee7941d9 +size 41398 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-emotes/Generate-Asset-ID-Success.png b/.cursor/rules/roblox/assets/avatar/avatar-emotes/Generate-Asset-ID-Success.png new file mode 100644 index 00000000..fd3adf88 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-emotes/Generate-Asset-ID-Success.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a762dd1ab328f157916493147c148509a4f887dc76622ba72dcaf972d920b4dc +size 12510 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-iec/Avatar-Creation-Attribution.png b/.cursor/rules/roblox/assets/avatar/avatar-iec/Avatar-Creation-Attribution.png new file mode 100644 index 00000000..ce180441 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-iec/Avatar-Creation-Attribution.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be6eae8ef7d5b4e92a394d85fe55d027519ea93cdcaac648e9178762bea83ee5 +size 50375 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-iec/Avatar-Creation-Confirmation.png b/.cursor/rules/roblox/assets/avatar/avatar-iec/Avatar-Creation-Confirmation.png new file mode 100644 index 00000000..995044e2 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-iec/Avatar-Creation-Confirmation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:145e4a26407231cbd5696af86ddb4d1233e83f64c2aa1570c45ff0980b28c16f +size 32289 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-iec/Avatar-Creation-Format.png b/.cursor/rules/roblox/assets/avatar/avatar-iec/Avatar-Creation-Format.png new file mode 100644 index 00000000..207c922f --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-iec/Avatar-Creation-Format.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7dc66936cb522effa02f4e92d40dc28821b01238a1eea84aea073a593982aced +size 63238 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-iec/Avatar-Creation-Prompt.png b/.cursor/rules/roblox/assets/avatar/avatar-iec/Avatar-Creation-Prompt.png new file mode 100644 index 00000000..8d2c3054 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-iec/Avatar-Creation-Prompt.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2adb4f7bc48a2e574a49d0850243dda63db1fd4ba2fdff15d597c370289e896 +size 203990 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-iec/Avatar-Token-Creation.png b/.cursor/rules/roblox/assets/avatar/avatar-iec/Avatar-Token-Creation.png new file mode 100644 index 00000000..c033188c --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-iec/Avatar-Token-Creation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7956270e36ec45c742ba92ce6d2bffdfed3eca0883a282e7b729af6364df4a13 +size 29875 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-iec/Avatar-Token-Id.png b/.cursor/rules/roblox/assets/avatar/avatar-iec/Avatar-Token-Id.png new file mode 100644 index 00000000..232a4e7b --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-iec/Avatar-Token-Id.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a54c73b894615ac0dbd1a267cf089e652ed60966eb7f70f30f3055a351e1391 +size 38281 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Add-Object.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Add-Object.png new file mode 100644 index 00000000..f9ba8ebd --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Add-Object.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ecfe5fdbe77fcd66b208506427ae588d75b1c86523e05b31bae234f52eda8537 +size 60908 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Assymetry.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Assymetry.png new file mode 100644 index 00000000..9e7182cb --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Assymetry.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c2c107eaea57f20e03546b9f2a192f8ae86bf8181ab8d6ffd6d3962d898b7a5 +size 61473 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Auto-Setup-Scaling.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Auto-Setup-Scaling.png new file mode 100644 index 00000000..20448d64 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Auto-Setup-Scaling.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:543269475d0fb6ea5e61f3363df6ceb33e7fbf2ba038cf8275cd3dac8a2b242e +size 219037 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Auto-Setup-Start.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Auto-Setup-Start.png new file mode 100644 index 00000000..0e810684 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Auto-Setup-Start.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64eb87e96bf1609187f1044894ed096a5596f3240c4ef00bdb23defae3e346bd +size 177270 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Avatar-Setup-Example-A.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Avatar-Setup-Example-A.png new file mode 100644 index 00000000..44a8a171 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Avatar-Setup-Example-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b83d82efca6b9faf2ec912c88a32c91537a4281ac3dd9bdc74e7ac6e4f9bea2 +size 25786 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Avatar-Setup-Example-B.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Avatar-Setup-Example-B.png new file mode 100644 index 00000000..0beab7f2 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Avatar-Setup-Example-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:257058de5e9d29fcaa4f19061744756793b9b97e37c878f67a7f2748e5c610d0 +size 200570 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Cage-Edit-Panel.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Cage-Edit-Panel.png new file mode 100644 index 00000000..3d616c6d --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Cage-Edit-Panel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cfd2fa0907758b1c5d8bfccdbdbef4f7a38e6da18cb473c29a427f4cef4ba42e +size 4664 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Folder-Hierarchy.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Folder-Hierarchy.png new file mode 100644 index 00000000..342875ae --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Folder-Hierarchy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:014556aa38ed8bf1865d59c89fa2ed761b5e0a8b44999e55cf3f504396e16162 +size 81870 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/I-pose.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/I-pose.png new file mode 100644 index 00000000..4797c016 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/I-pose.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:881a954e375abaebabd4b092cc61db73b080053581b0f01d71f423fd8a5e5c06 +size 51394 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Inorganic-Model.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Inorganic-Model.png new file mode 100644 index 00000000..85e72d1a --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Inorganic-Model.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79f257b189736132f1da380e488f87fa356025e1186c3bb9651608ed13fa24ef +size 145396 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Long-Neck.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Long-Neck.png new file mode 100644 index 00000000..27d66193 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Long-Neck.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5faf247e699327e8f1ceff86ec77c880ab3035864dffe1ee94c0e6aa6f7712c8 +size 56684 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Mouthparts-1.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Mouthparts-1.png new file mode 100644 index 00000000..9bd07b03 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Mouthparts-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f731065dd8ff39d8788858c49b6801d98aa8de6950b3f33784834c0311c5a17 +size 1009182 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Mouthparts-2.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Mouthparts-2.png new file mode 100644 index 00000000..886a7480 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Mouthparts-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75be0289c22022c7b630cbc7b6aae666fa464b695928293681e30eeb3c3cbf57 +size 440162 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Mouthparts-3.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Mouthparts-3.png new file mode 100644 index 00000000..08f69094 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Mouthparts-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1dfd7e15672b1ff9c62c5bd82f9b57a5a67faf9662411c582d77557da32a057 +size 184414 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Mouthparts-4.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Mouthparts-4.png new file mode 100644 index 00000000..769f4716 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Mouthparts-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31ebc6b0e7ee740c56a6c020b4c962402b4f58299b1639cfb43c1a5293054644 +size 162912 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/No-Neck.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/No-Neck.png new file mode 100644 index 00000000..21144a3c --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/No-Neck.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09ddf80637cdd276950aaba76485ac3fbc0331cec4c9d3fc0f36c8a5caa4cb55 +size 104719 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Non-Contiguous.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Non-Contiguous.png new file mode 100644 index 00000000..8fa280ee --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Non-Contiguous.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c28ff5ab0a5b67fd8b24953bd8ecb9dcf36bb69d8988333fca8f474e0f614d96 +size 83300 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Non-Humanoid-1.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Non-Humanoid-1.png new file mode 100644 index 00000000..53ad9620 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Non-Humanoid-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:981f0cd787ea9e8f357bbea24d786889463eb32772dcbb76f66d2a10d21d582a +size 65343 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Non-Proportional-Limbs.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Non-Proportional-Limbs.png new file mode 100644 index 00000000..5ce53cb2 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Non-Proportional-Limbs.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:397031749d873a772d0ad7fb92dbe890a59ae4aad03664d646e4218317625a94 +size 73583 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Partial-Inputs-All-Rigged.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Partial-Inputs-All-Rigged.png new file mode 100644 index 00000000..16000397 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Partial-Inputs-All-Rigged.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa017ddceafb4a7022a8e59a2f9002b04d901f247de09bfbfed22c021196392c +size 172750 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Partial-Inputs-Body-Rigged.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Partial-Inputs-Body-Rigged.png new file mode 100644 index 00000000..15b12322 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Partial-Inputs-Body-Rigged.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7691ebe45daef54762db7be84d30417361b7e99f2d4d4be12a69e87498be4e64 +size 172029 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Partial-Inputs-Head-Rigged.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Partial-Inputs-Head-Rigged.png new file mode 100644 index 00000000..a0ac0542 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Partial-Inputs-Head-Rigged.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42cb030aa015fca81f3d3a686d5d46a02ce1312d9b0ad4a0783e3da08981e5c7 +size 171685 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Partial-Inputs-None-Rigged.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Partial-Inputs-None-Rigged.png new file mode 100644 index 00000000..a73feacc --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Partial-Inputs-None-Rigged.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b72279c8aad0aa633bbee6119ec3a0745f462926157190e8a34f69e91a622100 +size 63347 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Skin-Tone-Selector.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Skin-Tone-Selector.png new file mode 100644 index 00000000..752df5ce --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Skin-Tone-Selector.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee95ef84372b82ecf39a6a68c56a0d7f9e73312d5b01f2702799f2540a8fd761 +size 222802 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Supported-Model.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Supported-Model.png new file mode 100644 index 00000000..b73bdd2c --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Supported-Model.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7a3d0a6f25823c10d4b3bd7cc7676abfcb831cc7c3d50616e6dadf5222e4946 +size 65477 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Test-Face-1.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Test-Face-1.png new file mode 100644 index 00000000..73056ac2 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Test-Face-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0446eaa4a19e4da9304c3bac204e3fac60ca45df77f7e877263ecb763ca98ce8 +size 302932 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Test-Face-2.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Test-Face-2.png new file mode 100644 index 00000000..75703b8f --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Test-Face-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e304548cbbbca7fd89ed1ee105232d9adc4d349c01879561710570d483d056c +size 215910 diff --git a/.cursor/rules/roblox/assets/avatar/avatar-setup/Testing-Interface.png b/.cursor/rules/roblox/assets/avatar/avatar-setup/Testing-Interface.png new file mode 100644 index 00000000..b4f6cf71 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/avatar-setup/Testing-Interface.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f42bfd8d79a0c481100693369a33daa8bac59d4792c6a526e546014acc677dac +size 28522 diff --git a/.cursor/rules/roblox/assets/avatar/character-customization/Avatar-Banner.jpg b/.cursor/rules/roblox/assets/avatar/character-customization/Avatar-Banner.jpg new file mode 100644 index 00000000..cfdf2d08 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/character-customization/Avatar-Banner.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc8cd35d552591a5556fe705850a42e5b38a73bca5d165f3ec2be848a7c0baa7 +size 284423 diff --git a/.cursor/rules/roblox/assets/avatar/character-customization/Avatar-Character-Model-Data.png b/.cursor/rules/roblox/assets/avatar/character-customization/Avatar-Character-Model-Data.png new file mode 100644 index 00000000..9964ba6a --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/character-customization/Avatar-Character-Model-Data.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:793eba9605fbc709d2a83d0c1acb917591b89f2e8250487ef0d0c3cf5bb090dc +size 28595 diff --git a/.cursor/rules/roblox/assets/avatar/character-customization/Avatar-In-Editor-Window.jpg b/.cursor/rules/roblox/assets/avatar/character-customization/Avatar-In-Editor-Window.jpg new file mode 100644 index 00000000..11807ce0 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/character-customization/Avatar-In-Editor-Window.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:160cb3d7d1f48f14e83e78b71c57d7153e0d22185b42ee44d865640eeffbdde7 +size 110544 diff --git a/.cursor/rules/roblox/assets/avatar/character-customization/Basic-Character-Model-Data.png b/.cursor/rules/roblox/assets/avatar/character-customization/Basic-Character-Model-Data.png new file mode 100644 index 00000000..2b9133fb --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/character-customization/Basic-Character-Model-Data.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0efd7e66f386822c17f0283d79894a452fe26920da07a14486f31314b5b59222 +size 11162 diff --git a/.cursor/rules/roblox/assets/avatar/character-customization/R15-Example.jpg b/.cursor/rules/roblox/assets/avatar/character-customization/R15-Example.jpg new file mode 100644 index 00000000..b88af7aa --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/character-customization/R15-Example.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7e66dba7c25af44a563079a11dba0f4f75d965172558bdd3200064318d78187 +size 202677 diff --git a/.cursor/rules/roblox/assets/avatar/character-customization/R6-Example.jpg b/.cursor/rules/roblox/assets/avatar/character-customization/R6-Example.jpg new file mode 100644 index 00000000..5b9add21 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/character-customization/R6-Example.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b19cebb0a2d33ffc81260043ad4c9d9107324b33ebd1656ad9882465cc2e477 +size 129330 diff --git a/.cursor/rules/roblox/assets/avatar/context-menu/ACM-Sections-Labeled.png b/.cursor/rules/roblox/assets/avatar/context-menu/ACM-Sections-Labeled.png new file mode 100644 index 00000000..690a50e1 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/context-menu/ACM-Sections-Labeled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ce12284047919ca8869e626150f284f07a4b8d0a2eec83ded634345f3e3a991 +size 86379 diff --git a/.cursor/rules/roblox/assets/avatar/context-menu/ACM-User-Selector.png b/.cursor/rules/roblox/assets/avatar/context-menu/ACM-User-Selector.png new file mode 100644 index 00000000..93bb1af5 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/context-menu/ACM-User-Selector.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6cdc69149242565e98abb873ce3a6a2d22bd37312609817d848ec2cd0ac170d +size 45577 diff --git a/.cursor/rules/roblox/assets/avatar/context-menu/Custom-ACM.png b/.cursor/rules/roblox/assets/avatar/context-menu/Custom-ACM.png new file mode 100644 index 00000000..a34cfe6a --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/context-menu/Custom-ACM.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8249cf8558081158a4f4578bd426092c886f6b2461c2a36d3b345ccc9598c2a9 +size 56155 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/Blocky-Reference.jpg b/.cursor/rules/roblox/assets/avatar/dynamic-heads/Blocky-Reference.jpg new file mode 100644 index 00000000..829ab7ba --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/Blocky-Reference.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cb0e751daeee470567e4e69f5fc7468bc3a8e1f81241fd141d4bef48ed81347 +size 66400 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/Blocky_And_Goblin_Dynamic_Heads.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/Blocky_And_Goblin_Dynamic_Heads.mp4 new file mode 100644 index 00000000..5618d870 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/Blocky_And_Goblin_Dynamic_Heads.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:297b25532fc75531fdd41869d08f9455081fef4f70c7a3ba44455174bd4dba6a +size 1293240 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/Goblin-Reference.jpg b/.cursor/rules/roblox/assets/avatar/dynamic-heads/Goblin-Reference.jpg new file mode 100644 index 00000000..a17d1647 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/Goblin-Reference.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2be7a8bfb228904aefd20ffd988240282b06c83c5eb56d379f38c6ace63a5c8 +size 394839 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/animating-dynamic-heads/Animation-Track-Values-Input.jpg b/.cursor/rules/roblox/assets/avatar/dynamic-heads/animating-dynamic-heads/Animation-Track-Values-Input.jpg new file mode 100644 index 00000000..a60ebdb6 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/animating-dynamic-heads/Animation-Track-Values-Input.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:241a3254bd0d60eda4f782b83767ba008cc66c4e644e78fbfdd72bd50966b56a +size 28870 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/animating-dynamic-heads/FACS-Popup.jpg b/.cursor/rules/roblox/assets/avatar/dynamic-heads/animating-dynamic-heads/FACS-Popup.jpg new file mode 100644 index 00000000..9cae086e --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/animating-dynamic-heads/FACS-Popup.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c495503a2f379cc9fe3aa6f99a06e58d6833530362723134e0134ea95702215e +size 175521 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/animating-dynamic-heads/Face-Button.jpg b/.cursor/rules/roblox/assets/avatar/dynamic-heads/animating-dynamic-heads/Face-Button.jpg new file mode 100644 index 00000000..9c8173cd --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/animating-dynamic-heads/Face-Button.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd5619d407ca2d0f422fede8b8463acb8f3df9b6eb9b3e26e93c7e4a40fe61bf +size 21952 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/animating-dynamic-heads/Overview.png b/.cursor/rules/roblox/assets/avatar/dynamic-heads/animating-dynamic-heads/Overview.png new file mode 100644 index 00000000..d699a642 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/animating-dynamic-heads/Overview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64b3ebb11346c15d38ac2e00d0f1e3d6066a6be350f935a7a4ea3ac665398a2e +size 977469 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/animating-dynamic-heads/videos/1-Face-Controls-Example.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/animating-dynamic-heads/videos/1-Face-Controls-Example.mp4 new file mode 100644 index 00000000..3769c7b7 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/animating-dynamic-heads/videos/1-Face-Controls-Example.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:874aaee5ef561999a63e1e9b68b2cd8d2a1bd331ad7afb448e76e9c887ab3a60 +size 4657539 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/animating-dynamic-heads/videos/2-Face-Controls-Example-Goblin.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/animating-dynamic-heads/videos/2-Face-Controls-Example-Goblin.mp4 new file mode 100644 index 00000000..7d552b35 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/animating-dynamic-heads/videos/2-Face-Controls-Example-Goblin.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2771d47c258469f9151fead0d481855c581d25d436767cc9f6f42091d208be17 +size 3865625 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Animation-Frame-Range.png b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Animation-Frame-Range.png new file mode 100644 index 00000000..e7e4b51e --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Animation-Frame-Range.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c9732c4fce18bd72a93a5713ea2ee1449ce5897a75ba4f40f92a5245829920e +size 14245 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Animation-Offset-Importing.png b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Animation-Offset-Importing.png new file mode 100644 index 00000000..680188c1 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Animation-Offset-Importing.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c7024f8ffda3879c21362351285cdc7ffbe8f48e950b9cc4e810a7bc692be14 +size 7890 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Animation-Timeline.png b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Animation-Timeline.png new file mode 100644 index 00000000..24894502 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Animation-Timeline.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2938658a6004415b3500a252ce11962dd9239115de0c88d2be365d98dca8f10f +size 11503 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Custom-Properties-Example.png b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Custom-Properties-Example.png new file mode 100644 index 00000000..302e7383 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Custom-Properties-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:432010d9264059734c53c133543610333d7a8ee4ef1dc282f223445aca3afa23 +size 180244 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Eyelid-Naming.png b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Eyelid-Naming.png new file mode 100644 index 00000000..90e890be --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Eyelid-Naming.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dea31a6fdd41240ded84c33ddb2ef0fe58144a41fce33a2f3ba25899e5bf368d +size 30101 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Mapping-New-Button.png b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Mapping-New-Button.png new file mode 100644 index 00000000..ef74317a --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Mapping-New-Button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:060097e931382cb656e702309d2bc324648db51561e297654160534bb889ff55 +size 97179 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Mapping-Popup.png b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Mapping-Popup.png new file mode 100644 index 00000000..4919ab71 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Mapping-Popup.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07a9ca67744754a1691502420509f1ae5a7e5938d2bd71fa6b630916b85a6db3 +size 132488 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Open-Project.png b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Open-Project.png new file mode 100644 index 00000000..c665e62d --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/Open-Project.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:571b162502fc43ece006aae3cecbb86d5b297ab1841a95aaf181c28c8b5b9549 +size 160649 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Complete.fbx b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Complete.fbx new file mode 100644 index 00000000..7c69d608 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Complete.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38c310e3614b03c0b5478d061278fc9f76bc852f92d0d5293d40cdb9f0b55ae7 +size 1205116 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Complete.ma b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Complete.ma new file mode 100644 index 00000000..0f17d043 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Complete.ma @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f2c670e264d68891064802c7d6cd6cffc77698f71a93d2489081c9df48007d2 +size 3577063 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Eye-Bones-Skinned.blend b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Eye-Bones-Skinned.blend new file mode 100644 index 00000000..7e0a5397 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Eye-Bones-Skinned.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80c92d76f1204395c1e13c541bc13916953284fc17819fa05d51a942c1675c86 +size 20688324 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Eye-Poses-Mapped.blend b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Eye-Poses-Mapped.blend new file mode 100644 index 00000000..f3ce0053 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Eye-Poses-Mapped.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48ff5b8d8700398afac64f48b89afb20d812b075d2046d931a99a3023faf028c +size 20830820 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Model-Only.blend b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Model-Only.blend new file mode 100644 index 00000000..6b8108cc --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie-Model-Only.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b03052e01c62c5771a96f76f8c84cb532e8ef1dd32c9cc71e859077426d1764e +size 20666404 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie_Head_ALB.png b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie_Head_ALB.png new file mode 100644 index 00000000..ca7b4f22 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/reference-files/Cubie_Head_ALB.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e320111deb1ba541ee5d417295e368b1364279a9cc67a50a2b9ed3191980e8d1 +size 76261 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/10_Skinning_Eyelids.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/10_Skinning_Eyelids.mp4 new file mode 100644 index 00000000..2ff44b06 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/10_Skinning_Eyelids.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b9df46d8558313e0980a14903278698fefb4892cdad16160bf8bd8da83e8544 +size 9284258 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/11_Testing_Eyelids.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/11_Testing_Eyelids.mp4 new file mode 100644 index 00000000..2463e628 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/11_Testing_Eyelids.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9aae54feb19588850055ce2b4ac6fbacacb676ae6a26d841b5c53b771914413 +size 7202893 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/12_Creating_Controller_Bones.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/12_Creating_Controller_Bones.mp4 new file mode 100644 index 00000000..0fabf651 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/12_Creating_Controller_Bones.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3d63cd71e1b07759eed292e1d49f83d64b875ab14a66cd38c49288003f1d318 +size 11323408 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/13_Creating_Bone_Constraints.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/13_Creating_Bone_Constraints.mp4 new file mode 100644 index 00000000..855fee50 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/13_Creating_Bone_Constraints.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:463940ed6351dcb53fa4ae304b8b42afe7b7dff90f1b93ce7bbc4e84a32d7313 +size 7937026 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/14_Assigning_Custom_Shapes.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/14_Assigning_Custom_Shapes.mp4 new file mode 100644 index 00000000..03edb49d --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/14_Assigning_Custom_Shapes.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a543a0e4aa6eba7c42202ec23a263daff7f8465ef752ab24f05ff01ec8e1aded +size 6279105 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/15_Coloring_Control_bones.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/15_Coloring_Control_bones.mp4 new file mode 100644 index 00000000..77af07f1 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/15_Coloring_Control_bones.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67abdeece1c84acaf65492115b8763c6efa764e90e32d01d7c7fe82169266c6c +size 13526640 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/16_Testing_Controllers.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/16_Testing_Controllers.mp4 new file mode 100644 index 00000000..760ca2d1 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/16_Testing_Controllers.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3fa9e4ab14defaa71ade2e1e0c70aed2581aba52170cabf50320128b85ca6740 +size 7700689 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/17-Posing.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/17-Posing.mp4 new file mode 100644 index 00000000..49b684fb --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/17-Posing.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8e7bfd7e8631ce18d2e8d9bca3e4816156568a61ebae3ba245605f4099ef8eb +size 14658931 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/18_Mapping.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/18_Mapping.mp4 new file mode 100644 index 00000000..a7dc426d --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/18_Mapping.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fc5a623a3f2a0a4be5a471abf7b3b3fa980566f289012acd5f8986551ef206d +size 25645931 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/1_Adding_RootFaceJoint.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/1_Adding_RootFaceJoint.mp4 new file mode 100644 index 00000000..96e72ee6 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/1_Adding_RootFaceJoint.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be8e55a02cbbcabbce58a0de2b7c470fe2367a69274d1bfe9589107079db5299 +size 3329033 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/2_Mapping_RootFaceJoint.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/2_Mapping_RootFaceJoint.mp4 new file mode 100644 index 00000000..9d1284f8 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/2_Mapping_RootFaceJoint.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e4a91e8601aa32638df0c825f10a7db35a3bea2a18508f7e65b159e427ada16 +size 4453185 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/3_Adding_Eye_Bones.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/3_Adding_Eye_Bones.mp4 new file mode 100644 index 00000000..e48817d7 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/3_Adding_Eye_Bones.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95897e101bcba30d587281eec88dc101d7fdd80d53a4d170ea15bea1fa63d7a8 +size 3363689 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/4_Positioning_Eye_Bones.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/4_Positioning_Eye_Bones.mp4 new file mode 100644 index 00000000..c795a9c6 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/4_Positioning_Eye_Bones.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9cc69b4778bf639c979b6d1d32c1676f4d383de647c8b0c02a46f8525029c39c +size 10623616 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/5_Parenting_Eye_Bones.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/5_Parenting_Eye_Bones.mp4 new file mode 100644 index 00000000..49453a1f --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/5_Parenting_Eye_Bones.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e58d4b501f23827f44202e430b678e92d0f3c1794186011a7e7251025c730809 +size 2171263 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/6_Adding_And_Positioning_Eyelids.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/6_Adding_And_Positioning_Eyelids.mp4 new file mode 100644 index 00000000..bfe5a845 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/6_Adding_And_Positioning_Eyelids.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3939c7927b1399096219ca875eab1ef99c71490573f74d503a9c99f5aae21eea +size 6158542 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/7_Skinning_LeftEye.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/7_Skinning_LeftEye.mp4 new file mode 100644 index 00000000..11b84f6f --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/7_Skinning_LeftEye.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50c83f4e3262a71d54a325d135644025dece4f664fe0f8c135253db4225b3143 +size 8652240 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/8_Testing_LeftEye.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/8_Testing_LeftEye.mp4 new file mode 100644 index 00000000..674bc3b0 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/8_Testing_LeftEye.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb838edb8b48a085155ee20290032420ae8e9b22a40e8d3bccb65b6f59cdd19f +size 3622165 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/9_Skinning_and_Testing_RightEye.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/9_Skinning_and_Testing_RightEye.mp4 new file mode 100644 index 00000000..d2bfed17 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/9_Skinning_and_Testing_RightEye.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15c3b917ab07e0ef99c35c507bf159b733ba6b77c47e8ecbd82abf4ad2b22c45 +size 11155369 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/Combination_Example1.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/Combination_Example1.mp4 new file mode 100644 index 00000000..e579afa9 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/Combination_Example1.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8b55a1c72c9e9fc9e5f413b4a4fc9e9f46941b0b5b716da523d9474f1a0a4d7 +size 200611 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/Combination_Example2.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/Combination_Example2.mp4 new file mode 100644 index 00000000..0dd15aa7 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/Combination_Example2.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:608a077d625cae3dcf52132c3cc6b056c54e37a26d326f2efa2fcc7f30d9e0c0 +size 174226 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/Combination_Example3.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/Combination_Example3.mp4 new file mode 100644 index 00000000..ba97af8e --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/Combination_Example3.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c859d7174c71860374bdf41dc369b5b7ff4521374292af8b974599809f7e8c09 +size 184539 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/Combination_Example4.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/Combination_Example4.mp4 new file mode 100644 index 00000000..b7caa18a --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/Combination_Example4.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df221d8d9cdf6880440b37c70ac6892d27e98fc79558a06845180dd954bd6c8d +size 202459 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/Combination_Example5.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/Combination_Example5.mp4 new file mode 100644 index 00000000..0e1eea09 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/Combination_Example5.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ca96f85507ab114696bc2800c69ec9c61bb672ecbd1b540abb1296910a16391 +size 173523 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/Combination_Example6.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/Combination_Example6.mp4 new file mode 100644 index 00000000..16d8cd52 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-dynamic-heads/videos/Combination_Example6.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03dc981bcc80f4dd3c52c0eff64cd33260aedab2b1afdb68cce2f21671d8e997 +size 190059 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Automatic-Skinning-Transfer-Intro.jpg b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Automatic-Skinning-Transfer-Intro.jpg new file mode 100644 index 00000000..50551deb --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Automatic-Skinning-Transfer-Intro.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8086d215f7ef5dfa75448a92a6cbd1226ffcfec4c5a217fa449f92a376edfbae +size 689139 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Beard-Humanoid-Cage.jpg b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Beard-Humanoid-Cage.jpg new file mode 100644 index 00000000..56832333 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Beard-Humanoid-Cage.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89e8519af740c87c3f72432d82965a2f0311f6f00e78d27cd636de11c3a63e04 +size 2619424 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Eyebrows-Follower-Vertices.png b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Eyebrows-Follower-Vertices.png new file mode 100644 index 00000000..dc71573b --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Eyebrows-Follower-Vertices.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a45252769f6a0119786b506e6e79671e83488051fed85f0590b338593908ed9 +size 336165 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Eyebrows-Leader-Vertices.png b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Eyebrows-Leader-Vertices.png new file mode 100644 index 00000000..68d6f061 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Eyebrows-Leader-Vertices.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:abb5f366e7f14451ad154ef6376964524e1ca11e4fe4df1efcf7e7cb91f259a1 +size 343641 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Full-Body-Cage.png b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Full-Body-Cage.png new file mode 100644 index 00000000..00116ecf --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Full-Body-Cage.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2575e0ea4a32483ffe1f007eaf5ebc65b07da0136307c92b2290470c256b1c8 +size 337435 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Head-Cage-Only.png b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Head-Cage-Only.png new file mode 100644 index 00000000..c3d3d6b8 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Head-Cage-Only.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98e9ee45a987eefb06d8f705b36d3c4987b58fa9f642b52e0ba1760679e8a0a2 +size 195816 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Importing-Cage.png b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Importing-Cage.png new file mode 100644 index 00000000..ea091040 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Importing-Cage.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:517c6a598fd3b0930bda1bbd95db9e39bdba45b99fa3eb5ceee53419100d16cb +size 665676 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Importing-Cubie.png b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Importing-Cubie.png new file mode 100644 index 00000000..b62935c5 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Importing-Cubie.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29a46977f132bc6348888b6f35ade6018c61a125f7dcb44020afbe15cd296a98 +size 995613 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Importing-Eyebrows.png b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Importing-Eyebrows.png new file mode 100644 index 00000000..e42887f3 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Importing-Eyebrows.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6432d0a879a1d6eb3b79b851dae4f288e0c3d51915c702a5b271e73929a3c292 +size 487683 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Jacket-Cage-Comparison.jpg b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Jacket-Cage-Comparison.jpg new file mode 100644 index 00000000..e072315d --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Jacket-Cage-Comparison.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e92d286554defe6071770259d1c32dffcc7b785fb3d25efb7768c65912c49f73 +size 1732146 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Vertices-Group-Assign.png b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Vertices-Group-Assign.png new file mode 100644 index 00000000..6d69a593 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Vertices-Group-Assign.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22de62205f01714818a0123a6d89c90b6ef8a7b3d6b0fe7bf7c82c4827d8c228 +size 30591 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Vertices-Group-Follower.png b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Vertices-Group-Follower.png new file mode 100644 index 00000000..147a0ada --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Vertices-Group-Follower.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d70078b6443519e85989150520e30a310dad1b3497e1544ca0d2861fa13eeb69 +size 85510 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Vertices-Group-Leader.png b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Vertices-Group-Leader.png new file mode 100644 index 00000000..c41b2332 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Vertices-Group-Leader.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6f59acdf21a7a7eeeb992845730d21c811fd0721c5e7635d7319712a14578e2 +size 70356 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Vertices-Transfer-Off.mov b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Vertices-Transfer-Off.mov new file mode 100644 index 00000000..fe996b4b --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Vertices-Transfer-Off.mov @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc75d6fae0358d1dc89b586a7e0a8cfbd0d78ea6205799bb79da2911e74a1e13 +size 11998071 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Vertices-Transfer-On.mov b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Vertices-Transfer-On.mov new file mode 100644 index 00000000..446010fa --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/Vertices-Transfer-On.mov @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a73a24b4bc6ef54ac0a0174634a6bb6bb0be8f4d6e02f56f60c2ebe266e7fe12 +size 11528595 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/reference-files/Creating-Face-Accessories-Reference-Files.zip b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/reference-files/Creating-Face-Accessories-Reference-Files.zip new file mode 100644 index 00000000..e7958f70 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/reference-files/Creating-Face-Accessories-Reference-Files.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e605f590964e5fb249a7b5dccf6fe0c133e70c3a0f4ac265368c6b940c809c7 +size 346081 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/reference-files/Cubie-Cage-Only.fbx b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/reference-files/Cubie-Cage-Only.fbx new file mode 100644 index 00000000..40fc28e8 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/reference-files/Cubie-Cage-Only.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1552e268d4b8d588856b9909af0368145432b27cb2efe6df7c1bd1b7325722b4 +size 172556 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/reference-files/Cubie-Eyebrow-Rigged-And-Caged.fbx b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/reference-files/Cubie-Eyebrow-Rigged-And-Caged.fbx new file mode 100644 index 00000000..e45b0341 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/reference-files/Cubie-Eyebrow-Rigged-And-Caged.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42b8825f8a1f5b9f8ec47bb2e597f73a40f6a8e744f0050e7622e40c5bb7a753 +size 274156 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/reference-files/CubieEyebrow_Geo.fbx b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/reference-files/CubieEyebrow_Geo.fbx new file mode 100644 index 00000000..bb191b4a --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/reference-files/CubieEyebrow_Geo.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd523f9625b60457ad2dc2a93873dff5f1703fd3c153fe7446e49d957b287721 +size 15340 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/reference-files/CubieHawkHair_Geo.fbx b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/reference-files/CubieHawkHair_Geo.fbx new file mode 100644 index 00000000..caa89858 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/reference-files/CubieHawkHair_Geo.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51692ec7cee83530d1d4278a6b5fa42aaaa92701ced6cbc164a05d22de91f73e +size 15996 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/videos/AutoSkin-With-Full-Cage.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/videos/AutoSkin-With-Full-Cage.mp4 new file mode 100644 index 00000000..c5e75718 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/videos/AutoSkin-With-Full-Cage.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53c3f2b2c10e9c2727a923e00434110c7ef17502b0a8c3576aae6dbb6176f5f8 +size 5867979 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/videos/AutoSkin-With-Specific-Cage.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/videos/AutoSkin-With-Specific-Cage.mp4 new file mode 100644 index 00000000..62bcae7e --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/videos/AutoSkin-With-Specific-Cage.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4cd89c2ac3ac38f7dbc3387e2c1dcb81d9059deb630e959a88ea727712d6ca9 +size 5920981 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/videos/Editing-Outer-Cage.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/videos/Editing-Outer-Cage.mp4 new file mode 100644 index 00000000..2fa75242 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/videos/Editing-Outer-Cage.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72e325443d034aa3d2992f9745ac025032dbf9ac887ba1b67b602908c698a899 +size 14531575 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/videos/Jacket-Collar-Issue.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/videos/Jacket-Collar-Issue.mp4 new file mode 100644 index 00000000..36b18326 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/videos/Jacket-Collar-Issue.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:505268188addc6920fe9648b144af12857c332df0290478c229dece7ecf4f3bf +size 8258301 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/videos/Parent-Armature.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/videos/Parent-Armature.mp4 new file mode 100644 index 00000000..30c14c78 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/videos/Parent-Armature.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f556cda9e9fbff08ea53f7ebf92133ebc9b3e6df1178f61dbb40894ce8f53569 +size 2202929 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/videos/Removing-Character-Cage.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/videos/Removing-Character-Cage.mp4 new file mode 100644 index 00000000..a508d1f6 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/videos/Removing-Character-Cage.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d6c3a8aeb7ef701884826646446c0cd980b4acc63749cbda8148c153cb2ec9c +size 2295013 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/videos/Removing-Extra-Objects.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/videos/Removing-Extra-Objects.mp4 new file mode 100644 index 00000000..e2cf7872 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/creating-face-accessories/videos/Removing-Extra-Objects.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6edcb566b84259f93e6ed604cbb76f69a79ae2a29f2067d2ef812f19df8bae4e +size 3519053 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/ChinRaiserA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/ChinRaiserA.mp4 new file mode 100644 index 00000000..dc09b7c1 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/ChinRaiserA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4954ace8b25ee765442d732815e6f2e0bd710bfda17e835a81dd992641d1e554 +size 47131 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/ChinRaiserB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/ChinRaiserB.mp4 new file mode 100644 index 00000000..9979eca6 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/ChinRaiserB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:092d8fc7618f92c2c0434b2c5c197d8bf3f1048fb001916db9391320e15ff085 +size 21819 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/ChinRaiserUpperLipA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/ChinRaiserUpperLipA.mp4 new file mode 100644 index 00000000..63ecc5db --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/ChinRaiserUpperLipA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3df6b3c2f66fc342237b25686f6ade3173320062666319bce1efa5fb8a93430 +size 47142 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/ChinRaiserUpperLipB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/ChinRaiserUpperLipB.mp4 new file mode 100644 index 00000000..8dbde403 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/ChinRaiserUpperLipB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8cad277fe6a2466dabad3d97b4b81769155e3a4fc7cfd50f3b8c4b4f351dcafc +size 22568 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/CorrugatorA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/CorrugatorA.mp4 new file mode 100644 index 00000000..ce4539c5 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/CorrugatorA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44ccb1d55c31ebef91eab31af79524a25615da6217996b93ec1269008a08e497 +size 49383 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/CorrugatorB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/CorrugatorB.mp4 new file mode 100644 index 00000000..c481ad03 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/CorrugatorB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ab94a09acb32785324035a9f5a58325f138efe01dd6f0d46855eb3404d60f45 +size 22752 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookDownA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookDownA.mp4 new file mode 100644 index 00000000..47647ac9 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookDownA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e4b5afec3a9510684dd9aefcbb0c52de3dc3685fa44dced79a61ce39293eb1b +size 54549 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookDownB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookDownB.mp4 new file mode 100644 index 00000000..17571025 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookDownB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43439682cb2d31b8a764beb76eaad39612370c260a4b91c2fd081bbf94f23eca +size 22535 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookLeftA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookLeftA.mp4 new file mode 100644 index 00000000..d101be47 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookLeftA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48d918adea0a8d7a5c9d5c3d7e344580badb0a3efb6c9356fd5f5029994e00f5 +size 52576 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookLeftB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookLeftB.mp4 new file mode 100644 index 00000000..bf486424 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookLeftB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78a60ae9fadc31e1c900de3fcb4ac5d2a1f73ef9ab4202f0811e6e90c7fd2dd6 +size 22761 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookRightA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookRightA.mp4 new file mode 100644 index 00000000..fb5f23e4 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookRightA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0da8302b5da12d57aee71662af08283a7d595af17d5b1bc665efa4c262c3d9c4 +size 53365 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookRightB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookRightB.mp4 new file mode 100644 index 00000000..09496cc4 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookRightB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c548b7ca407f8c5b19b1a348d25fe9bc052954e172397313b8dbf5c68d4eeb5 +size 23015 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookUpA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookUpA.mp4 new file mode 100644 index 00000000..e2485f43 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookUpA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79da16ce323164c0da0bc5dca0cb092c4fa1d8ffd993a776384008047f196df3 +size 53279 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookUpB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookUpB.mp4 new file mode 100644 index 00000000..e2bd1f08 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/EyesLookUpB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c2db24977522af5d73056fe3b84fe6445b5ecc5b57e584bf301ff9bf94d2146 +size 22053 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/FlatPuckerA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/FlatPuckerA.mp4 new file mode 100644 index 00000000..732547c4 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/FlatPuckerA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51fc79b1d72decc000b979286cd6c7cb8fbd291c6e9edf729b9ca6deeaec04a6 +size 46876 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/FlatPuckerB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/FlatPuckerB.mp4 new file mode 100644 index 00000000..ba02e0e6 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/FlatPuckerB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdea0bef893f8b481977be7084836a51ef7bcc1e52c3c489967d8404725efb3b +size 21076 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/FunnelerA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/FunnelerA.mp4 new file mode 100644 index 00000000..467f27ae --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/FunnelerA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef02a8687b5edec831bf5c6691355bcc04a1864b58e3ca675ce2a4de8e91e061 +size 51365 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/FunnelerB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/FunnelerB.mp4 new file mode 100644 index 00000000..d708bcf3 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/FunnelerB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:433f9f0ef99d16aeb0b7f6f9f11af37dba493ed5f38333e56fdbdf9d8d17016d +size 25461 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/JawDropA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/JawDropA.mp4 new file mode 100644 index 00000000..74e18453 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/JawDropA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bacdf5d231272488d253c3e03f76bfd4dd923ee088cd34367e8b80c3e4c06ae8 +size 53188 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/JawDropB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/JawDropB.mp4 new file mode 100644 index 00000000..97732cb9 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/JawDropB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1fb934c73dd3c5060f628d6816c51c22bf0b1df5ade79f9b872d9a696ff17e57 +size 26487 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/JawLeftA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/JawLeftA.mp4 new file mode 100644 index 00000000..4e2f3505 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/JawLeftA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a56046f8efcc40488333db45394ddd6ae357a41da91dd881a6b316e2877f053e +size 47887 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/JawLeftB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/JawLeftB.mp4 new file mode 100644 index 00000000..4a21a431 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/JawLeftB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d3c1dc5b8b0b15a233077ac7731c1c6cae746a169b0695920c1030199be3131 +size 20796 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/JawRightA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/JawRightA.mp4 new file mode 100644 index 00000000..b5068260 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/JawRightA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2d3711a3b397fd5a248f031fb6eadb74264cff7a14ce7152a3c099b5e8a6e62 +size 48098 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/JawRightB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/JawRightB.mp4 new file mode 100644 index 00000000..679d4554 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/JawRightB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b206fe28ab509bebe026ff81f968ab2fe2cc223254977f0f4e2875405927aa6 +size 20883 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftBrowLowererA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftBrowLowererA.mp4 new file mode 100644 index 00000000..f76cc988 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftBrowLowererA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73c00a5ed41d223976ad1e0bf4b92c69904bd3865c2ec6b68e8f20e06d84d7ed +size 48111 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftBrowLowererB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftBrowLowererB.mp4 new file mode 100644 index 00000000..b1c152c5 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftBrowLowererB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd731fbf912b3f2082ceedf29d8a9fc08d5b78c49669daf698e6392c678e83fe +size 23189 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftCheekPuffA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftCheekPuffA.mp4 new file mode 100644 index 00000000..ce6b30d0 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftCheekPuffA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8375348387eb1683b1af23c0d11ae1f9bed5f2414ae8f05e08f156a2deae181 +size 48287 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftCheekPuffB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftCheekPuffB.mp4 new file mode 100644 index 00000000..38e3d464 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftCheekPuffB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef5b2b9c879bb83592af782d0633da91b958cc55d5f5e58cfc1081a7c5bd14bc +size 24040 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftCheekRaiserA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftCheekRaiserA.mp4 new file mode 100644 index 00000000..b9ff372f --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftCheekRaiserA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70d0334c4c6be5891f23fe3322b192e457ecda5fdf86c13f0a256793df509460 +size 49871 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftCheekRaiserB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftCheekRaiserB.mp4 new file mode 100644 index 00000000..0c66c052 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftCheekRaiserB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2131e87dd22a03e205193b50a9c0c2ca45459171328b8fefb2fc41b9c287ac59 +size 21399 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftDimplerA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftDimplerA.mp4 new file mode 100644 index 00000000..9c97dc99 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftDimplerA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a74f2d459fd61fc766f81227283ffabe814f453a9bba38d296ff991f776fd930 +size 47147 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftDimplerB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftDimplerB.mp4 new file mode 100644 index 00000000..1d5a1883 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftDimplerB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e63232d6f265297c5d663b0f8a327899b9473985f79ae9017aed871d2699070 +size 21985 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftEyeClosedA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftEyeClosedA.mp4 new file mode 100644 index 00000000..80bc17f0 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftEyeClosedA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e1e38d5ceb4f33465295bdfeb2b23c010a052770ad0a9e940c21ee2676ecc5f +size 48647 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftEyeClosedB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftEyeClosedB.mp4 new file mode 100644 index 00000000..d8dc05e9 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftEyeClosedB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f9092f301ff4fa23a45501af538f6505ac9e4261916fef9cdf77cb04d9bdb76 +size 22168 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftEyeUpperLidRaiserA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftEyeUpperLidRaiserA.mp4 new file mode 100644 index 00000000..ff701bfb --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftEyeUpperLidRaiserA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15a61fa5003655e4c8a858c3f66aa34ff2d4eea6e2a4b23da5dc5605e5c85d53 +size 47265 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftEyeUpperLidRaiserB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftEyeUpperLidRaiserB.mp4 new file mode 100644 index 00000000..cde58a03 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftEyeUpperLidRaiserB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6b0b04a23030f4478257ed3a6c233a366ffb4cf3b02c341ebd16252e3a5da78 +size 31015 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftInnerBrowRaiserA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftInnerBrowRaiserA.mp4 new file mode 100644 index 00000000..6f68d315 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftInnerBrowRaiserA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6d5022ffed7f0b23766b27adefa5822b6c32e1356c254e1c9c64e48c297529a +size 47843 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftInnerBrowRaiserB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftInnerBrowRaiserB.mp4 new file mode 100644 index 00000000..631dd7d8 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftInnerBrowRaiserB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8c4efb5f87e2021708d2e4685bf9d40b3eea7b79f99c33fc2929db70239ead7 +size 23222 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLipCornerDownA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLipCornerDownA.mp4 new file mode 100644 index 00000000..27dd6397 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLipCornerDownA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c60bc718990e77f1669a4713d7eb1033825fcca73658dba8b42dbf5294c24ad +size 46635 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLipCornerDownB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLipCornerDownB.mp4 new file mode 100644 index 00000000..e9b94230 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLipCornerDownB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f10582132feb83f3b9f260d457004edb2d703fa0785811fcb97fd168695254a6 +size 21852 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLipCornerPullerA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLipCornerPullerA.mp4 new file mode 100644 index 00000000..81e0cdff --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLipCornerPullerA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd24ba70777fdebbc0ede9fcf6ee1946489c0d580d564d12cde2553b69fef87b +size 49598 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLipCornerPullerB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLipCornerPullerB.mp4 new file mode 100644 index 00000000..79778ccf --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLipCornerPullerB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55af2f1cf364433a5f392f05e6169e732a09dc2da49c457357c63e73f54cf2d7 +size 24570 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLipStretcherA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLipStretcherA.mp4 new file mode 100644 index 00000000..fcadf07c --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLipStretcherA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f74a2dd68c56088da6770aa58e8da682a608f2399b18092981c8c10622f4c96 +size 47952 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLipStretcherB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLipStretcherB.mp4 new file mode 100644 index 00000000..c01637e4 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLipStretcherB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3aedf115a8bcd2d82319ae4ab5700e615c86c6342e38f28f87c7760ea0e25dc0 +size 21275 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLowerLipDepressorA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLowerLipDepressorA.mp4 new file mode 100644 index 00000000..511b137d --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLowerLipDepressorA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7bc58857fdf8702fd4907a3dff9f77eb906ea2d0fcc431613c23595f64a7155c +size 47346 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLowerLipDepressorB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLowerLipDepressorB.mp4 new file mode 100644 index 00000000..ab9cd5b8 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftLowerLipDepressorB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98963746f5c10e50a6adf908ac55f250261b0eca8100ebb71526de6249d1ef47 +size 22299 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftNoseWrinklerA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftNoseWrinklerA.mp4 new file mode 100644 index 00000000..6678c22a --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftNoseWrinklerA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec533b6089a19183a9ba6b06010290688e529c8200b0c083db75ab4a6a22343d +size 49067 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftNoseWrinklerB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftNoseWrinklerB.mp4 new file mode 100644 index 00000000..b01f1d8e --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftNoseWrinklerB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f9a1b3ea9fe05bfd276f16292e03dcacaaa70fc20ef0cdb5a93295403440e3e +size 24886 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftOuterBrowRaiserA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftOuterBrowRaiserA.mp4 new file mode 100644 index 00000000..87460044 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftOuterBrowRaiserA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7895725c77c5d25ec8ae38243614c5796548aa2954f600049ae5290e47e58911 +size 48379 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftOuterBrowRaiserB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftOuterBrowRaiserB.mp4 new file mode 100644 index 00000000..2083b055 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftOuterBrowRaiserB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:541a8758fb641dd0ad44523635c9a3d37b5adb5fa87d1295a7d5bfabbef1c8da +size 23123 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftUpperLipRaiserA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftUpperLipRaiserA.mp4 new file mode 100644 index 00000000..52bb59a8 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftUpperLipRaiserA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fcfe9a95460c42069bb04bcf3f52e9dd14cb70b372aab52cd89c2f90ba63a2df +size 48153 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftUpperLipRaiserB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftUpperLipRaiserB.mp4 new file mode 100644 index 00000000..aee0aa83 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LeftUpperLipRaiserB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49c8c0472889398d4fb3b6ed63fc52c25bd42199748a32da43aca889d77646c1 +size 23753 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipPresserA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipPresserA.mp4 new file mode 100644 index 00000000..03c55eb4 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipPresserA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee723707dedc2712a7dd608640bbefb7876e31efedb93a4237a1fa21d6c62a71 +size 47956 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipPresserB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipPresserB.mp4 new file mode 100644 index 00000000..9b63da8b --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipPresserB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f7095d7422cb6d98b4ec399b4652074cef93c19e613bf90fc4db74186e5da83 +size 22399 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipsTogetherA-1.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipsTogetherA-1.mp4 new file mode 100644 index 00000000..70f67d1b --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipsTogetherA-1.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fe5a458b94f18113b479a51dd96ab13e4a31834e9300a4a4dd97fbdcf4b8091 +size 49015 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipsTogetherA-2.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipsTogetherA-2.mp4 new file mode 100644 index 00000000..e7203764 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipsTogetherA-2.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb38528bb64a45d7fa302d71e013eacd8df35202c637d6a20f8c4ae1c340fdf1 +size 51022 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipsTogetherA-3.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipsTogetherA-3.mp4 new file mode 100644 index 00000000..eb231dd4 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipsTogetherA-3.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91d3b9bd537547401863ae253f8779f643a63dc3913e61faf9a791daa2ae94fb +size 49429 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipsTogetherB-1.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipsTogetherB-1.mp4 new file mode 100644 index 00000000..ba409c29 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipsTogetherB-1.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0db7bafe87c2d183864c9c782522483ab30198aac20156c4827a63a16ecd011e +size 23697 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipsTogetherB-2.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipsTogetherB-2.mp4 new file mode 100644 index 00000000..3dee7a68 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipsTogetherB-2.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:476d3b96d44757ec3b87d30ccab349a7ee916d87272c1b514fd3d2e4baa73b41 +size 22913 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipsTogetherB-3.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipsTogetherB-3.mp4 new file mode 100644 index 00000000..46edda1c --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LipsTogetherB-3.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f2dd7ea7f9885b3bcebb779afcca9db3113b1987d9861b76b489a37acde7b25 +size 24856 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LowerLipSuckA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LowerLipSuckA.mp4 new file mode 100644 index 00000000..385df5d7 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LowerLipSuckA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb7e15126837d5deac909cb68fb2210beff80a78e64c0963ada9a72e434741ac +size 48386 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LowerLipSuckB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LowerLipSuckB.mp4 new file mode 100644 index 00000000..3ba7c30b --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/LowerLipSuckB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:284e5e003f5c45292526ec5cc4893c183b52c6642562725cb482cbb4824fd81e +size 24032 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/MouthLeftA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/MouthLeftA.mp4 new file mode 100644 index 00000000..e322b7cc --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/MouthLeftA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d31c281437a4ad20933129808cbb738e85cd08daf64b4e5c57d9732f50365d34 +size 47815 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/MouthLeftB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/MouthLeftB.mp4 new file mode 100644 index 00000000..d25bf170 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/MouthLeftB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a08f473e055d2b8e8660eacbed4e876ffa5b992f2fb5e008a79b94c4307a8807 +size 22384 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/MouthRightA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/MouthRightA.mp4 new file mode 100644 index 00000000..95929be7 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/MouthRightA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1da5a73dd2e1ac5ce2a05d051ffd070b937df36a85f50a1c3c8f201ccc067bc8 +size 48312 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/MouthRightB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/MouthRightB.mp4 new file mode 100644 index 00000000..599593ca --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/MouthRightB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01d08b7abd60ae287147a0bdae2f49894b4c13fc8ec97dfa64cd34c1a948b534 +size 21877 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/PuckerA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/PuckerA.mp4 new file mode 100644 index 00000000..7ba8fe9e --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/PuckerA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5aa6bfa7db2a630d1e04925e8ed8d98e2efb6b6f675f7309589f589c9ee010e +size 49343 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/PuckerB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/PuckerB.mp4 new file mode 100644 index 00000000..30cad905 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/PuckerB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22b664f0a60eaf65b2fe841eb7ccc61831d1f02fc2fe85af335ccb724557bfb9 +size 21607 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightBrowLowererA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightBrowLowererA.mp4 new file mode 100644 index 00000000..eead1976 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightBrowLowererA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc611caa892ca6e2dc9b55a700dff3836a0f7bc78e6ca27d6aeaac5b0f8410c8 +size 47643 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightBrowLowererB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightBrowLowererB.mp4 new file mode 100644 index 00000000..9f466874 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightBrowLowererB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09477dfe08a8242153a331d35cf930de5f5b0093610f71347f3d0b44d63b246d +size 23144 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightCheekPuffA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightCheekPuffA.mp4 new file mode 100644 index 00000000..ed4564c9 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightCheekPuffA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c275d49ac76140ddc43ed0161d7b61c22047068509f53b6d91dc46d3fa61497a +size 48495 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightCheekPuffB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightCheekPuffB.mp4 new file mode 100644 index 00000000..cf1240c7 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightCheekPuffB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:834428ba7cf9878109468c6a58534462e855d0db199517c56aa4c50b23f7b1a3 +size 24672 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightCheekRaiserA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightCheekRaiserA.mp4 new file mode 100644 index 00000000..256c4e97 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightCheekRaiserA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef6ebdb5921f8d4b425c323e88cd9427a7168ba5e6e2a24cc6fbe5bffd8d27a1 +size 49768 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightCheekRaiserB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightCheekRaiserB.mp4 new file mode 100644 index 00000000..8ee2aeb5 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightCheekRaiserB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c75aff0b54146506c0b8affeec5b31108ce53766222be097712c0b3110fb081e +size 21805 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightDimplerA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightDimplerA.mp4 new file mode 100644 index 00000000..5d9039f2 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightDimplerA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:410f61180e16f9e6640cdf2f50b4ec2fa003ddb7bdb72dba0fa788def52c14f9 +size 47128 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightDimplerB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightDimplerB.mp4 new file mode 100644 index 00000000..f3f9e1be --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightDimplerB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a774bf1cfd70c8e10ce80986253a6e4e7e0ac4f8da4cb437947ef1d4f8666ce +size 21760 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightEyeClosedA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightEyeClosedA.mp4 new file mode 100644 index 00000000..e0923b51 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightEyeClosedA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:395828e3458ecd4e7d0c01c7d0de18a028a06b1abbb3bd35c815037c5ebfbb44 +size 50670 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightEyeClosedB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightEyeClosedB.mp4 new file mode 100644 index 00000000..537135e9 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightEyeClosedB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8f827109540802e8457124a9153c24d764d65546b35d584be28314a3ab50706 +size 22227 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightEyeUpperLidRaiserA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightEyeUpperLidRaiserA.mp4 new file mode 100644 index 00000000..097fd78c --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightEyeUpperLidRaiserA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34e151798eb90add9dae4f085930583e4e7374b235a0830e7282af13916b84cd +size 49084 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightEyeUpperLidRaiserB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightEyeUpperLidRaiserB.mp4 new file mode 100644 index 00000000..0e3d6c1f --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightEyeUpperLidRaiserB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b4079efc1a0d3851de2132a71b45e7cef1abec5143323c239011db1dd28c3d4 +size 21321 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightInnerBrowRaiserA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightInnerBrowRaiserA.mp4 new file mode 100644 index 00000000..9d3c88c8 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightInnerBrowRaiserA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:148191a0e9c9e4de1fab9a0dbbcd62aeed184be1e71573fd3a7d0675a51b98f6 +size 48637 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightInnerBrowRaiserB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightInnerBrowRaiserB.mp4 new file mode 100644 index 00000000..bdc0b74f --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightInnerBrowRaiserB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb6b0cdcf8d0ab883f630d2422536c6c811c27477b7b952602103b4ecae5d206 +size 23239 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLipCornerDownA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLipCornerDownA.mp4 new file mode 100644 index 00000000..da9275f2 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLipCornerDownA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:edd5e07f009ed9cb50e10fb3da1f47ebc5bbeb75195170f88a3ab760c595be98 +size 46743 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLipCornerDownB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLipCornerDownB.mp4 new file mode 100644 index 00000000..efe2e1ee --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLipCornerDownB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2093f703e694dcbf5f3091cf2203c2ea57cbeaa1eed52e7c646ad93e9e52a3ef +size 22083 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLipCornerPullerA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLipCornerPullerA.mp4 new file mode 100644 index 00000000..f79a2c20 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLipCornerPullerA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a45f28b2a378e7a8d356b1122a4a27bacdcaa0955ea6691f5d742ccd94c7f44c +size 50517 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLipCornerPullerB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLipCornerPullerB.mp4 new file mode 100644 index 00000000..5b363e2b --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLipCornerPullerB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ebd23de8a55c37a8689139241e84acc825770141021e99e8d08541f7584b8cd +size 24297 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLipStretcherA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLipStretcherA.mp4 new file mode 100644 index 00000000..f4ee7c1e --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLipStretcherA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57721cd3a1bd35f82a6fd82badbd8185b2a5c861bf5449ae600f4ec8e2e936a3 +size 47745 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLipStretcherB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLipStretcherB.mp4 new file mode 100644 index 00000000..3dcecd1f --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLipStretcherB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22f9150df72df3397f2b0f88696c88823aa0efb135458b83a79af7834b528cda +size 21247 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLowerLipDepressorA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLowerLipDepressorA.mp4 new file mode 100644 index 00000000..52ebbe21 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLowerLipDepressorA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75ffd1852a6a98fe243937d89c787b367724f10421c5954a6cd3e8747c94a39f +size 47196 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLowerLipDepressorB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLowerLipDepressorB.mp4 new file mode 100644 index 00000000..29f1ba7b --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightLowerLipDepressorB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11bd16e8c4835b45c84154b5b897e4d7e23108819d21d22d21129097df060ec3 +size 22476 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightNoseWrinklerA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightNoseWrinklerA.mp4 new file mode 100644 index 00000000..259487fe --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightNoseWrinklerA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aeb25efbe119d259d36b920d37de96cf18e6dcb2a5ba3f973384dd7a7042c2b4 +size 48860 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightNoseWrinklerB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightNoseWrinklerB.mp4 new file mode 100644 index 00000000..e2ada43c --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightNoseWrinklerB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44a4f27d0e29caa215224811630c4bfd889e77b1acf33c5c5147560a21534451 +size 24825 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightOuterBrowRaiserA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightOuterBrowRaiserA.mp4 new file mode 100644 index 00000000..0fd67d82 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightOuterBrowRaiserA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2824784749eafd37e71ce2e25fd8f6184adebb387fc7008c9515d9a56947b08f +size 46599 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightOuterBrowRaiserB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightOuterBrowRaiserB.mp4 new file mode 100644 index 00000000..6a3e5e92 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightOuterBrowRaiserB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d806c6c24a687083196b03ebd1ea6eb32b1857306045a0aa8591751be81a733 +size 23144 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightUpperLipRaiserA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightUpperLipRaiserA.mp4 new file mode 100644 index 00000000..2deb1bf5 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightUpperLipRaiserA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a84c40cbe60e3d18118b2154817ef36323d3e3ee3959b0b11b923878af5cac4 +size 47999 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightUpperLipRaiserB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightUpperLipRaiserB.mp4 new file mode 100644 index 00000000..f97e5ebc --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/RightUpperLipRaiserB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81befb0b8a4b914dccdde03f904264764ea19f896ed286f98f1a24703dc88cc9 +size 23422 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/TongueDown.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/TongueDown.mp4 new file mode 100644 index 00000000..9e9a946d --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/TongueDown.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb61fe8d3a3a942a8a762037e9016f11419a156e8b9b84d7152d488f95607332 +size 21310 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/TongueOut.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/TongueOut.mp4 new file mode 100644 index 00000000..d6f6b100 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/TongueOut.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab98b2cea7f672cf7dc2132c7405f7c57a437ae918a4d0dd4c1dd891a472cc57 +size 26808 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/TongueUp.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/TongueUp.mp4 new file mode 100644 index 00000000..c9a7f8a1 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/TongueUp.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a338c2b55c3b63e243b190ffeae8e531761ddb140f2d1a18df76172f278c1b11 +size 25038 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/UpperLipSuckA.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/UpperLipSuckA.mp4 new file mode 100644 index 00000000..cfc7be0f --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/UpperLipSuckA.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74e001ae96d8aa7ed1f1b86a956eef4dc77316d0e74d3b8182845c3874f13c6c +size 47168 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/UpperLipSuckB.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/UpperLipSuckB.mp4 new file mode 100644 index 00000000..c349f88e --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/facs-pose-reference/UpperLipSuckB.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39e2539287358d568814ae9f9e248699ad8b61c2a90cf99071ca6008ada00e84 +size 22164 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/moods/Animation-ID.png b/.cursor/rules/roblox/assets/avatar/dynamic-heads/moods/Animation-ID.png new file mode 100644 index 00000000..9a905bdc --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/moods/Animation-ID.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:88833aac529c3623951532c9d194e34bcd5758c827735633ee244f618f1d12f9 +size 20259 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/moods/HappyMood.png b/.cursor/rules/roblox/assets/avatar/dynamic-heads/moods/HappyMood.png new file mode 100644 index 00000000..4dcb8a83 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/moods/HappyMood.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77986538a81b758a2a0e74e324641f5475cff37d0280e4cbd10e67eea5a218ae +size 6648 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/moods/Overview-Default-Mood.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/moods/Overview-Default-Mood.mp4 new file mode 100644 index 00000000..59a07e95 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/moods/Overview-Default-Mood.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:008a5f7c353528d0ed45c1405cd92d39d7df0bcf7dfdfa9e7b3f8f316134979c +size 1532339 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/moods/Overview-Open-Mouth-Mood.mp4 b/.cursor/rules/roblox/assets/avatar/dynamic-heads/moods/Overview-Open-Mouth-Mood.mp4 new file mode 100644 index 00000000..bb8448c7 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/moods/Overview-Open-Mouth-Mood.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db8d60a3ccf3085769ab8d731c002a1d9afdc4b44b630ac45f91e64b13eb1e2b +size 1600378 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/moods/animate-localscript-hierarchy.jpg b/.cursor/rules/roblox/assets/avatar/dynamic-heads/moods/animate-localscript-hierarchy.jpg new file mode 100644 index 00000000..d4c02fdb --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/moods/animate-localscript-hierarchy.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03fac756bd674ffe8d0a9a27a0dc0f8ba865a5339d9be537571887dad8832f59 +size 59893 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/reference-files/Blocky-Face-Accessories.zip b/.cursor/rules/roblox/assets/avatar/dynamic-heads/reference-files/Blocky-Face-Accessories.zip new file mode 100644 index 00000000..ea8c6a41 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/reference-files/Blocky-Face-Accessories.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:524b4fffc5127a32f4a8291fbff499ebf22a95c61a232e3a49bc7426cd68e687 +size 2242342 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/reference-files/BlockyCharacter.fbx b/.cursor/rules/roblox/assets/avatar/dynamic-heads/reference-files/BlockyCharacter.fbx new file mode 100644 index 00000000..68c53d1d --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/reference-files/BlockyCharacter.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3bce4f161bc9b3825d4580e756c0a2da3b737cfbff1c2d41f47405aabe32803a +size 2984140 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/reference-files/BlockyCharacter.zip b/.cursor/rules/roblox/assets/avatar/dynamic-heads/reference-files/BlockyCharacter.zip new file mode 100644 index 00000000..0d8d696b --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/reference-files/BlockyCharacter.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e637b2288027e52e2571fea90b4b9535e2c6616d661cb5773bf99731f7484b7a +size 536513 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/reference-files/Dynamic-Head-Editor.rbxl b/.cursor/rules/roblox/assets/avatar/dynamic-heads/reference-files/Dynamic-Head-Editor.rbxl new file mode 100644 index 00000000..b556318b --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/reference-files/Dynamic-Head-Editor.rbxl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:840426faa4e2f9f965059a19049cdafa9310669689d4eae13141b57ea6ad4b3e +size 763995 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/reference-files/Dynamic-Head-Schema.rbxl b/.cursor/rules/roblox/assets/avatar/dynamic-heads/reference-files/Dynamic-Head-Schema.rbxl new file mode 100644 index 00000000..d472a839 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/reference-files/Dynamic-Head-Schema.rbxl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea603578dedd2daa115cc3459019d8385735d4c2a150fd44f51de0d463687aa4 +size 337801 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/reference-files/Fish-Person.zip b/.cursor/rules/roblox/assets/avatar/dynamic-heads/reference-files/Fish-Person.zip new file mode 100644 index 00000000..2efd2fe0 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/reference-files/Fish-Person.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee71219663b8c965b2c997fff8b54054bd318eaeab80ec7798c9a7302542dcf8 +size 6285844 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/reference-files/GoblinCharacter.zip b/.cursor/rules/roblox/assets/avatar/dynamic-heads/reference-files/GoblinCharacter.zip new file mode 100644 index 00000000..2f05b08c --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/reference-files/GoblinCharacter.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65642c668b69a15bcab36af96f86f6513fa368bd78c83e7a67899415f5024a49 +size 6959426 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/using-dynamic-heads-in-studio/FaceControls-In-Explorer.jpg b/.cursor/rules/roblox/assets/avatar/dynamic-heads/using-dynamic-heads-in-studio/FaceControls-In-Explorer.jpg new file mode 100644 index 00000000..b129d241 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/using-dynamic-heads-in-studio/FaceControls-In-Explorer.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a47ad572ecd5725f801fe49b6b05d1ab76ea1727572f6c8d5b4020d16fe3ef07 +size 50367 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/using-dynamic-heads-in-studio/FaceControls-In-Property-Panel.jpg b/.cursor/rules/roblox/assets/avatar/dynamic-heads/using-dynamic-heads-in-studio/FaceControls-In-Property-Panel.jpg new file mode 100644 index 00000000..ef0526c7 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/using-dynamic-heads-in-studio/FaceControls-In-Property-Panel.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c16267316dbcf1447c444cdf50814ac7ef7202ef7d5430da3cf358cbb6b3b5d4 +size 44671 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/using-dynamic-heads-in-studio/Facial-Accessory-In-Property-Panel.jpg b/.cursor/rules/roblox/assets/avatar/dynamic-heads/using-dynamic-heads-in-studio/Facial-Accessory-In-Property-Panel.jpg new file mode 100644 index 00000000..aea33ae1 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/using-dynamic-heads-in-studio/Facial-Accessory-In-Property-Panel.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d46c4b1ef681163c1e9db74ec2f4f082b1d2211954b25a584b5d74637a8205a9 +size 42909 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/using-dynamic-heads-in-studio/Facial-Accessory-In-Viewport.jpg b/.cursor/rules/roblox/assets/avatar/dynamic-heads/using-dynamic-heads-in-studio/Facial-Accessory-In-Viewport.jpg new file mode 100644 index 00000000..bd4d145b --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/using-dynamic-heads-in-studio/Facial-Accessory-In-Viewport.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2b28c5e768f9b10e4eade953e990da614e5f26ec028f8f1ef4ce5542170b3ac +size 623958 diff --git a/.cursor/rules/roblox/assets/avatar/dynamic-heads/using-dynamic-heads-in-studio/Importing-Facial-Accessory-Final-Result.jpg b/.cursor/rules/roblox/assets/avatar/dynamic-heads/using-dynamic-heads-in-studio/Importing-Facial-Accessory-Final-Result.jpg new file mode 100644 index 00000000..6a6e8f60 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/dynamic-heads/using-dynamic-heads-in-studio/Importing-Facial-Accessory-Final-Result.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2b4595239f7c27b12569561c3700d1ef48ab7f0829da3b3d850f1baf4cd0683 +size 822266 diff --git a/.cursor/rules/roblox/assets/avatar/name-health-display/Customize-NPC.jpg b/.cursor/rules/roblox/assets/avatar/name-health-display/Customize-NPC.jpg new file mode 100644 index 00000000..3c7dd08d --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/name-health-display/Customize-NPC.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7187943dcf44ff95308a4ce8c5ae8fa4f07bea8ea75e2732c77efcd73506fec +size 184859 diff --git a/.cursor/rules/roblox/assets/avatar/name-health-display/Display-Indicated.jpg b/.cursor/rules/roblox/assets/avatar/name-health-display/Display-Indicated.jpg new file mode 100644 index 00000000..eb379885 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/name-health-display/Display-Indicated.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:670bb875bbc605325cf7e95064e951064f6c1604d387f56b2abcfeec440e5d5c +size 229836 diff --git a/.cursor/rules/roblox/assets/avatar/name-health-display/DisplayDistanceType-None.jpg b/.cursor/rules/roblox/assets/avatar/name-health-display/DisplayDistanceType-None.jpg new file mode 100644 index 00000000..16790d09 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/name-health-display/DisplayDistanceType-None.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c04487bdfee53cf8c37eff8c7c82c5bc2a84b307151e7ffe74851f469e6273bf +size 250807 diff --git a/.cursor/rules/roblox/assets/avatar/name-health-display/DisplayDistanceType-Subject.jpg b/.cursor/rules/roblox/assets/avatar/name-health-display/DisplayDistanceType-Subject.jpg new file mode 100644 index 00000000..36030e54 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/name-health-display/DisplayDistanceType-Subject.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1003fa42f6b07265dc2a18c4222b440937d38bb0937b4f69a549e583d3f1254b +size 247233 diff --git a/.cursor/rules/roblox/assets/avatar/name-health-display/DisplayDistanceType-Viewer.jpg b/.cursor/rules/roblox/assets/avatar/name-health-display/DisplayDistanceType-Viewer.jpg new file mode 100644 index 00000000..bb399e8e --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/name-health-display/DisplayDistanceType-Viewer.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b353ad3b9fa57e9a7907a9524251c521aefc36d7731505bc63b30538283d6de +size 264245 diff --git a/.cursor/rules/roblox/assets/avatar/name-health-display/HealthDisplayType-AlwaysOff.jpg b/.cursor/rules/roblox/assets/avatar/name-health-display/HealthDisplayType-AlwaysOff.jpg new file mode 100644 index 00000000..489942d0 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/name-health-display/HealthDisplayType-AlwaysOff.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a43fa6fd746d326cf68c5e28f9b971813b3151354b6bc43c732ac893efa9ee7d +size 244915 diff --git a/.cursor/rules/roblox/assets/avatar/name-health-display/HealthDisplayType-AlwaysOn.jpg b/.cursor/rules/roblox/assets/avatar/name-health-display/HealthDisplayType-AlwaysOn.jpg new file mode 100644 index 00000000..9e5429fe --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/name-health-display/HealthDisplayType-AlwaysOn.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d77a101de09168fc6cdf51389fa00de5f6b4620e0e8a0f21393f21544d0872fe +size 248293 diff --git a/.cursor/rules/roblox/assets/avatar/name-health-display/HealthDisplayType-DisplayWhenDamaged.jpg b/.cursor/rules/roblox/assets/avatar/name-health-display/HealthDisplayType-DisplayWhenDamaged.jpg new file mode 100644 index 00000000..a2f147c5 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/name-health-display/HealthDisplayType-DisplayWhenDamaged.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba0714b992e7137c7123c061bd78159692eb3fbab93faddfa348fa324529ae0d +size 246991 diff --git a/.cursor/rules/roblox/assets/avatar/name-health-display/Humanoid-Properties.png b/.cursor/rules/roblox/assets/avatar/name-health-display/Humanoid-Properties.png new file mode 100644 index 00000000..013cbfa5 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/name-health-display/Humanoid-Properties.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16236befad15abc74bf8d327ab22add5005597b09b9561b227a3779ddcaed83e +size 60052 diff --git a/.cursor/rules/roblox/assets/avatar/name-health-display/NameOcclusion-EnemyOcclusion.jpg b/.cursor/rules/roblox/assets/avatar/name-health-display/NameOcclusion-EnemyOcclusion.jpg new file mode 100644 index 00000000..7127c22e --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/name-health-display/NameOcclusion-EnemyOcclusion.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a35f930d9db40eae2b168460941bc823e8c1d169d75e7e7da4ac7bb5d3ab71f +size 186070 diff --git a/.cursor/rules/roblox/assets/avatar/name-health-display/NameOcclusion-NoOcclusion.jpg b/.cursor/rules/roblox/assets/avatar/name-health-display/NameOcclusion-NoOcclusion.jpg new file mode 100644 index 00000000..c496a51b --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/name-health-display/NameOcclusion-NoOcclusion.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4df66be12183af815d0c87d5c72ba802e1af41e7c5c40ad3614f75b0959a3f4e +size 173717 diff --git a/.cursor/rules/roblox/assets/avatar/name-health-display/NameOcclusion-OccludeAll.jpg b/.cursor/rules/roblox/assets/avatar/name-health-display/NameOcclusion-OccludeAll.jpg new file mode 100644 index 00000000..144b5f0d --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/name-health-display/NameOcclusion-OccludeAll.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc7da1a5d89dc1b3d9362ef2511f6f9083b185c9fcd355a34c6ee081aa0bf94e +size 170035 diff --git a/.cursor/rules/roblox/assets/avatar/pathfinding/Boat-Path.mp4 b/.cursor/rules/roblox/assets/avatar/pathfinding/Boat-Path.mp4 new file mode 100644 index 00000000..a12e0830 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/pathfinding/Boat-Path.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c9f1e27b2690dcd2f0d38ee5fe10442624494cbe5f66d692c02b1fe6d62e954 +size 9995152 diff --git a/.cursor/rules/roblox/assets/avatar/pathfinding/Bridge-Path.mp4 b/.cursor/rules/roblox/assets/avatar/pathfinding/Bridge-Path.mp4 new file mode 100644 index 00000000..4bf71f07 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/pathfinding/Bridge-Path.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5180a0f8c5ec99232136f5d9189496624efa99b5593302e1d05150e512148a38 +size 3587265 diff --git a/.cursor/rules/roblox/assets/avatar/pathfinding/DoorPassThrough-Block.jpg b/.cursor/rules/roblox/assets/avatar/pathfinding/DoorPassThrough-Block.jpg new file mode 100644 index 00000000..69425dc1 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/pathfinding/DoorPassThrough-Block.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f44de7b981139b0e023e25aad67cb40e713ee9f9382872324eaa597c06252ed3 +size 172387 diff --git a/.cursor/rules/roblox/assets/avatar/pathfinding/DoorPassThrough-PathfindingModifier-PassThrough.png b/.cursor/rules/roblox/assets/avatar/pathfinding/DoorPassThrough-PathfindingModifier-PassThrough.png new file mode 100644 index 00000000..dc2d7c43 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/pathfinding/DoorPassThrough-PathfindingModifier-PassThrough.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a146ebaa45f894438718462b0aeadd01dcdd2e026a176728ebfbaf3aa6a480b +size 17073 diff --git a/.cursor/rules/roblox/assets/avatar/pathfinding/GeyserBlocker-Block.jpg b/.cursor/rules/roblox/assets/avatar/pathfinding/GeyserBlocker-Block.jpg new file mode 100644 index 00000000..6c1c403f --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/pathfinding/GeyserBlocker-Block.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f48cd3916db72062428931fdf5de1a3463a106d2883c57cb837a043e3b75dede +size 179932 diff --git a/.cursor/rules/roblox/assets/avatar/pathfinding/GeyserBlocker-Path.mp4 b/.cursor/rules/roblox/assets/avatar/pathfinding/GeyserBlocker-Path.mp4 new file mode 100644 index 00000000..58062aba --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/pathfinding/GeyserBlocker-Path.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79d3ac92c73c3e428f30a919a726ece516af081fe914ae9ddf7856709a5f1139 +size 5803143 diff --git a/.cursor/rules/roblox/assets/avatar/pathfinding/GeyserBlocker-PathfindingModifier-Label.png b/.cursor/rules/roblox/assets/avatar/pathfinding/GeyserBlocker-PathfindingModifier-Label.png new file mode 100644 index 00000000..07c53824 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/pathfinding/GeyserBlocker-PathfindingModifier-Label.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9f26afb3d958a9aee37af9c0a5adcb2db6c1b4e6d24359d2626ad146ec61618 +size 18769 diff --git a/.cursor/rules/roblox/assets/avatar/pathfinding/Navigation-Labels.jpg b/.cursor/rules/roblox/assets/avatar/pathfinding/Navigation-Labels.jpg new file mode 100644 index 00000000..e100e456 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/pathfinding/Navigation-Labels.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1a1df8e3f7e3ee0330a2a9e6a1378e58c76d945af55f1220fc624c6ba29cc4e +size 151982 diff --git a/.cursor/rules/roblox/assets/avatar/pathfinding/Navigation-Mesh.jpg b/.cursor/rules/roblox/assets/avatar/pathfinding/Navigation-Mesh.jpg new file mode 100644 index 00000000..eae04a5a --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/pathfinding/Navigation-Mesh.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:557d2f395de7779fd2149da26663e66b5db28632f5f46d49231a8c4d2a1423a4 +size 111609 diff --git a/.cursor/rules/roblox/assets/avatar/pathfinding/Path-Start-End.jpg b/.cursor/rules/roblox/assets/avatar/pathfinding/Path-Start-End.jpg new file mode 100644 index 00000000..f1b29d46 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/pathfinding/Path-Start-End.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7633cca817e49bbda4f93c28d995b277c9fd76b33cd20e267973dbc37d5ee85e +size 208070 diff --git a/.cursor/rules/roblox/assets/avatar/pathfinding/Path-TrussPart.jpg b/.cursor/rules/roblox/assets/avatar/pathfinding/Path-TrussPart.jpg new file mode 100644 index 00000000..ce5404ce --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/pathfinding/Path-TrussPart.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c2554cc8701b1e0885ec16d9aa05cbcc547c3fb13c173a51068cc33f672abdc +size 178027 diff --git a/.cursor/rules/roblox/assets/avatar/pathfinding/PathfindingLink-Attachments-Properties.png b/.cursor/rules/roblox/assets/avatar/pathfinding/PathfindingLink-Attachments-Properties.png new file mode 100644 index 00000000..6a786b3c --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/pathfinding/PathfindingLink-Attachments-Properties.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a554fad248b44f26fa66886890384a7546f0b2c1ab1c140c90c9f58a6e98408b +size 17899 diff --git a/.cursor/rules/roblox/assets/avatar/pathfinding/PathfindingLink-Attachments.jpg b/.cursor/rules/roblox/assets/avatar/pathfinding/PathfindingLink-Attachments.jpg new file mode 100644 index 00000000..d575259c --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/pathfinding/PathfindingLink-Attachments.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e107975e0ead76e032c74c1218c360e42a4f30acc8f0055705ee34402a7afdb +size 207202 diff --git a/.cursor/rules/roblox/assets/avatar/pathfinding/PathfindingLink-In-World.jpg b/.cursor/rules/roblox/assets/avatar/pathfinding/PathfindingLink-In-World.jpg new file mode 100644 index 00000000..98ea0ef9 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/pathfinding/PathfindingLink-In-World.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4e20585701d0d1443ef7d8f70cb3483d9529abe7d140bf7da6a5f6575ec5f89 +size 122334 diff --git a/.cursor/rules/roblox/assets/avatar/pathfinding/PathfindingLink-Label.png b/.cursor/rules/roblox/assets/avatar/pathfinding/PathfindingLink-Label.png new file mode 100644 index 00000000..ffa4febc --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/pathfinding/PathfindingLink-Label.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73b8cc3600f9f6e2a97b57d423dcdf5cc19c138140ea4600b8532f6f1bc590ae +size 14044 diff --git a/.cursor/rules/roblox/assets/avatar/pathfinding/PathfindingLink-Path.jpg b/.cursor/rules/roblox/assets/avatar/pathfinding/PathfindingLink-Path.jpg new file mode 100644 index 00000000..f9a19f19 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/pathfinding/PathfindingLink-Path.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99403791cf609edcedfa85ff2c72827fdb6fe6257e28f43310d5dd32c66a436f +size 123633 diff --git a/.cursor/rules/roblox/assets/avatar/pathfinding/Paths-Shortest-Best.jpg b/.cursor/rules/roblox/assets/avatar/pathfinding/Paths-Shortest-Best.jpg new file mode 100644 index 00000000..a718210f --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/pathfinding/Paths-Shortest-Best.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7e4ba8e83b2bf6ed4f28497ca9b2644b94369849d9f6b4c9fa4984f3e4ca6b7 +size 221581 diff --git a/.cursor/rules/roblox/assets/avatar/pathfinding/Showcase.mp4 b/.cursor/rules/roblox/assets/avatar/pathfinding/Showcase.mp4 new file mode 100644 index 00000000..08dc0fb5 --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/pathfinding/Showcase.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4568f83ad89afa87a71362efdbe260a3449cefc3a644b96027d32835f0b00c3a +size 10114969 diff --git a/.cursor/rules/roblox/assets/avatar/pathfinding/Simple-Path.mp4 b/.cursor/rules/roblox/assets/avatar/pathfinding/Simple-Path.mp4 new file mode 100644 index 00000000..10e03fab --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/pathfinding/Simple-Path.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b0b3d9d2fa86c58d9f97ec342091f4179392e23daf2ac4db2300ae02ab252b79 +size 3966441 diff --git a/.cursor/rules/roblox/assets/avatar/pathfinding/Waypoints.jpg b/.cursor/rules/roblox/assets/avatar/pathfinding/Waypoints.jpg new file mode 100644 index 00000000..6bdd15db --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/pathfinding/Waypoints.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba23085a02825cc48e0506499a2915c245503ff12b388feb56431b83b680f952 +size 180512 diff --git a/.cursor/rules/roblox/assets/avatar/pathfinding/Zombie-Full-Path.jpg b/.cursor/rules/roblox/assets/avatar/pathfinding/Zombie-Full-Path.jpg new file mode 100644 index 00000000..62a02cdb --- /dev/null +++ b/.cursor/rules/roblox/assets/avatar/pathfinding/Zombie-Full-Path.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f5b5277ea9490a26060fdf12070d5ebc3ea225e0d90859b478c868c7810c5c9 +size 152084 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Add-Collaborators.png b/.cursor/rules/roblox/assets/creator-dashboard/Add-Collaborators.png new file mode 100644 index 00000000..ebac2c81 --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Add-Collaborators.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:745215dce6e383b8719a33ac7fff21a9f2a1f856bc6f0df1b67fd220af604d5d +size 30978 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Add-Experiences.png b/.cursor/rules/roblox/assets/creator-dashboard/Add-Experiences.png new file mode 100644 index 00000000..e6d2fc63 --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Add-Experiences.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f958daccf5bf0550e90e87a0e161aa39d029d0af4f1dc18a0251dc227b329524 +size 26879 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Asset-Avatar-Restricted.png b/.cursor/rules/roblox/assets/creator-dashboard/Asset-Avatar-Restricted.png new file mode 100644 index 00000000..cff5148b --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Asset-Avatar-Restricted.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d641fb58e49c8337194b63ee917ca83192b60a49bbf3cf735ab2a83728178fdd +size 45676 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Asset-Avatar-Success.png b/.cursor/rules/roblox/assets/creator-dashboard/Asset-Avatar-Success.png new file mode 100644 index 00000000..8b5f9c6e --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Asset-Avatar-Success.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3cf4fe6c7f1a2596ac3aa66f7c87988d796d4918cbbc114351a441b0d980565c +size 46718 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Asset-Decals-Warning.png b/.cursor/rules/roblox/assets/creator-dashboard/Asset-Decals-Warning.png new file mode 100644 index 00000000..02572f0e --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Asset-Decals-Warning.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d14b8a000568f6faf4d60fc29d0355a5aa8186889dfe7648b67e8feae9d0fc93 +size 104392 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Asset-Make-OpenUse.png b/.cursor/rules/roblox/assets/creator-dashboard/Asset-Make-OpenUse.png new file mode 100644 index 00000000..3532f118 --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Asset-Make-OpenUse.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:279c3d99d57700a06792710c19aa4a1342b872c5c19aba8301f49266ad66efec +size 66144 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Asset-OpenUse.png b/.cursor/rules/roblox/assets/creator-dashboard/Asset-OpenUse.png new file mode 100644 index 00000000..5bccaeee --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Asset-OpenUse.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23711d21effa1ba7fde4abb84aa0651884120e9c11f49abcb972993cc71a647a +size 59972 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Asset-Privacy-Beta.png b/.cursor/rules/roblox/assets/creator-dashboard/Asset-Privacy-Beta.png new file mode 100644 index 00000000..1e8aa8bf --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Asset-Privacy-Beta.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:773aef5572bd54b0d09628d5f2dbec65ad2a2350aeabb49926a7e8f75bf74dfb +size 69578 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Asset-Toggle.png b/.cursor/rules/roblox/assets/creator-dashboard/Asset-Toggle.png new file mode 100644 index 00000000..69d3319f --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Asset-Toggle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e114bc8dcbaa2d6f1e011a460c52500f3510b6d704d17a3cb66c3c4e93098e1b +size 82394 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Creations-Events-Example.png b/.cursor/rules/roblox/assets/creator-dashboard/Creations-Events-Example.png new file mode 100644 index 00000000..3c4263fa --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Creations-Events-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d7cd4bcfbb5def469e4c8f58f6527da2492abb119b2adf7f0b5955d338b5b22 +size 297223 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Edit-Button-Experience.png b/.cursor/rules/roblox/assets/creator-dashboard/Edit-Button-Experience.png new file mode 100644 index 00000000..ea2bde96 --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Edit-Button-Experience.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b27f0f20084d4f99199ca3fad335f6747da74dba7427c5b2e388df29dac4b7d +size 109080 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Event-Context-Menu-Copy-Event-Details-URL.png b/.cursor/rules/roblox/assets/creator-dashboard/Event-Context-Menu-Copy-Event-Details-URL.png new file mode 100644 index 00000000..f91e25b7 --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Event-Context-Menu-Copy-Event-Details-URL.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:546524a9762581c095b9c0517003b09bbb99baf7858a62badb3910ddd62ae28c +size 297323 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Event-Context-Menu-Delete-Event.png b/.cursor/rules/roblox/assets/creator-dashboard/Event-Context-Menu-Delete-Event.png new file mode 100644 index 00000000..d71c03c6 --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Event-Context-Menu-Delete-Event.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18fe133358f82060df33f67dc78388239d9b97f95bd4042731de4404cd680370 +size 297293 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Experience-Change-Start-Place.png b/.cursor/rules/roblox/assets/creator-dashboard/Experience-Change-Start-Place.png new file mode 100644 index 00000000..7c412337 --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Experience-Change-Start-Place.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4e744a5308b269094ac79f1d74d81e27853c4f632ec50656fe912ed0507c60d +size 312621 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Group-Create-Group-Button.png b/.cursor/rules/roblox/assets/creator-dashboard/Group-Create-Group-Button.png new file mode 100644 index 00000000..c8755671 --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Group-Create-Group-Button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:acb8719333db64154643ffd0fafaef9b55099037d4c56fe6b00253c68eae5b74 +size 30577 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Group-Members-Assign-Role.png b/.cursor/rules/roblox/assets/creator-dashboard/Group-Members-Assign-Role.png new file mode 100644 index 00000000..806d93ae --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Group-Members-Assign-Role.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:226b89be6ca73aeeb43ea884e06ad0e9eb180a67c052cf147e3f4c8dc56f671b +size 24314 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Group-Members-Invite-Button.png b/.cursor/rules/roblox/assets/creator-dashboard/Group-Members-Invite-Button.png new file mode 100644 index 00000000..5e4436f2 --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Group-Members-Invite-Button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9388f65dbcd95a8a6a7caff9d73f9d2be5d050edf06bd27934bb9c6077c4e567 +size 15609 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Group-Members-Remove-Member.png b/.cursor/rules/roblox/assets/creator-dashboard/Group-Members-Remove-Member.png new file mode 100644 index 00000000..e0922911 --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Group-Members-Remove-Member.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc9884fd1d2101e84b8cab8250ffb0d66c577b2f70f3014144f07cbb18461bde +size 26243 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Group-Members-Unassign-Role.png b/.cursor/rules/roblox/assets/creator-dashboard/Group-Members-Unassign-Role.png new file mode 100644 index 00000000..e57da629 --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Group-Members-Unassign-Role.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e248f475929db298040bf0ae910a4f8efb3c8520b72cff580ac84ecdc0e4c2b +size 24902 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Group-Payouts-One-Time.png b/.cursor/rules/roblox/assets/creator-dashboard/Group-Payouts-One-Time.png new file mode 100644 index 00000000..17a3125d --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Group-Payouts-One-Time.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:972fd36374eb48a20f07b473f208ef7794098ede1156e557ef1d04b2ce20b05f +size 27536 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Group-Payouts-Split-Options.png b/.cursor/rules/roblox/assets/creator-dashboard/Group-Payouts-Split-Options.png new file mode 100644 index 00000000..572c2599 --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Group-Payouts-Split-Options.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:136041a6027e98695c66bf3af5ddce081ee9184f3b0fe215d7c7504636f9d372 +size 56336 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Group-Payouts-Splits-Example.png b/.cursor/rules/roblox/assets/creator-dashboard/Group-Payouts-Splits-Example.png new file mode 100644 index 00000000..f7ed3818 --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Group-Payouts-Splits-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9306a4d226e5f853d50e72e35c3805d3868d0689f50d9175c79d75dc24cedc8 +size 162704 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Group-Roles-Add-Members.png b/.cursor/rules/roblox/assets/creator-dashboard/Group-Roles-Add-Members.png new file mode 100644 index 00000000..3681d2dc --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Group-Roles-Add-Members.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c20ef0d5dc5bfd8678d47365604a8de8b7efa008b6266764dcd0200b10fa1e12 +size 16818 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Group-Roles-Permissions-Tab.png b/.cursor/rules/roblox/assets/creator-dashboard/Group-Roles-Permissions-Tab.png new file mode 100644 index 00000000..b8ae44da --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Group-Roles-Permissions-Tab.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:431150b620cac0b1e4cb9204a1522fcf676363aec7ab9ea49658f1e1b5d8eb9a +size 29173 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Group-Roles-Role-Color.png b/.cursor/rules/roblox/assets/creator-dashboard/Group-Roles-Role-Color.png new file mode 100644 index 00000000..10aa517c --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Group-Roles-Role-Color.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d0c8fe34d888db883230b10ab1005513eb97a7b749597363d465b9989560a20 +size 14796 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Group-Roles-Settings-Tab.png b/.cursor/rules/roblox/assets/creator-dashboard/Group-Roles-Settings-Tab.png new file mode 100644 index 00000000..f23bc0fb --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Group-Roles-Settings-Tab.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93707afb13ea90092c6162c86a290d255e1569848978e554274fa03a6acc5b98 +size 26487 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Manage-Thumbnails.png b/.cursor/rules/roblox/assets/creator-dashboard/Manage-Thumbnails.png new file mode 100644 index 00000000..68229d77 --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Manage-Thumbnails.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc9212355fd55f58ffe1ed53fdf9ee191e7278d9bfbe94d0dabb1c9803dc7f2c +size 224464 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Options-Button-Asset.png b/.cursor/rules/roblox/assets/creator-dashboard/Options-Button-Asset.png new file mode 100644 index 00000000..13fd4683 --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Options-Button-Asset.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b6a49bfa5593861585ff4a8b07a17932ff13a428e7078c5adeaafa1658dc8da +size 64161 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Options-Button-Badge.png b/.cursor/rules/roblox/assets/creator-dashboard/Options-Button-Badge.png new file mode 100644 index 00000000..80fc89c8 --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Options-Button-Badge.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4feefe7ef393bb625192ad977b1ec6a6ab6b7dba7007b9e80689c37c6e33ee3 +size 88932 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Options-Button-Developer-Product.png b/.cursor/rules/roblox/assets/creator-dashboard/Options-Button-Developer-Product.png new file mode 100644 index 00000000..fda6e95f --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Options-Button-Developer-Product.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c693fb23703fd5a4f3c39114cfc2009f2e8ea4d9e49c6d0bd0336d5af0a26c50 +size 35988 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Options-Button-Experience-Private.png b/.cursor/rules/roblox/assets/creator-dashboard/Options-Button-Experience-Private.png new file mode 100644 index 00000000..ae527728 --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Options-Button-Experience-Private.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c9177de1fc7d1cc76217fb4f3899e3498f93a246b89596bc2bc9022edce2396 +size 138444 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Options-Button-Experience-Public.png b/.cursor/rules/roblox/assets/creator-dashboard/Options-Button-Experience-Public.png new file mode 100644 index 00000000..92a51dc5 --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Options-Button-Experience-Public.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b10dd1d6eb888335e90c86cbbf705817f6ca002b0bacea84ca528ea6fc61667 +size 138091 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Options-Button-Pass.png b/.cursor/rules/roblox/assets/creator-dashboard/Options-Button-Pass.png new file mode 100644 index 00000000..d733b953 --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Options-Button-Pass.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91ff5c873d26080bb9a923e74f2a1b72f92a59b975f4b27fa6757a70ea32cacc +size 84617 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Permissions-Collaborators.png b/.cursor/rules/roblox/assets/creator-dashboard/Permissions-Collaborators.png new file mode 100644 index 00000000..41e93d3e --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Permissions-Collaborators.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cdc7adf4147b9083d28545aeb0d16ace7768fd7b62ef683f6b64952e0b7cf258 +size 32689 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Permissions-Experiences.png b/.cursor/rules/roblox/assets/creator-dashboard/Permissions-Experiences.png new file mode 100644 index 00000000..a851e0c6 --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Permissions-Experiences.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1cda1dc0056f174bc3972d44ef6742956416c0fb89d065547d694c2a3143c858 +size 41849 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Places-Start-Place-Icon.png b/.cursor/rules/roblox/assets/creator-dashboard/Places-Start-Place-Icon.png new file mode 100644 index 00000000..3f19e358 --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Places-Start-Place-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac58d4530bc02b1024a7569a82bc9b71cde42c38f038f12312e66f34f9433aea +size 140722 diff --git a/.cursor/rules/roblox/assets/creator-dashboard/Places-Start-Place-No-Icon.png b/.cursor/rules/roblox/assets/creator-dashboard/Places-Start-Place-No-Icon.png new file mode 100644 index 00000000..265a2086 --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-dashboard/Places-Start-Place-No-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5fdca7e2431c5c6e5f1005ec7f0e386eb05ee85bae23e0c62e6bb07e410ca820 +size 72006 diff --git a/.cursor/rules/roblox/assets/creator-programs/partner-program.png b/.cursor/rules/roblox/assets/creator-programs/partner-program.png new file mode 100644 index 00000000..e4d1aa38 --- /dev/null +++ b/.cursor/rules/roblox/assets/creator-programs/partner-program.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5210e9c8ed2d14d05df592056691f55262e274290dd2afe2384a1a2ea768b0a +size 51134 diff --git a/.cursor/rules/roblox/assets/data/data-store/Data-Store-API-Status.png b/.cursor/rules/roblox/assets/data/data-store/Data-Store-API-Status.png new file mode 100644 index 00000000..614fe9e5 --- /dev/null +++ b/.cursor/rules/roblox/assets/data/data-store/Data-Store-API-Status.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17745af91a0724d277cac8542bec89fdfaff72ce57323ffb1034d1ab4145b58c +size 226328 diff --git a/.cursor/rules/roblox/assets/data/data-store/Data-Store-API.png b/.cursor/rules/roblox/assets/data/data-store/Data-Store-API.png new file mode 100644 index 00000000..e5c81427 --- /dev/null +++ b/.cursor/rules/roblox/assets/data/data-store/Data-Store-API.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aacb0e624d587f87d854e5cdb5e64b8e3294e4012dc3dc92e7e472b34f1ac335 +size 197674 diff --git a/.cursor/rules/roblox/assets/data/data-store/Data-Store-Status.png b/.cursor/rules/roblox/assets/data/data-store/Data-Store-Status.png new file mode 100644 index 00000000..5fa5fdfe --- /dev/null +++ b/.cursor/rules/roblox/assets/data/data-store/Data-Store-Status.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b050da19a3e5d1f7bc1b0c348efbd819176662ca61c3399cbb2336694582591f +size 128360 diff --git a/.cursor/rules/roblox/assets/data/data-store/Data-Stores-Manager-Compare-Versions.png b/.cursor/rules/roblox/assets/data/data-store/Data-Stores-Manager-Compare-Versions.png new file mode 100644 index 00000000..d2033975 --- /dev/null +++ b/.cursor/rules/roblox/assets/data/data-store/Data-Stores-Manager-Compare-Versions.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fcfd871117fea127204f02b175810070bcf9dd259becc24ac806d0fdaea0f5f +size 86992 diff --git a/.cursor/rules/roblox/assets/data/data-store/Data-Stores-Manager-Key-Entry.png b/.cursor/rules/roblox/assets/data/data-store/Data-Stores-Manager-Key-Entry.png new file mode 100644 index 00000000..6f8cd8df --- /dev/null +++ b/.cursor/rules/roblox/assets/data/data-store/Data-Stores-Manager-Key-Entry.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1de0d231c12fcc108f7f313849c450bab81c1552af7234cc4b6cf9ac2c950ea +size 108326 diff --git a/.cursor/rules/roblox/assets/data/data-store/Data-Stores-Manager-Page.png b/.cursor/rules/roblox/assets/data/data-store/Data-Stores-Manager-Page.png new file mode 100644 index 00000000..d1b73631 --- /dev/null +++ b/.cursor/rules/roblox/assets/data/data-store/Data-Stores-Manager-Page.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa34721e0e4a21ed7f3c71e70381f00b91f8eb72f205d1ab705de72a91660809 +size 74063 diff --git a/.cursor/rules/roblox/assets/data/memory-store/Memory-Usage-Critical.png b/.cursor/rules/roblox/assets/data/memory-store/Memory-Usage-Critical.png new file mode 100644 index 00000000..a74cb7cc --- /dev/null +++ b/.cursor/rules/roblox/assets/data/memory-store/Memory-Usage-Critical.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b7355f296e8b0546f7a13784172e1cc41a464e4325cd2a343e589fdec0f2bad +size 85804 diff --git a/.cursor/rules/roblox/assets/data/memory-store/Memory-Usage-Warning.png b/.cursor/rules/roblox/assets/data/memory-store/Memory-Usage-Warning.png new file mode 100644 index 00000000..09ce385e --- /dev/null +++ b/.cursor/rules/roblox/assets/data/memory-store/Memory-Usage-Warning.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa15e213f764c6295ca3c80e95b5e531aa10855d87a065161d5c9d0d6fd4165e +size 85776 diff --git a/.cursor/rules/roblox/assets/data/memory-store/Per-Partition-Limits-1.png b/.cursor/rules/roblox/assets/data/memory-store/Per-Partition-Limits-1.png new file mode 100644 index 00000000..d9911254 --- /dev/null +++ b/.cursor/rules/roblox/assets/data/memory-store/Per-Partition-Limits-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:10edaf8780beac7469a81205bc69d466e8515ba5ccdb7fb74e10ae6efa9abac5 +size 129842 diff --git a/.cursor/rules/roblox/assets/data/memory-store/Per-Partition-Limits-2.png b/.cursor/rules/roblox/assets/data/memory-store/Per-Partition-Limits-2.png new file mode 100644 index 00000000..036e3136 --- /dev/null +++ b/.cursor/rules/roblox/assets/data/memory-store/Per-Partition-Limits-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d5484eba04147bba86636708d59a45a766f3d17c5dd31814ae3b574a221cf5f +size 82190 diff --git a/.cursor/rules/roblox/assets/data/memory-store/Per-Partition-Limits-3.png b/.cursor/rules/roblox/assets/data/memory-store/Per-Partition-Limits-3.png new file mode 100644 index 00000000..238975e7 --- /dev/null +++ b/.cursor/rules/roblox/assets/data/memory-store/Per-Partition-Limits-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de50531a2e41e275f0706c9f16f3bbd785b5d6f2fbd933205317e059d164381d +size 94901 diff --git a/.cursor/rules/roblox/assets/data/memory-store/Per-Partition-Limits-4.png b/.cursor/rules/roblox/assets/data/memory-store/Per-Partition-Limits-4.png new file mode 100644 index 00000000..0ce31709 --- /dev/null +++ b/.cursor/rules/roblox/assets/data/memory-store/Per-Partition-Limits-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:079c582d03872fdd7cde239174cdc2cc9213b087e960b74e55d67c72ecc7ec3b +size 248171 diff --git a/.cursor/rules/roblox/assets/data/memory-store/Priority-Queue-Diagram.png b/.cursor/rules/roblox/assets/data/memory-store/Priority-Queue-Diagram.png new file mode 100644 index 00000000..0e1d8b4f --- /dev/null +++ b/.cursor/rules/roblox/assets/data/memory-store/Priority-Queue-Diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b61c21e3dd99bf010115a1fcd992f8a2d890610b41c728bd79442e85797e0283 +size 39967 diff --git a/.cursor/rules/roblox/assets/data/memory-store/Regular-Queue-Diagram.png b/.cursor/rules/roblox/assets/data/memory-store/Regular-Queue-Diagram.png new file mode 100644 index 00000000..9d1b49dd --- /dev/null +++ b/.cursor/rules/roblox/assets/data/memory-store/Regular-Queue-Diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a7912df45ba29b5c9d68382c36e5a4ef5cb3cf2cb7e9d3795514eab6373671b +size 32506 diff --git a/.cursor/rules/roblox/assets/data/memory-store/Request-Failure-Critical.png b/.cursor/rules/roblox/assets/data/memory-store/Request-Failure-Critical.png new file mode 100644 index 00000000..7387e29a --- /dev/null +++ b/.cursor/rules/roblox/assets/data/memory-store/Request-Failure-Critical.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ffadc420748c3c1c02464fffa15f8e804a52b26071b99fb48bfdd45e4eb32f17 +size 139977 diff --git a/.cursor/rules/roblox/assets/data/memory-store/Request-Throttled-Critical.png b/.cursor/rules/roblox/assets/data/memory-store/Request-Throttled-Critical.png new file mode 100644 index 00000000..07cd5f63 --- /dev/null +++ b/.cursor/rules/roblox/assets/data/memory-store/Request-Throttled-Critical.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55bb96a5f579351022026f4b74df87623165cc448f57c62f7f4bdaa193567a57 +size 103697 diff --git a/.cursor/rules/roblox/assets/data/player-data-purchasing/Sample-Hierarchy.png b/.cursor/rules/roblox/assets/data/player-data-purchasing/Sample-Hierarchy.png new file mode 100644 index 00000000..cee4dcdd --- /dev/null +++ b/.cursor/rules/roblox/assets/data/player-data-purchasing/Sample-Hierarchy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:844e003b0805842b51a1be3a4a34dfd8b438c8406aede310418a17e5ca809263 +size 106123 diff --git a/.cursor/rules/roblox/assets/data/player-data-purchasing/data-load-diagram.png b/.cursor/rules/roblox/assets/data/player-data-purchasing/data-load-diagram.png new file mode 100644 index 00000000..22e07be6 --- /dev/null +++ b/.cursor/rules/roblox/assets/data/player-data-purchasing/data-load-diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4084700b1df3c4b15b086406310ed61f13520ae32ce54e216f086e6cc4f3cf4b +size 17959 diff --git a/.cursor/rules/roblox/assets/data/player-data-purchasing/data-save-diagram.png b/.cursor/rules/roblox/assets/data/player-data-purchasing/data-save-diagram.png new file mode 100644 index 00000000..d791dddd --- /dev/null +++ b/.cursor/rules/roblox/assets/data/player-data-purchasing/data-save-diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f3ab5d8e5107ba003c78d20f636ec5a8a00044b7354db4d82cbe1b3cab6bff0 +size 18782 diff --git a/.cursor/rules/roblox/assets/data/player-data-purchasing/data-warning.png b/.cursor/rules/roblox/assets/data/player-data-purchasing/data-warning.png new file mode 100644 index 00000000..ddbe883d --- /dev/null +++ b/.cursor/rules/roblox/assets/data/player-data-purchasing/data-warning.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c0d9fa7b765e6dfdccdbd4aeff705acd7b1a5a929d3b662f04663ef13dba9b3 +size 55946 diff --git a/.cursor/rules/roblox/assets/data/player-data-purchasing/retry-diagram.png b/.cursor/rules/roblox/assets/data/player-data-purchasing/retry-diagram.png new file mode 100644 index 00000000..db5bcbd8 --- /dev/null +++ b/.cursor/rules/roblox/assets/data/player-data-purchasing/retry-diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5399bf8fa97cf4f7db707ceecf5f503086a55d02962e31a5bc90fa696e806f54 +size 24572 diff --git a/.cursor/rules/roblox/assets/data/player-data-purchasing/sample-architecture.png b/.cursor/rules/roblox/assets/data/player-data-purchasing/sample-architecture.png new file mode 100644 index 00000000..8736f085 --- /dev/null +++ b/.cursor/rules/roblox/assets/data/player-data-purchasing/sample-architecture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:abb3a2d3c58047829e7ee60e8db293dd5bfcdda9aca79ffc358b0bdd9ac0b255 +size 22949 diff --git a/.cursor/rules/roblox/assets/data/player-data-purchasing/session-lock-diagram.png b/.cursor/rules/roblox/assets/data/player-data-purchasing/session-lock-diagram.png new file mode 100644 index 00000000..7df9635b --- /dev/null +++ b/.cursor/rules/roblox/assets/data/player-data-purchasing/session-lock-diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3898ff19b0eb8209674a5a32708e86fe7b7917a7fda0c30a800b542da71dd80c +size 60534 diff --git a/.cursor/rules/roblox/assets/data/secrets-store/LocalSecrets.png b/.cursor/rules/roblox/assets/data/secrets-store/LocalSecrets.png new file mode 100644 index 00000000..387a72f9 --- /dev/null +++ b/.cursor/rules/roblox/assets/data/secrets-store/LocalSecrets.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f8648672085b0068d532086b37b316a049d69247fd10233c7706951110c9bfd +size 528789 diff --git a/.cursor/rules/roblox/assets/data/secrets-store/LocalSecrets_Edit.png b/.cursor/rules/roblox/assets/data/secrets-store/LocalSecrets_Edit.png new file mode 100644 index 00000000..63cba331 --- /dev/null +++ b/.cursor/rules/roblox/assets/data/secrets-store/LocalSecrets_Edit.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ec5c7b1b73ee3bb089eaaea0c87f10b5502ec3fa9c5acaf623527bb68fc0d06 +size 412910 diff --git a/.cursor/rules/roblox/assets/data/secrets-store/local-secrets.png b/.cursor/rules/roblox/assets/data/secrets-store/local-secrets.png new file mode 100644 index 00000000..1b805419 --- /dev/null +++ b/.cursor/rules/roblox/assets/data/secrets-store/local-secrets.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8679d4cb3e43ca0a4af0a1bd94cfb5db19dd2ce21b82122d6925912dd72e1e49 +size 186549 diff --git a/.cursor/rules/roblox/assets/developer-modules/emote-bar/Mega-Emote.jpg b/.cursor/rules/roblox/assets/developer-modules/emote-bar/Mega-Emote.jpg new file mode 100644 index 00000000..b2eb083e --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/emote-bar/Mega-Emote.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6087edb97e8471a19e534b70904cce5557e0eaaa4be413ef6ed50c76d9f77533 +size 232337 diff --git a/.cursor/rules/roblox/assets/developer-modules/emote-bar/Script-ConfigureEmotes.png b/.cursor/rules/roblox/assets/developer-modules/emote-bar/Script-ConfigureEmotes.png new file mode 100644 index 00000000..4b22ab5c --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/emote-bar/Script-ConfigureEmotes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9865f0e40a9b3dc75629e6021398eeb59005008bae56f432d23bc035913d1fa6 +size 19652 diff --git a/.cursor/rules/roblox/assets/developer-modules/emote-bar/Showcase-SM.mp4 b/.cursor/rules/roblox/assets/developer-modules/emote-bar/Showcase-SM.mp4 new file mode 100644 index 00000000..0abd7d5d --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/emote-bar/Showcase-SM.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e3879ee309e5e9fa53eba8bd45e32f1b628ec3c5f285ad823ef0d27b056654e +size 3030964 diff --git a/.cursor/rules/roblox/assets/developer-modules/emote-bar/Showcase.mp4 b/.cursor/rules/roblox/assets/developer-modules/emote-bar/Showcase.mp4 new file mode 100644 index 00000000..b08820e1 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/emote-bar/Showcase.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3326da94b6f553d249063ce283d96f976183c223f9bd2a5cc09a7344dcf7ddb +size 8647481 diff --git a/.cursor/rules/roblox/assets/developer-modules/emote-bar/Toolbox-Icon.png b/.cursor/rules/roblox/assets/developer-modules/emote-bar/Toolbox-Icon.png new file mode 100644 index 00000000..7a4c155d --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/emote-bar/Toolbox-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c2a01d370b5dd369201e586c9dfe038a3a1227f16ba0e372bdb988d7687af9c +size 39304 diff --git a/.cursor/rules/roblox/assets/developer-modules/event-sequencer/BlankScene-Folder.png b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/BlankScene-Folder.png new file mode 100644 index 00000000..8057ded9 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/BlankScene-Folder.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b67ee310fb49e657bfab61dd68e2ed8d4e152f4b5419f0a6f842ee6acc14de34 +size 37253 diff --git a/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Edit-Concert-Template.png b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Edit-Concert-Template.png new file mode 100644 index 00000000..eec8e950 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Edit-Concert-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb6c5b55b11cb29845259860a5f79941593d036e8fcfab6e5f8e2f69ae73e251 +size 92213 diff --git a/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Inline-BoolValue-Enabled.png b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Inline-BoolValue-Enabled.png new file mode 100644 index 00000000..f1b9a535 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Inline-BoolValue-Enabled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3375cfa80cac786d54a99bf53a96e434f7747b4ce0e3254a8935d977bb479993 +size 16506 diff --git a/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Inline-BoolValue.png b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Inline-BoolValue.png new file mode 100644 index 00000000..84747781 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Inline-BoolValue.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23ca26fc8b2d9dd24385156e77b9c1df19dad53841ef798860faae6589f76672 +size 42562 diff --git a/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Lighting-Service-Instances.png b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Lighting-Service-Instances.png new file mode 100644 index 00000000..b8800b4c --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Lighting-Service-Instances.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20dcef493f54af053823f6e6f474a6cee19ab4d285480dbd2c946a731825295c +size 30064 diff --git a/.cursor/rules/roblox/assets/developer-modules/event-sequencer/ReplicatedStorage-BlankScene-Folder.png b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/ReplicatedStorage-BlankScene-Folder.png new file mode 100644 index 00000000..d91eea08 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/ReplicatedStorage-BlankScene-Folder.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dae70d1a79f7ec4bba8a6a658f2694a07558c0e32391ac6326b0ab89384cf377 +size 20898 diff --git a/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Saved-Lighting-Attributes.png b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Saved-Lighting-Attributes.png new file mode 100644 index 00000000..5180e04f --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Saved-Lighting-Attributes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7ab8c547ee4c0e72868f04002c1803a5646986bede575f5bd1bd60bcd8af226 +size 58360 diff --git a/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Saved-Lighting-Instances.png b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Saved-Lighting-Instances.png new file mode 100644 index 00000000..15d91b39 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Saved-Lighting-Instances.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc0ed86fc9290d93b147c108c5c90b493c41f7f5831aa6549a30498979a4c34e +size 39521 diff --git a/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Saved-Terrain-TerrainRegion.png b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Saved-Terrain-TerrainRegion.png new file mode 100644 index 00000000..9b16afaf --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Saved-Terrain-TerrainRegion.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c7b63ce094105d676de48bff105ec2579d15996909ab03d4528a64601c0e9bb +size 27754 diff --git a/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Scene-Attribute-TimeLength.png b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Scene-Attribute-TimeLength.png new file mode 100644 index 00000000..45541df1 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Scene-Attribute-TimeLength.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30c8023df7620acc801c389c7e189d2fe2ff57dd97532ae7b156e68291419e81 +size 5320 diff --git a/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Seek-Bar-SM.mp4 b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Seek-Bar-SM.mp4 new file mode 100644 index 00000000..1171082f --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Seek-Bar-SM.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e1d7930b93da1e5e5e9585277649b0b1feeb10ad9801597bf08d2d0bdf811bc +size 4616083 diff --git a/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Seek-Bar.mp4 b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Seek-Bar.mp4 new file mode 100644 index 00000000..434f5d8e --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Seek-Bar.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4419902f749fda6c77eddc39777d8f186feb94e16a25429103b89f6b490a665 +size 10402454 diff --git a/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Terrain-Class.png b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Terrain-Class.png new file mode 100644 index 00000000..b051b306 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Terrain-Class.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20c9d7b8121594370e070a51f33b73fab232d985003adca4cd30c2f653718bb9 +size 14937 diff --git a/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Toolbox-Icon.png b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Toolbox-Icon.png new file mode 100644 index 00000000..321b59cc --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/event-sequencer/Toolbox-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9374daff28b4a6b2ab2c234f55a35f588b4f2d11107458c9000c22ac37de2f31 +size 36829 diff --git a/.cursor/rules/roblox/assets/developer-modules/friends-locator/Custom-UI-Example.jpg b/.cursor/rules/roblox/assets/developer-modules/friends-locator/Custom-UI-Example.jpg new file mode 100644 index 00000000..0f07e134 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/friends-locator/Custom-UI-Example.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c77eb59017caa0369b0a668abc81c909db6fc53e0384081fa7e2e75567d0986 +size 164474 diff --git a/.cursor/rules/roblox/assets/developer-modules/friends-locator/Custom-UI-Objects-In-Frame.png b/.cursor/rules/roblox/assets/developer-modules/friends-locator/Custom-UI-Objects-In-Frame.png new file mode 100644 index 00000000..8e8ea5c1 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/friends-locator/Custom-UI-Objects-In-Frame.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb89ce9c3908eb1cd03f63e1d8fbcc3f245c3f77cc686b18a66a291715481ac6 +size 18934 diff --git a/.cursor/rules/roblox/assets/developer-modules/friends-locator/Custom-UI-Portrait-DisplayName.png b/.cursor/rules/roblox/assets/developer-modules/friends-locator/Custom-UI-Portrait-DisplayName.png new file mode 100644 index 00000000..01913901 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/friends-locator/Custom-UI-Portrait-DisplayName.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd332474e6ecd31ef067fac3bb48db784617d725fef513b663ac82253c4352ee +size 18561 diff --git a/.cursor/rules/roblox/assets/developer-modules/friends-locator/Custom-UI-ScreenGui-Disabled.png b/.cursor/rules/roblox/assets/developer-modules/friends-locator/Custom-UI-ScreenGui-Disabled.png new file mode 100644 index 00000000..ac12b5b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/friends-locator/Custom-UI-ScreenGui-Disabled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f169bc59182f037a0e25599fa6de351a0d3e097d84c902821f6fac087840af54 +size 9028 diff --git a/.cursor/rules/roblox/assets/developer-modules/friends-locator/LocalScript-ConfigureFriendsLocator.png b/.cursor/rules/roblox/assets/developer-modules/friends-locator/LocalScript-ConfigureFriendsLocator.png new file mode 100644 index 00000000..0da8027e --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/friends-locator/LocalScript-ConfigureFriendsLocator.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:525f198f65932caeece306ebf3386691288fc27527f1ee96f084459f300fddfa +size 18114 diff --git a/.cursor/rules/roblox/assets/developer-modules/friends-locator/Showcase-SM.mp4 b/.cursor/rules/roblox/assets/developer-modules/friends-locator/Showcase-SM.mp4 new file mode 100644 index 00000000..f50671fb --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/friends-locator/Showcase-SM.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73fa027452ac72ea45b06bd3ddb363ee51f69dedc99d32ab0310d986a33db99a +size 5045609 diff --git a/.cursor/rules/roblox/assets/developer-modules/friends-locator/Showcase.mp4 b/.cursor/rules/roblox/assets/developer-modules/friends-locator/Showcase.mp4 new file mode 100644 index 00000000..731a1219 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/friends-locator/Showcase.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6eb1cc9f70652b23600f88fe18e32ae6fd6097fc94efe57821041e3e2d723308 +size 11441739 diff --git a/.cursor/rules/roblox/assets/developer-modules/friends-locator/Testing-On-Client.jpg b/.cursor/rules/roblox/assets/developer-modules/friends-locator/Testing-On-Client.jpg new file mode 100644 index 00000000..e64bcd8d --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/friends-locator/Testing-On-Client.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0af3f2c7eb4a56245925f414bac94d98c6941a4bfe6203e051bbd2bb15254bcf +size 130770 diff --git a/.cursor/rules/roblox/assets/developer-modules/friends-locator/Toolbox-Icon.png b/.cursor/rules/roblox/assets/developer-modules/friends-locator/Toolbox-Icon.png new file mode 100644 index 00000000..22d1020b --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/friends-locator/Toolbox-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:536739305fe1b74ab0bb3d5cbad3e9f330bbe7fb5f16ac1d69e4d646f20a4aed +size 37881 diff --git a/.cursor/rules/roblox/assets/developer-modules/merch-booth/Item-URL-Asset-ID.png b/.cursor/rules/roblox/assets/developer-modules/merch-booth/Item-URL-Asset-ID.png new file mode 100644 index 00000000..63c3bcd1 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/merch-booth/Item-URL-Asset-ID.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cef0f5306aac29b79b812cda2692881ebd1fb4317947ac4a7bb5cca00c9e6d03 +size 25086 diff --git a/.cursor/rules/roblox/assets/developer-modules/merch-booth/LocalScript-ConfigureMerchBooth.png b/.cursor/rules/roblox/assets/developer-modules/merch-booth/LocalScript-ConfigureMerchBooth.png new file mode 100644 index 00000000..cf0a19e6 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/merch-booth/LocalScript-ConfigureMerchBooth.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46be9815411df94fb5244fef62e40753894d2027fb11324f9bb18b1af094453d +size 17455 diff --git a/.cursor/rules/roblox/assets/developer-modules/merch-booth/LocalScript-In-StarterPlayerScripts.png b/.cursor/rules/roblox/assets/developer-modules/merch-booth/LocalScript-In-StarterPlayerScripts.png new file mode 100644 index 00000000..20bc8d8e --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/merch-booth/LocalScript-In-StarterPlayerScripts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b50c88b493a7e7c155cff8b0138c75e50b38682a84a1ebb142dd21f6eee50412 +size 20224 diff --git a/.cursor/rules/roblox/assets/developer-modules/merch-booth/Proximity-Prompts.mp4 b/.cursor/rules/roblox/assets/developer-modules/merch-booth/Proximity-Prompts.mp4 new file mode 100644 index 00000000..5cad5a5d --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/merch-booth/Proximity-Prompts.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6be9ef41140e150eed36c2fd07c8e7a471b223c8342c9a1855759aa159c4f7cd +size 3959807 diff --git a/.cursor/rules/roblox/assets/developer-modules/merch-booth/Shoppable-Region-Collision.png b/.cursor/rules/roblox/assets/developer-modules/merch-booth/Shoppable-Region-Collision.png new file mode 100644 index 00000000..e9c6c7da --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/merch-booth/Shoppable-Region-Collision.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec21a9bb09d29e3dad7027a00fa7010231015476127e9bb5061a354fcd8c58e8 +size 14217 diff --git a/.cursor/rules/roblox/assets/developer-modules/merch-booth/Shoppable-Region-Part.jpg b/.cursor/rules/roblox/assets/developer-modules/merch-booth/Shoppable-Region-Part.jpg new file mode 100644 index 00000000..51284396 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/merch-booth/Shoppable-Region-Part.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:428d782051255b52343a394e3cb2a1350df745e8a7be02e47ea929d9cad7ff60 +size 159589 diff --git a/.cursor/rules/roblox/assets/developer-modules/merch-booth/Shoppable-Region-Transparency.png b/.cursor/rules/roblox/assets/developer-modules/merch-booth/Shoppable-Region-Transparency.png new file mode 100644 index 00000000..28412051 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/merch-booth/Shoppable-Region-Transparency.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d21f01b10bbf34135cf3ee7dbe030d42fa845e081e229396206e073fbeb3ad5d +size 28597 diff --git a/.cursor/rules/roblox/assets/developer-modules/merch-booth/Shoppable-Regions.mp4 b/.cursor/rules/roblox/assets/developer-modules/merch-booth/Shoppable-Regions.mp4 new file mode 100644 index 00000000..da20d3aa --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/merch-booth/Shoppable-Regions.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:abfb96db2f6c9458f77e67811a4fa8eee12c3f92a6eb60423295d462b41544e1 +size 6041417 diff --git a/.cursor/rules/roblox/assets/developer-modules/merch-booth/Showcase-SM.mp4 b/.cursor/rules/roblox/assets/developer-modules/merch-booth/Showcase-SM.mp4 new file mode 100644 index 00000000..cff7aae4 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/merch-booth/Showcase-SM.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16f40154b20ff38b9e1c01687cff5aa62fe9ce764a6b329fc61ef468b2e4e411 +size 5111928 diff --git a/.cursor/rules/roblox/assets/developer-modules/merch-booth/Showcase.mp4 b/.cursor/rules/roblox/assets/developer-modules/merch-booth/Showcase.mp4 new file mode 100644 index 00000000..333ecd15 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/merch-booth/Showcase.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78ca588757298c7c97b196e0c07cdab7b9c82d7dc554aadf3953288e11070fc8 +size 11094020 diff --git a/.cursor/rules/roblox/assets/developer-modules/merch-booth/Toolbox-Icon.png b/.cursor/rules/roblox/assets/developer-modules/merch-booth/Toolbox-Icon.png new file mode 100644 index 00000000..efa2051c --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/merch-booth/Toolbox-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19726f0d145c4817bbd5292e90a3c0f3284bd13422ed4583e00d84e2b030b1b9 +size 37229 diff --git a/.cursor/rules/roblox/assets/developer-modules/merch-booth/UI-Catalog-Button.jpg b/.cursor/rules/roblox/assets/developer-modules/merch-booth/UI-Catalog-Button.jpg new file mode 100644 index 00000000..c4414ff6 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/merch-booth/UI-Catalog-Button.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad3efb01e26063461b875b1831d0a764f1f073cb712b2ff78f0c82f69cc95051 +size 231391 diff --git a/.cursor/rules/roblox/assets/developer-modules/merch-booth/UI-Visual-Customization.jpg b/.cursor/rules/roblox/assets/developer-modules/merch-booth/UI-Visual-Customization.jpg new file mode 100644 index 00000000..1524b14c --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/merch-booth/UI-Visual-Customization.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f801598788e874245780490956deb0e68ffc72df0d322e2fa12731efa19615e +size 195285 diff --git a/.cursor/rules/roblox/assets/developer-modules/photo-booth/Bundled-Mesh-Explorer.png b/.cursor/rules/roblox/assets/developer-modules/photo-booth/Bundled-Mesh-Explorer.png new file mode 100644 index 00000000..0c2d5815 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/photo-booth/Bundled-Mesh-Explorer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc9aae3b156a05c586b5cae0418f6be4d6d34c6edecc726fd6ed4696d7ef2e26 +size 25634 diff --git a/.cursor/rules/roblox/assets/developer-modules/photo-booth/Bundled-Mesh-Workspace.jpg b/.cursor/rules/roblox/assets/developer-modules/photo-booth/Bundled-Mesh-Workspace.jpg new file mode 100644 index 00000000..e0832868 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/photo-booth/Bundled-Mesh-Workspace.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40f4f495d537dc543033dd6ae4b45b7ad3748352f61c40e3e395133a9fb6537e +size 114789 diff --git a/.cursor/rules/roblox/assets/developer-modules/photo-booth/Changed-Message.jpg b/.cursor/rules/roblox/assets/developer-modules/photo-booth/Changed-Message.jpg new file mode 100644 index 00000000..23392c38 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/photo-booth/Changed-Message.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:735ff6773d67a138aab133186a966b597c20c7c0a4c111bf622440b123197091 +size 174252 diff --git a/.cursor/rules/roblox/assets/developer-modules/photo-booth/LocalScript-ConfigurePhotoBooth.png b/.cursor/rules/roblox/assets/developer-modules/photo-booth/LocalScript-ConfigurePhotoBooth.png new file mode 100644 index 00000000..10dd2c3d --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/photo-booth/LocalScript-ConfigurePhotoBooth.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a15f1e85f28c08e7559a7055309e126f8be047e2f2b9526bdeda6922315c8b3e +size 16761 diff --git a/.cursor/rules/roblox/assets/developer-modules/photo-booth/Showcase-SM.mp4 b/.cursor/rules/roblox/assets/developer-modules/photo-booth/Showcase-SM.mp4 new file mode 100644 index 00000000..f0d4a1ae --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/photo-booth/Showcase-SM.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:642e008d753c8403630e1ffaa9dc29253b7940fa5abc697979420ee51730a3bc +size 2577874 diff --git a/.cursor/rules/roblox/assets/developer-modules/photo-booth/Showcase.mp4 b/.cursor/rules/roblox/assets/developer-modules/photo-booth/Showcase.mp4 new file mode 100644 index 00000000..6a4ab4e2 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/photo-booth/Showcase.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6067f58d97459c6cd64a81bb7626edc2bb22122ddaa117fdcebf45eff346aaad +size 6047197 diff --git a/.cursor/rules/roblox/assets/developer-modules/photo-booth/Toolbox-Icon.png b/.cursor/rules/roblox/assets/developer-modules/photo-booth/Toolbox-Icon.png new file mode 100644 index 00000000..1b24493c --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/photo-booth/Toolbox-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a29748dd2b0f5b6be134c805f7b8dba8390ecadab87a49bc8a86264531bf6a14 +size 39230 diff --git a/.cursor/rules/roblox/assets/developer-modules/profile-card/Other-Card-Status-Empty.png b/.cursor/rules/roblox/assets/developer-modules/profile-card/Other-Card-Status-Empty.png new file mode 100644 index 00000000..e7cccd9f --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/profile-card/Other-Card-Status-Empty.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3e93db4076f0537d1e286f59b083c56526bef49f59cf5a26b99d46eba55b20e +size 74543 diff --git a/.cursor/rules/roblox/assets/developer-modules/profile-card/Other-Card-Status-Set.png b/.cursor/rules/roblox/assets/developer-modules/profile-card/Other-Card-Status-Set.png new file mode 100644 index 00000000..90640379 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/profile-card/Other-Card-Status-Set.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ebe634340366c002313bb7dca06f50f684a00379396a35531dfd50f90f4f46d4 +size 87493 diff --git a/.cursor/rules/roblox/assets/developer-modules/profile-card/Player-Card-Status-Empty.png b/.cursor/rules/roblox/assets/developer-modules/profile-card/Player-Card-Status-Empty.png new file mode 100644 index 00000000..2f64448b --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/profile-card/Player-Card-Status-Empty.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82d8ee1ffb69875858e1f2e226bc465500e6d257bb8b088237cbacf4c13be732 +size 73220 diff --git a/.cursor/rules/roblox/assets/developer-modules/profile-card/Player-Card-Status-Entering.png b/.cursor/rules/roblox/assets/developer-modules/profile-card/Player-Card-Status-Entering.png new file mode 100644 index 00000000..d25d8db7 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/profile-card/Player-Card-Status-Entering.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1c132c39a79f7ff69a6c61dfe0dde4504da6f34206293e7ffbc0f64136bb2d7 +size 78154 diff --git a/.cursor/rules/roblox/assets/developer-modules/profile-card/Player-Card-Status-Invalid.png b/.cursor/rules/roblox/assets/developer-modules/profile-card/Player-Card-Status-Invalid.png new file mode 100644 index 00000000..9518ef7d --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/profile-card/Player-Card-Status-Invalid.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4def4fa9390a0e9a7230a6f50f67bb0f05c53deff1c748de17cf1d646c9ba861 +size 94036 diff --git a/.cursor/rules/roblox/assets/developer-modules/profile-card/Player-Card-Status-Set.png b/.cursor/rules/roblox/assets/developer-modules/profile-card/Player-Card-Status-Set.png new file mode 100644 index 00000000..f966cf9a --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/profile-card/Player-Card-Status-Set.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8dea4d07ff349ec2dca4140c497233c0d9b3c7e2306f320ce3bce4b375828303 +size 72974 diff --git a/.cursor/rules/roblox/assets/developer-modules/profile-card/Player-Icon.jpg b/.cursor/rules/roblox/assets/developer-modules/profile-card/Player-Icon.jpg new file mode 100644 index 00000000..d8da4250 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/profile-card/Player-Icon.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27b3d86db8aae444fb5f59f615c9707ad9e3300fa32a96b9ae0b4830b21696b7 +size 239242 diff --git a/.cursor/rules/roblox/assets/developer-modules/profile-card/Showcase-SM.mp4 b/.cursor/rules/roblox/assets/developer-modules/profile-card/Showcase-SM.mp4 new file mode 100644 index 00000000..605da1c0 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/profile-card/Showcase-SM.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0efdd6750061c5a528ee4f1ec5f4fc4a2b833efed316eb0d252ff61bb7e9b7c5 +size 3812621 diff --git a/.cursor/rules/roblox/assets/developer-modules/profile-card/Showcase.mp4 b/.cursor/rules/roblox/assets/developer-modules/profile-card/Showcase.mp4 new file mode 100644 index 00000000..eb540466 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/profile-card/Showcase.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:869670db090b66207286268e4c082b3d79d1e132950914813c7f4b94951e4795 +size 8279615 diff --git a/.cursor/rules/roblox/assets/developer-modules/profile-card/Toolbox-Icon.png b/.cursor/rules/roblox/assets/developer-modules/profile-card/Toolbox-Icon.png new file mode 100644 index 00000000..94c39d01 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/profile-card/Toolbox-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed3764e2dfda0f48832002ecb273253e64a185d187c52ae8cb90dad9a804c182 +size 36368 diff --git a/.cursor/rules/roblox/assets/developer-modules/scavenger-hunt/Region-Structure.png b/.cursor/rules/roblox/assets/developer-modules/scavenger-hunt/Region-Structure.png new file mode 100644 index 00000000..fb87f2ed --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/scavenger-hunt/Region-Structure.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9810160dcf6a97b4782691863ec6a6c677b9b8966640710558d4a857a5182fb5 +size 7507 diff --git a/.cursor/rules/roblox/assets/developer-modules/scavenger-hunt/Showcase-SM.mp4 b/.cursor/rules/roblox/assets/developer-modules/scavenger-hunt/Showcase-SM.mp4 new file mode 100644 index 00000000..116fd1de --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/scavenger-hunt/Showcase-SM.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0eea1c692620eb57d1f8f446c42253a6cd6ccc0f7a2b4061a41daae1ffce05c6 +size 6212803 diff --git a/.cursor/rules/roblox/assets/developer-modules/scavenger-hunt/Showcase.mp4 b/.cursor/rules/roblox/assets/developer-modules/scavenger-hunt/Showcase.mp4 new file mode 100644 index 00000000..1bc8de63 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/scavenger-hunt/Showcase.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc533afb3b73a4767a875eb885b2ca52b27394670dea330da2eb38dcaf08845b +size 15411251 diff --git a/.cursor/rules/roblox/assets/developer-modules/scavenger-hunt/Token-BasePart-Structure.png b/.cursor/rules/roblox/assets/developer-modules/scavenger-hunt/Token-BasePart-Structure.png new file mode 100644 index 00000000..c08fe1d3 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/scavenger-hunt/Token-BasePart-Structure.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f82b95e03b2e4543bda2b6bc1f628ebc894d1d2aa03cb70723a5f736351f2b7b +size 10060 diff --git a/.cursor/rules/roblox/assets/developer-modules/scavenger-hunt/Token-Model-Structure.png b/.cursor/rules/roblox/assets/developer-modules/scavenger-hunt/Token-Model-Structure.png new file mode 100644 index 00000000..ee0030a2 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/scavenger-hunt/Token-Model-Structure.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbfd7b3677af0a10de9024c25b830ae32e56e8415b5bba8058ac9625b9c2556a +size 13218 diff --git a/.cursor/rules/roblox/assets/developer-modules/scavenger-hunt/Token1-Explorer.png b/.cursor/rules/roblox/assets/developer-modules/scavenger-hunt/Token1-Explorer.png new file mode 100644 index 00000000..7855a244 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/scavenger-hunt/Token1-Explorer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50a04a09ce859e3e825af16869447ca9b7488aac0a04bbf1d3a2241f7da98ae0 +size 28535 diff --git a/.cursor/rules/roblox/assets/developer-modules/scavenger-hunt/Toolbox-Icon.png b/.cursor/rules/roblox/assets/developer-modules/scavenger-hunt/Toolbox-Icon.png new file mode 100644 index 00000000..da03bc58 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/scavenger-hunt/Toolbox-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0988104d9bf3e3acb9d63b1e5606e63de2bf4b581f972adcbe58316bc3361f82 +size 37828 diff --git a/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Depth-Of-Field-Off.jpg b/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Depth-Of-Field-Off.jpg new file mode 100644 index 00000000..6f9f7eed --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Depth-Of-Field-Off.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:232d87a045b69cab5542eb6604f2c39c118685ebdfb78cc60fe3da5901bbf18b +size 151630 diff --git a/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Depth-Of-Field-On.jpg b/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Depth-Of-Field-On.jpg new file mode 100644 index 00000000..2106b27f --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Depth-Of-Field-On.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e65788cc288d2c1ecad17a1b08f1fba16dfcc67e3b547ce5af3319ab0979e45d +size 139618 diff --git a/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Filters-Dramatic.jpg b/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Filters-Dramatic.jpg new file mode 100644 index 00000000..5fdca55b --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Filters-Dramatic.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91a6ead6b6acbd17a451a7e2e69c66100f73eaa898508115c0b6a5bc912b19ba +size 186781 diff --git a/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Filters-Monochrome.jpg b/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Filters-Monochrome.jpg new file mode 100644 index 00000000..40e4eaf0 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Filters-Monochrome.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3a65d29e3488c93f19d199095a7f1dbd21571596283b8685526aa441477dc10 +size 144126 diff --git a/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Filters-Soft.jpg b/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Filters-Soft.jpg new file mode 100644 index 00000000..c9ea214c --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Filters-Soft.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf480c1072db361efe12e8949f0ed91a4f2ca2b316d8e8dabed3a8ab75241e7d +size 161461 diff --git a/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Poses-Flossing.jpg b/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Poses-Flossing.jpg new file mode 100644 index 00000000..9ad2a386 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Poses-Flossing.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e029ab2d690fe5fe760f12c02d61893c7ba8cf30d26f086f3937407ac73e429b +size 156574 diff --git a/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Poses-Louder.jpg b/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Poses-Louder.jpg new file mode 100644 index 00000000..fb9c53d4 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Poses-Louder.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed6f363ff80b5cd95ff11eb3a88c2e78cf32bc64340d73ae0c803c5c161f9aed +size 154239 diff --git a/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Poses-Twirl.jpg b/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Poses-Twirl.jpg new file mode 100644 index 00000000..c30e239d --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Poses-Twirl.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:379847ff9a24f53d2bceb8347a41b754fbe1dab3cb2da55e8ec02506ceb2e9b3 +size 158288 diff --git a/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Showcase-SM.mp4 b/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Showcase-SM.mp4 new file mode 100644 index 00000000..99c4f65d --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Showcase-SM.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:deaf703a9d7399321a2ae4c5e693c20d3e0f34d344dc35cd35a554c8b51df02f +size 6329459 diff --git a/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Showcase.mp4 b/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Showcase.mp4 new file mode 100644 index 00000000..7e0432c8 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Showcase.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b8511b037b7abb6560e5198890550384391db8bc3862be1c5fc43382c20f808 +size 15058623 diff --git a/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Toolbox-Icon.png b/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Toolbox-Icon.png new file mode 100644 index 00000000..21bb30ef --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/selfie-mode/Toolbox-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5b656ee441bba58492a5ad299f03463ca526df594f025cfc91dc90bc1a2960e +size 37096 diff --git a/.cursor/rules/roblox/assets/developer-modules/social-interactions/LocalScript-ConfigureSocialInteractions.png b/.cursor/rules/roblox/assets/developer-modules/social-interactions/LocalScript-ConfigureSocialInteractions.png new file mode 100644 index 00000000..2bd371b5 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/social-interactions/LocalScript-ConfigureSocialInteractions.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:560d372fec7343c5245040e0ae63e104339a28ae57acc8fe5ff96ba88d4f70b3 +size 18390 diff --git a/.cursor/rules/roblox/assets/developer-modules/social-interactions/Showcase-SM.mp4 b/.cursor/rules/roblox/assets/developer-modules/social-interactions/Showcase-SM.mp4 new file mode 100644 index 00000000..be98d75f --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/social-interactions/Showcase-SM.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce2fa933cdee8e765325a20c06a01c1e77de8ad1ad63b91f0b035cb7856a05af +size 3013328 diff --git a/.cursor/rules/roblox/assets/developer-modules/social-interactions/Showcase.mp4 b/.cursor/rules/roblox/assets/developer-modules/social-interactions/Showcase.mp4 new file mode 100644 index 00000000..cd23e0c4 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/social-interactions/Showcase.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7413e563a8079c65912972814a4c49fc84d5ea6995eb8ab612156f2a673c9d1e +size 8087274 diff --git a/.cursor/rules/roblox/assets/developer-modules/social-interactions/Toolbox-Icon.png b/.cursor/rules/roblox/assets/developer-modules/social-interactions/Toolbox-Icon.png new file mode 100644 index 00000000..d0978515 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/social-interactions/Toolbox-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bc79e058c425e6ffe10b86c3c50de68a682b97038bd931eb7aad02593f7571f +size 39955 diff --git a/.cursor/rules/roblox/assets/developer-modules/spawn-with-friends/Restricted-Block.jpg b/.cursor/rules/roblox/assets/developer-modules/spawn-with-friends/Restricted-Block.jpg new file mode 100644 index 00000000..83084725 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/spawn-with-friends/Restricted-Block.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:195f414ad27069fdf4405d6c6496edb06b43725419c08b4c07704274d21a98e4 +size 141845 diff --git a/.cursor/rules/roblox/assets/developer-modules/spawn-with-friends/Showcase-SM.mp4 b/.cursor/rules/roblox/assets/developer-modules/spawn-with-friends/Showcase-SM.mp4 new file mode 100644 index 00000000..1046f68d --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/spawn-with-friends/Showcase-SM.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:801dcbc74d6eaa114745f28e12f4e2f316b6ce61870cbe5a1235529e8f71db01 +size 3951030 diff --git a/.cursor/rules/roblox/assets/developer-modules/spawn-with-friends/Showcase.mp4 b/.cursor/rules/roblox/assets/developer-modules/spawn-with-friends/Showcase.mp4 new file mode 100644 index 00000000..8ed7bf70 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/spawn-with-friends/Showcase.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6cf0366a3f45df5b38576ff7f9330cd43c3c6f4f6450f4e7d2dc340a70e5aaa5 +size 9513745 diff --git a/.cursor/rules/roblox/assets/developer-modules/spawn-with-friends/Toolbox-Icon.png b/.cursor/rules/roblox/assets/developer-modules/spawn-with-friends/Toolbox-Icon.png new file mode 100644 index 00000000..39e69577 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/spawn-with-friends/Toolbox-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ccffbe6349010cfba0e51858a68c9ffac0ef97ef3a4ee19df9b73b51fbe8eae +size 36771 diff --git a/.cursor/rules/roblox/assets/developer-modules/surface-art/Bundled-Mesh-Explorer.png b/.cursor/rules/roblox/assets/developer-modules/surface-art/Bundled-Mesh-Explorer.png new file mode 100644 index 00000000..545eac59 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/surface-art/Bundled-Mesh-Explorer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54fc07dcc304ea5e73f34543590115ab854f73f88b5999763f561b093e6bb8ff +size 31480 diff --git a/.cursor/rules/roblox/assets/developer-modules/surface-art/Canvas-Attribute.png b/.cursor/rules/roblox/assets/developer-modules/surface-art/Canvas-Attribute.png new file mode 100644 index 00000000..91a64403 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/surface-art/Canvas-Attribute.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7cf7be6683126f8bcdc94e1a82176d47a821fd3c62193521db439d207c59827 +size 8368 diff --git a/.cursor/rules/roblox/assets/developer-modules/surface-art/Position-Canvas.jpg b/.cursor/rules/roblox/assets/developer-modules/surface-art/Position-Canvas.jpg new file mode 100644 index 00000000..94501eeb --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/surface-art/Position-Canvas.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3940d53bde84b2a3f522cc30dd95015a8531f68853edd5034b7caf8edd582489 +size 172190 diff --git a/.cursor/rules/roblox/assets/developer-modules/surface-art/Showcase-SM.mp4 b/.cursor/rules/roblox/assets/developer-modules/surface-art/Showcase-SM.mp4 new file mode 100644 index 00000000..7c1d1f8a --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/surface-art/Showcase-SM.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8a80be3279cf5c29935d3d135c0f92230dcbf4e403e6f6278075be77366b227 +size 3084009 diff --git a/.cursor/rules/roblox/assets/developer-modules/surface-art/Showcase.mp4 b/.cursor/rules/roblox/assets/developer-modules/surface-art/Showcase.mp4 new file mode 100644 index 00000000..9b0ef370 --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/surface-art/Showcase.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66ef7e7fbd6e2f61aa1abb6909046d03388a31ed0e63ef147c9fb366602fee03 +size 7114965 diff --git a/.cursor/rules/roblox/assets/developer-modules/surface-art/SurfaceArt-UI.jpg b/.cursor/rules/roblox/assets/developer-modules/surface-art/SurfaceArt-UI.jpg new file mode 100644 index 00000000..a34124ee --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/surface-art/SurfaceArt-UI.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1fe897049bc85bccc6733040aa61a7bfe0c8fb8d70d279f13a8e227f3487b01d +size 107241 diff --git a/.cursor/rules/roblox/assets/developer-modules/surface-art/Toolbox-Icon.png b/.cursor/rules/roblox/assets/developer-modules/surface-art/Toolbox-Icon.png new file mode 100644 index 00000000..d176ccac --- /dev/null +++ b/.cursor/rules/roblox/assets/developer-modules/surface-art/Toolbox-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84d35d2f96bb0dc88f66e5823a70460e03d7df56dd8e2c733c152e9c85b5f2df +size 36557 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/addToolExample.gif b/.cursor/rules/roblox/assets/education/adventure-game-series/addToolExample.gif new file mode 100644 index 00000000..1c3e0e8b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/addToolExample.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6cf42c4d37e41963b4910d5eefb6fff9116fd5368cca22350a3599661e3b9b6 +size 819428 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-addToolScript.png b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-addToolScript.png new file mode 100644 index 00000000..450941c3 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-addToolScript.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ddf798733ae15d6595ca50878b490187fec46f186c5a0ad64984a7b0b915ed79 +size 7237 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-game-examplevideo.mp4 b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-game-examplevideo.mp4 new file mode 100644 index 00000000..f9b92aa9 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-game-examplevideo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b39eaf77fb1c0e048dc45e020492fd8316405d976190598f13155e98cca6125 +size 3898934 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-gameThumbnail.jpg b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-gameThumbnail.jpg new file mode 100644 index 00000000..cb00308a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-gameThumbnail.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:840a903150268a4771d8ed7225dcd499007349d90cf999531f954dfcb595e030 +size 108631 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-harvestItemFull.mp4 b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-harvestItemFull.mp4 new file mode 100644 index 00000000..4abc0218 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-harvestItemFull.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f06870c13a4e8b4172f651befbd62d867a6468b75efd125bd52c767a2039d25 +size 5340956 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-harvestItemShort.mp4 b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-harvestItemShort.mp4 new file mode 100644 index 00000000..6cec0124 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-harvestItemShort.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02fe110e17a681ec9467baf742d50d556aa06d24f5429df13727da1aadbf36c0 +size 4760528 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-item-example.jpg b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-item-example.jpg new file mode 100644 index 00000000..cd13f03c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-item-example.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c48cadd749fe8158d27e54784192f9639e8efcd370b3d0b7da8436a7e678f6db +size 125966 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-leaderboard-empty.jpg b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-leaderboard-empty.jpg new file mode 100644 index 00000000..a1e951e5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-leaderboard-empty.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd7b84539650efaba385c924ad7a3d91181818cc1a625a5efb2e88243e316f15 +size 39794 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-leaderboard-finished.jpg b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-leaderboard-finished.jpg new file mode 100644 index 00000000..8772317a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-leaderboard-finished.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:162a6c8944fee08f3f2344e58b79b1205d1d158d9c2f7d1ba916dbaf9fdaf4f1 +size 43688 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-leaderboard-withItem.jpg b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-leaderboard-withItem.jpg new file mode 100644 index 00000000..3b873907 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-leaderboard-withItem.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2759d24c808689c56f8d5baadeb36f7dde609e6a300cecb24c03cdd506ef9e17 +size 32843 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-sellItems.mp4 b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-sellItems.mp4 new file mode 100644 index 00000000..42ae5008 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-sellItems.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2bee033bc0c38eb28855b09300a54cbc78f263a3ccb4e1678d2b1889433e90b +size 3943897 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-sellPlatform.jpg b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-sellPlatform.jpg new file mode 100644 index 00000000..85be356c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-sellPlatform.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a041b444c6ac86f39b8876ce56f4f1a6199798ef66f7b6ca5bd49c941aeba8b +size 197132 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-sellingItemsHero.jpg b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-sellingItemsHero.jpg new file mode 100644 index 00000000..635e9835 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-sellingItemsHero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93dadcd54bfd5210031ae00493aa890a2a6d86aff7bccf503f2dae2a3dfd93a4 +size 196189 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-show-boolTrue.png b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-show-boolTrue.png new file mode 100644 index 00000000..54a2cec1 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-show-boolTrue.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65bebf588825ad1f7ac6a4752ca6e377ca036de35d24c9041796017781095e17 +size 6246 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-show-group.png b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-show-group.png new file mode 100644 index 00000000..69881d91 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-show-group.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75b702c292a95d5785a1ab5ee5daaa148cb5e6fb7e9a3c06444b184aff367b9d +size 7700 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-showClickDetector.jpg b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-showClickDetector.jpg new file mode 100644 index 00000000..5937c9f8 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-showClickDetector.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c502116b51a0e8884ed590e4b7d0f8c2c5d2dd5731d24c7262b28f706472d51 +size 166325 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-showSellScript.png b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-showSellScript.png new file mode 100644 index 00000000..5186064a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-showSellScript.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5afcd60e4b9821b767a564bb9fe587e8da9f4a59b700e1e3f6d7cb8f92239ab +size 6720 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-showUpgradePurchase.mp4 b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-showUpgradePurchase.mp4 new file mode 100644 index 00000000..15424593 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-showUpgradePurchase.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8d946131da3a17570c228254005439eab47eb1fc42be282a7772b7cf403db89 +size 813321 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-testedTool.jpg b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-testedTool.jpg new file mode 100644 index 00000000..baba6c7b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-testedTool.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ef59f2ce56301999d66834ea7b04bb11bbfcc19e2b1f3bfdc72248606ba240f +size 129537 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-toolWithPlayer.jpg b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-toolWithPlayer.jpg new file mode 100644 index 00000000..a7812cba --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure-toolWithPlayer.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c7599222c843c203085e6de74675772592269cd747da66f03f4ed323efc273e +size 224917 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/adventureGameTerrain02.jpg b/.cursor/rules/roblox/assets/education/adventure-game-series/adventureGameTerrain02.jpg new file mode 100644 index 00000000..7ac75d9d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/adventureGameTerrain02.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1294cf83e297830a8fab73a0220d32071340736f8f56605b2b1db672a8c66515 +size 43561 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/adventure_leaderboard_addtoServerScriptService.png b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure_leaderboard_addtoServerScriptService.png new file mode 100644 index 00000000..d24d66c3 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/adventure_leaderboard_addtoServerScriptService.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf17f8188da7ae2fc2c4eaabdc9a40bc40e10770811121ca8a5d0d0c0e22251f +size 11006 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/createdBoolValue.png b/.cursor/rules/roblox/assets/education/adventure-game-series/createdBoolValue.png new file mode 100644 index 00000000..787bd3fd --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/createdBoolValue.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e32a84a1b376e65d6c9018a4afe410f8f12523a4a328f0dcce0448d351e8d4a +size 8548 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/crystalPart.rbxm b/.cursor/rules/roblox/assets/education/adventure-game-series/crystalPart.rbxm new file mode 100644 index 00000000..b9aff2ad --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/crystalPart.rbxm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bdafc64f20c9f93e1d3880880584ff2a0d417589c057e20207e20a9e15d33ef6 +size 24229 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/heroBanner_titlePage.jpg b/.cursor/rules/roblox/assets/education/adventure-game-series/heroBanner_titlePage.jpg new file mode 100644 index 00000000..8221480f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/heroBanner_titlePage.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7085ea33d2be2cdba29ac802bbbcaf44221b8dfece67101cff489a1c3a6104b +size 117872 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/map-crystals.jpg b/.cursor/rules/roblox/assets/education/adventure-game-series/map-crystals.jpg new file mode 100644 index 00000000..959ec020 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/map-crystals.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6389b55b3835dd1f2192965e249cc151e97a926c779d34d94fb843447936ab1 +size 269367 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/paintToolOptimized.gif b/.cursor/rules/roblox/assets/education/adventure-game-series/paintToolOptimized.gif new file mode 100644 index 00000000..d3686da6 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/paintToolOptimized.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ec1c830b1848a8a067ddf4996db57aed7fc698f9f6267000ec8a761bf806607 +size 831413 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/starterTool.rbxm b/.cursor/rules/roblox/assets/education/adventure-game-series/starterTool.rbxm new file mode 100644 index 00000000..3ffab0c5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/starterTool.rbxm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74270ceeb1f01a2e431bdd115309b82ce0b0acdf326bca5df3cad423d51d85eb +size 5342 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/subtractToolExample.gif b/.cursor/rules/roblox/assets/education/adventure-game-series/subtractToolExample.gif new file mode 100644 index 00000000..18a1b216 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/subtractToolExample.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e51f88d1ee723b1de7428947c4b1707a9e92a69f0b845cc9b524356bc96b670 +size 587581 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/tools_starterPackClick.png b/.cursor/rules/roblox/assets/education/adventure-game-series/tools_starterPackClick.png new file mode 100644 index 00000000..bc7a1de7 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/tools_starterPackClick.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ee905c929d42cfa72c92b38f957634c9d59e387dd5c98695ed998801337e369 +size 28958 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_TextLabelCreate_setAnchorPoint.jpg b/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_TextLabelCreate_setAnchorPoint.jpg new file mode 100644 index 00000000..969e9460 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_TextLabelCreate_setAnchorPoint.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8affa744c06ab26fe0a84b6ade01eb0e1eee7bddfc17073fd1b17661c8c1b99f +size 47703 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_TextLabelCreate_setOffset.png b/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_TextLabelCreate_setOffset.png new file mode 100644 index 00000000..d394ed6a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_TextLabelCreate_setOffset.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21e6b745ae4916acdd5b6b1e227607226d34a6c5d23299a88d7917a7b9c1e987 +size 131617 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_TextLabelCreate_setPos.png b/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_TextLabelCreate_setPos.png new file mode 100644 index 00000000..9109cc60 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_TextLabelCreate_setPos.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:440ed0239950d613eba77f3f320c042eded507786ef4ad314e3148fadd8af542 +size 134523 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_TextLabelCreate_setScale.png b/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_TextLabelCreate_setScale.png new file mode 100644 index 00000000..a4b14e1d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_TextLabelCreate_setScale.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6f88a75aada35e1261feafed30882b00b4469e26ad52dbe33a9687bb198a0a4 +size 106243 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_addClickDetector.png b/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_addClickDetector.png new file mode 100644 index 00000000..6996dbf8 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_addClickDetector.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8e54a42875f12250651cdce6af5295c57f6197f995ee55368813044ac8f05e1 +size 9679 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_addScript.png b/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_addScript.png new file mode 100644 index 00000000..f0d38667 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_addScript.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01fd3904a5d2ba63f58aa268cf4c717c1fb09045aa7b3fcd8db4f61e1e5a2260 +size 8795 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_addSurfaceGUI.png b/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_addSurfaceGUI.png new file mode 100644 index 00000000..08dbd4b5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_addSurfaceGUI.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:782905f4911843b7035e519da8e83c442f5b850041bda008b31dd3adc2f71df8 +size 9733 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_changeGUIFace.jpg b/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_changeGUIFace.jpg new file mode 100644 index 00000000..f822d72d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_changeGUIFace.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:665201a2490eca13b7eed107b58014e6eb36b3ab2431c7c43176a60bf764961d +size 62115 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_partCreate.jpg b/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_partCreate.jpg new file mode 100644 index 00000000..b13dedfc --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_partCreate.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79d41260bf493606b656ee18f6e7e295fe4890851df5fdc0a6ae8de94c98ceb2 +size 59533 diff --git a/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_showTextLabelAlt.jpg b/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_showTextLabelAlt.jpg new file mode 100644 index 00000000..b1694a70 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/adventure-game-series/upgrade_showTextLabelAlt.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af74ec5c8f809150138aa931d268b26d6e0fb95abdb98c895de3d5e6edc892ff +size 88331 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/Strucid_thumbnail.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/Strucid_thumbnail.jpg new file mode 100644 index 00000000..fa80620c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/Strucid_thumbnail.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32361b4c9645f68d1c5e3bf814e8283478971e99e62ed88265eaeed3c897ef2b +size 186327 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arenaExample_circle.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/arenaExample_circle.jpg new file mode 100644 index 00000000..5399af50 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arenaExample_circle.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38aacaedbd79f08c3e07225ef2f4096045ec1c968446f3d8399bad2cad8fd0fe +size 30740 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arenaExample_square.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/arenaExample_square.jpg new file mode 100644 index 00000000..5e6a610d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arenaExample_square.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0d074179bcbebbb71717378f74a7bc5107d8c2248519715f3c3bd18c0063517 +size 29497 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arenaExample_terrain.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/arenaExample_terrain.jpg new file mode 100644 index 00000000..30463f4f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arenaExample_terrain.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7152ca6212a4941738a999cf731d086e54b5aa3a132a64ae382928ce56db8d32 +size 45903 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arenaIntro_lobby.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/arenaIntro_lobby.jpg new file mode 100644 index 00000000..66d79eb4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arenaIntro_lobby.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f5728beebae0703822841872f448026ffaf83fc0d9a07f80b2ac96496d6a4b9 +size 157174 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arenaObstacles_advanced_topDown.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/arenaObstacles_advanced_topDown.jpg new file mode 100644 index 00000000..9f48fc7f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arenaObstacles_advanced_topDown.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bc54201e508fa6f5d26600116c3fc7b2a3120e1b0f45ec58b0feaf6b439df46 +size 37234 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arenaObstacles_sideBySide.png b/.cursor/rules/roblox/assets/education/battle-royale-series/arenaObstacles_sideBySide.png new file mode 100644 index 00000000..ace787a4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arenaObstacles_sideBySide.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33c77de7ecb012f582832db29dfa183e2dfcde18917c1037e93a5ea0c61422d0 +size 325746 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_2_showClientServerWindows_client.png b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_2_showClientServerWindows_client.png new file mode 100644 index 00000000..4b18c1cf --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_2_showClientServerWindows_client.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd0956e4b6ab234dd8eec0a8fa5b2928706e34d1129b6a283b395ef2e449d938 +size 145607 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_2_showClientServerWindows_server.png b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_2_showClientServerWindows_server.png new file mode 100644 index 00000000..bca3f9fd --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_2_showClientServerWindows_server.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01f99ac361cdbafdc80b3fc8d8ffe7f14912907925d42bcd1a8472030ee0b4ba +size 105047 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_2_showFinishedOutput.png b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_2_showFinishedOutput.png new file mode 100644 index 00000000..4537ea54 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_2_showFinishedOutput.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdab45022f41956018f8310dcb99eeeddfd83777390a97c31c6a90e8bf5b9be6 +size 2506 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_2_showGameManagerCreated.png b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_2_showGameManagerCreated.png new file mode 100644 index 00000000..1e077bfa --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_2_showGameManagerCreated.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69923d9fc3ad3321f17429e5fe2964140147cdc51d727d4a78cddb9821724504 +size 6185 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_2_showGameSettingsCreated.png b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_2_showGameSettingsCreated.png new file mode 100644 index 00000000..807dd4ee --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_2_showGameSettingsCreated.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f05dab311734dfa92000bce89b34e5cde1521f2f41b0db1f65084d9e5806c114 +size 4952 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_3_showFinalResult.mp4 b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_3_showFinalResult.mp4 new file mode 100644 index 00000000..6b24b9fa --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_3_showFinalResult.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cddca50d726f9c6d237091adc95770f183e83636d6c13e4c9c1f0be94e62600f +size 2186858 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_3_showRepeatArena.mp4 b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_3_showRepeatArena.mp4 new file mode 100644 index 00000000..d536a2d1 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_3_showRepeatArena.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0010267c1ed63ff6b213b7e6161aa67ea6babc19e7bc3e767b3b6fc3ae5911e +size 2248685 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_3_showSendToMatch.png b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_3_showSendToMatch.png new file mode 100644 index 00000000..35cd8fb0 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_3_showSendToMatch.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69b7a99c44b067eb5356d82b645e578b40b5434e86ace72dc0d7fb74921ccee0 +size 249074 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_4_outputFinished.png b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_4_outputFinished.png new file mode 100644 index 00000000..c2239d0a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_4_outputFinished.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7d365e66951d521883d7faf3401fd2b567d3e80de8cb3ce45a485d39f50c846 +size 1891 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_4_showBindableEvents.png b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_4_showBindableEvents.png new file mode 100644 index 00000000..a9cefb19 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_4_showBindableEvents.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7790a27e00508ce5cfd240ae7b62c8276b10965f981f2945116727c92f3d2b8 +size 1432 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_addLocalScript.png b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_addLocalScript.png new file mode 100644 index 00000000..f74bdfeb --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_addLocalScript.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbd3e539289c62e5196ea2d4ab1c35685136c09ad229e2d56866c220ac966fc2 +size 4023 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_showFinalizedGameLoop.mp4 b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_showFinalizedGameLoop.mp4 new file mode 100644 index 00000000..e186feba --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_showFinalizedGameLoop.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4070e4f6024d2e552352099e4777a470f0b9d1c6f176eccc864070ec48fbcdd +size 4120679 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_showGUITest.png b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_showGUITest.png new file mode 100644 index 00000000..cc235345 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_showGUITest.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b785f678178f0a2e1b108f11869984a04086f53e99cb2015324a7cfb3bc42c0 +size 58331 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_showIntValuesCreated.png b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_showIntValuesCreated.png new file mode 100644 index 00000000..52f121a0 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_showIntValuesCreated.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aee360d28a328662b33c1410c7ee9fe64539b496cdd0b66fce7490db91c6de51 +size 7471 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_showLabelCreated.png b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_showLabelCreated.png new file mode 100644 index 00000000..088ccce8 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_showLabelCreated.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05dcacd75f39ebca64192a19f878e1038b2b572957564c9b7cc18093d22343c7 +size 2911 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_showMovingScaleGUI.mp4 b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_showMovingScaleGUI.mp4 new file mode 100644 index 00000000..6f740b2b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_showMovingScaleGUI.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a02a2c32914e0b987caf203a3c0831f281fc5254ff88144727d7c77689868bd8 +size 145559 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_showReadyDisplay.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_showReadyDisplay.jpg new file mode 100644 index 00000000..97ae620b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_showReadyDisplay.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5b099638e35c3895cd4d54fb7b9ce829cf251a1b96f0ea0a8126f92466d2960 +size 115693 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_showTimerDisplay.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_showTimerDisplay.jpg new file mode 100644 index 00000000..9b3cdadf --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_5_showTimerDisplay.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac7a3f35c87062847bed4c11042ee1912fb22fbab62833249611d93ae1ed6731 +size 94404 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_6_showEndGame.png b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_6_showEndGame.png new file mode 100644 index 00000000..50528d5c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_6_showEndGame.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a2f9f54ca0e518ef9ae3e5d4787e6ca841f1860e42f39ed98e8a62059fcba9d +size 89180 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_6_showGameEndFoundWinner.png b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_6_showGameEndFoundWinner.png new file mode 100644 index 00000000..e6a38138 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_6_showGameEndFoundWinner.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f166e498e065e409936a192008d46a1f6765283c1aea424babf19ccf0cf9c52a +size 107862 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_6_showGameTimerError.png b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_6_showGameTimerError.png new file mode 100644 index 00000000..16b896c4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_6_showGameTimerError.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f99ddac621ae76c3157abe63a6f8d638245d23778c887e5756b10a67a67851b4 +size 3654 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_6_showPlayersDefeated_inLobby.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_6_showPlayersDefeated_inLobby.jpg new file mode 100644 index 00000000..2219e7c6 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_6_showPlayersDefeated_inLobby.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:543b14f7301733be69a0c4023a236df3d6516cb59a5143b96e4be95ca4700278 +size 46393 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_6_showPlayersDefeated_showPlayerAttacked.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_6_showPlayersDefeated_showPlayerAttacked.jpg new file mode 100644 index 00000000..5efde672 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_6_showPlayersDefeated_showPlayerAttacked.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86021a0184b06aca9a7484375ef9393c989589222e481ccf0430e51a35a529de +size 46128 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_6_showStatusCreated.png b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_6_showStatusCreated.png new file mode 100644 index 00000000..b31ed978 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_6_showStatusCreated.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61f962589cd49fe8f527491ee6f334f82e7b15b5922c5f3b23d6c5fbb537caf0 +size 4650 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_7_showDifferentGUI_foundWinner.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_7_showDifferentGUI_foundWinner.jpg new file mode 100644 index 00000000..82a2f990 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_7_showDifferentGUI_foundWinner.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:baa97320650dcb2f27ffbc2a924054199ee9a90491cb6c28f363b047a9fd5072 +size 62647 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_7_showDifferentGUI_timeOut.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_7_showDifferentGUI_timeOut.jpg new file mode 100644 index 00000000..97de1c14 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_7_showDifferentGUI_timeOut.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b77c2e55fc23003d54bd1165d25cf336c6baaaba3bb9d68e978ec31a4a33287 +size 73788 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_7_showPlayerWeapons_withWeapon.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_7_showPlayerWeapons_withWeapon.jpg new file mode 100644 index 00000000..366ba025 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_7_showPlayerWeapons_withWeapon.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7fa794c3fe96273ba5b49be0b0131c3eb4de7b915ebfbf19856d4839bc7385a +size 52300 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_7_showPlayerWeapons_withoutWeapon.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_7_showPlayerWeapons_withoutWeapon.jpg new file mode 100644 index 00000000..79fe1136 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_7_showPlayerWeapons_withoutWeapon.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5a3a8c32ad0c2eeb97b1a3b9dbc7b0204f4b93cb306681233b63148c10c9568 +size 47973 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_addedSpawns.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_addedSpawns.jpg new file mode 100644 index 00000000..85b55471 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_addedSpawns.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b780adfbb9a0ce516b0a61e77ae488842b5b7a5ceb496bdf15c87383a1da878 +size 83526 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_createPlayerManager.png b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_createPlayerManager.png new file mode 100644 index 00000000..5170cc53 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_createPlayerManager.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ab7a7c8bfc9fe88455004746918f3594263d701d0f9ea44541d4eaa88e6ba63 +size 5262 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_createTimer.png b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_createTimer.png new file mode 100644 index 00000000..f5fae08b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_createTimer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d96d48a0eadf6ccf7aa96a1ba1443db1aa9daa0b3cabe11cfeadce4cd80fdeb +size 5437 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_finishedProject_arenaHero.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_finishedProject_arenaHero.jpg new file mode 100644 index 00000000..9ce5754c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_finishedProject_arenaHero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b4af60776cdb2e62fbaa096cbcacd059acf0553848e355d48baef93ba06b5d9 +size 40376 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_gamePhase_cleanup.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_gamePhase_cleanup.jpg new file mode 100644 index 00000000..227beac7 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_gamePhase_cleanup.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:315842b5019992432374adfe926f31f62d0a7412f69abfbd3a6a83d692aee884 +size 65048 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_gamePhase_compete.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_gamePhase_compete.jpg new file mode 100644 index 00000000..e0f655cd --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_gamePhase_compete.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40ed9a7c22e062dbf3978814deeb026353ae0ed78d60de2423f50544c1003aac +size 59440 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_gamePhase_intermission.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_gamePhase_intermission.jpg new file mode 100644 index 00000000..ff405edf --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_gamePhase_intermission.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb1be8cfe037d5f27ac2e247431012e0ab1c2424222d6b5ef5b7e7fd38010f9e +size 65996 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_playtestGraybox_cropped.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_playtestGraybox_cropped.jpg new file mode 100644 index 00000000..049c5b0e --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_playtestGraybox_cropped.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68e0fc914fa22874730cef2bd57a3628154431c52ab369ae2644adae0188656a +size 73431 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/arena_showWeapon.png b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_showWeapon.png new file mode 100644 index 00000000..a57df8c4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/arena_showWeapon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac4d1450e3190b4dedff9003032d4353083f2afb3648a2207f2508bf82807394 +size 5048 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/battleRoyal_webFinal.mp4 b/.cursor/rules/roblox/assets/education/battle-royale-series/battleRoyal_webFinal.mp4 new file mode 100644 index 00000000..4df8f1bb --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/battleRoyal_webFinal.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2dc5a841d6008102163a7d596eb1ad600f712be658d37428379e1df70f067131 +size 2356017 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/islandRoyale_example_2.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/islandRoyale_example_2.jpg new file mode 100644 index 00000000..e4a99dcd --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/islandRoyale_example_2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:652577ec5efe6a634d3415188f31c504dabf43115dc296c1beecc822adde04e7 +size 124539 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/playerShowcase_Jandel.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/playerShowcase_Jandel.jpg new file mode 100644 index 00000000..cd6fe811 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/playerShowcase_Jandel.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bf382e880c336e26086d388fda6ebe4c16419f4630f7dabb2724edd9c147b75 +size 58554 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/playerShowcase_luxeyes.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/playerShowcase_luxeyes.jpg new file mode 100644 index 00000000..696eda40 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/playerShowcase_luxeyes.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af17eb8a876045f003611d8003d78998ad7ed2153e29246889d0f56e7cce3664 +size 89000 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/roundBased_grayboxExample.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/roundBased_grayboxExample.jpg new file mode 100644 index 00000000..9de81b28 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/roundBased_grayboxExample.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78fe0dfc5dba16ec607072b077177e5a925f705ece8a5cd0e6d2cde0bc033db5 +size 209805 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/roundBased_hero_lesson8.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/roundBased_hero_lesson8.jpg new file mode 100644 index 00000000..2d28ab65 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/roundBased_hero_lesson8.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9cc8079ba0e0e03b52cf739eaf01dfea8262be58ea2f1b3eebf48dafece5042d +size 147493 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/roundBased_obstacleExampleComplexity_balanced.png b/.cursor/rules/roblox/assets/education/battle-royale-series/roundBased_obstacleExampleComplexity_balanced.png new file mode 100644 index 00000000..132f0b5d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/roundBased_obstacleExampleComplexity_balanced.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e759a8fd6a21ee9ce4e27c2b4ae4c6596eadde47641e794ec279f99605cfb410 +size 10747 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/roundBased_obstacleExampleComplexity_simple.png b/.cursor/rules/roblox/assets/education/battle-royale-series/roundBased_obstacleExampleComplexity_simple.png new file mode 100644 index 00000000..7683b18d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/roundBased_obstacleExampleComplexity_simple.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f828ffb708f9758a9bcd1e234ead28edd797cb73cdff745c376f1785d2a7b45b +size 4861 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/roundBased_obstacleExampleComplexity_tooComplex.png b/.cursor/rules/roblox/assets/education/battle-royale-series/roundBased_obstacleExampleComplexity_tooComplex.png new file mode 100644 index 00000000..f93e77e5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/roundBased_obstacleExampleComplexity_tooComplex.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5593fa489b21012033a4a6ed4af5078720fc26152d696c894879935c5a48f47d +size 10895 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/roundBased_thumbnail_alt.jpg b/.cursor/rules/roblox/assets/education/battle-royale-series/roundBased_thumbnail_alt.jpg new file mode 100644 index 00000000..46317ce2 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/roundBased_thumbnail_alt.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46bac538f3461dbab371e82ccfdca478324c0c8ee0666cc8768a4203de57a43b +size 45765 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/show-weapon-spawned.mp4 b/.cursor/rules/roblox/assets/education/battle-royale-series/show-weapon-spawned.mp4 new file mode 100644 index 00000000..6b24b9fa --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/show-weapon-spawned.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cddca50d726f9c6d237091adc95770f183e83636d6c13e4c9c1f0be94e62600f +size 2186858 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/vectorMap_arenaSteps_finalizedLayoutMap.png b/.cursor/rules/roblox/assets/education/battle-royale-series/vectorMap_arenaSteps_finalizedLayoutMap.png new file mode 100644 index 00000000..5ab5989f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/vectorMap_arenaSteps_finalizedLayoutMap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6a31093e4ff78818148e9b8fe12c3e2851166b399ed1732fa89605727e5bd46 +size 3350 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/vectorMap_example_obstacle.png b/.cursor/rules/roblox/assets/education/battle-royale-series/vectorMap_example_obstacle.png new file mode 100644 index 00000000..ae375730 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/vectorMap_example_obstacle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2757944394ce8c18edda54307059430fa3189f8107a1c6edfa3fe7917329ded +size 2925 diff --git a/.cursor/rules/roblox/assets/education/battle-royale-series/vectorMap_playerSpawns.png b/.cursor/rules/roblox/assets/education/battle-royale-series/vectorMap_playerSpawns.png new file mode 100644 index 00000000..c337fd13 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/battle-royale-series/vectorMap_playerSpawns.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44a7846ef5d24e62aef8344e5cd09d80bc1a8f1dd493c922c937f89cbae3b493 +size 2357 diff --git a/.cursor/rules/roblox/assets/education/beta-testing-edu-experiences/BetaTestingGame.png b/.cursor/rules/roblox/assets/education/beta-testing-edu-experiences/BetaTestingGame.png new file mode 100644 index 00000000..3ed00959 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/beta-testing-edu-experiences/BetaTestingGame.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f8ba7de51fbe1b3d98a87d44edf963f8647abc72357da902095807bac3c7538 +size 161109 diff --git a/.cursor/rules/roblox/assets/education/beta-testing-edu-experiences/alo-feedback-form.png b/.cursor/rules/roblox/assets/education/beta-testing-edu-experiences/alo-feedback-form.png new file mode 100644 index 00000000..353aca7f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/beta-testing-edu-experiences/alo-feedback-form.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0db14863c1814c26a3d78c40628c7a375e6a5674826b5d8c3ce3bd20fd84ca2e +size 167612 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/CreateAndDestroy_template.rbxl b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/CreateAndDestroy_template.rbxl new file mode 100644 index 00000000..0f9e152b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/CreateAndDestroy_template.rbxl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1f74ad3ee1ade393a2da328d6c1be6feceb8568cbe9273ccbb849203a844b5c +size 123989 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/ExpandedMap_920x640.png b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/ExpandedMap_920x640.png new file mode 100644 index 00000000..db925330 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/ExpandedMap_920x640.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8e741d8e43646c7e7ac59e568c4a7c415393a8bfbb552924935a93c3ca2b7d2 +size 48306 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/FilterWorkspace_920x640.png b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/FilterWorkspace_920x640.png new file mode 100644 index 00000000..15c2cfbb --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/FilterWorkspace_920x640.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e07ab63e81c11a4cabd3a4ff32fbfadf5df09385b7a4caacd2244d995060310 +size 49287 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/GameSettingsFoundpsd.png b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/GameSettingsFoundpsd.png new file mode 100644 index 00000000..9897c65c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/GameSettingsFoundpsd.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6fd845659a4cbf88d23f8f3148498cd239b71569346054304569c12b603e32d +size 44054 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/GameSettingsSearch_640x300.png b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/GameSettingsSearch_640x300.png new file mode 100644 index 00000000..8b8962c3 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/GameSettingsSearch_640x300.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a90388a333ab5236a32e595864be527261b114c5a3f5c016d9c55f091066b89d +size 41149 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/PlaceCustomBuilding_930x640.png b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/PlaceCustomBuilding_930x640.png new file mode 100644 index 00000000..d1c3b25c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/PlaceCustomBuilding_930x640.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f036aefabd9d0cd7dd2cf4b0880a47e1ea499e19c510461bce327894534e75d +size 52615 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/PlacedHalfMap.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/PlacedHalfMap.jpg new file mode 100644 index 00000000..068cbe4c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/PlacedHalfMap.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a99e940370c6a44eca05165e2721e0aca2e7093b10314ab195152f6e3ae2034 +size 126504 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/SpawnLocation_Select_920x600.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/SpawnLocation_Select_920x600.jpg new file mode 100644 index 00000000..8b37713b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/SpawnLocation_Select_920x600.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a50e271c0c0db5c5b008ee07f9c90276bbdb44b97e9ddc0296bed2d0c1546b4 +size 129839 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/avatarItemHeroBanners_backpack.png b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/avatarItemHeroBanners_backpack.png new file mode 100644 index 00000000..8551b3bf --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/avatarItemHeroBanners_backpack.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3cfa1fc08582fea9888b115350c67acd6639a8e63907a54b690cf2df67ca5d8f +size 615100 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/avatarItemHeroBanners_head.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/avatarItemHeroBanners_head.jpg new file mode 100644 index 00000000..16cc3765 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/avatarItemHeroBanners_head.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d71564c2e30a4d052bc1e247c15c1ae808afc534445ddbea07dfc7c7045b28f2 +size 101619 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/avatarItemHeroBanners_wing.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/avatarItemHeroBanners_wing.jpg new file mode 100644 index 00000000..11cc7773 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/avatarItemHeroBanners_wing.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1606232a18a6f684c29d0409508bc78796e0f3b363173fe7ca4d966672440f7e +size 170135 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/buildingExamples_large.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/buildingExamples_large.jpg new file mode 100644 index 00000000..d240f3f5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/buildingExamples_large.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a8bfb43c2117c38e6528fe31b9e84e787b066c9068e83d91dac0e0a9dbfd5f3 +size 57629 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/buildingExamples_props.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/buildingExamples_props.jpg new file mode 100644 index 00000000..6bbb2bbc --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/buildingExamples_props.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:347d9a38bc772774d6ebfe3566b3fadefa445c1ccfe9d165422eb1a88a069dad +size 53208 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_bannerTerrain.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_bannerTerrain.jpg new file mode 100644 index 00000000..6dc92099 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_bannerTerrain.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99a78177ca532c3fb944642de557094582c495894960b87113f522a0a4f3ff7a +size 140835 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_heroBanner_overCity.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_heroBanner_overCity.jpg new file mode 100644 index 00000000..e1570b7f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_heroBanner_overCity.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:618eb81d67c21d4614765737037cdc812bb97de85ff11c23e99553dec5a63734 +size 223470 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_introVideo_final_webOptimize.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_introVideo_final_webOptimize.mp4 new file mode 100644 index 00000000..a189beb6 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_introVideo_final_webOptimize.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:283e7743005ebe1f8b829973026b5010c53b9982130f11eb919f1f1e685b2f4c +size 4650847 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_moveFirstBuilding.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_moveFirstBuilding.mp4 new file mode 100644 index 00000000..bd5c9299 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_moveFirstBuilding.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9015ade6d013f29512ca6156eed8c75fc5533e6e7d9442d2236e211a350c9c2d +size 254393 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_moveSpawnLocation.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_moveSpawnLocation.mp4 new file mode 100644 index 00000000..c1d061dd --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_moveSpawnLocation.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3fbb81f59af8be81e50101107e1093ccf8fb7a8c5913ce29562fc69db6400119 +size 108157 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_quizGamePage.png b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_quizGamePage.png new file mode 100644 index 00000000..ff36a90a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_quizGamePage.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33d2e4d40504f451ae593f1a69c12e7099b4e35f5b4f71a1e9ad558473504176 +size 288528 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_quizGameScreenshot.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_quizGameScreenshot.jpg new file mode 100644 index 00000000..cb858fbf --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_quizGameScreenshot.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7ae195ab118e582a7885abb8027dc18e034739e74baae833ec70b706683e746 +size 118536 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_showCameraControlsBuilding.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_showCameraControlsBuilding.mp4 new file mode 100644 index 00000000..c11d6f55 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_showCameraControlsBuilding.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e58a7f7d16b8caaacd21b9d919e41009c3de2c960e52267e0916ff872c0c4eed +size 269532 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_showDuplicateCity.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_showDuplicateCity.mp4 new file mode 100644 index 00000000..188e7910 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_showDuplicateCity.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f325d5f1170bc0118adc2fff9e65da1eca20309c5f541ebda9dbbcfe900eb7ce +size 627909 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_showSelectDragCity.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_showSelectDragCity.mp4 new file mode 100644 index 00000000..ad8557b0 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_showSelectDragCity.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d60e453b4b6dd4418d107e0b9ccbc2823c1035d38e069888d93fd4f915d74a6 +size 125261 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_switchBackTop.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_switchBackTop.mp4 new file mode 100644 index 00000000..d41fa038 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_switchBackTop.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d16fb5e71f047d85ebfe9ef1687fbebd275d44dd23c352147c30b351acf8f33e +size 146903 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_thumbnail_312x200.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_thumbnail_312x200.jpg new file mode 100644 index 00000000..cec56724 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/cc2019_thumbnail_312x200.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d7602e97178aad09261e64452cbf6f7abf238ea317e94e1bd6de7da97d09c0d +size 42268 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/ccs2019_addTerrain.png b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/ccs2019_addTerrain.png new file mode 100644 index 00000000..a0961fb9 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/ccs2019_addTerrain.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87dac727f1ec4a825b8b2a34479ace10a01d1ad27d74c1eda4dc63567a32a4fa +size 13597 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/ccs2019_changeShapeSize.png b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/ccs2019_changeShapeSize.png new file mode 100644 index 00000000..ba0b31ee --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/ccs2019_changeShapeSize.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87d90c54a10ef89c7d371a01e8af9d35d0f37764aba6c06414a47dd78a7cda16 +size 24325 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/ccs2019_terrainSmooth.png b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/ccs2019_terrainSmooth.png new file mode 100644 index 00000000..d5dd1e4f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/ccs2019_terrainSmooth.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3fd058c8cee736aa2083fa2bc1f65ad8bc986200004d35468906001874c4c292 +size 14220 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/ccs2019_terrainTools_paint.png b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/ccs2019_terrainTools_paint.png new file mode 100644 index 00000000..78499374 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/ccs2019_terrainTools_paint.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c4d26ebbef746e4a5363561d3df6760eda1158f2944c7a7da4218b15c44e11d +size 14099 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/ccs2019_terrainTools_subtract.png b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/ccs2019_terrainTools_subtract.png new file mode 100644 index 00000000..d9fdc75c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/ccs2019_terrainTools_subtract.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14f8504d95a826aea72d7879b20bf132b94a71b2245009b275f699ee56310210 +size 13448 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/changeViewSelectorSide_updated.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/changeViewSelectorSide_updated.mp4 new file mode 100644 index 00000000..4b187d34 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/changeViewSelectorSide_updated.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5cb818db8cef1185e7b0e65c5eb239a9a45dd37a0c683e081396b0d281382b15 +size 180903 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/clickViewSelectorToTop.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/clickViewSelectorToTop.jpg new file mode 100644 index 00000000..d0c30da0 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/clickViewSelectorToTop.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9450ecdebed673c9d45b490cf583e342725414850f130aca968a21fa6f1291ae +size 127583 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/exampleCustomBuildings.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/exampleCustomBuildings.jpg new file mode 100644 index 00000000..ae04fcf0 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/exampleCustomBuildings.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9fb3c08d60b7105e12c9cc379104df21a8cf571de80477a347830af7ddf22c0 +size 113174 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/firstHalfSetup_800x450.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/firstHalfSetup_800x450.jpg new file mode 100644 index 00000000..ca537db4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/firstHalfSetup_800x450.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23fb241187d376be02b8636c6299840a6a66b07d141a8325b701c5105415c6cf +size 131342 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/islandBlankExample_800x450.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/islandBlankExample_800x450.jpg new file mode 100644 index 00000000..af53c8eb --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/islandBlankExample_800x450.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c77593a19cb8d35bf1e3ca6a4f191199e10bb2cbd78ccbb5c12e7b8d65aa167f +size 99818 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/islandTerrainAdded_600x600.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/islandTerrainAdded_600x600.jpg new file mode 100644 index 00000000..a8a28237 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/islandTerrainAdded_600x600.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cb4812fceb7f0580f7b8a5eadad0051a28dd2153f692b2535770f9e122c2b8f +size 135816 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/lessonBanner_3.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/lessonBanner_3.jpg new file mode 100644 index 00000000..6f5f1103 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/lessonBanner_3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b68b89d525fef7be69da716134b3fb796994811ee43bd94958815f4cefbbb95b +size 144268 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/lessonThumbnail_1_360x360.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/lessonThumbnail_1_360x360.jpg new file mode 100644 index 00000000..707daa80 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/lessonThumbnail_1_360x360.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f00e97bffbfcce4eb2c2d48473b4623e4dfba3febba02ca15bc9c43dc37e3f38 +size 46575 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/lessonThumbnail_2_360x360.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/lessonThumbnail_2_360x360.jpg new file mode 100644 index 00000000..a8a28237 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/lessonThumbnail_2_360x360.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cb4812fceb7f0580f7b8a5eadad0051a28dd2153f692b2535770f9e122c2b8f +size 135816 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/lessonThumbnail_3_360x360.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/lessonThumbnail_3_360x360.jpg new file mode 100644 index 00000000..c608fb1a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/lessonThumbnail_3_360x360.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dccb82ee3c7fd6a400312c711a98dae52187842af5e7a59952a646addae626d6 +size 55924 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/playersOverlookingCity_banner.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/playersOverlookingCity_banner.jpg new file mode 100644 index 00000000..dbd95807 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/playersOverlookingCity_banner.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59953e970eb28683cac51da171c1be1b71f587066ca43a2ec87e64a42eb13ac4 +size 245084 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/playtestRunCenter.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/playtestRunCenter.jpg new file mode 100644 index 00000000..e045e827 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/playtestRunCenter.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc9897ad30d7139de2f2744818a5f41a91d58b7f3614b1c6c1f2fc9eec3ced85 +size 120523 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/roadsPlacedExample_600x450.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/roadsPlacedExample_600x450.jpg new file mode 100644 index 00000000..c054c749 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/roadsPlacedExample_600x450.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6672cb9f58c09037a9cbd9109fbd3c73bf89f96e3be080c603441fff9925f7e3 +size 106483 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/show-terrain-360px.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/show-terrain-360px.jpg new file mode 100644 index 00000000..ffc31356 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/show-terrain-360px.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c66be0263ff638acd92775b315517afbf0db097260d608420f5676ad44c1b57 +size 63270 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/showFocusBuilding.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/showFocusBuilding.jpg new file mode 100644 index 00000000..1b14ed5f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/showFocusBuilding.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e588e7fba93446686005f09d3a5cd0754984e9e30b45e83a127ff85bac513e0 +size 137406 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/showIslandExamples_600x600.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/showIslandExamples_600x600.jpg new file mode 100644 index 00000000..4b80126e --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/showIslandExamples_600x600.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d53b4a2302c0a0af85c6e3fe80a17e8b4df585a45dbf3317793d82b5b08945f +size 142833 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/showIslandPainted_600x600.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/showIslandPainted_600x600.jpg new file mode 100644 index 00000000..732e0c8f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/showIslandPainted_600x600.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9308f63cb4b0daca980020520ebb3dff69c33397b1363eda751e0a186e745e74 +size 120298 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/showPropsPlaced.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/showPropsPlaced.jpg new file mode 100644 index 00000000..57543460 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/showPropsPlaced.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4ad020592a103d3167dfc92597b97b6a6d10bc9ddcad4975cd5ede37117254b +size 136123 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/showSpawnLocations_800x450.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/showSpawnLocations_800x450.jpg new file mode 100644 index 00000000..f864150b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/showSpawnLocations_800x450.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:312916a679d6b8c53a03d66e29f5f06aac2c77e67a6d56699c88a560569ead06 +size 85136 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/showTerrainAdd.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/showTerrainAdd.mp4 new file mode 100644 index 00000000..493504ce --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/showTerrainAdd.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f463724a9a8caba0f1faab6a07e811fa568cf8de5d98b5c0a0f89ebb4bf1d8bf +size 468935 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/showThumbnailCameraAngle.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/showThumbnailCameraAngle.jpg new file mode 100644 index 00000000..afc0308f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/showThumbnailCameraAngle.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7612cabad458c2cbc60704b669232e0d78471ac7c4ced2a652196177cdfce0f6 +size 166403 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/spawnLocations_2placed.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/spawnLocations_2placed.jpg new file mode 100644 index 00000000..3e2a5aa0 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-create-and-destroy/spawnLocations_2placed.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0559b4bd4bdcc7f7e6bacddb908a90183fadaf9335ee919b2a7ba788cccd45b +size 125178 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-new-models/hero-new-assets.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-new-models/hero-new-assets.jpeg new file mode 100644 index 00000000..65729e4f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-new-models/hero-new-assets.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d0fff7d084634033a4ce28b4fe0550b3480e8e1d49ab3dbb489d8ea014705c0 +size 204888 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-new-models/hero-ring-hat.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-new-models/hero-ring-hat.jpeg new file mode 100644 index 00000000..dd191b97 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-new-models/hero-ring-hat.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2631a49e5ffe6ca0a720646276814c7e3cf398e18f601179fa1a6c86ba51dfa +size 188788 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-new-models/new-parts-design-1.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-new-models/new-parts-design-1.jpeg new file mode 100644 index 00000000..e3ca5afd --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-new-models/new-parts-design-1.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee222e9e42a0f385199f0aefdb4c9fb9090a4a44a97e7feaff2bbdd6123e538f +size 64663 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-new-models/new-parts-design-2.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-new-models/new-parts-design-2.jpeg new file mode 100644 index 00000000..ed31b856 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-new-models/new-parts-design-2.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8451f49b0619c8e188414bf138c065bd2e79e27db81349fd89a8ae9847c3de5c +size 65446 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-new-models/show-assets-added.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-new-models/show-assets-added.jpeg new file mode 100644 index 00000000..321bc7ea --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-new-models/show-assets-added.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fff92afb771bbafa91233e760c3e0a962712c72d60076b39351198d0e9ed9c29 +size 306844 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-to-the-garage/find-garage.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-to-the-garage/find-garage.png new file mode 100644 index 00000000..eb3c342d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-to-the-garage/find-garage.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5357b2601340829ba25cdb543834d439c79af24d84f3a6f03a985b36062c7ff9 +size 18552 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-to-the-garage/paste-into-garage.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-to-the-garage/paste-into-garage.png new file mode 100644 index 00000000..7cd4befc --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-to-the-garage/paste-into-garage.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e4603ed6afbb40c3bf70da4da3d894ac157f78c7d6d6239e3132b1afbeb9814 +size 22037 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-to-the-garage/rename-model.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-to-the-garage/rename-model.png new file mode 100644 index 00000000..2a6db084 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/add-to-the-garage/rename-model.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0f587e94dd17fd08e9d49edbbbc7ffa0f6d49584c0e805b19259d617685f1bd +size 22975 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/adding-wings/move-wing.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/adding-wings/move-wing.mp4 new file mode 100644 index 00000000..2b99c8a8 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/adding-wings/move-wing.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ecfee9e481ad13dbae496bed2f1044540226e0efe89ff3d2054c7ba214854e0 +size 4338517 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/adding-wings/rotate-wing.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/adding-wings/rotate-wing.mp4 new file mode 100644 index 00000000..3fd1cacd --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/adding-wings/rotate-wing.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81ae34afe8dde95ffe6c902777d5b4d502583cd7a44218f6dc97735659325efb +size 4728840 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/adding-wings/scale-wing.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/adding-wings/scale-wing.mp4 new file mode 100644 index 00000000..c0f0e3a8 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/adding-wings/scale-wing.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:becec83eaa263a6757d4571df8ea17d07a909fea7ef6727cfce90f9b6a6772a8 +size 5688768 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/adding-wings/wing-example.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/adding-wings/wing-example.jpeg new file mode 100644 index 00000000..82d3dda4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/adding-wings/wing-example.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e98b92863283e304106956e9bb827056447cc7436f7c266055b65c987eca24b1 +size 134609 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/adding-wings/work-area-correct.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/adding-wings/work-area-correct.jpeg new file mode 100644 index 00000000..51d60ed7 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/adding-wings/work-area-correct.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25b2988dc593dc8b42b435b4fe51dcb44af6c7cedcb04235a044f39bff47d980 +size 90714 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/adding-wings/work-area-wrong.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/adding-wings/work-area-wrong.jpeg new file mode 100644 index 00000000..9af12f07 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/adding-wings/work-area-wrong.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca795983bd0faa30c7398695d2599b50d0413769bff3c059057991e31843048c +size 92881 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/add-image.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/add-image.png new file mode 100644 index 00000000..d76cba28 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/add-image.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0288bce88069a9d3880474e320ef05e16bf3ef029aa5d6f86be8a8510b4657e4 +size 82676 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/body-highlighted.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/body-highlighted.png new file mode 100644 index 00000000..e03433d9 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/body-highlighted.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3ae689749076ebef39a3f098d45c3132eb51a09597cc1329f7d4c4cf3bccaac +size 46168 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/callout-textureid.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/callout-textureid.jpeg new file mode 100644 index 00000000..05eee1af --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/callout-textureid.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ffcf3870d9938320c1ddb275dd6746fffd0bd936c7fe9d5b139e8c2971eac3d +size 71510 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/colored-ships.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/colored-ships.jpeg new file mode 100644 index 00000000..43fe42ed --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/colored-ships.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc2561e6a4b534f32964a6d5e428f3803137680ff1b722c59caba0b6543f7d3c +size 334257 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/new-texture.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/new-texture.jpeg new file mode 100644 index 00000000..5ee2280f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/new-texture.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba3d995bcb55adfc2ea5ca50881017c7a72cf8b1cb9d2e1c3096f85549363f50 +size 44122 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/original-texture.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/original-texture.jpeg new file mode 100644 index 00000000..d16a18dd --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/original-texture.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:346393a082f34b0b3cb674c8eb626f06d7c1ece06498c5856c9c4f4aee0f4f99 +size 46285 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/scrapper-backpack.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/scrapper-backpack.jpeg new file mode 100644 index 00000000..96783b73 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/scrapper-backpack.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:775a0eef2d99ca38272895b326d5016d4488c3fae78ad8aaaf2c5d45e0c35bf4 +size 167617 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/speeder-blue.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/speeder-blue.png new file mode 100644 index 00000000..57e9f872 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/speeder-blue.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e87ec5141f6856201f575ae77a0117854ef6c0799817396ee050bef12423a1e4 +size 181155 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/speeder-rust.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/speeder-rust.png new file mode 100644 index 00000000..a9d29d64 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/speeder-rust.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4953776a8a0a6fd6978eaaf43302339f464f003cb2b0f1319115f7bedf76ea1 +size 197388 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/speeder-teal.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/speeder-teal.png new file mode 100644 index 00000000..b6e959cd --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/colors-and-textures/speeder-teal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f68d6fcb4adb17f5887aa855b8fc8035c7205dfaaaeec79eb44d66b543bcf41 +size 90334 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/customize-and-share/compare-speeder-speeds.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/customize-and-share/compare-speeder-speeds.mp4 new file mode 100644 index 00000000..bb156dee --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/customize-and-share/compare-speeder-speeds.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74e056ee4cba12f64ff74c999e5c86e20797b7826441f2a9904e425e2347c683 +size 906554 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/customize-and-share/hero-group.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/customize-and-share/hero-group.jpeg new file mode 100644 index 00000000..d20f34a9 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/customize-and-share/hero-group.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6ed41e42dac2a6ab7e686eb8d1b55d74219bfddc40d314add4397e5ffc2a390 +size 164038 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/customize-and-share/open-explorer-garage.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/customize-and-share/open-explorer-garage.png new file mode 100644 index 00000000..a40ed3f5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/customize-and-share/open-explorer-garage.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44a36c95a4f6826ade0592411ab6b81ec323f2e48e29d8510563cb54cd991d86 +size 25085 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/customize-and-share/speed300.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/customize-and-share/speed300.mp4 new file mode 100644 index 00000000..1b1c78a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/customize-and-share/speed300.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa1e555719bbed26ee2546ce71b126759fed033df7d9195da450aaa602b32092 +size 2231635 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/customize-and-share/speed50.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/customize-and-share/speed50.mp4 new file mode 100644 index 00000000..3f34b933 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/customize-and-share/speed50.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3daebe0e6a4b867512134938dc3cc621089095102510a54a859b6e47d052f504 +size 5625252 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/hero-jetpack.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/hero-jetpack.jpeg new file mode 100644 index 00000000..0628b51b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/hero-jetpack.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:631966528901478524826326fe3caee1d02a528f43c04cc08af31ea2d2e12173 +size 188610 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/hero-winter.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/hero-winter.jpeg new file mode 100644 index 00000000..619ff4df --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/hero-winter.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0ddfa1754436c3d474022b5a6c526a53d663fc4b8557e45b065bb75c1dfe880 +size 271101 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/junkbot-hero.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/junkbot-hero.jpeg new file mode 100644 index 00000000..8ba505d4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/junkbot-hero.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c504666196b516a12212a7447b3b78d2bb98234053a209f303404cec80e6a39 +size 102876 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/paint-terrain-snow.gif b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/paint-terrain-snow.gif new file mode 100644 index 00000000..2d010e1a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/paint-terrain-snow.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5844cab69953e07a1aa8da3bcac5c2f2ef449935f15d7779809a872139a1c305 +size 598001 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/paint-tool-snow.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/paint-tool-snow.png new file mode 100644 index 00000000..825edba1 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/paint-tool-snow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b88423fb11628b183592eda24e28b337a7bf87321ed058a89f56e903b31d4e4 +size 44969 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/select-snow-material.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/select-snow-material.png new file mode 100644 index 00000000..f1404196 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/select-snow-material.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6a23a6cdf34679e68b114e4703a41eb96568517fd89df79bea64cbea431d557 +size 19765 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/select-terrain-explorer.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/select-terrain-explorer.png new file mode 100644 index 00000000..e749c93c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/select-terrain-explorer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:381826c072e07a825450b49f4d5ab1a831b0ab088afd1f7889036520e6547b29 +size 12867 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/show-terrain-color-change.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/show-terrain-color-change.mp4 new file mode 100644 index 00000000..85074916 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/show-terrain-color-change.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:502997c1ffaf3b19dd6cffe3e21c3ea0f9a3b6f49cddaed13e07a860446bd3ae +size 254474 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/terrain-editor-edit-tab.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/terrain-editor-edit-tab.png new file mode 100644 index 00000000..5e1813a3 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/terrain-editor-edit-tab.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:659ffd42327823ca922c27cbc5270b579bf43d7d5c22fe8903280f474818272d +size 113110 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/terrain-expand-materials.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/terrain-expand-materials.png new file mode 100644 index 00000000..bcbe51df --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/terrain-expand-materials.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:432c9e6c445184a4cfe703ec8adfa5e74a6d1f4ec72eaa09818cf46ac6926b33 +size 14659 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/terrain-winter-version.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/terrain-winter-version.jpeg new file mode 100644 index 00000000..fc58291c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/design-the-world/terrain-winter-version.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:644feb1404b5e7c50a9fe586bc74aa0b1ba8350420a9e684fda8d24cfc526f9d +size 238551 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/Decorative-Parts-Parts.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/Decorative-Parts-Parts.png new file mode 100644 index 00000000..bf413107 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/Decorative-Parts-Parts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d16227ef0664e520ed017fc88c3c1d06d4867410de8c2d50b5b735c7c0d104b +size 376248 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/Decorative-Parts.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/Decorative-Parts.png new file mode 100644 index 00000000..36d50858 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/Decorative-Parts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8b3765805cb366e164920fd8cd33c59a1f3b14264184f0e05f9c9b42bb315bd +size 264217 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/Starting-Bodies-Parts.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/Starting-Bodies-Parts.png new file mode 100644 index 00000000..cca46c03 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/Starting-Bodies-Parts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c4bba00722cdd9eb6f8fb57a2e940aeb7799f53d524dfa0a57e7878178038a3 +size 315419 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/Starting-Bodies.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/Starting-Bodies.png new file mode 100644 index 00000000..9736b67a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/Starting-Bodies.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc882abba63dbad5fef1468a3879c1b702b2634546bca68c38df81f093103697 +size 368595 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/Wing-Sets-Parts.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/Wing-Sets-Parts.png new file mode 100644 index 00000000..bf2a046c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/Wing-Sets-Parts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:792e4a19d772588445544f24dd46a832b6e9c5c3239dc526cb60d35201713206 +size 364116 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/Wing-Sets.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/Wing-Sets.png new file mode 100644 index 00000000..dafd5788 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/Wing-Sets.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0fe743c412389c1f3fcba1214f94995e6701b22b4355c1be473f2ba2dde699b5 +size 391922 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/move-camera-to-focus.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/move-camera-to-focus.mp4 new file mode 100644 index 00000000..43b6272c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/move-camera-to-focus.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbbe97228830152c705b532cc41d1342ecafa360f639a3ef66aeede7d2af2811 +size 493622 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/move-camera-to-focus.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/move-camera-to-focus.png new file mode 100644 index 00000000..04e0ed37 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/move-camera-to-focus.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f29f592fe2e6b983b80f07918177f77df2b8e0ee1d5e803f34b2335023cf699 +size 5445329 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/speeder-progress-1.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/speeder-progress-1.jpeg new file mode 100644 index 00000000..d0dc662c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/speeder-progress-1.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e3aa420001aa1a8c3a7530e706ffe8add32bada3bf829c1f836fc23952919bb +size 92711 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/speeder-progress-2.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/speeder-progress-2.jpeg new file mode 100644 index 00000000..2df886a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/speeder-progress-2.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db01804804ec9720aab78730e581cd3f181a76925bc72b9c88851c6263ee58a9 +size 94876 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/speeder-progress-3.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/speeder-progress-3.jpeg new file mode 100644 index 00000000..3fbbbc0e --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/designing-your-speeder/speeder-progress-3.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7c5f8a3b0a2b7229a07d34ed0e5047a32aef86f200144ff00cf6a411fea1162 +size 98759 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/decorated-version-1.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/decorated-version-1.jpeg new file mode 100644 index 00000000..31683d88 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/decorated-version-1.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d61fe02e6fdd11e50f296d2cf04859cd81762b4d115fd74be6dc01b489f03a8a +size 81759 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/decorated-version-2.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/decorated-version-2.jpeg new file mode 100644 index 00000000..ae7566c4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/decorated-version-2.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e094fc9658cfe06c0eec1fd12285c3a41288d402b57476b4f76b8920a55335e +size 87176 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/duplicated-wing.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/duplicated-wing.jpeg new file mode 100644 index 00000000..d8f1513d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/duplicated-wing.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f92a66e30b765e7a81bdcbea0de0cab021b936a0f26ecf2a896af62b150b2419 +size 247999 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/rotate-compare.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/rotate-compare.mp4 new file mode 100644 index 00000000..d4091fda --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/rotate-compare.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd2617ed09cd8f2e6d1b974390b1277a8d508066874f7b0cd8a7f54e19c4e6cd +size 570818 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/scrapyard-decorations.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/scrapyard-decorations.jpeg new file mode 100644 index 00000000..2a8e340d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/scrapyard-decorations.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4e9f96bbadd6377d002ae2aaa4a75f6587223e739861fe8e58960f6319c9c33 +size 147275 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/second-wing.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/second-wing.jpeg new file mode 100644 index 00000000..0c75283c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/second-wing.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db39282132cfaff80d23639904d03c827b21c815ebf0815d08dd193b9cc89e36 +size 265006 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/second-wing.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/second-wing.mp4 new file mode 100644 index 00000000..3e7454af --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/second-wing.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e9051ec16e1c7aa44724639852d58780481aa558eef8d5acd9afdeb6e4f47f9 +size 8483314 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/wing-extension.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/wing-extension.jpeg new file mode 100644 index 00000000..26748904 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/wing-extension.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4364b407fad39d4ac44e2eaf090c9b56b2747c4093731a533067ce83d3cbb3cb +size 115380 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/wing-variations-1.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/wing-variations-1.jpeg new file mode 100644 index 00000000..0f998da9 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/wing-variations-1.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37e791c7a8c1a4ee2b2eb35cc5fb420cfee78d449c35230b9e424872b7557355 +size 87154 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/wing-variations-2.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/wing-variations-2.jpeg new file mode 100644 index 00000000..b1d43687 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/wing-variations-2.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b36013c890ddeaf164e3f493514b58ee0549caf29d17f749b9afd97496205006 +size 93363 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/wing-variations-3.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/wing-variations-3.jpeg new file mode 100644 index 00000000..3ccf1ee0 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/duplicate-and-design/wing-variations-3.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fff17f288da804bdb7f13f2d4fdd43750ee32965192a73a088df131e567096e9 +size 90319 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/get-off-the-ground/galactic-speedway-template.rbxl b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/get-off-the-ground/galactic-speedway-template.rbxl new file mode 100644 index 00000000..a2515786 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/get-off-the-ground/galactic-speedway-template.rbxl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ca78c652343dd8f5a27b618580b6d4e193c54ac08dbcd97348b48c381251944 +size 1964035 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/get-off-the-ground/lesson-banner.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/get-off-the-ground/lesson-banner.jpeg new file mode 100644 index 00000000..9367f16c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/get-off-the-ground/lesson-banner.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06497abbb1adc55b845a878b89b6bbc680a83e9f2961d1af9156bc8a13f90f80 +size 180999 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/go-beyond-the-challenge/extension-1.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/go-beyond-the-challenge/extension-1.jpeg new file mode 100644 index 00000000..3a13713a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/go-beyond-the-challenge/extension-1.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:131d71acd59fd9a70a302f5f33fca9bbd0b9e3d0205886725778b3187d75a8c2 +size 56051 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/go-beyond-the-challenge/extension-2.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/go-beyond-the-challenge/extension-2.jpeg new file mode 100644 index 00000000..dbd7d369 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/go-beyond-the-challenge/extension-2.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0910d8989d53bc781c9888765e55b312f05f093a6631ae30789f6561c7d73ec3 +size 62521 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/go-beyond-the-challenge/extension-3.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/go-beyond-the-challenge/extension-3.jpeg new file mode 100644 index 00000000..1af9d2ea --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/go-beyond-the-challenge/extension-3.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:080a4ada047d448f103d05eb12ff8ef042bc594698eabc997353c0f96aef5541 +size 55062 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/go-beyond-the-challenge/next-steps-particles.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/go-beyond-the-challenge/next-steps-particles.jpeg new file mode 100644 index 00000000..8a49f6dd --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/go-beyond-the-challenge/next-steps-particles.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60fa4375d721e88c956cb47dfac0d9a0ec2fc76c9b618a67598cc4ed1f97504b +size 52908 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/go-beyond-the-challenge/next-steps-share.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/go-beyond-the-challenge/next-steps-share.jpeg new file mode 100644 index 00000000..265bb7c5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/go-beyond-the-challenge/next-steps-share.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49ac3c7a80040ef29ea505d920e98c8eb25bcd3f10b44beb811a078ebac2e90c +size 48596 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/going-for-a-race/hero-race.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/going-for-a-race/hero-race.jpeg new file mode 100644 index 00000000..8fa78bb4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/going-for-a-race/hero-race.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f255af5ef98f1976d44357ab5d1777269e4651c4217ab16fad635e1a3b9a680 +size 139483 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/going-for-a-race/testing-plane.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/going-for-a-race/testing-plane.jpeg new file mode 100644 index 00000000..b91784ed --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/going-for-a-race/testing-plane.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50775499e1aa70da4f254eec643c95243f8830cf4684938ad919644f54629cc8 +size 107315 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/grouping-the-parts/group-select.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/grouping-the-parts/group-select.png new file mode 100644 index 00000000..65f20c08 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/grouping-the-parts/group-select.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fb187b1b75f380e7afa748331ed1330e987c98014f4eb8b49f897494a3f96e0 +size 105188 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/grouping-the-parts/grouping.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/grouping-the-parts/grouping.mp4 new file mode 100644 index 00000000..a09b462d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/grouping-the-parts/grouping.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c24cdd39322b95176a161af08e067c6925b1f18055c7fae3e22190ddfc521feb +size 1964174 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/grouping-the-parts/test-grouping.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/grouping-the-parts/test-grouping.mp4 new file mode 100644 index 00000000..aeb3c2cd --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/grouping-the-parts/test-grouping.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08b2706175bd9d7e068fc53b80b02ba5edb954ebf8ad535486796645f339586c +size 320305 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/main-page/lesson-1.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/main-page/lesson-1.jpeg new file mode 100644 index 00000000..7a533c4f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/main-page/lesson-1.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:217137d9fe6629ffad42e2aa0e89a7973832d30ce61589d558ed72dfe3a38c2e +size 51996 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/main-page/lesson-2.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/main-page/lesson-2.jpeg new file mode 100644 index 00000000..30045f24 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/main-page/lesson-2.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56c08cddb12d109435562155ddbfac5018c54a9b6b36596edff1e1b32dd34963 +size 62862 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/main-page/lesson-3.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/main-page/lesson-3.jpeg new file mode 100644 index 00000000..c23182a6 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/main-page/lesson-3.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:263390174ce4b2ef62bbe47e7a895c3be9f4d76681a6140e67718be4188e73a6 +size 53936 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/main-page/overview-video.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/main-page/overview-video.mp4 new file mode 100644 index 00000000..c45726f0 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/main-page/overview-video.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2607ac801a3142775242c624c495648b827782d7654f79f8c39eda502d810447 +size 2608919 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/main-page/show-quiz-game-example.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/main-page/show-quiz-game-example.jpeg new file mode 100644 index 00000000..24e6178b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/main-page/show-quiz-game-example.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06166a9b4a3fa3bc0ab3bd259e5ad91937d050b5a5908198e0c2f520fe5fdbb3 +size 140119 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/moving-the-body/move-body.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/moving-the-body/move-body.mp4 new file mode 100644 index 00000000..2eed3e0c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/moving-the-body/move-body.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40eac4167ee17e1a1952a1a80c0796591b172f223301d66b3a5dc5d9c47dc003 +size 4064753 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/moving-the-body/show-body-variations-1.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/moving-the-body/show-body-variations-1.jpeg new file mode 100644 index 00000000..69b994ac --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/moving-the-body/show-body-variations-1.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:92c3d2eec9e2af048401e0d1f897cc015bf9d54470130dfe6b011a9610c88439 +size 81144 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/moving-the-body/show-body-variations-2.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/moving-the-body/show-body-variations-2.jpeg new file mode 100644 index 00000000..d1acbbb9 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/moving-the-body/show-body-variations-2.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:483ce3d9884dabc8492f5fd99ea39961bcf5619d3c44ab63060cb84e28e9caf9 +size 91706 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/moving-the-body/show-body-variations-3.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/moving-the-body/show-body-variations-3.jpeg new file mode 100644 index 00000000..e87c882f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/moving-the-body/show-body-variations-3.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f1cda256fc16d8a558cde48ba65e135a7bc66cf8d57bbbe07f1e823622d8270 +size 93964 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/sharing-your-speeders/DistributeonCS.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/sharing-your-speeders/DistributeonCS.png new file mode 100644 index 00000000..afd9e846 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/sharing-your-speeders/DistributeonCS.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89b5089beb02fe84afa22e4e9ed353ddac7fdc88a3ff52ae86ed98a816ea5ac0 +size 53408 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/sharing-your-speeders/GetModelButton.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/sharing-your-speeders/GetModelButton.png new file mode 100644 index 00000000..c6d704fd --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/sharing-your-speeders/GetModelButton.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b186a072f9d8f98566a6ef70f6292a66f85da5e3845c24d4d6590622163cd327 +size 82133 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/sharing-your-speeders/LinktoCD.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/sharing-your-speeders/LinktoCD.png new file mode 100644 index 00000000..68cff252 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/sharing-your-speeders/LinktoCD.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c07a265d9f62de4d36dfa3ab9573acc6e70691af617929661e5e283f6930d6aa +size 46940 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/sharing-your-speeders/hero-garage-racer.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/sharing-your-speeders/hero-garage-racer.jpeg new file mode 100644 index 00000000..89ae48c9 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/sharing-your-speeders/hero-garage-racer.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa2914194e20619320d3cd10d354b2d4f9977f9e1907e0d8a866ec2d8917f587 +size 139010 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/take-flight/interact-robot.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/take-flight/interact-robot.png new file mode 100644 index 00000000..b281d0f0 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/take-flight/interact-robot.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f285cd927ae180287fcbe1339e1aece8119a76c4375386f8307fb6e941dade2f +size 1736608 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/take-flight/show-selection-gui.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/take-flight/show-selection-gui.jpg new file mode 100644 index 00000000..5043b91d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/take-flight/show-selection-gui.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d26c2d2265c75e2fe535a5dc0102b16e07ffc22dec473c2498f00caee3ad0231 +size 93830 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/take-the-challenge-2/quiz-game-page.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/take-the-challenge-2/quiz-game-page.jpeg new file mode 100644 index 00000000..69181c78 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/take-the-challenge-2/quiz-game-page.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4289ec76931ceca819db47f072fafb252ddfdd968bd0fb9b531bfeb3d70a4e19 +size 140637 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/take-the-challenge-2/scrapper-hat.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/take-the-challenge-2/scrapper-hat.jpeg new file mode 100644 index 00000000..6da41a3d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/take-the-challenge-2/scrapper-hat.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf4ebc6d78fd6dd7ef297cd389b472d01126e6e599fa90b3cc74420e67cbf189 +size 168034 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/take-the-challenge-3/hero-alien-friend.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/take-the-challenge-3/hero-alien-friend.jpeg new file mode 100644 index 00000000..42e155a9 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/take-the-challenge-3/hero-alien-friend.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf464300b7702b6eee918f85b134ad5856c0c2bd727b0dfc7b26a7dc394bed55 +size 235393 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/take-the-challenge/hero-pauldron.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/take-the-challenge/hero-pauldron.jpeg new file mode 100644 index 00000000..4063201b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/take-the-challenge/hero-pauldron.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e89f6cc695906500856e1b726a2509970adedbfefa564162581c78675229bcf +size 164268 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/take-the-challenge/show-quiz-npc.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/take-the-challenge/show-quiz-npc.jpg new file mode 100644 index 00000000..65441b83 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/take-the-challenge/show-quiz-npc.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfbe81b89844b6ffd005bdf439c024a26c2e7abedcccb908adda16dec52a5c9b +size 489285 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/test-the-speeder/explorer-correct.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/test-the-speeder/explorer-correct.png new file mode 100644 index 00000000..46d76723 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/test-the-speeder/explorer-correct.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c426df7280ee00da228b6ab9350b7cbd54c0099e8454470edd6fc9500e9eaee5 +size 70166 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/test-the-speeder/explorer-wrong.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/test-the-speeder/explorer-wrong.png new file mode 100644 index 00000000..b2abf0a4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/test-the-speeder/explorer-wrong.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:241870c0cb9c979e1051e62f25d7afae7a7b858010b6e93b2da6f0a4889ee07a +size 23551 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/test-the-speeder/select-speeder.png b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/test-the-speeder/select-speeder.png new file mode 100644 index 00000000..7513b0a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/test-the-speeder/select-speeder.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8bcbf01479eaa7cbdbb5c6ea0f86a0e39c2b867d73c1e710821c8aaa876bb5e +size 335442 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/test-the-speeder/test-speeder.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/test-the-speeder/test-speeder.mp4 new file mode 100644 index 00000000..c2970706 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-galactic-speedway/test-the-speeder/test-speeder.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d74dd8879c6710b299c65ba71883d61c3547f4440ea15af5d358a23bacf9a4f +size 13211358 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/addKeyframes.gif b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/addKeyframes.gif new file mode 100644 index 00000000..095ed5f4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/addKeyframes.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc51dfbc1288ef8e172fba30292fff9e9eb4fefa7b262eb713a98bbf382bcab7 +size 163016 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi-tier2-showButtonSetup.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi-tier2-showButtonSetup.png new file mode 100644 index 00000000..5d9107a4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi-tier2-showButtonSetup.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:10e72868d2c8c0f62575ed9c7137f678dfdf6e89d2e467c96de5d328bdba10b2 +size 7396 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_nav_button.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_nav_button.png new file mode 100644 index 00000000..83f909da --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_nav_button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa33d95e620118aa6b5e4e117f6f0eedcbe286ef03e4ed99cca673b48e6150cc +size 1006946 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_clickFrame2.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_clickFrame2.png new file mode 100644 index 00000000..31e49cb3 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_clickFrame2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df6031b070ad4d9e84af04b1df0125539f01d477939ecccb66a1adab2405249c +size 10811 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_clickFrame3.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_clickFrame3.png new file mode 100644 index 00000000..9b1ff0a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_clickFrame3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a1cd9d5b6d4eebcd2b14e3437ac48cac67637f0cb887e6557e85fb54efffe2b +size 28045 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_clickLooping.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_clickLooping.png new file mode 100644 index 00000000..a9691f6e --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_clickLooping.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0668a692ca0ded76b08e2dc0f56b6394b75c75f51fae41628b346fdb824f1b16 +size 9205 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_clickPlay.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_clickPlay.png new file mode 100644 index 00000000..cb716a4d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_clickPlay.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19631581f88acd6c0dc9271f20fe24fb82198202d320392a817951f7816a47c9 +size 9374 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_createRig_showRig.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_createRig_showRig.jpg new file mode 100644 index 00000000..a5a94966 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_createRig_showRig.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d5ad2b80e45ce91602971e6207daa3fa71c8accd50419e567f8c637b2431ea7 +size 71165 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_lessonSamples_lesson1.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_lessonSamples_lesson1.jpg new file mode 100644 index 00000000..502ace5c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_lessonSamples_lesson1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65feee77d0ec422b3e404ffe00a16cbe489f32d83a9b0d83c46ab375fd482f19 +size 46609 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_lessonSamples_lesson2alt.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_lessonSamples_lesson2alt.jpg new file mode 100644 index 00000000..395df79d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_lessonSamples_lesson2alt.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36478c87faad3c1f482f215511290ae7e8bca73cf0a743c4971876dbbcc66407 +size 47389 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_selectFirstFrame.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_selectFirstFrame.png new file mode 100644 index 00000000..74c4f46d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_selectFirstFrame.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c51f9e5020ddb556bceb37ae431141c264257d2104e9ead7363c5dbea92e103f +size 28921 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_selectPartHierarchy.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_selectPartHierarchy.png new file mode 100644 index 00000000..cf8e85b8 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_selectPartHierarchy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7be3b042e022f5be03544b3406a65adb44929d8fbadddaa3d8757bf6935b7e3f +size 25011 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_showExportedAnimation.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_showExportedAnimation.png new file mode 100644 index 00000000..4cb2681f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_showExportedAnimation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab6c27bae9fbc38c017bcecda86abf285b8b05886d3adbb18d76c10c37a8ca41 +size 8771 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_showFrame3_front.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_showFrame3_front.jpg new file mode 100644 index 00000000..f8f644e3 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_showFrame3_front.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8916f8770cf2247d0301a9dee6af5b90e8a5b41bbf86c1552eff8369667367f +size 34929 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_showFrame3_side.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_showFrame3_side.jpg new file mode 100644 index 00000000..78a4e94d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_showFrame3_side.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00d0b3ca9543f12b23e819bff22cc656a4a98a718e842e9ea50ba3b887eafd28 +size 25253 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_showLastFrames.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_showLastFrames.png new file mode 100644 index 00000000..ad542fd7 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_showLastFrames.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66fd1e00c526d3bb902fa178850e4033fed58cdd481e316d7d67420e8a35bc90 +size 6341 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_showPartsFolder.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_showPartsFolder.png new file mode 100644 index 00000000..7c971bc6 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_showPartsFolder.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cdd793a8769593773d8e4453f4400f065a83c5eb371501c1db77e3be7713492a +size 22818 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_touchedPartExamples_obby.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_touchedPartExamples_obby.jpg new file mode 100644 index 00000000..4306cc53 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_touchedPartExamples_obby.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02c2b5fd831ac75787391502fbd43f74e4ef244b548cbe28e007c5980152d505 +size 62250 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_touchedPartExamples_treasure.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_touchedPartExamples_treasure.jpg new file mode 100644 index 00000000..f000ec24 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_t2_touchedPartExamples_treasure.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2de9ae1f7c360d1268d9a1af11e29bfc8e1ff3c3ba964363a3dbebc874ffc317 +size 109740 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_tier2_extension_gameThubmanil.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_tier2_extension_gameThubmanil.jpg new file mode 100644 index 00000000..37c56b6d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_tier2_extension_gameThubmanil.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a3b97a33d0958f1c042402d5c7563d05cbcc822e3b0322bb8c1c4a9719bde25 +size 68256 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_tier2_extension_partSetup.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_tier2_extension_partSetup.jpg new file mode 100644 index 00000000..38981ed5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/bipi_tier2_extension_partSetup.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f09f172ff9a886f805b5863d1326f83264c47355a225917a5c81cb5cd0ac38af +size 100460 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_changeLength.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_changeLength.png new file mode 100644 index 00000000..b4405996 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_changeLength.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:358264fdc858eb42a4d596ee8d5e316341908dc721e766cba3aba67b2d4bfd7b +size 40049 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_clickAEPlus.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_clickAEPlus.png new file mode 100644 index 00000000..18b2dfe0 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_clickAEPlus.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6509655c10aaacef275d72eb6cca70006d0f55ec32d041d2254ed253807874d +size 40012 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_clickOptions.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_clickOptions.png new file mode 100644 index 00000000..10a595dc --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_clickOptions.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f838ea01427ad4172360c00f54aa2abe347169370b712537120e913503916c1 +size 7241 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_createAnimationName.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_createAnimationName.png new file mode 100644 index 00000000..de777df3 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_createAnimationName.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc3ce959384eb6a8d4d77f108f9a327ac0428895b00da6e0d2422dd514925750 +size 11416 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_exportedAnimationWeb_alt.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_exportedAnimationWeb_alt.png new file mode 100644 index 00000000..6113c533 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_exportedAnimationWeb_alt.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:344d262c81fb8bc3909b0ad301f64cf5d174c2b1b1ddf5de1e470eea4e274143 +size 50240 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_jumpAnimationStills_01.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_jumpAnimationStills_01.jpg new file mode 100644 index 00000000..fbf5c822 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_jumpAnimationStills_01.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a848d652e86060f5947a9ea1ab8c1a4b3773328ac8e157d6818fbc979f518797 +size 25936 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_jumpAnimationStills_2.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_jumpAnimationStills_2.jpg new file mode 100644 index 00000000..5bf93b83 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_jumpAnimationStills_2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1e7178fcde98b69741373c2e707e4af1a9d4de937eafc38a73434f1690ec4aa +size 27313 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_jumpAnimationStills_3.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_jumpAnimationStills_3.jpg new file mode 100644 index 00000000..7b53243a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_jumpAnimationStills_3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b0f873585671dc426f2e7a96af1f1c3b89bbbb51ad6dde26b968da14e8da0081 +size 29195 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_selectKeyframeExamples_selectAll.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_selectKeyframeExamples_selectAll.png new file mode 100644 index 00000000..656659db --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_selectKeyframeExamples_selectAll.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfabde020cec1f169f06d133211e93e22bd324a2d7440bf51a60c6a136dff1b1 +size 4906 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_selectKeyframeExamples_single.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_selectKeyframeExamples_single.png new file mode 100644 index 00000000..89ea7fec --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_selectKeyframeExamples_single.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c6d8548dca96682d3ed95a249a9a65803ab20937686a55150742693cfc9cf5b +size 4904 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_showDurationCurrent.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_showDurationCurrent.png new file mode 100644 index 00000000..3f6394ed --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/ccs2020_t2_showDurationCurrent.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12dad2c16f844e770dd86b06142680508e0c72850f2f2af947922c702a299c2b +size 33198 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/exampleProject_tweeningButtonDoor.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/exampleProject_tweeningButtonDoor.mp4 new file mode 100644 index 00000000..c3dccab7 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/exampleProject_tweeningButtonDoor.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d81440e4ba84031dac104c65a547049b09fc413720d1634c579f59e28d80ab6b +size 799802 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/exampleProject_tweeningPetRotate.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/exampleProject_tweeningPetRotate.mp4 new file mode 100644 index 00000000..ba3cc705 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/exampleProject_tweeningPetRotate.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4e774226e071ab373b9c659528521d6b686d15c6687acd165d9d6d881fdc4fb +size 557624 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/example_allTweens.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/example_allTweens.mp4 new file mode 100644 index 00000000..6c4849f8 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/example_allTweens.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33a3607d1915118c48360bc12d42b12322cebca5d1aa111aaf84e3aa2fc1236e +size 4502210 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showAnimationIDScript.gif b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showAnimationIDScript.gif new file mode 100644 index 00000000..32311ebb --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showAnimationIDScript.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96aebf33e19bac896db9d259de8103a8a36f939d9ad9cc5205271bb2f5be612b +size 103691 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showChangeFrameDifference_opt.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showChangeFrameDifference_opt.mp4 new file mode 100644 index 00000000..9e3c4c42 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showChangeFrameDifference_opt.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7aeea0dab22f141edb4bc4a02af19f0457f82b9365bedd872f4c0f059f3a0c67 +size 262190 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showFinalAnimation_singleAlt.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showFinalAnimation_singleAlt.mp4 new file mode 100644 index 00000000..715193fb --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showFinalAnimation_singleAlt.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a65e3c3240a5b016c635b5b661f2828d7945d6d3eed7e0435609373558c69dd +size 721836 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showFinalVictoryPose_simple.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showFinalVictoryPose_simple.mp4 new file mode 100644 index 00000000..1f024f9a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showFinalVictoryPose_simple.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31964d5fd700ace0cc0623337499be659e2719ece88fa6efc3eda274e195b5df +size 451501 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showImprovedAnimationMoreFrames_improved_optimized.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showImprovedAnimationMoreFrames_improved_optimized.mp4 new file mode 100644 index 00000000..5438ccd5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showImprovedAnimationMoreFrames_improved_optimized.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fcfd19aa3b0395e7e6602f786bef42a2f37b27925cb2f494a38de374423a9190 +size 349080 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showMoveBody.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showMoveBody.mp4 new file mode 100644 index 00000000..efc3dd79 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showMoveBody.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb7470d0968d6f94887dc6a74eae255250f41bb1098c81c1d79910a435498f1a +size 121563 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showNPCAnimationsFeedback_noFeedback.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showNPCAnimationsFeedback_noFeedback.mp4 new file mode 100644 index 00000000..451d402f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showNPCAnimationsFeedback_noFeedback.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69a25dcd9fc38c846b2b1eb4e95db8445421a27864d6255397ce5bb304576f28 +size 871670 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showNPCAnimationsFeedback_withFeedback.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showNPCAnimationsFeedback_withFeedback.mp4 new file mode 100644 index 00000000..88523e27 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showNPCAnimationsFeedback_withFeedback.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5b5a5d29127dedaa075a59e66604e975585840f4dde85316df271d243727026 +size 762953 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showOverallAnimationTimelapse_optimized.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showOverallAnimationTimelapse_optimized.mp4 new file mode 100644 index 00000000..f3d5f409 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showOverallAnimationTimelapse_optimized.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:413f6f0706513d0a4a1231d722f59cfa1f125cfe882d47a53ad8d186c7bf1328 +size 1355981 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showPose2TimeLapse_optimized.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showPose2TimeLapse_optimized.mp4 new file mode 100644 index 00000000..1e653d99 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showPose2TimeLapse_optimized.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc3f3a4f90bd42ef3088a16b62678c91e618b0a0bf8e270e308e3261b4084ede +size 2541262 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showRotateArms_web.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showRotateArms_web.mp4 new file mode 100644 index 00000000..28c27f98 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showRotateArms_web.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8aafa656b47751a1217acc9d54bec39a4f08c3a465fa7772a359edfe994e37f4 +size 207007 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showScaleTween.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showScaleTween.mp4 new file mode 100644 index 00000000..ab0a8f7a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showScaleTween.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80bb20e64820315cfffdb7c15ded7e7ee432635b31c51de1c3a336c6c1929c66 +size 3220106 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showTweenColor.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showTweenColor.mp4 new file mode 100644 index 00000000..1f6a8af3 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showTweenColor.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:702a61c6f1e9b14723f30aa15d85f13a6e151898b606bdbaa0b4948e4823a5ac +size 619954 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showTweenMove_Wrong.gif b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showTweenMove_Wrong.gif new file mode 100644 index 00000000..befd7caf --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showTweenMove_Wrong.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99c3b952d5500d06fa544fa69594334faafafe7c46f0697205d43e0dd60c9c89 +size 130002 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showTweenMove_correct.gif b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showTweenMove_correct.gif new file mode 100644 index 00000000..8f181283 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/showTweenMove_correct.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb63c8bb06d9832de7a4b253f86c6163486ce324fcbdedf87a4589d8260b133f +size 137871 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/victoryPose_finalSingleObbyExample_web.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/victoryPose_finalSingleObbyExample_web.mp4 new file mode 100644 index 00000000..4c991a3a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move-intermediate/victoryPose_finalSingleObbyExample_web.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:566d4b45f1bcd22363619b0b2920fc132f153622bb44b3a29807072c72ed521a +size 1038921 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/adding-new-models/show-new-assets.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/adding-new-models/show-new-assets.jpeg new file mode 100644 index 00000000..a9bc9b70 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/adding-new-models/show-new-assets.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12d5811ad581516795a36cb09dff3be10f6506afa9d91f93bc0cda7631dfdd96 +size 181558 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/adding-the-second-pose/full-swim-animation.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/adding-the-second-pose/full-swim-animation.mp4 new file mode 100644 index 00000000..e41291c6 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/adding-the-second-pose/full-swim-animation.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93cf013cbfbabdcd042ab6677fbc25648f88407cc60fd0de981846fd8c5e5949 +size 360022 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/adding-the-second-pose/press-loop-button.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/adding-the-second-pose/press-loop-button.png new file mode 100644 index 00000000..a4c27781 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/adding-the-second-pose/press-loop-button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f742a6b580a10e6a63183b50ec7698924902b6784f0ba84263bf9beea5de2918 +size 22199 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/adding-the-second-pose/set-timeline-middle.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/adding-the-second-pose/set-timeline-middle.png new file mode 100644 index 00000000..dff27312 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/adding-the-second-pose/set-timeline-middle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6952bf7f97e6bcf0ca4eb84e480045ed9fd5b7318f84afadf4af9276b110813e +size 15879 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/adding-the-second-pose/show-full-swim-animation.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/adding-the-second-pose/show-full-swim-animation.mp4 new file mode 100644 index 00000000..61080cb2 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/adding-the-second-pose/show-full-swim-animation.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fc7863656e8ef4f1837cf1385111dc134c4eba9b4f90115a93095d1a4d95545 +size 3126073 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/adding-the-second-pose/show-middle-timelapse.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/adding-the-second-pose/show-middle-timelapse.mp4 new file mode 100644 index 00000000..786c83d1 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/adding-the-second-pose/show-middle-timelapse.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37ab8e5218f783b273644336fb4f7e1fdde4743a02b119ad72bfc3b3a037dd09 +size 24815318 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/beginner-landing-page/lesson-1.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/beginner-landing-page/lesson-1.jpeg new file mode 100644 index 00000000..4b4c77e8 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/beginner-landing-page/lesson-1.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8b4f5a77378d514978cad11dd881f26f94ec4b03f2b28157b0030e1d6de2389 +size 57579 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/beginner-landing-page/lesson-2.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/beginner-landing-page/lesson-2.jpeg new file mode 100644 index 00000000..e11b3727 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/beginner-landing-page/lesson-2.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf03e029d86fc5439484f55da1cfbe5f8bb6f2bc0431f7b2d71468c2f2d04111 +size 91417 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/beginner-landing-page/lesson-3.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/beginner-landing-page/lesson-3.jpeg new file mode 100644 index 00000000..bbc5996d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/beginner-landing-page/lesson-3.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5aa079596844afa0d7285e1fd7b0cee810ca10e0c9508c8982ba5af121c4f169 +size 68924 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/beginner-landing-page/overview.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/beginner-landing-page/overview.mp4 new file mode 100644 index 00000000..aced90b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/beginner-landing-page/overview.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7f53d98215c42fa5f9e58451260660c74cb3f72a0ea331086b53cfe319c394e +size 670672 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/beginner-landing-page/show-game-hub.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/beginner-landing-page/show-game-hub.jpeg new file mode 100644 index 00000000..b29160cc --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/beginner-landing-page/show-game-hub.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2e57e86b98c3c4aa283b1491688f8bb31e79a2f291a1b30474043e17b8d87e0 +size 56152 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/challenge-checkpoint-2/game-redeem-npc.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/challenge-checkpoint-2/game-redeem-npc.jpeg new file mode 100644 index 00000000..7c9e5f1c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/challenge-checkpoint-2/game-redeem-npc.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25bedb5321985ff789952027379fc1f25467ee80694c368d640c85cbeb0f5fb3 +size 68584 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/challenge-checkpoint-3/game-redeem-npc.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/challenge-checkpoint-3/game-redeem-npc.jpeg new file mode 100644 index 00000000..7c9e5f1c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/challenge-checkpoint-3/game-redeem-npc.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25bedb5321985ff789952027379fc1f25467ee80694c368d640c85cbeb0f5fb3 +size 68584 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/challenge-checkpoint/game-redeem-npc.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/challenge-checkpoint/game-redeem-npc.jpeg new file mode 100644 index 00000000..3c85a733 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/challenge-checkpoint/game-redeem-npc.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:244f8f0ae0557133fa2f8f9dccc6895f150ad9626d0aa4c9e5a535517eb205a7 +size 95326 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/change-the-animation/Animations-Button.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/change-the-animation/Animations-Button.png new file mode 100644 index 00000000..7511f7ea --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/change-the-animation/Animations-Button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b503958f4bfc252feb34e969addeb3dbcc69f344fa18aa17bdaa743b94c34c34 +size 33777 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/change-the-animation/CopyAssetID.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/change-the-animation/CopyAssetID.png new file mode 100644 index 00000000..7622267f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/change-the-animation/CopyAssetID.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7a6ad8fcad93a9c617db4709292af51d24fe37950c25797d74ceadc106d64a0 +size 26356 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/change-the-animation/finished-animation.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/change-the-animation/finished-animation.mp4 new file mode 100644 index 00000000..ed4a723e --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/change-the-animation/finished-animation.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6cff02cef45fc913134e47d46da2d0351925aefc9b622b78db263b8932d467cb +size 1851703 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/change-the-animation/search-walk-select.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/change-the-animation/search-walk-select.png new file mode 100644 index 00000000..4c217b65 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/change-the-animation/search-walk-select.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9846275d1b5699609d846fa76b187e59a4f2a753dad9f5d89d6d1f9a02f449cd +size 15563 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/change-the-animation/set-animation-value.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/change-the-animation/set-animation-value.png new file mode 100644 index 00000000..c177fc5c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/change-the-animation/set-animation-value.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c56ea99a885c4a4d434b9b3b4f460b949512b23e799e2cb748ea21cf4e8d0cb +size 67075 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/create-the-first-pose/click-upper-arm.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/create-the-first-pose/click-upper-arm.mp4 new file mode 100644 index 00000000..c6d5d1cd --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/create-the-first-pose/click-upper-arm.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7355edcdf129e5dd65123fc88b3b35c840cd1b4c881d516ebd3f4d80117f15b3 +size 1236761 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/create-the-first-pose/example-crouch.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/create-the-first-pose/example-crouch.jpeg new file mode 100644 index 00000000..befc360b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/create-the-first-pose/example-crouch.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e62c0e479cf2ddaf9c7e55483173f573573f94042072946aba72cdb83b8a630 +size 39801 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/create-the-first-pose/example-dance.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/create-the-first-pose/example-dance.jpeg new file mode 100644 index 00000000..68939fd4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/create-the-first-pose/example-dance.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dee73e1cd076455767fcf79c9a83a3bd26d2109ae2c4eeb79a385f31c6144cff +size 35905 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/create-the-first-pose/example-swim.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/create-the-first-pose/example-swim.jpeg new file mode 100644 index 00000000..02d17b82 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/create-the-first-pose/example-swim.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ef971bc8bed099d35b505549470d195bb2fc5544d5614b4aa45bf3c63b5af69 +size 44222 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/create-the-first-pose/rotate-upper-arm.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/create-the-first-pose/rotate-upper-arm.mp4 new file mode 100644 index 00000000..906b9ec2 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/create-the-first-pose/rotate-upper-arm.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf248551c7e62f319f2d48788ce0a8acb515a6cec6cb05a0f4b68c9c8812f854 +size 3607211 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/create-the-first-pose/timelapse-first-pose.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/create-the-first-pose/timelapse-first-pose.mp4 new file mode 100644 index 00000000..02f82421 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/create-the-first-pose/timelapse-first-pose.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55c97f0dd22daf3a5e10b8d8197d029ee8172c5f65b6d12e0cc50107394ffc1a +size 24016393 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/creating-animations/AnimationExample.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/creating-animations/AnimationExample.mp4 new file mode 100644 index 00000000..fe2e1087 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/creating-animations/AnimationExample.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a2847b8ccbd6afdffdcf72061995b3d6d10290c1190cc4b46c6cd7877fc196c +size 5449501 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/creating-animations/highlight-figure.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/creating-animations/highlight-figure.jpg new file mode 100644 index 00000000..b51572d9 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/creating-animations/highlight-figure.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1cd08f3e939636b4ff8637c065dfef49be8e445cbd82af5c91be876bf660eab5 +size 149745 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/creating-animations/rig-selected.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/creating-animations/rig-selected.jpg new file mode 100644 index 00000000..2f18e7ce --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/creating-animations/rig-selected.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8679e8baf0d24884f9753411ddc9462fe9afc41c37cfee528db4706a03863796 +size 56672 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/creating-animations/show-animation-breakdown.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/creating-animations/show-animation-breakdown.mp4 new file mode 100644 index 00000000..97cd93fe --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/creating-animations/show-animation-breakdown.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:92c8ab3673d9874116448ef0840277d0afe8f561050256478b12335b2fa8a00d +size 508589 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/creating-animations/show-move-camera.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/creating-animations/show-move-camera.mp4 new file mode 100644 index 00000000..f3803425 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/creating-animations/show-move-camera.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a8cbdd68a91192d7474e7284abd39d9e985a1f20c75482e95b8eadacd834075 +size 5975736 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/exporting-animations/hero-banner.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/exporting-animations/hero-banner.jpeg new file mode 100644 index 00000000..8a6f7152 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/exporting-animations/hero-banner.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:381ffe99ba9cbe7be8cef107cf9fda34003a09de6de71ca961002613ccdcc621 +size 84335 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/go-beyond-the-challenge/adding-new-models.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/go-beyond-the-challenge/adding-new-models.png new file mode 100644 index 00000000..3f0a3a12 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/go-beyond-the-challenge/adding-new-models.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db4acd56594dfc3778ce6e07ab73e3100ae1e3b90816091c0923b8c6fc740c13 +size 238501 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/go-beyond-the-challenge/hero-banner.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/go-beyond-the-challenge/hero-banner.jpeg new file mode 100644 index 00000000..035fb584 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/go-beyond-the-challenge/hero-banner.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc9547ede6f35d7ddb0167e64c1179e0ef1047474e8017eb90770002d3c6c72b +size 137309 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/go-beyond-the-challenge/learn-coding.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/go-beyond-the-challenge/learn-coding.png new file mode 100644 index 00000000..9a342855 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/go-beyond-the-challenge/learn-coding.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20abd631d969b2f4a3fa628200e15599165bc61c8a8fafeec1a5fea11b9ff0ba +size 87414 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/go-beyond-the-challenge/personalize-the-game.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/go-beyond-the-challenge/personalize-the-game.png new file mode 100644 index 00000000..6633cead --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/go-beyond-the-challenge/personalize-the-game.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:943d638246151b11ac4e818bab7539e49d459128b72edcf97a255268be8be690 +size 193097 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/go-beyond-the-challenge/share-animations.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/go-beyond-the-challenge/share-animations.png new file mode 100644 index 00000000..9a0bfd5f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/go-beyond-the-challenge/share-animations.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81415f5911c1e68d8edd6ea18cb6888e24f7cefa5db438fb447320d45d02df6e +size 70288 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/invite-friends-to-play/hero-banner.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/invite-friends-to-play/hero-banner.jpeg new file mode 100644 index 00000000..3195e1ad --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/invite-friends-to-play/hero-banner.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6944cc7ff290cbf1f523cf001ae4982e38098dcf22308d4283ca280461e71852 +size 186016 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/looping-animations/Scrubber.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/looping-animations/Scrubber.png new file mode 100644 index 00000000..4da2873a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/looping-animations/Scrubber.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:616cb97bcda2436080d593390af7f7b8f76203d64882cb13742597edbc3eaeb8 +size 7689 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/looping-animations/Timeline.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/looping-animations/Timeline.png new file mode 100644 index 00000000..1495a7af --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/looping-animations/Timeline.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ccce4d0ff1ea0000454785fb87d5f580b82bac6023ae3c0d34c2a29fd8cc8e13 +size 8142 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/looping-animations/added-last-pose.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/looping-animations/added-last-pose.png new file mode 100644 index 00000000..0203db0e --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/looping-animations/added-last-pose.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff8a97ff91c01d62ad90a434c1989869c65a3a261ea6282d30130a281df8d19b +size 48153 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/looping-animations/change-duration-to-end.gif b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/looping-animations/change-duration-to-end.gif new file mode 100644 index 00000000..630d444b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/looping-animations/change-duration-to-end.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ef23d462aa284b2781db558bc8e9d231446eb44de2975c4247afc5a341bd86c +size 30939 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/looping-animations/select-first-pose-diamond.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/looping-animations/select-first-pose-diamond.png new file mode 100644 index 00000000..0271bbe4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/looping-animations/select-first-pose-diamond.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09d5807a65811788557f4927904d957cbfc240073dd03bb5fef39501dd7bb644 +size 59698 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/opening-the-template/overview-game-progress.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/opening-the-template/overview-game-progress.mp4 new file mode 100644 index 00000000..99ed5731 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/opening-the-template/overview-game-progress.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1ee2af3f36630dc49ce95e7fa9069ae1924f973c992c18d6e8c2f3db891ed86 +size 2010139 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/opening-the-template/show-template-pick.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/opening-the-template/show-template-pick.png new file mode 100644 index 00000000..aff3cf6a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/opening-the-template/show-template-pick.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ea755d1c2e06411d4ba08373dc287f2190b5b6041d71641f608c2cc6dd00ea5 +size 9899 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/opening-the-template/template-example.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/opening-the-template/template-example.png new file mode 100644 index 00000000..125663c3 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/opening-the-template/template-example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b791cab48421b189ac610e257f0c6f1de046331bacc33fe91c2a2433415198a +size 4470511 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/personalize-the-game/atmosphere.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/personalize-the-game/atmosphere.jpeg new file mode 100644 index 00000000..cabe2e0c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/personalize-the-game/atmosphere.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17f2b7a7da1d6e34c44c6c2cdc56c16cf8d615ba071272ee2ee3a195eef5b294 +size 14589 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/personalize-the-game/open-game-settings.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/personalize-the-game/open-game-settings.png new file mode 100644 index 00000000..78801a2a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/personalize-the-game/open-game-settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cca32d1a3ea59bea513b2eba40c6c2a89ae7ec552a1d82818480058e249d876 +size 5792 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/personalize-the-game/particle-effects.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/personalize-the-game/particle-effects.jpeg new file mode 100644 index 00000000..f31c16c2 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/personalize-the-game/particle-effects.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:661b4f500318ba62cdfb0d4f37cd2d7e9c17f38a25289fc334d8016d2154a211 +size 42755 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/personalize-the-game/show-explorer.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/personalize-the-game/show-explorer.jpeg new file mode 100644 index 00000000..f13a2848 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/personalize-the-game/show-explorer.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:627df0aab4a2297a76e7ffac07e570683efcfeeeab0f00a7c4bba4c7f4934756 +size 124168 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/personalize-the-game/show-rename-after.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/personalize-the-game/show-rename-after.jpeg new file mode 100644 index 00000000..19bc4bd7 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/personalize-the-game/show-rename-after.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0dfbca31777145266b42c43f597466d591c45d09389beb28eb184352d1bf3a82 +size 115624 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/personalize-the-game/show-rename-before.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/personalize-the-game/show-rename-before.jpeg new file mode 100644 index 00000000..5170ecb4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/personalize-the-game/show-rename-before.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3bc38a3ef243cd583352dc1c2b0690e98d0263f9c8f0b550ec7bafd60af06b13 +size 109556 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/personalize-the-game/terrain.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/personalize-the-game/terrain.jpeg new file mode 100644 index 00000000..c04d2b32 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/personalize-the-game/terrain.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8a1a762107a90a744aea2220315b4c296443f331f0457a056eb5d9cc7d005db +size 53685 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/publish-animations/Publish-Highlight.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/publish-animations/Publish-Highlight.png new file mode 100644 index 00000000..65a618b9 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/publish-animations/Publish-Highlight.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:edfdf432e9a17cf0dbb72e53d7769f7c139027b78cbbd6ffb7d695787f8208f7 +size 28920 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/publish-animations/publish-copy-id.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/publish-animations/publish-copy-id.png new file mode 100644 index 00000000..feb48303 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/publish-animations/publish-copy-id.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac464430b98acc3ca69092aa08d6a255b0df130a8607c43f311f8cf80f9ddf35 +size 26940 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/save-and-publish/hero-banner.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/save-and-publish/hero-banner.jpeg new file mode 100644 index 00000000..ee0195bc --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/save-and-publish/hero-banner.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c86b29124aec16ea33ef5b133311551e355a660d6f6c57067ac7b0c480ad8fc +size 140767 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/save-and-publish/save-animation.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/save-and-publish/save-animation.png new file mode 100644 index 00000000..9955a7c4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/save-and-publish/save-animation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d72b310d54ad33f992eb04768b2d7a4894b6355590243a46f9da443ffd862695 +size 19118 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/sharing-animations/animation-keyframe.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/sharing-animations/animation-keyframe.png new file mode 100644 index 00000000..76d94275 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/sharing-animations/animation-keyframe.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26fe35b0f725b9d68b0590693795b29d3b42e87df9f03234f149a02d1188369b +size 5708 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/sharing-animations/click-options.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/sharing-animations/click-options.png new file mode 100644 index 00000000..9c39eb2a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/sharing-animations/click-options.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0095b186b0fd4353b6b61bff88c575a78e3fcc89ed913361619d7b262b037d09 +size 6608 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/sharing-animations/hero-banner.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/sharing-animations/hero-banner.png new file mode 100644 index 00000000..f828c83d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/sharing-animations/hero-banner.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1028eaa561022ca3c2d22e4b5d927f344b43b9e92bdf2c92deda00204b195a04 +size 309043 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/sharing-animations/select-animation-saves.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/sharing-animations/select-animation-saves.png new file mode 100644 index 00000000..15b0cd0e --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/sharing-animations/select-animation-saves.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e51039f16fc7d2bc66ec445618ad5b7ca5e9e38c3a8eef840b036052fa300103 +size 20722 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/sharing-animations/select-animation.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/sharing-animations/select-animation.png new file mode 100644 index 00000000..140902fb --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/sharing-animations/select-animation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f237b40bee7fa71d5c44f80e27640ed8f48c453b1c289fc7014c7c25a03ecb97 +size 16799 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/test-the-game/click-game-button.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/test-the-game/click-game-button.mp4 new file mode 100644 index 00000000..63848129 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/test-the-game/click-game-button.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:863268123275ed6fda21522829b4785b88b794fdd812552b3f3fae8082831548 +size 502609 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/test-the-game/click-npc.png b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/test-the-game/click-npc.png new file mode 100644 index 00000000..727b33d8 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/test-the-game/click-npc.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86003219a5705133bda5c4dd0eb9f64e0a3be89d8c0841d7a29b20cb6b3f65eb +size 2167541 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/test-the-game/click-play-game.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/test-the-game/click-play-game.jpeg new file mode 100644 index 00000000..c1291102 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-island-of-move/test-the-game/click-play-game.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cf85b57c8b1f9c3c2a2ea0dfd1dea9366517bd2353a7c0b2755e5e1cc9ba6e3 +size 56722 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/create-events.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/create-events.png new file mode 100644 index 00000000..44e51384 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/create-events.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09171e3d42ef8e109ac236c05d67d7da30c93acdefcc0080c25fab42fdf2f7b5 +size 13671 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/create-particles-folder.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/create-particles-folder.png new file mode 100644 index 00000000..3ce59da2 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/create-particles-folder.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7af94e57d9025f85e96a918dce2cd8f82845f95e9d3e2e0e7ff19f90e46667a +size 10956 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/create-tutorial-manager.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/create-tutorial-manager.png new file mode 100644 index 00000000..cbc8d6e7 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/create-tutorial-manager.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c813e09e4905a76085acbb101248486567d86fe155101d252b4022793d222685 +size 18532 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/create-tutorial-particles.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/create-tutorial-particles.png new file mode 100644 index 00000000..c42f1f97 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/create-tutorial-particles.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43073322d104d6a944069e4d15213a78c22c73c4d36201e994fc3cf4d02fa94c +size 10105 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/create-tutorial-script.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/create-tutorial-script.png new file mode 100644 index 00000000..3be2b6e2 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/create-tutorial-script.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04bd1c1f96c3333f4d4bc48dbe68dec2d381c92dfbc1137f9b9fa64717b68174 +size 12320 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/delete-test-player.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/delete-test-player.mp4 new file mode 100644 index 00000000..df20959a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/delete-test-player.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c560aca64e1faf7fa219023824f2e54704d09dcc0ba92821df2076f7f49e263 +size 191643 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/final-example-2.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/final-example-2.mp4 new file mode 100644 index 00000000..7c1f0fc0 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/final-example-2.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aeb6b038a84fe0061e829e2aa68d4b7dd433a27e91e014e329198783686ae00d +size 2811771 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/final-example.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/final-example.mp4 new file mode 100644 index 00000000..7c1f0fc0 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/final-example.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aeb6b038a84fe0061e829e2aa68d4b7dd433a27e91e014e329198783686ae00d +size 2811771 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/move-tutorial-beam.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/move-tutorial-beam.png new file mode 100644 index 00000000..6526d336 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/adding-scripts/move-tutorial-beam.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1942b80657691fb8e9a006effcc2fb63970cc2ce13371121db83dae542b4c782 +size 11640 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/become-an-artist/game-example.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/become-an-artist/game-example.mp4 new file mode 100644 index 00000000..114cbb6c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/become-an-artist/game-example.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bcf8a785a88747dd90a7884fe9c87c9cd5f44c0b3a6031f8d6cec2ad676cd255 +size 1267040 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/become-an-artist/template-overview.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/become-an-artist/template-overview.jpeg new file mode 100644 index 00000000..5cf00e80 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/become-an-artist/template-overview.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00fba983223554549b00b145c27c55b4f548d973ee2add37e56db20af7e58cfc +size 136838 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/become-an-artist/template-overview.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/become-an-artist/template-overview.png new file mode 100644 index 00000000..083dba3a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/become-an-artist/template-overview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0c1d4d60b7efdcdf2d6eaa3595312fa1fb9e39cfed4d15cd37395d90e8412c8 +size 3764710 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/beginner-landing-page/beginner-avatar-items.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/beginner-landing-page/beginner-avatar-items.jpeg new file mode 100644 index 00000000..6190dcd2 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/beginner-landing-page/beginner-avatar-items.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1df7ba9b0dd2f700bcdea656f54797e840b4310d2c8bc4e7400aaef67e3f6697 +size 84479 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/beginner-landing-page/lesson-1-thumbnail.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/beginner-landing-page/lesson-1-thumbnail.jpeg new file mode 100644 index 00000000..239a1c1a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/beginner-landing-page/lesson-1-thumbnail.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf7c3dda02a7caf6bb5d276cfb06bc2ffe2e570d562103f101201b28b56b5f33 +size 88316 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/beginner-landing-page/lesson-2-thumbnail.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/beginner-landing-page/lesson-2-thumbnail.jpeg new file mode 100644 index 00000000..9d4c4267 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/beginner-landing-page/lesson-2-thumbnail.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:471de5b33f0773cd84701dbaab74336f229abde95d11e8fee5af149f9f7dd869 +size 66162 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/beginner-landing-page/lesson-3-thumbnail.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/beginner-landing-page/lesson-3-thumbnail.jpeg new file mode 100644 index 00000000..16d916c3 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/beginner-landing-page/lesson-3-thumbnail.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c00a8d51404fff1289514f019c830d36fb4b6076cfe0550b8f941ac5674e363d +size 77264 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/beginner-landing-page/trailer.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/beginner-landing-page/trailer.mp4 new file mode 100644 index 00000000..eb24ef7e --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/beginner-landing-page/trailer.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26ea9b61705e548d92ba3c0c1f6016aaaa09ad08e3065ad0aa1d1b9115fdb2bd +size 3259208 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/challenge-checkpoint-2/avatar-items.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/challenge-checkpoint-2/avatar-items.jpeg new file mode 100644 index 00000000..87448f9c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/challenge-checkpoint-2/avatar-items.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37c95cbf22884e5a8489338f4915d1672a0b06032b20534e0f852bb6125ca49a +size 116579 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/challenge-checkpoint-2/prize-avatar.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/challenge-checkpoint-2/prize-avatar.jpeg new file mode 100644 index 00000000..c5f36158 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/challenge-checkpoint-2/prize-avatar.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89f012763dc39d86c2e462fc29cedd9d900fe0b3913a01fb3cb7976894025b35 +size 105334 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/challenge-checkpoint-3/avatar-items.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/challenge-checkpoint-3/avatar-items.jpeg new file mode 100644 index 00000000..29b1e495 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/challenge-checkpoint-3/avatar-items.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e35aca4777dd3d279d64ee94d2bdb28dac799133708f0149f1f5551e9ce05220 +size 120576 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/challenge-checkpoint-3/prize-avatar.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/challenge-checkpoint-3/prize-avatar.jpeg new file mode 100644 index 00000000..c5f36158 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/challenge-checkpoint-3/prize-avatar.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89f012763dc39d86c2e462fc29cedd9d900fe0b3913a01fb3cb7976894025b35 +size 105334 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/challenge-checkpoint/avatar-items-hero.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/challenge-checkpoint/avatar-items-hero.jpeg new file mode 100644 index 00000000..424e663d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/challenge-checkpoint/avatar-items-hero.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6db3ef51a69e334dd659384a901de6dc693f328885bfe310f8894719d2df4dac +size 111012 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/challenge-checkpoint/prize-avatar.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/challenge-checkpoint/prize-avatar.jpeg new file mode 100644 index 00000000..c5f36158 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/challenge-checkpoint/prize-avatar.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89f012763dc39d86c2e462fc29cedd9d900fe0b3913a01fb3cb7976894025b35 +size 105334 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/challenge-checkpoint/prize-avatar.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/challenge-checkpoint/prize-avatar.png new file mode 100644 index 00000000..af2e1bad --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/challenge-checkpoint/prize-avatar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f488f5b14865695dfeb3927ace12101293fb8144d5998dd169db36c67015ebb8 +size 2211852 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/attachment0-to-player.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/attachment0-to-player.mp4 new file mode 100644 index 00000000..32261bf2 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/attachment0-to-player.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a9dd907fe63a05496cae0bcf3f6402e528b7bd3d794d718141585c3ccdccc4e +size 430378 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/beam-texture-change.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/beam-texture-change.mp4 new file mode 100644 index 00000000..e93c62ab --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/beam-texture-change.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31ac7a2e8ae3dc3408f99a75e6531d1070a817a829184684eb3f90f1c94d74ec +size 733311 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/default-beam.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/default-beam.png new file mode 100644 index 00000000..aa955cb4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/default-beam.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79fbbc1a34dbc3f82e62e162cba067aef0302978e5f394f756e24b18675c4154 +size 431696 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/face-camera-off.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/face-camera-off.jpeg new file mode 100644 index 00000000..49f546d0 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/face-camera-off.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64f6085b2243afe3a8e791d3c167c3db4be0f0d5532ee4dd860aa83ab8a9cc6d +size 25325 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/face-camera-on.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/face-camera-on.jpeg new file mode 100644 index 00000000..75a14a88 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/face-camera-on.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:869fff1bdeeaa599922f2deccf206c6a209156f2aaca30b4a7ae408d9817d812 +size 37940 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/finished-beam-example.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/finished-beam-example.mp4 new file mode 100644 index 00000000..5464e68c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/finished-beam-example.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a79830d45d5e430def3ccefbc240831073638eecc31277f3961ea1df1cd619e4 +size 1151279 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/set-face-camera.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/set-face-camera.png new file mode 100644 index 00000000..b0140bab --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/set-face-camera.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41e7568d984110547c4afe1b41be30b252e34e227b6c378684e185f6b7aabbd8 +size 10843 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/set-goal-attachment.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/set-goal-attachment.png new file mode 100644 index 00000000..e1a06f7a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/set-goal-attachment.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e784ecd95316bfcbc1b88d40fcaedc2b2bb6b9e062bb504d646e398be538658 +size 12631 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/set-texture-mode.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/set-texture-mode.png new file mode 100644 index 00000000..274e4f44 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/set-texture-mode.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b852ba825e1da1ad521a83e613484d35fc0a5d827895db4e14bd107588b645f4 +size 2397 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/show-static-beam.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/show-static-beam.png new file mode 100644 index 00000000..5caf0928 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/connect-the-beam/show-static-beam.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb2a3fa3be312ac24bb052107c39b43053c858ec5bf02fd8921fcfbaa0cf24fb +size 558277 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/add-delete-colors.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/add-delete-colors.mp4 new file mode 100644 index 00000000..ed14a50c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/add-delete-colors.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3851a1abcb6d8083b064cf84a8d1b928dd1b3d95d0148bd94c7a488d118f050 +size 192974 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/avatar-items.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/avatar-items.jpeg new file mode 100644 index 00000000..1325f7a3 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/avatar-items.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23e9983add0802a440a243725e3f5bcc653fb9f176caaeeaeaba0df36dedfa4a +size 106218 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/click-sparkler-particles.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/click-sparkler-particles.mp4 new file mode 100644 index 00000000..b8585670 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/click-sparkler-particles.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a048cbf9ac531abae74795cb76a4ee829c473a1ed5623b91404a11610a8180a +size 170242 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/cut-staff.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/cut-staff.mp4 new file mode 100644 index 00000000..0527101a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/cut-staff.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73fae947a191c0ec76f91ce2d9c48dad42f4565984bc3686252cc1bef4e12298 +size 174979 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/final-example.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/final-example.jpeg new file mode 100644 index 00000000..ec90fbb3 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/final-example.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e004d9bb16f17680f72d247d0697440d1d9f174a8a890dd65b9619eb5cacc865 +size 144917 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/final-example.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/final-example.mp4 new file mode 100644 index 00000000..6e9e2bda --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/final-example.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:233f3d4e67d944f3c9ad15c9c358a89619cc8b9aa635ff900a2f732c9a05a7d1 +size 3094570 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/final-staff.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/final-staff.mp4 new file mode 100644 index 00000000..f18b79b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/final-staff.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15a1736cd9dc831d1f16b22329836e8f6a809ef8116dba529f095164d49f3564 +size 2144068 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/move-colors.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/move-colors.mp4 new file mode 100644 index 00000000..75bf702e --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/move-colors.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:adb8f27049a6c33d595cd769bb06429061c0b6e3add3c1b855f075ea62cf01bb +size 3354489 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/non-selected-arrow.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/non-selected-arrow.png new file mode 100644 index 00000000..6178971b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/non-selected-arrow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ade8299c79fc4c6bce551dab9ada5f1434a326d157e7ee52f812004d3114b82b +size 12053 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/paste-staff.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/paste-staff.mp4 new file mode 100644 index 00000000..0bf7c18b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/paste-staff.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:480ef7a5ec8adea0c9e7d170a82b7bfe08052993b167d53b876de935fa7e7fd5 +size 196844 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/select-color-property.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/select-color-property.png new file mode 100644 index 00000000..7a5294c1 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/select-color-property.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31fca60734807ee75646290b8dd2bb3207f6124e378cb6c99323ca36e4391d43 +size 29768 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/select-color.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/select-color.png new file mode 100644 index 00000000..6178971b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/select-color.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ade8299c79fc4c6bce551dab9ada5f1434a326d157e7ee52f812004d3114b82b +size 12053 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/show-sparklers.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/show-sparklers.jpeg new file mode 100644 index 00000000..7cc1844a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/show-sparklers.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dce204393196a29c3941b95c3fbda3bb9f5ad6082e5421b0a215778495a30156 +size 38359 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/show-texture.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/show-texture.jpeg new file mode 100644 index 00000000..0801acb5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-a-sparkler/show-texture.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1447b8bd1003023b0a2c7202affb73abcc179803c4ae201a2b8b96f5ba3218e7 +size 134329 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/beam-example.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/beam-example.mp4 new file mode 100644 index 00000000..63167956 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/beam-example.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e998e5beec66b3f3693b6588667bfb9d5021890d0717bb0112c523eab7b52e53 +size 331175 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/create-beam.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/create-beam.png new file mode 100644 index 00000000..5161de1c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/create-beam.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8cc9c06de00920f490d46de6113d29d062d248e4f8e9a2ccb0969c1c964cfed2 +size 19012 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/create-goal-attachments.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/create-goal-attachments.png new file mode 100644 index 00000000..0b7e7df5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/create-goal-attachments.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed1febb5152b384100a4e800624257a846d05b3068e530880f3e8d12ca8d602a +size 28223 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/create-player-attachment.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/create-player-attachment.png new file mode 100644 index 00000000..2bc3b3ca --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/create-player-attachment.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5ce0586ee560e50ab9e85450bab17ea37a71c342b9484253c2eaf1796205ac9 +size 17685 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/edit-place.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/edit-place.png new file mode 100644 index 00000000..907efffa --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/edit-place.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:257b39c2183973476b1d954bcd06de759d050810abb0a09a2d25481f9db4e94c +size 67511 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/open-template.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/open-template.jpeg new file mode 100644 index 00000000..1516f7f7 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/open-template.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2bc32d4717a5c641a1c262f942176344c3ca735175d9c6d9e7bf969f400570e9 +size 172143 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/open-template.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/open-template.jpg new file mode 100644 index 00000000..40a324c8 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/open-template.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4bc7e8af587978cb98d51ea4e09bdd60910060317a227669c0e0c59e51e4d6d +size 232968 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/template-overview.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/template-overview.jpeg new file mode 100644 index 00000000..adb0fb81 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/template-overview.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e22c8e8ecbb023e1f0cafc24b4165b5744e45e69f6f294a47f387e0d5ebecf3 +size 113046 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/ux-example-bad.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/ux-example-bad.jpeg new file mode 100644 index 00000000..e5d46061 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/ux-example-bad.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ddc66645192578c8918fe7dedf01edcdbb874f9882795539a691396e8122cb4e +size 89090 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/ux-example-good.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/ux-example-good.jpeg new file mode 100644 index 00000000..d09a9737 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/creating-engaging-experiences/ux-example-good.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e717a08ac36c0c2ba3f11bd26b8327efbe77e5ac05f2cb97b9525777ed9e9015 +size 79892 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/experienced-landing-page/example-full-game.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/experienced-landing-page/example-full-game.mp4 new file mode 100644 index 00000000..e61d8a2b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/experienced-landing-page/example-full-game.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63652b823f288e19c96f210cfbf4a0990bfb240c65f2c51b34a2f3db861e4324 +size 4030214 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/finish-the-blast/change-size-example.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/finish-the-blast/change-size-example.jpeg new file mode 100644 index 00000000..66b40e52 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/finish-the-blast/change-size-example.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:278dcc7d0649571cc4646e681384245d6a8f36ea5532f59432b17143faafd89a +size 68676 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/finish-the-blast/change-size.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/finish-the-blast/change-size.png new file mode 100644 index 00000000..6b07357c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/finish-the-blast/change-size.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d301c9cf779998e0533f6f15becda022809457120b1f03ce8e7cf779bf6688a3 +size 3674 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/finish-the-blast/locked-to-part.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/finish-the-blast/locked-to-part.mp4 new file mode 100644 index 00000000..fd2385e8 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/finish-the-blast/locked-to-part.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7d6e33fc34826de001d8a790434015e95665ab470e26eda199019b987808960 +size 714727 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/finish-the-blast/set-locked-to-part.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/finish-the-blast/set-locked-to-part.png new file mode 100644 index 00000000..a31e680d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/finish-the-blast/set-locked-to-part.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01858b138e874a5076cfca2b786fa9b8bf981332e6a2c4c94e10a95fa6a45459 +size 2409 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/finish-the-blast/show-shot-color.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/finish-the-blast/show-shot-color.mp4 new file mode 100644 index 00000000..7eb598f5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/finish-the-blast/show-shot-color.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5f0194c22f7acc7cb0cefca0ea11939c68ae9ae65cbb6f11bc06785224c3f94 +size 359709 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/invite-friends/hero-image.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/invite-friends/hero-image.jpeg new file mode 100644 index 00000000..9091d93a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/invite-friends/hero-image.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2823b6788f337e35b29a4eb27425768155e5b8c008823d4addc0400e76b5dd7b +size 256429 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/landing-page/beginner.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/landing-page/beginner.jpeg new file mode 100644 index 00000000..82f3b717 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/landing-page/beginner.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a4a896310966a23aecff895156444f69d884ed0a44242f199f1c41dfc30bdbf +size 92725 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/landing-page/experienced.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/landing-page/experienced.jpeg new file mode 100644 index 00000000..f2451e3a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/landing-page/experienced.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33315a31b2013e7eb574c8211247a1569c63d4d2add3ec68d7ce1160fc2ba6ee +size 88451 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/landing-page/header.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/landing-page/header.jpeg new file mode 100644 index 00000000..f7af4f89 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/landing-page/header.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:282717f1f0b2b5016740afcadbfb09727ff4a8bd80c028f1890a64a97f0a1570 +size 300194 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/landing-page/prizes-beginner.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/landing-page/prizes-beginner.png new file mode 100644 index 00000000..42677c09 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/landing-page/prizes-beginner.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:988215e29b455312e29c565c7eefa78c236086af90ad07e6d8040e7941ec370d +size 117803 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/landing-page/prizes-experienced.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/landing-page/prizes-experienced.png new file mode 100644 index 00000000..2dc223fb --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/landing-page/prizes-experienced.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce9c98d0f2599d1f52299208114a8aee958f6c8dafe9055acb954667996097f7 +size 45748 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/change-explode-size.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/change-explode-size.png new file mode 100644 index 00000000..a318d9b0 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/change-explode-size.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a89942ccd5210fb221148b9eae846208db190efa2296962ed7156a212c0b0097 +size 21700 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/change-speed.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/change-speed.png new file mode 100644 index 00000000..05ac749b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/change-speed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a173d90ec43c71692dfd32f0bb709d51022497cac5e2d49ef7e3e830877e71f6 +size 19464 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/explosion-final.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/explosion-final.mp4 new file mode 100644 index 00000000..4da3fde8 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/explosion-final.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2187a0b2b6caeaf43fcdda4290cdcd0a3ed20120c5ed9d3f64a0b2cc4a5e5e56 +size 7047583 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/lifetime-new.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/lifetime-new.mp4 new file mode 100644 index 00000000..e1209ad5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/lifetime-new.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:524c446642023669265a0daa8762458227cf58cdad3a29b9f8f22cf3b93baa78 +size 2783214 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/lifetime.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/lifetime.mp4 new file mode 100644 index 00000000..7d3979f6 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/lifetime.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71b4d8a430231de697f006299b6d561250fa77ab609f1433908f10e122adf8b4 +size 909037 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/light-emission-0.5.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/light-emission-0.5.jpeg new file mode 100644 index 00000000..031938e3 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/light-emission-0.5.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb88e97697b02b6363250dc4e51efa41d9be71abd1f15085bcded7f9edd624d1 +size 85562 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/light-emission-0.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/light-emission-0.jpeg new file mode 100644 index 00000000..4e8b01db --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/light-emission-0.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e783d13b717b98ce1a3d2f99a6de40f33cde13e32d28016c94ebc9e003d2ad05 +size 88477 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/light-emission-1.0.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/light-emission-1.0.jpeg new file mode 100644 index 00000000..31f236f0 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/light-emission-1.0.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a4c1d826aa490df4ef643ed206a79ec7c255f0e65ce603cca3b4838264da4e7 +size 69851 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/newsizecomparison.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/newsizecomparison.mp4 new file mode 100644 index 00000000..a3de1100 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/newsizecomparison.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1aebe5fb6b4b7cdf326fae9d5077d865caf620756dbed0d2a32c073a10d6033 +size 5859784 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/rotation-speed-new.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/rotation-speed-new.mp4 new file mode 100644 index 00000000..91285ebd --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/rotation-speed-new.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aeba3b71a424cad625cb2777b8bf8583dbc0831a2150d357300ef5d8942838b9 +size 2046778 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/rotation-speed.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/rotation-speed.mp4 new file mode 100644 index 00000000..ae181cf3 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/rotation-speed.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35490ff9ca93b9b8711dba08b2fcabbb1a7f99e08243a70b2231d0bc46633e09 +size 610533 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/show-random-options.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/show-random-options.png new file mode 100644 index 00000000..aafa9adf --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/show-random-options.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd05615bee9b37624e4f619a31f78e371622bbe148deeb48a00579b260107a8d +size 25389 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/size-comparison.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/size-comparison.mp4 new file mode 100644 index 00000000..c2ca02cf --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/size-comparison.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93be76baf4aed82652bd5b9b14e5358e360e745391002b71cd41ffe66b0ac331 +size 4307152 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/size-comparison_1.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/size-comparison_1.mp4 new file mode 100644 index 00000000..bf4967f4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/make-final-touches/size-comparison_1.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:343051afb19177d67e5dd5e87f5ac611ee42e48a03b59da658a05d154cab3702 +size 6332547 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/making-an-explosion/explode-color.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/making-an-explosion/explode-color.png new file mode 100644 index 00000000..c904e371 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/making-an-explosion/explode-color.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b494fa952a7be9bd0e6cf3949588394c0c8aa12e4dfe1269f9f03827cff36491 +size 21347 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/making-an-explosion/explode-texture.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/making-an-explosion/explode-texture.png new file mode 100644 index 00000000..090b9b45 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/making-an-explosion/explode-texture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1817acc0e37efa4bb394c53b380f73b268eeacda720921e8454eab261ac6c73 +size 22277 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/making-an-explosion/explosion-color-texture.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/making-an-explosion/explosion-color-texture.mp4 new file mode 100644 index 00000000..9a4bf6f4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/making-an-explosion/explosion-color-texture.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4f7c6ad2fb2831dbcac10774907c1c027f41bf20a16ce0d685a63fe834f587a +size 2728833 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/making-an-explosion/final-shot-example.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/making-an-explosion/final-shot-example.mp4 new file mode 100644 index 00000000..5b4274df --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/making-an-explosion/final-shot-example.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c580f29c80eef37b865ca6de83a1da0eaad2256db9abaf64c12d35e1d22402d6 +size 823866 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/making-an-explosion/search-explosion.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/making-an-explosion/search-explosion.png new file mode 100644 index 00000000..b0b83320 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/making-an-explosion/search-explosion.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48f7d6ab3bb82a87a9e33cc2361be787ce52854d7a6793e312524161cfdd3254 +size 13905 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/next-steps-advanced/hero-image.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/next-steps-advanced/hero-image.jpeg new file mode 100644 index 00000000..9128e507 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/next-steps-advanced/hero-image.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2143d8a7a014da6efa5b8940b4fb06a7ba2e9709f33359744e915ae48f097f24 +size 140005 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/next-steps/extension-cards-sparkler.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/next-steps/extension-cards-sparkler.jpeg new file mode 100644 index 00000000..24a3f0e7 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/next-steps/extension-cards-sparkler.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6cdb39d2bf8bc4c9c80b45733d26cd237de372013ce0565f79729bec4fab9b42 +size 27077 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/next-steps/hero-final.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/next-steps/hero-final.jpeg new file mode 100644 index 00000000..92db875c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/next-steps/hero-final.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7e8b67325230bb81221e194541481169e90d674c85e1d835afda53c717df944 +size 185200 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/next-steps/terrain.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/next-steps/terrain.jpeg new file mode 100644 index 00000000..7ea1e843 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/next-steps/terrain.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e725ef8c5eef448ec32bc95a16ee825822a2f10be21f1c5410626dff5a975998 +size 27907 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/Fire-Video.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/Fire-Video.mp4 new file mode 100644 index 00000000..ccec38bd --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/Fire-Video.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fba774e2bf31dcb9d98a6b71eab9e71f5799d22a16a93afb379390ed730a538b +size 749542 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/Portal-Video.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/Portal-Video.mp4 new file mode 100644 index 00000000..2142ea79 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/Portal-Video.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b788d83c7a15d7b3ec4dcb20ea52133dbd07ad18422164b98d71380b7174ef5b +size 1203849 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/Rock-Video.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/Rock-Video.mp4 new file mode 100644 index 00000000..22b663c8 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/Rock-Video.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ff62b430df6422ca4d363e17c03a3db344d2b89c6710642cd8212d0de15d7f5 +size 307913 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/Short-Arrow-Down.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/Short-Arrow-Down.png new file mode 100644 index 00000000..1ff194d6 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/Short-Arrow-Down.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3ce9d267d1620efe3f55a2136d6966e03ea351abd9a3a504b4eff7e29314717 +size 1221 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/particle-example.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/particle-example.mp4 new file mode 100644 index 00000000..6c10baad --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/particle-example.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13f6c1eb0e22da8554d3b4bd778c633e6521e1a26f122ec20afe155994062599 +size 625188 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/particle-flame.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/particle-flame.png new file mode 100644 index 00000000..4f553283 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/particle-flame.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:886e1333c20ea3a39717a706a6e015ecaab66453b2bda509d6c9d9f91a33bc67 +size 115177 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/particle-holder.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/particle-holder.png new file mode 100644 index 00000000..afa9f5e5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/particle-holder.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27eeda6147143e03bbf9499923e43a3a78a4ba6d18e1776f782378b9e757bc63 +size 1346380 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/particle-portal.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/particle-portal.png new file mode 100644 index 00000000..49202336 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/particle-portal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23bfa20482ef7299de2d833a6e7959c12c077899842e240cbaa72d8110c5e8f9 +size 50769 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/particle-star.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/particle-star.png new file mode 100644 index 00000000..603d68b1 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/particle-star.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f73f3293b8071bfff37b45a4476b24608a615a5b34c3fea8f14f2cd647e4fd4a +size 29545 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/select-blaster-shot.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/select-blaster-shot.mp4 new file mode 100644 index 00000000..9c9caae5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/select-blaster-shot.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9845dbdeab9b9f570aad428831ff7c3363223e7db4a009ff4306bbfa9f39233d +size 265807 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/select-blaster-shot.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/select-blaster-shot.png new file mode 100644 index 00000000..6533c120 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/select-blaster-shot.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0175c808576372b2f2309f41b0c8f0ea84e1eda47db881fef50e7465d970d9cd +size 34132 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/select-color.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/select-color.png new file mode 100644 index 00000000..fbca7f3d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/select-color.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:613e839102f335dfe53ff3951c5e300c67d261ada0ff0c37fa81af81083f8250 +size 27213 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/select-explosion.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/select-explosion.png new file mode 100644 index 00000000..0c80b8d2 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/select-explosion.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f9140cfffcc62f1f512dc552964d09ade239ed341af69796c755a7f7ddb4d90 +size 13515 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/set-color.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/set-color.png new file mode 100644 index 00000000..f3009e1a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/set-color.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd24b0de1f87f838f97f2303576c120502d82bfb51b68c84c36eccd734142d93 +size 2377 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/show-color-change.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/show-color-change.jpeg new file mode 100644 index 00000000..f07fc19e --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/show-color-change.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:486d2963ab4d8c8af0423f94e881b55557c612d4137273a1625adaded32c5116 +size 54628 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/show-color-change.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/show-color-change.png new file mode 100644 index 00000000..2005abf7 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/particle-emitters/show-color-change.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:907f059b40a75020adb18a95a3c2289fba9458455d399b3f283ef29bc5109cee +size 127981 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/test-and-play/game-health.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/test-and-play/game-health.png new file mode 100644 index 00000000..ac30864f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/test-and-play/game-health.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9acbb8c838ad1fbdf63af8f56d1d42fb5b5db17a7b8349e07e47078629dfaeac +size 1016571 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/test-and-play/start-game.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/test-and-play/start-game.png new file mode 100644 index 00000000..a43b8a21 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/test-and-play/start-game.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:edd21dd92ddab1ffecedaf5858c10bd34dd43a4b1e0defdf8c851456a9ff0f19 +size 1229546 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/before-after-particle-settings.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/before-after-particle-settings.mp4 new file mode 100644 index 00000000..5c525de1 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/before-after-particle-settings.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b20c6a57d4b34e9221728c45c5651cd3b96be2f93f69956fdb6fd91518d7a44 +size 1577405 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/create-particle-emitter.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/create-particle-emitter.png new file mode 100644 index 00000000..da3d0be4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/create-particle-emitter.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a66623c0cad7b9357c8998f0f3981f5b3fc9785247b163cc9f1d675e870a09e +size 19755 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/default-particle-stream.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/default-particle-stream.jpg new file mode 100644 index 00000000..fa554ae1 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/default-particle-stream.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0de57475eea8857b906eb441ee157c259afd2722ea0a2fc6eed2260ce1d2bdf +size 44914 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/energy.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/energy.png new file mode 100644 index 00000000..7dd699ea --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/energy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5606400fa273414b1ab6ae4f3a43499b35aece925a880a177534266b2d556a0 +size 17363 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/gem.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/gem.png new file mode 100644 index 00000000..96f268d7 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/gem.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51fb2b5af901f6790315ad81f00a6260853e940bd2efc38aea3e49bb38c00abb +size 28919 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/heart.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/heart.png new file mode 100644 index 00000000..ad05a16b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/heart.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:091f2d18739062bb3941f7fec66c68957f011a29db6c64836993f88f45ee40d3 +size 7154 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/leaf.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/leaf.png new file mode 100644 index 00000000..0e9f48a3 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/leaf.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbb0ae0cb42f03089b2d2d42e51f0a2c98d32e99ac740dea5226910dfa4359c7 +size 23023 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/particle-interaction.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/particle-interaction.mp4 new file mode 100644 index 00000000..cdb64886 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/particle-interaction.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81fae6626e33b629478fa0f10497036397527137a38a011063755e8165bbd01e +size 414841 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/paw.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/paw.png new file mode 100644 index 00000000..bc4483c3 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/paw.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44337faf54a2de7643cce38916c910a3c62dc63968195d0526c610c5a1c9ba75 +size 18774 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/potion.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/potion.png new file mode 100644 index 00000000..9d1cff08 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/potion.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a6d47e9e284b273b953b2331bc82b8246c473c2d9d5b09cbd809ff9fe5d9ea4 +size 17249 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/set-enabled-off.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/set-enabled-off.png new file mode 100644 index 00000000..60716d03 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/set-enabled-off.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4c97c1d8fc46a47c0d1d0b3ec51e41e94a785787c782480078a8c72898c43c9 +size 14294 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/show-particle-texture.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/show-particle-texture.jpg new file mode 100644 index 00000000..d9c5fba5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/show-particle-texture.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9cb46fd8e7f092beaae8ca7541de51496581299d7b43d13eb7dcea69c982694 +size 50064 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/show-texture-color-size.jpg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/show-texture-color-size.jpg new file mode 100644 index 00000000..de0568c7 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/show-texture-color-size.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cac86e01ae257d45ac0bccb13616ca3c093c63aa089a94b84a6b867ed315970 +size 55628 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/spread-angle.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/spread-angle.mp4 new file mode 100644 index 00000000..112c88ca --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/spread-angle.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51abeac8ddaede10eb18b439b4f8f2f6eaf9431b7b1f5128a22e8d4a4e274afb +size 2330368 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/star.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/star.png new file mode 100644 index 00000000..568fb0e6 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/star.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:243c220445c3d3ffe90e55ab005627ebd61f988b8d536253528429d144c7d796 +size 19960 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/ticket.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/ticket.png new file mode 100644 index 00000000..2554fd95 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-particles-for-actions/ticket.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0ac7c789ecb798d98b56fa47cf02234af5460922dbd0c8465072592772218e5 +size 19055 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/circle-2.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/circle-2.png new file mode 100644 index 00000000..17f70191 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/circle-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50705e3c2593cd222ddf2f6e509154d1663a67c34c151e69929f36530b043c50 +size 32710 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/circle.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/circle.png new file mode 100644 index 00000000..85694699 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/circle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40cfac8b46552f8936b6ca6522b22464a29cc04770fa50064fe17ce6d778c75c +size 27097 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/heart.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/heart.png new file mode 100644 index 00000000..ad05a16b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/heart.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:091f2d18739062bb3941f7fec66c68957f011a29db6c64836993f88f45ee40d3 +size 7154 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/particle-texture-example.mp4 b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/particle-texture-example.mp4 new file mode 100644 index 00000000..20ef6cf0 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/particle-texture-example.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1ddd15ab730a4fa93d9e0058aa2b1b1197dc4a58500e5af4c6c4d6063a9d3e1 +size 223635 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/paste-texture.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/paste-texture.png new file mode 100644 index 00000000..2c744187 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/paste-texture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d4d00cd10cd6340bd8717fd22a852de104b77cd55ef4f7738db0e983e7adfa4 +size 60431 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/scratch.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/scratch.png new file mode 100644 index 00000000..a07b0aea --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/scratch.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30f9221c956a40f31565a130551c563c707b47b3a2552021a041b2e3d791a838 +size 31536 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/show-texture-property.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/show-texture-property.png new file mode 100644 index 00000000..ec13beea --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/show-texture-property.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f25d2888f6557d88cecfcdd120ad53b173c27843fec39c3a4a0b1db3bb1836b +size 28586 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/smoke.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/smoke.png new file mode 100644 index 00000000..b5877c9a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/smoke.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c37e11e18d2565d318ece3fea0a75383c606726f424648ae0fdece43554d3d57 +size 45039 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/spark.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/spark.png new file mode 100644 index 00000000..1c9ae031 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/spark.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1db4329bcfbdeacb9dc6aaf26785036e00224d1dd1f908cf6485abd9be6823d4 +size 51783 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/star-1.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/star-1.png new file mode 100644 index 00000000..9e65ea75 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/star-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28bd2e2c196449b63ca89854a7fbb0d7f84997e571c1310ded8629e525b0032b +size 18196 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/star-2.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/star-2.png new file mode 100644 index 00000000..568fb0e6 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/star-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:243c220445c3d3ffe90e55ab005627ebd61f988b8d536253528429d144c7d796 +size 19960 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/star-3.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/star-3.png new file mode 100644 index 00000000..466d59b9 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/star-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc4d05ae824f13fd93d72c881f1b1132a0c6fc24a7df030bf5ea5e87136e779e +size 33065 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/swirl.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/swirl.png new file mode 100644 index 00000000..16d9f286 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/swirl.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:209c7376844dcc120ca288d495cb7e5d0674e69f70759787db2585ebf912f5f9 +size 64548 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/texture-changed.jpeg b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/texture-changed.jpeg new file mode 100644 index 00000000..e419ac2d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/texture-changed.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27d4027716503b5ccdb5308997fbb42aae77ceab58a53d066c433e7a26f0aaa1 +size 72885 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/texture-changed.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/texture-changed.png new file mode 100644 index 00000000..2cf3b4e7 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/texture-changed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9456c1fad2104a82a2624df1301bd826c6cab5b478fbfc0b7affab3eea4b1e6 +size 789883 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/trace.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/trace.png new file mode 100644 index 00000000..fead87ee --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/trace.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5a8f12b0c4c255f8e457e734f7a45002ec0071eeba47b02358624c9659e82a9 +size 18940 diff --git a/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/triangle.png b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/triangle.png new file mode 100644 index 00000000..0b0ead8f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/build-it-play-it-mansion-of-wonder/using-textures/triangle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b120e69c8db59204fc9f197e1c1a0e409742620d5861d8ce765ca47b4cb0492 +size 4648 diff --git a/.cursor/rules/roblox/assets/education/coding-1/coding-1-output-window_800.png b/.cursor/rules/roblox/assets/education/coding-1/coding-1-output-window_800.png new file mode 100644 index 00000000..bf6f43ae --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-1/coding-1-output-window_800.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e4b1330a7069ea5731c13ff4e5ac60ef78901b397f37d52430a4ecd512898e4 +size 84032 diff --git a/.cursor/rules/roblox/assets/education/coding-1/color-changer_400x216.png b/.cursor/rules/roblox/assets/education/coding-1/color-changer_400x216.png new file mode 100644 index 00000000..e162353c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-1/color-changer_400x216.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f2aaf8a7338773422f517375a88e098fe744ef830b8dd2a5cadca8b618343cc +size 10697 diff --git a/.cursor/rules/roblox/assets/education/coding-1/color-picker_800x140.png b/.cursor/rules/roblox/assets/education/coding-1/color-picker_800x140.png new file mode 100644 index 00000000..5b67244e --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-1/color-picker_800x140.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c678d6c6b99f5b79fb357222ad2f9a7e325ae10f20c9728342c37e04cc5e7291 +size 8807 diff --git a/.cursor/rules/roblox/assets/education/coding-1/helloworld-output_800x150.png b/.cursor/rules/roblox/assets/education/coding-1/helloworld-output_800x150.png new file mode 100644 index 00000000..ab2f8882 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-1/helloworld-output_800x150.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b8b3b128eb22626ea6cdfd89dbde5209863369b7fa423cdcb152196d61aad1a +size 8775 diff --git a/.cursor/rules/roblox/assets/education/coding-1/hover-over-serverscriptservice_400x400.png b/.cursor/rules/roblox/assets/education/coding-1/hover-over-serverscriptservice_400x400.png new file mode 100644 index 00000000..40d78715 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-1/hover-over-serverscriptservice_400x400.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8f11003e30fc8dcff1bfefac33eae01b04992c71fac1c685de8d663ffadd0c6 +size 16755 diff --git a/.cursor/rules/roblox/assets/education/coding-1/part-properties_400.png b/.cursor/rules/roblox/assets/education/coding-1/part-properties_400.png new file mode 100644 index 00000000..c51f7186 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-1/part-properties_400.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40e9449807e5bfab268569e4936c96eee22d4ee3573de2648b2085a2241161eb +size 23116 diff --git a/.cursor/rules/roblox/assets/education/coding-1/practice-part_400.png b/.cursor/rules/roblox/assets/education/coding-1/practice-part_400.png new file mode 100644 index 00000000..756f9b79 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-1/practice-part_400.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63650b281251553b366dcb16b33541ea3df126fd8464ca432ff49ece0c9c9d87 +size 12616 diff --git a/.cursor/rules/roblox/assets/education/coding-1/scriptParent_finalExample_web.mp4 b/.cursor/rules/roblox/assets/education/coding-1/scriptParent_finalExample_web.mp4 new file mode 100644 index 00000000..1558114a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-1/scriptParent_finalExample_web.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:109ee0472298c14ab3eb3ed0c033721cefbc566d4b3c689be89d0a4ff9ac6829 +size 517510 diff --git a/.cursor/rules/roblox/assets/education/coding-2/parameters-and-events_trap.mp4 b/.cursor/rules/roblox/assets/education/coding-2/parameters-and-events_trap.mp4 new file mode 100644 index 00000000..d3db89bb --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-2/parameters-and-events_trap.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19045a9dabe66c34c09ebc0c6ac1f452eabf2cf4f08d4d591a24bb9023f72148 +size 2147475 diff --git a/.cursor/rules/roblox/assets/education/coding-2/red-button.jpg b/.cursor/rules/roblox/assets/education/coding-2/red-button.jpg new file mode 100644 index 00000000..7bab33ba --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-2/red-button.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9aa90c78f963a492e6f215160390848e36cba15e8d731733d9bec40dbe3aa7e8 +size 106413 diff --git a/.cursor/rules/roblox/assets/education/coding-2/transparent-bridge.jpg b/.cursor/rules/roblox/assets/education/coding-2/transparent-bridge.jpg new file mode 100644 index 00000000..3e093501 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-2/transparent-bridge.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:304903ccb163e5ccac9d2e21a41f242338a25fcbd7e102e838ca832dfd3bd8ec +size 119405 diff --git a/.cursor/rules/roblox/assets/education/coding-3/coding3Hero_ifElseIf.jpg b/.cursor/rules/roblox/assets/education/coding-3/coding3Hero_ifElseIf.jpg new file mode 100644 index 00000000..8b1da76a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-3/coding3Hero_ifElseIf.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4c7cf74b12d46474ff02f9e76ad7e8efcc79a3bfd1e3e92d4b44861711ee6d0 +size 100156 diff --git a/.cursor/rules/roblox/assets/education/coding-3/coding3_colorPointBlockFinalizedExample.mp4 b/.cursor/rules/roblox/assets/education/coding-3/coding3_colorPointBlockFinalizedExample.mp4 new file mode 100644 index 00000000..1fe6d62b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-3/coding3_colorPointBlockFinalizedExample.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76d6ee157985592aa396a799ec9cbdf0ab8f595aaa9dfa8dad4603c8d2cbd582 +size 5726137 diff --git a/.cursor/rules/roblox/assets/education/coding-3/colorPoint_loopingColors.gif b/.cursor/rules/roblox/assets/education/coding-3/colorPoint_loopingColors.gif new file mode 100644 index 00000000..1e9f5603 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-3/colorPoint_loopingColors.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:340a8c4146b268a3fdfb66422055915f14c86c98e9d3ba964e4f605b812f184b +size 35964 diff --git a/.cursor/rules/roblox/assets/education/coding-3/colorPoint_showParticles_web.mp4 b/.cursor/rules/roblox/assets/education/coding-3/colorPoint_showParticles_web.mp4 new file mode 100644 index 00000000..522a17f1 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-3/colorPoint_showParticles_web.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0dd7934554f8e3eccfcf351892d7b0cfb7add99bde373edd7ede90de3f9b0a37 +size 730061 diff --git a/.cursor/rules/roblox/assets/education/coding-3/colorPoint_showPointChange_web.mp4 b/.cursor/rules/roblox/assets/education/coding-3/colorPoint_showPointChange_web.mp4 new file mode 100644 index 00000000..1c2de82c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-3/colorPoint_showPointChange_web.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b4f035d69727fbc678ceb8b0a7eddbe55f443f43e421c4a941b92ec1cd66b79 +size 852312 diff --git a/.cursor/rules/roblox/assets/education/coding-3/raceCourse_showDistanceBetween.jpg b/.cursor/rules/roblox/assets/education/coding-3/raceCourse_showDistanceBetween.jpg new file mode 100644 index 00000000..47e1d86d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-3/raceCourse_showDistanceBetween.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc6dab117760b34013a331338e51246831e49d0af1a403000a7ae0f59507ebad +size 141702 diff --git a/.cursor/rules/roblox/assets/education/coding-3/raceCourse_showPartCraeted.jpg b/.cursor/rules/roblox/assets/education/coding-3/raceCourse_showPartCraeted.jpg new file mode 100644 index 00000000..7ea42ad4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-3/raceCourse_showPartCraeted.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dcdff1b651436db0eb51f761792dbc6693df4a292ddf026ecfdab02e39b5e7cf +size 117269 diff --git a/.cursor/rules/roblox/assets/education/coding-3/trap-exampleFinal.mp4 b/.cursor/rules/roblox/assets/education/coding-3/trap-exampleFinal.mp4 new file mode 100644 index 00000000..9d2ab718 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-3/trap-exampleFinal.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0165f78a6123ec4e6faf7b585a432a26f127fecd91fd0192324db9fb734130c0 +size 920611 diff --git a/.cursor/rules/roblox/assets/education/coding-4/CupCakeBloopers_Compressed.mp4 b/.cursor/rules/roblox/assets/education/coding-4/CupCakeBloopers_Compressed.mp4 new file mode 100644 index 00000000..25eb95c9 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-4/CupCakeBloopers_Compressed.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9db4121c04cb0af5ec03af6329b67b7d03d37b8c278e5f881501c07d49ef1926 +size 2612405 diff --git a/.cursor/rules/roblox/assets/education/coding-4/Fade_480x320.png b/.cursor/rules/roblox/assets/education/coding-4/Fade_480x320.png new file mode 100644 index 00000000..6bd2c2de --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-4/Fade_480x320.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0aa8b87e9baa8fcae093502fd4abe168586391a747cc793a1a1c20ae8c5a45ba +size 64336 diff --git a/.cursor/rules/roblox/assets/education/coding-4/LoopingTower2_Compressed.mp4 b/.cursor/rules/roblox/assets/education/coding-4/LoopingTower2_Compressed.mp4 new file mode 100644 index 00000000..d9fa0dbb --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-4/LoopingTower2_Compressed.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b5cc10e72e89b6acd3e33c92ab4cd02e6e978acf774463aeab526ec9b92b3bb +size 1042691 diff --git a/.cursor/rules/roblox/assets/education/coding-4/NestedLoopsDiagram300x500.png b/.cursor/rules/roblox/assets/education/coding-4/NestedLoopsDiagram300x500.png new file mode 100644 index 00000000..620b11b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-4/NestedLoopsDiagram300x500.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b1bf259e1a021e03764a2944586bbf6bd3d3641d7c67ef0deb727eff0472b5b +size 5825 diff --git a/.cursor/rules/roblox/assets/education/coding-4/florLoop_lightAdded.png b/.cursor/rules/roblox/assets/education/coding-4/florLoop_lightAdded.png new file mode 100644 index 00000000..2e8b816e --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-4/florLoop_lightAdded.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5306e36c5cae0aad60921716280dd74a992b5a007829aeebcf8ecc42b26700c1 +size 10539 diff --git a/.cursor/rules/roblox/assets/education/coding-4/forLoopBridge-finishedCountdown.mp4 b/.cursor/rules/roblox/assets/education/coding-4/forLoopBridge-finishedCountdown.mp4 new file mode 100644 index 00000000..73d50825 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-4/forLoopBridge-finishedCountdown.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:305fdd8ef8ab6c74383bb7ac209ed0381394ba4bd675969d2cba4e113a11c936 +size 403923 diff --git a/.cursor/rules/roblox/assets/education/coding-4/forLoopBridge_addTextLabel.png b/.cursor/rules/roblox/assets/education/coding-4/forLoopBridge_addTextLabel.png new file mode 100644 index 00000000..4810586b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-4/forLoopBridge_addTextLabel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aebb75931bec52cd516b0b07b16d59f426c2b6741eb114db8c3e480a2ee05e1d +size 11786 diff --git a/.cursor/rules/roblox/assets/education/coding-4/forLoopBridge_bridgeSetup.png b/.cursor/rules/roblox/assets/education/coding-4/forLoopBridge_bridgeSetup.png new file mode 100644 index 00000000..ce5dc032 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-4/forLoopBridge_bridgeSetup.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41f7de931b1699a589ce52e2f9f0233945b1e72d006633f1f4bb5de796b4f2a9 +size 231754 diff --git a/.cursor/rules/roblox/assets/education/coding-4/forLoopDiagram_generic1.png b/.cursor/rules/roblox/assets/education/coding-4/forLoopDiagram_generic1.png new file mode 100644 index 00000000..a097cbfc --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-4/forLoopDiagram_generic1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5f7949216f47ed7e0ed48cdbf6afc150f8a9dfa54d1be09ef67ca3b90bf3794 +size 10999 diff --git a/.cursor/rules/roblox/assets/education/coding-4/forLoopDiagram_generic2.png b/.cursor/rules/roblox/assets/education/coding-4/forLoopDiagram_generic2.png new file mode 100644 index 00000000..5c8365f3 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-4/forLoopDiagram_generic2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f1149f7f86f5de50477a9ce8ba91708423f4e79c052b1095187c419d199078a +size 14099 diff --git a/.cursor/rules/roblox/assets/education/coding-4/forLoopDiagram_generic3.png b/.cursor/rules/roblox/assets/education/coding-4/forLoopDiagram_generic3.png new file mode 100644 index 00000000..752bc423 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-4/forLoopDiagram_generic3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:741002bab10b677f48b69eee2232b0d9184722bcc5a643ffac540f63432e44e5 +size 15882 diff --git a/.cursor/rules/roblox/assets/education/coding-4/forLoop_annotatedExample.png b/.cursor/rules/roblox/assets/education/coding-4/forLoop_annotatedExample.png new file mode 100644 index 00000000..44ca3ca5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-4/forLoop_annotatedExample.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2730ec85449c2b98187706fa952dd8ff7adc7935b75638b34d6065a9bb427436 +size 15880 diff --git a/.cursor/rules/roblox/assets/education/coding-4/forLoop_outputError.mp4 b/.cursor/rules/roblox/assets/education/coding-4/forLoop_outputError.mp4 new file mode 100644 index 00000000..e9054b6e --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-4/forLoop_outputError.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6a68125d7de4171b9d4fbc51ed05b3832bce3d6282189d186002060d524c602 +size 845529 diff --git a/.cursor/rules/roblox/assets/education/coding-4/glowing-light-finished.mp4 b/.cursor/rules/roblox/assets/education/coding-4/glowing-light-finished.mp4 new file mode 100644 index 00000000..6cd3b14d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-4/glowing-light-finished.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc062ddcc2b4f6e88bc34bcc1eec00c1c320a65017b3e79c3e5b0952ef196355 +size 123183 diff --git a/.cursor/rules/roblox/assets/education/coding-4/glowing-light-increase.mp4 b/.cursor/rules/roblox/assets/education/coding-4/glowing-light-increase.mp4 new file mode 100644 index 00000000..cb1810ec --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-4/glowing-light-increase.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc47d7b295145148893f0fe24118f9256f1090c2f44733222cff99125951a6d5 +size 111495 diff --git a/.cursor/rules/roblox/assets/education/coding-4/glowing-light-singleLoop.mp4 b/.cursor/rules/roblox/assets/education/coding-4/glowing-light-singleLoop.mp4 new file mode 100644 index 00000000..831541e3 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-4/glowing-light-singleLoop.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73050d2d66a7698baeb0dc90302421fcc97481093c8dc88c01604bd6c7b0d597 +size 86397 diff --git a/.cursor/rules/roblox/assets/education/coding-4/glowing-lights-lightPart.jpg b/.cursor/rules/roblox/assets/education/coding-4/glowing-lights-lightPart.jpg new file mode 100644 index 00000000..76c01796 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-4/glowing-lights-lightPart.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b23892ddad2f4cb62d78573f49984e2766870ad468458b02654b86e9305d8d40 +size 40138 diff --git a/.cursor/rules/roblox/assets/education/coding-4/glowing-lights-setClockTime.png b/.cursor/rules/roblox/assets/education/coding-4/glowing-lights-setClockTime.png new file mode 100644 index 00000000..b564de9c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-4/glowing-lights-setClockTime.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a04a73da9439a01854cac1008f916edf22d1a5b3fd7fb219b35d730227fb0e3 +size 5547 diff --git a/.cursor/rules/roblox/assets/education/coding-4/loops-and-parts-finishedPart.mp4 b/.cursor/rules/roblox/assets/education/coding-4/loops-and-parts-finishedPart.mp4 new file mode 100644 index 00000000..34303784 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-4/loops-and-parts-finishedPart.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c4e928daaf82fcc1322064ba04042b60654f70c0976d29b8ca5e843f7bf1bfa +size 499787 diff --git a/.cursor/rules/roblox/assets/education/coding-4/nestedLoop-finalExample.mp4 b/.cursor/rules/roblox/assets/education/coding-4/nestedLoop-finalExample.mp4 new file mode 100644 index 00000000..afd24561 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-4/nestedLoop-finalExample.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb8cc903b1597f67d7c64b2868c2eede75a82226bdf23c34794bbacae8a69372 +size 194666 diff --git a/.cursor/rules/roblox/assets/education/coding-4/timedBridgePresentation.mp4 b/.cursor/rules/roblox/assets/education/coding-4/timedBridgePresentation.mp4 new file mode 100644 index 00000000..a4d11ba3 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-4/timedBridgePresentation.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:184db35c1828ec4642a42126f13211a2affb561630054f86592190c51f139ff1 +size 755808 diff --git a/.cursor/rules/roblox/assets/education/coding-5/Making_Changes_to_Arrays_-_Final_Project.rbxl b/.cursor/rules/roblox/assets/education/coding-5/Making_Changes_to_Arrays_-_Final_Project.rbxl new file mode 100644 index 00000000..88020786 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-5/Making_Changes_to_Arrays_-_Final_Project.rbxl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c09298ac2d504cb4541d0e525a58674c76d829530128dbd8b9fd423e3c81a04a +size 15427 diff --git a/.cursor/rules/roblox/assets/education/coding-5/TemplateNPC.rbxm b/.cursor/rules/roblox/assets/education/coding-5/TemplateNPC.rbxm new file mode 100644 index 00000000..aafc2fa1 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-5/TemplateNPC.rbxm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69d70ccdd404b55340f5dcbe3ae1e9effe580d59eb6ce84f530cef83d77b8d3d +size 21136 diff --git a/.cursor/rules/roblox/assets/education/coding-5/coding4_arrayFunctions.jpg b/.cursor/rules/roblox/assets/education/coding-5/coding4_arrayFunctions.jpg new file mode 100644 index 00000000..c8b90b58 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-5/coding4_arrayFunctions.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51cc95550fdf0ce30061a28a992feb242e80a7e82a34b2bec8af2b340cc3a462 +size 122884 diff --git a/.cursor/rules/roblox/assets/education/coding-5/coding4_introToTables.jpg b/.cursor/rules/roblox/assets/education/coding-5/coding4_introToTables.jpg new file mode 100644 index 00000000..f32fcf44 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-5/coding4_introToTables.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1bdd8e05842ae12704daee41be6354c3c4dce00e6c8e3c8752eff737790ebf26 +size 162831 diff --git a/.cursor/rules/roblox/assets/education/coding-5/disappearingHero_16_9web.mp4 b/.cursor/rules/roblox/assets/education/coding-5/disappearingHero_16_9web.mp4 new file mode 100644 index 00000000..96917418 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-5/disappearingHero_16_9web.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2114a8e628fbe404c58fe12eaa9daddc1dd7ecdf79dac303965828a8cdf9355 +size 650800 diff --git a/.cursor/rules/roblox/assets/education/coding-5/introArray_showDialogIndexes_optimized.mp4 b/.cursor/rules/roblox/assets/education/coding-5/introArray_showDialogIndexes_optimized.mp4 new file mode 100644 index 00000000..083f884e --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-5/introArray_showDialogIndexes_optimized.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:155ccdeaa1140e5582662a2c52516794cf5871d82338c4d1a78d3459ad77056c +size 158925 diff --git a/.cursor/rules/roblox/assets/education/coding-5/introArrays_projectTotal_optimized.mp4 b/.cursor/rules/roblox/assets/education/coding-5/introArrays_projectTotal_optimized.mp4 new file mode 100644 index 00000000..b4bfa9e7 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-5/introArrays_projectTotal_optimized.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2248faefd31e84bee3b1d8a8f721620a9dcb4b7e5204826d938ea66c4cd0a263 +size 351898 diff --git a/.cursor/rules/roblox/assets/education/coding-5/introArrays_showFullLoopIndexes_optimized.mp4 b/.cursor/rules/roblox/assets/education/coding-5/introArrays_showFullLoopIndexes_optimized.mp4 new file mode 100644 index 00000000..352fbfd9 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-5/introArrays_showFullLoopIndexes_optimized.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:192d910a246a1d1641433020dc07994d2390e936d202f41140fa88f6ed85c0e6 +size 232782 diff --git a/.cursor/rules/roblox/assets/education/coding-5/introArrays_showSpeech.jpg b/.cursor/rules/roblox/assets/education/coding-5/introArrays_showSpeech.jpg new file mode 100644 index 00000000..c2fcead1 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-5/introArrays_showSpeech.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fea406fdfe16dd7b3c080fe71ef7e4dc80c3fcd3fad145ff009886b9613e0d66 +size 116418 diff --git a/.cursor/rules/roblox/assets/education/coding-5/showPathDisappearFirst_web.mp4 b/.cursor/rules/roblox/assets/education/coding-5/showPathDisappearFirst_web.mp4 new file mode 100644 index 00000000..a5eef9b0 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-5/showPathDisappearFirst_web.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:495cafc17a4aefa68f0316d79fc8b9cc28f3e40b8282e3f9c98a616a4b139250 +size 283392 diff --git a/.cursor/rules/roblox/assets/education/coding-5/showPathDisappearIndexed_web.mp4 b/.cursor/rules/roblox/assets/education/coding-5/showPathDisappearIndexed_web.mp4 new file mode 100644 index 00000000..479ae3af --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-5/showPathDisappearIndexed_web.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3dc4d5363b0397280645f35eb8218900e19018f76e5fe01782423233887445f9 +size 521256 diff --git a/.cursor/rules/roblox/assets/education/coding-6/coding-concept-abstraction/abstraction-backpacks.png b/.cursor/rules/roblox/assets/education/coding-6/coding-concept-abstraction/abstraction-backpacks.png new file mode 100644 index 00000000..1f92891c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-6/coding-concept-abstraction/abstraction-backpacks.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5a8757f8b653c8855e980712748e2b8b746961c078014811b55bffb62ca2a53 +size 8737 diff --git a/.cursor/rules/roblox/assets/education/coding-6/coding-concept-abstraction/backpack-violet.png b/.cursor/rules/roblox/assets/education/coding-6/coding-concept-abstraction/backpack-violet.png new file mode 100644 index 00000000..fe86f654 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-6/coding-concept-abstraction/backpack-violet.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:386890c0432090e6d42a9537368d6b8df2a64ec5e6e90c4093d7d522e81a3f5f +size 12651 diff --git a/.cursor/rules/roblox/assets/education/coding-6/coding-concept-abstraction/backpack-yellow.png b/.cursor/rules/roblox/assets/education/coding-6/coding-concept-abstraction/backpack-yellow.png new file mode 100644 index 00000000..6e2da554 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-6/coding-concept-abstraction/backpack-yellow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11231e04083a93cdce0dda94d9a4f15994207d77f03ac03d0ecd399567e45cbb +size 11533 diff --git a/.cursor/rules/roblox/assets/education/coding-6/coding-concept-abstraction/no-abstraction-backpacks.png b/.cursor/rules/roblox/assets/education/coding-6/coding-concept-abstraction/no-abstraction-backpacks.png new file mode 100644 index 00000000..9622d28f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-6/coding-concept-abstraction/no-abstraction-backpacks.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:92e5c6403c538fdea50e9378f90d667002f31a17e0dc44f77eb0a92eceae81e1 +size 33217 diff --git a/.cursor/rules/roblox/assets/education/coding-6/coding-concept-algorithms/square-and-child-squares.png b/.cursor/rules/roblox/assets/education/coding-6/coding-concept-algorithms/square-and-child-squares.png new file mode 100644 index 00000000..6020ee9c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-6/coding-concept-algorithms/square-and-child-squares.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce53c8cc2661b0ecbc62366560d97b4f94036d211ee8d5922ab5e43f094ba617 +size 2508 diff --git a/.cursor/rules/roblox/assets/education/coding-6/creating-with-module-scripts/Intro_to_Module_Scripts_-_Starter_Project.rbxl b/.cursor/rules/roblox/assets/education/coding-6/creating-with-module-scripts/Intro_to_Module_Scripts_-_Starter_Project.rbxl new file mode 100644 index 00000000..bad963ed --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-6/creating-with-module-scripts/Intro_to_Module_Scripts_-_Starter_Project.rbxl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:362a96f9edfe6478225fb3d79a7cf856f8096fb731e1d919ce2104ac404ab78d +size 83247 diff --git a/.cursor/rules/roblox/assets/education/coding-6/creating-with-module-scripts/create-module-script.png b/.cursor/rules/roblox/assets/education/coding-6/creating-with-module-scripts/create-module-script.png new file mode 100644 index 00000000..fbe63aa7 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-6/creating-with-module-scripts/create-module-script.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9a8e729903f99db5e74cd485152d8b3bebf5fde22a09ef1918ebe2b862e622f +size 12058 diff --git a/.cursor/rules/roblox/assets/education/coding-6/creating-with-module-scripts/creating-modules-hero.jpeg b/.cursor/rules/roblox/assets/education/coding-6/creating-with-module-scripts/creating-modules-hero.jpeg new file mode 100644 index 00000000..31bfca93 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-6/creating-with-module-scripts/creating-modules-hero.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:007746910c7b719b9f821443debd01f3abe5b4dc94bc9e92ce2b1398e1ba7efb +size 149065 diff --git a/.cursor/rules/roblox/assets/education/coding-6/creating-with-module-scripts/final-example.mp4 b/.cursor/rules/roblox/assets/education/coding-6/creating-with-module-scripts/final-example.mp4 new file mode 100644 index 00000000..068bbcb6 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-6/creating-with-module-scripts/final-example.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:965fadb20d8b9ed949797ae4696087af8af71a2b1973e4e26660578deb99d6d6 +size 1151733 diff --git a/.cursor/rules/roblox/assets/education/coding-6/creating-with-module-scripts/get-first-key.mp4 b/.cursor/rules/roblox/assets/education/coding-6/creating-with-module-scripts/get-first-key.mp4 new file mode 100644 index 00000000..c35b45cd --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-6/creating-with-module-scripts/get-first-key.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f68ba134d79ce90b4ea751f58da55304b2131802e9a7bcb6eab0b82d564a924 +size 212985 diff --git a/.cursor/rules/roblox/assets/education/coding-6/creating-with-module-scripts/module-template-example.jpeg b/.cursor/rules/roblox/assets/education/coding-6/creating-with-module-scripts/module-template-example.jpeg new file mode 100644 index 00000000..878c7cec --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-6/creating-with-module-scripts/module-template-example.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79fa460a0228cef4a2a79a2186de3b070df2afe37eca65a0f179cc7aabf4a27d +size 88841 diff --git a/.cursor/rules/roblox/assets/education/coding-6/creating-with-module-scripts/show-leaderboard-key.jpg b/.cursor/rules/roblox/assets/education/coding-6/creating-with-module-scripts/show-leaderboard-key.jpg new file mode 100644 index 00000000..473b57b3 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-6/creating-with-module-scripts/show-leaderboard-key.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05c76af7f89fee1e8ff28eb77bc1735c64c5280946b00a00e9e1c11965b1a015 +size 28445 diff --git a/.cursor/rules/roblox/assets/education/coding-6/intro-to-module-scripts/create-module-script.png b/.cursor/rules/roblox/assets/education/coding-6/intro-to-module-scripts/create-module-script.png new file mode 100644 index 00000000..b99f94e8 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/coding-6/intro-to-module-scripts/create-module-script.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8943bafa13c4554dd1dfef6812a2c2c6a725b042ca78e9cb81fa5a2ca819885c +size 11778 diff --git a/.cursor/rules/roblox/assets/education/developer/Designing-Educational-Experiences.pdf b/.cursor/rules/roblox/assets/education/developer/Designing-Educational-Experiences.pdf new file mode 100644 index 00000000..1ed003c6 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/developer/Designing-Educational-Experiences.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a4d50ff760fd289232e5502538ac41d80a3b86f119c47992d3e9ee52741a3bb +size 9298714 diff --git a/.cursor/rules/roblox/assets/education/developer/petGame-pets.jpg b/.cursor/rules/roblox/assets/education/developer/petGame-pets.jpg new file mode 100644 index 00000000..e0d6e263 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/developer/petGame-pets.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f208aded520df1d500ad8deee26cb21c748dacf994cdfdf62c732bbf3328a03e +size 209702 diff --git a/.cursor/rules/roblox/assets/education/developer/thumbnail-luaLearning.png b/.cursor/rules/roblox/assets/education/developer/thumbnail-luaLearning.png new file mode 100644 index 00000000..78228603 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/developer/thumbnail-luaLearning.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf183f82c92d47b667098b4790687eb748134f8f39966ed425220240e3488002 +size 428321 diff --git a/.cursor/rules/roblox/assets/education/developer/thumbnail-missionMars.png b/.cursor/rules/roblox/assets/education/developer/thumbnail-missionMars.png new file mode 100644 index 00000000..24471930 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/developer/thumbnail-missionMars.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d65af67c0bf12c45e33cdd6157520c43bdda7c93389db3830c371cf689178de5 +size 388811 diff --git a/.cursor/rules/roblox/assets/education/developer/thumbnail-untamedAnimals.png b/.cursor/rules/roblox/assets/education/developer/thumbnail-untamedAnimals.png new file mode 100644 index 00000000..757be44c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/developer/thumbnail-untamedAnimals.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e846469b8ad803e2e777c70943568729e6df8d2898f565cba66b68a100bce505 +size 640897 diff --git a/.cursor/rules/roblox/assets/education/edu-landingPages/bipi_lessonPlan_thumbnail_312x200.png b/.cursor/rules/roblox/assets/education/edu-landingPages/bipi_lessonPlan_thumbnail_312x200.png new file mode 100644 index 00000000..c8dc0853 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/edu-landingPages/bipi_lessonPlan_thumbnail_312x200.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53d34479dcccf785debc9f2f81ae66fcdb7056b796c5422b2e704157d09f5734 +size 115758 diff --git a/.cursor/rules/roblox/assets/education/edu-landingPages/ccw2019_thumbnail_312x200px.png b/.cursor/rules/roblox/assets/education/edu-landingPages/ccw2019_thumbnail_312x200px.png new file mode 100644 index 00000000..3d68c0f4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/edu-landingPages/ccw2019_thumbnail_312x200px.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0ecb9b201db77f5178386a0ea80fc3ef45ffeeacd3d6ff1ca5fe8218bb2b989 +size 88892 diff --git a/.cursor/rules/roblox/assets/education/edu-landingPages/introToGameDesign_thumbnail.jpg b/.cursor/rules/roblox/assets/education/edu-landingPages/introToGameDesign_thumbnail.jpg new file mode 100644 index 00000000..98185e05 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/edu-landingPages/introToGameDesign_thumbnail.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:525f1a9e4595e2d375d2ef6759846419e6f817e40cb85c9576dbdb98c4b3ac8e +size 40418 diff --git a/.cursor/rules/roblox/assets/education/edu-landingPages/introToStudio_thumbnail.jpg b/.cursor/rules/roblox/assets/education/edu-landingPages/introToStudio_thumbnail.jpg new file mode 100644 index 00000000..2f162175 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/edu-landingPages/introToStudio_thumbnail.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79c0f51300972e44b016daaacc272ea8424e6ee86f782bb65aa1a38529060f84 +size 42409 diff --git a/.cursor/rules/roblox/assets/education/edu-landingPages/newGettingStartedThumbnails-develop.jpg b/.cursor/rules/roblox/assets/education/edu-landingPages/newGettingStartedThumbnails-develop.jpg new file mode 100644 index 00000000..9533c819 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/edu-landingPages/newGettingStartedThumbnails-develop.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c73f97fcf5aa53ea5af1fc08098b3c850b1cca9b8ee7139351e0ec234e2ce4d +size 33519 diff --git a/.cursor/rules/roblox/assets/education/edu-landingPages/newGettingStartedThumbnails-games.jpg b/.cursor/rules/roblox/assets/education/edu-landingPages/newGettingStartedThumbnails-games.jpg new file mode 100644 index 00000000..8f3c0e6e --- /dev/null +++ b/.cursor/rules/roblox/assets/education/edu-landingPages/newGettingStartedThumbnails-games.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82909fbc51d8f7d7615abf2fb42309353aeed413a60203cca7ba8fab19fe01fc +size 23416 diff --git a/.cursor/rules/roblox/assets/education/edu-landingPages/thumbnail_adventureRthroAlt_312x200.jpg b/.cursor/rules/roblox/assets/education/edu-landingPages/thumbnail_adventureRthroAlt_312x200.jpg new file mode 100644 index 00000000..dde2f725 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/edu-landingPages/thumbnail_adventureRthroAlt_312x200.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ab94a36ae534544db792dc406783a0cee1672ad99052f692f2dffcebafadb12 +size 35020 diff --git a/.cursor/rules/roblox/assets/education/edu-landingPages/thumbnail_remoteLearning.jpg b/.cursor/rules/roblox/assets/education/edu-landingPages/thumbnail_remoteLearning.jpg new file mode 100644 index 00000000..5770b8cc --- /dev/null +++ b/.cursor/rules/roblox/assets/education/edu-landingPages/thumbnail_remoteLearning.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3928b8466463537b611cb23f0e49bb1f635b1dd3ba08378406758ee0eee9224f +size 42413 diff --git a/.cursor/rules/roblox/assets/education/edu-landingPages/thumbnail_traps_312x200.jpg b/.cursor/rules/roblox/assets/education/edu-landingPages/thumbnail_traps_312x200.jpg new file mode 100644 index 00000000..79a57601 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/edu-landingPages/thumbnail_traps_312x200.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5aa83d7bb93b53c038deb8fa71ea2f312c762c0e39e963dadafc5c960efcbf1 +size 33400 diff --git a/.cursor/rules/roblox/assets/education/educator-onboarding/Handout_-_Getting_Ready.pdf b/.cursor/rules/roblox/assets/education/educator-onboarding/Handout_-_Getting_Ready.pdf new file mode 100644 index 00000000..6680e6e9 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/educator-onboarding/Handout_-_Getting_Ready.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:252ba6216314eb9b28440c6a1ede6530b943b0ed2a96def060f6180124b46478 +size 98444 diff --git a/.cursor/rules/roblox/assets/education/educator-onboarding/hero-banner-classroom.jpg b/.cursor/rules/roblox/assets/education/educator-onboarding/hero-banner-classroom.jpg new file mode 100644 index 00000000..26a808d5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/educator-onboarding/hero-banner-classroom.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98b6a01a31e6337e7c694379a1c903e69914bad130992045633a3f1a9ea67766 +size 135233 diff --git a/.cursor/rules/roblox/assets/education/educator-onboarding/hero-robloxHQ.jpg b/.cursor/rules/roblox/assets/education/educator-onboarding/hero-robloxHQ.jpg new file mode 100644 index 00000000..f41241a7 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/educator-onboarding/hero-robloxHQ.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d5b73bfc95f21dcd51169004d0b6b8266c266170e5d23fb18adf006fc3ccdcc +size 167643 diff --git a/.cursor/rules/roblox/assets/education/educators-page/Bianca-Riviera.jpg b/.cursor/rules/roblox/assets/education/educators-page/Bianca-Riviera.jpg new file mode 100644 index 00000000..bba26f46 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/educators-page/Bianca-Riviera.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff9e97da9b66c88b33c9ab43f7aa1481df68310f5771719da925dd5a97f14338 +size 45186 diff --git a/.cursor/rules/roblox/assets/education/educators-page/Code-Wiz.png b/.cursor/rules/roblox/assets/education/educators-page/Code-Wiz.png new file mode 100644 index 00000000..2f67fe66 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/educators-page/Code-Wiz.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ca3e3997bcc37d528b8ca1353e1e01bec24ec5f5e6eefbf467bd6605dcd452f +size 32670 diff --git a/.cursor/rules/roblox/assets/education/educators-page/EDMO-Round-1.png b/.cursor/rules/roblox/assets/education/educators-page/EDMO-Round-1.png new file mode 100644 index 00000000..ea275f6f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/educators-page/EDMO-Round-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73c16a6630a3b8f392569de4bfbd8ed89758721bbcc3194734000d080bce280e +size 55916 diff --git a/.cursor/rules/roblox/assets/education/educators-page/Genius-Academy.png b/.cursor/rules/roblox/assets/education/educators-page/Genius-Academy.png new file mode 100644 index 00000000..00333352 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/educators-page/Genius-Academy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbfc8b93188826f31d3d2228d4278047a722d2dc407eb873848685a52f6b49df +size 112862 diff --git a/.cursor/rules/roblox/assets/education/educators-page/Large_Code_Ninjas-_White_Horizontal.png b/.cursor/rules/roblox/assets/education/educators-page/Large_Code_Ninjas-_White_Horizontal.png new file mode 100644 index 00000000..bb26b4ce --- /dev/null +++ b/.cursor/rules/roblox/assets/education/educators-page/Large_Code_Ninjas-_White_Horizontal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c66facfc992c4c082bd2e67300dc3b553cce9253dcc898b0eec1f04acf02ccf +size 11459 diff --git a/.cursor/rules/roblox/assets/education/educators-page/Natalie-Clabo.jpg b/.cursor/rules/roblox/assets/education/educators-page/Natalie-Clabo.jpg new file mode 100644 index 00000000..6f0d77e6 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/educators-page/Natalie-Clabo.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1700ba1fffbe8addd32778e7f47af06e32d103b6ccef58f6aac3e6330e6041cc +size 52057 diff --git a/.cursor/rules/roblox/assets/education/educators-page/The-Math-Obby.jpg b/.cursor/rules/roblox/assets/education/educators-page/The-Math-Obby.jpg new file mode 100644 index 00000000..a8ef7c20 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/educators-page/The-Math-Obby.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b36d4f2ce2a8fa25c6d0ffb718c8e47b577210d8f2461a85c0d8db4ed19967aa +size 61222 diff --git a/.cursor/rules/roblox/assets/education/educators-page/WGFactory.png b/.cursor/rules/roblox/assets/education/educators-page/WGFactory.png new file mode 100644 index 00000000..149037f9 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/educators-page/WGFactory.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21dcfd5ffa453aeb16d91bc80fd73bd063684ada064ab7cc05d516fe91b44a4d +size 29420 diff --git a/.cursor/rules/roblox/assets/education/educators-page/alvinblox.png b/.cursor/rules/roblox/assets/education/educators-page/alvinblox.png new file mode 100644 index 00000000..3b985469 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/educators-page/alvinblox.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:988274d564564b28781bda3e2c172d88195c07f975136782acfe89e492f3b95f +size 22470 diff --git a/.cursor/rules/roblox/assets/education/educators-page/code-kingdom-logo.png b/.cursor/rules/roblox/assets/education/educators-page/code-kingdom-logo.png new file mode 100644 index 00000000..4ec0156a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/educators-page/code-kingdom-logo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ad85bfc8313f4283f8952bed67d70d8c97537a85071d310e96070e3ec930b20 +size 16491 diff --git a/.cursor/rules/roblox/assets/education/educators-page/id-tech-logo.png b/.cursor/rules/roblox/assets/education/educators-page/id-tech-logo.png new file mode 100644 index 00000000..8003e790 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/educators-page/id-tech-logo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f73c237bf27ab4d61e29e6a85791d70a5d0978df18875d6924ae21f28bf0315 +size 21533 diff --git a/.cursor/rules/roblox/assets/education/first-safety-and-civility-game/Create-Your-First-Civil-and-Safe-Game.pdf b/.cursor/rules/roblox/assets/education/first-safety-and-civility-game/Create-Your-First-Civil-and-Safe-Game.pdf new file mode 100644 index 00000000..570f7715 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/first-safety-and-civility-game/Create-Your-First-Civil-and-Safe-Game.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d51206726a92f6e281c9b46e74ab011ac3a4a26103d2d160592095309304bc3d +size 28670887 diff --git a/.cursor/rules/roblox/assets/education/first-safety-and-civility-game/civility.png b/.cursor/rules/roblox/assets/education/first-safety-and-civility-game/civility.png new file mode 100644 index 00000000..f5166673 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/first-safety-and-civility-game/civility.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a7e3401b23010d76a794557c6607edbf4a6c1e073f172f8fcec8ea67cf7b0a6 +size 248504 diff --git a/.cursor/rules/roblox/assets/education/general/Anchor-Tool.png b/.cursor/rules/roblox/assets/education/general/Anchor-Tool.png new file mode 100644 index 00000000..7daed030 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/general/Anchor-Tool.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de4080d10799d3446a62c6a5c2146f653325748d48e8d16693fa7c51f5b8aa53 +size 53701 diff --git a/.cursor/rules/roblox/assets/education/general/Move-Tool.png b/.cursor/rules/roblox/assets/education/general/Move-Tool.png new file mode 100644 index 00000000..73ede752 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/general/Move-Tool.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81741ccb89de24ab10c02cc299e8a20ffbd8010ea088eea0496c069183355b27 +size 22323 diff --git a/.cursor/rules/roblox/assets/education/general/Rotate-Tool.png b/.cursor/rules/roblox/assets/education/general/Rotate-Tool.png new file mode 100644 index 00000000..dfc1ec41 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/general/Rotate-Tool.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e2f66bc1e08f83a1eada02cf355136a216c9b2436c8d9f99b1aac73c07c894d +size 22359 diff --git a/.cursor/rules/roblox/assets/education/general/Scale-Tool.png b/.cursor/rules/roblox/assets/education/general/Scale-Tool.png new file mode 100644 index 00000000..b480346d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/general/Scale-Tool.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16140996c8172685bd4b065392271ef4fb5c63810b46d3d906bc8339126f738f +size 22311 diff --git a/.cursor/rules/roblox/assets/education/general/Snap-Settings-A.png b/.cursor/rules/roblox/assets/education/general/Snap-Settings-A.png new file mode 100644 index 00000000..8ce65123 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/general/Snap-Settings-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:321900d4fb45eae8da7bcfe8633bfde345d768f6d2a4ba755f021a46a976c093 +size 34285 diff --git a/.cursor/rules/roblox/assets/education/general/Snap-Settings-B.png b/.cursor/rules/roblox/assets/education/general/Snap-Settings-B.png new file mode 100644 index 00000000..457060c1 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/general/Snap-Settings-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f7f34d1d867eae85758eea8f54607bdc1481edc06f6076e3f2ba12e7ad36662 +size 35656 diff --git a/.cursor/rules/roblox/assets/education/general/Snap-Settings-C.png b/.cursor/rules/roblox/assets/education/general/Snap-Settings-C.png new file mode 100644 index 00000000..12f83c93 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/general/Snap-Settings-C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9ac2f7c1ce265946c3b1c09e925f7fc6fab1b5568265f3a658bbd38c3a4eedd +size 35748 diff --git a/.cursor/rules/roblox/assets/education/general/Studio-Setup-Galactic-Speedway.jpg b/.cursor/rules/roblox/assets/education/general/Studio-Setup-Galactic-Speedway.jpg new file mode 100644 index 00000000..ae876545 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/general/Studio-Setup-Galactic-Speedway.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d81b43ecc92296336828536f7bb7fe2e41e3e2bec1ab7d94fa4104028bfd743a +size 338259 diff --git a/.cursor/rules/roblox/assets/education/general/Studio-Setup-Island-Of-Move.jpg b/.cursor/rules/roblox/assets/education/general/Studio-Setup-Island-Of-Move.jpg new file mode 100644 index 00000000..8e9a1ae3 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/general/Studio-Setup-Island-Of-Move.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a797100c576eaba525ad26c85232712a8c7fe061186562e278d11ca91ddcba8 +size 382070 diff --git a/.cursor/rules/roblox/assets/education/general/Studio-Setup-Mansion-Of-Wonder.jpg b/.cursor/rules/roblox/assets/education/general/Studio-Setup-Mansion-Of-Wonder.jpg new file mode 100644 index 00000000..4252a8ef --- /dev/null +++ b/.cursor/rules/roblox/assets/education/general/Studio-Setup-Mansion-Of-Wonder.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e8d4300c462d5ef2d7742ce4e7cba04caa4fde6ca7a708f0d92c3c2b45a65fd +size 286713 diff --git a/.cursor/rules/roblox/assets/education/general/Studio-Setup-Story-Games.jpg b/.cursor/rules/roblox/assets/education/general/Studio-Setup-Story-Games.jpg new file mode 100644 index 00000000..02cf9e85 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/general/Studio-Setup-Story-Games.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c4b1d49715015bcee0c3cffb95cec1247521a200b409f9f5b17c50cec349f45 +size 260507 diff --git a/.cursor/rules/roblox/assets/education/general/Toolbox-Inventory.png b/.cursor/rules/roblox/assets/education/general/Toolbox-Inventory.png new file mode 100644 index 00000000..96c192e5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/general/Toolbox-Inventory.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04c746708446aaa2ba2ca9e49917f28e115940c7fdc7f466eb081f4031a2a4d9 +size 20193 diff --git a/.cursor/rules/roblox/assets/education/general/play-button.png b/.cursor/rules/roblox/assets/education/general/play-button.png new file mode 100644 index 00000000..230d6cb6 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/general/play-button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b72a5ea08414eb52784566528ecb6e4bfc65db1530a21a68b71bcbd085b3067 +size 9388 diff --git a/.cursor/rules/roblox/assets/education/general/stop-button.png b/.cursor/rules/roblox/assets/education/general/stop-button.png new file mode 100644 index 00000000..009bbf86 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/general/stop-button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:063aeb4225ff4b743295742c7ca891d6ca6edf3794740918a17e83f9f6129c36 +size 10178 diff --git a/.cursor/rules/roblox/assets/education/handouts/Handout-CollaborationGuidelines.docx b/.cursor/rules/roblox/assets/education/handouts/Handout-CollaborationGuidelines.docx new file mode 100644 index 00000000..b6966924 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/handouts/Handout-CollaborationGuidelines.docx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:733c7f7bc45a6d6215e51522a330cfb9490ef71e58220f45ea29d63db62e7ea9 +size 188594 diff --git a/.cursor/rules/roblox/assets/education/handouts/Roblox_Classroom_Kit.zip b/.cursor/rules/roblox/assets/education/handouts/Roblox_Classroom_Kit.zip new file mode 100644 index 00000000..af752389 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/handouts/Roblox_Classroom_Kit.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9caa697a3da7e8b16da08780c0bd0e29e7b9748f3db96cda01dc925cf3cb837 +size 2131845 diff --git a/.cursor/rules/roblox/assets/education/handouts/animation-feedback.pdf b/.cursor/rules/roblox/assets/education/handouts/animation-feedback.pdf new file mode 100644 index 00000000..47e4aae2 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/handouts/animation-feedback.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e41922d1af3a93eeaf1c3bcc85f0c3d77a8fd6a9b262bbd7367ee9af68eb3e42 +size 84048 diff --git a/.cursor/rules/roblox/assets/education/handouts/digital-safety-presentation.pptx b/.cursor/rules/roblox/assets/education/handouts/digital-safety-presentation.pptx new file mode 100644 index 00000000..8fb058f2 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/handouts/digital-safety-presentation.pptx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9a815fef139b0ec569d48c52dcdc82895d45b2ff39d9bfaa8fdd4d6fac8b401 +size 881721 diff --git a/.cursor/rules/roblox/assets/education/handouts/digital-safety-scavenger.pdf b/.cursor/rules/roblox/assets/education/handouts/digital-safety-scavenger.pdf new file mode 100644 index 00000000..ec39538c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/handouts/digital-safety-scavenger.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:354eb096c70b278f2a220cb1ecdbb06acb81992b230d0c25b07778b61395b46b +size 82244 diff --git a/.cursor/rules/roblox/assets/education/handouts/introToCoding-cheatsheet.pdf b/.cursor/rules/roblox/assets/education/handouts/introToCoding-cheatsheet.pdf new file mode 100644 index 00000000..bfedba38 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/handouts/introToCoding-cheatsheet.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d95ff74575900ba220771ece716d4a38f2848928ddf63e1ec9da50f6c4d8383 +size 185263 diff --git a/.cursor/rules/roblox/assets/education/handouts/introToStudio-cheatsheet.pdf b/.cursor/rules/roblox/assets/education/handouts/introToStudio-cheatsheet.pdf new file mode 100644 index 00000000..00a0485a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/handouts/introToStudio-cheatsheet.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7eaf238958e52079681283a6cf5a0e1bdb5070c63f761b66383f54b61c4e15d +size 87578 diff --git a/.cursor/rules/roblox/assets/education/handouts/project-feedback-presentation.pptx b/.cursor/rules/roblox/assets/education/handouts/project-feedback-presentation.pptx new file mode 100644 index 00000000..68306bfa --- /dev/null +++ b/.cursor/rules/roblox/assets/education/handouts/project-feedback-presentation.pptx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6a69bf096f685b43acb2232519185ebec188db2d4dd949f8d1eb68e31ed4bc3 +size 1269316 diff --git a/.cursor/rules/roblox/assets/education/handouts/project-feedback.pdf b/.cursor/rules/roblox/assets/education/handouts/project-feedback.pdf new file mode 100644 index 00000000..030c292b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/handouts/project-feedback.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50618a44621c35e6f90fddb299299e194d3bf299d4f92824cedf08128d19a712 +size 85085 diff --git a/.cursor/rules/roblox/assets/education/handouts/upstander-roleplay.pdf b/.cursor/rules/roblox/assets/education/handouts/upstander-roleplay.pdf new file mode 100644 index 00000000..603e8fa5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/handouts/upstander-roleplay.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:159ffb98c80415c6c570028f0e00751f3da8b1ebe86250d7f558abd1553e15a4 +size 71303 diff --git a/.cursor/rules/roblox/assets/education/intro-to-digital-civility/Upstander_Situations_Handout.docx b/.cursor/rules/roblox/assets/education/intro-to-digital-civility/Upstander_Situations_Handout.docx new file mode 100644 index 00000000..57b616ad --- /dev/null +++ b/.cursor/rules/roblox/assets/education/intro-to-digital-civility/Upstander_Situations_Handout.docx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81b95547e4f626a4848135ac5682327a0402dbca5df1f9bb075e5f8aef6a8b6a +size 39870 diff --git a/.cursor/rules/roblox/assets/education/intro-to-digital-civility/digitalCitizenship_onlineCommunityHero.jpg b/.cursor/rules/roblox/assets/education/intro-to-digital-civility/digitalCitizenship_onlineCommunityHero.jpg new file mode 100644 index 00000000..2912c349 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/intro-to-digital-civility/digitalCitizenship_onlineCommunityHero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bdb8b78b38956917876691870946c8d48e4ea027c1077c8d531bf252da44b820 +size 259080 diff --git a/.cursor/rules/roblox/assets/education/intro-to-digital-civility/digitalCitizenship_showNPC_bully.jpg b/.cursor/rules/roblox/assets/education/intro-to-digital-civility/digitalCitizenship_showNPC_bully.jpg new file mode 100644 index 00000000..40ec2f02 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/intro-to-digital-civility/digitalCitizenship_showNPC_bully.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f92d87b218202be6d84c8bafaec3c4873fa5d96df818728649f0fbf74faecf80 +size 64700 diff --git a/.cursor/rules/roblox/assets/education/intro-to-digital-civility/digitalCitizenship_showNPC_noBully.jpg b/.cursor/rules/roblox/assets/education/intro-to-digital-civility/digitalCitizenship_showNPC_noBully.jpg new file mode 100644 index 00000000..84b2ef1d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/intro-to-digital-civility/digitalCitizenship_showNPC_noBully.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8cc8b918818cec9f58b82d7eb0382a6d13fac98c51c43fbaf0d6396913d1cdbf +size 72192 diff --git a/.cursor/rules/roblox/assets/education/intro-to-digital-civility/hero_digitalCitizenshipIntro.jpg b/.cursor/rules/roblox/assets/education/intro-to-digital-civility/hero_digitalCitizenshipIntro.jpg new file mode 100644 index 00000000..dbddd08a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/intro-to-digital-civility/hero_digitalCitizenshipIntro.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89dbef696fb2926f0d1f4e4b811e835c54e86d5989d3c1af13c51cb5425d1327 +size 220130 diff --git a/.cursor/rules/roblox/assets/education/intro-to-digital-safety/Digital_Safety_Scavenger_Hunt_Handout.docx b/.cursor/rules/roblox/assets/education/intro-to-digital-safety/Digital_Safety_Scavenger_Hunt_Handout.docx new file mode 100644 index 00000000..84f39bf4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/intro-to-digital-safety/Digital_Safety_Scavenger_Hunt_Handout.docx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:416941f9a011f11d50a18a63909fabf6898f9feafc3749e779f6947ff2739d02 +size 39569 diff --git a/.cursor/rules/roblox/assets/education/intro-to-digital-safety/Intro_to_Digital_Safety_Lesson_Slides.pptx b/.cursor/rules/roblox/assets/education/intro-to-digital-safety/Intro_to_Digital_Safety_Lesson_Slides.pptx new file mode 100644 index 00000000..8e310dc5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/intro-to-digital-safety/Intro_to_Digital_Safety_Lesson_Slides.pptx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:579ea4012597fa0b74e0672f566c8e6bd8ce6b3af276fdddea8b448882af0572 +size 874045 diff --git a/.cursor/rules/roblox/assets/education/intro-to-digital-safety/digitalSafety_gameHero.png b/.cursor/rules/roblox/assets/education/intro-to-digital-safety/digitalSafety_gameHero.png new file mode 100644 index 00000000..c7cba442 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/intro-to-digital-safety/digitalSafety_gameHero.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cde510fde0a290cc2f5b57b5deec67e9ee9d3fcd757c4b1d22064803a6514427 +size 275023 diff --git a/.cursor/rules/roblox/assets/education/intro-to-digital-safety/digitalSafety_heroImage.jpg b/.cursor/rules/roblox/assets/education/intro-to-digital-safety/digitalSafety_heroImage.jpg new file mode 100644 index 00000000..f5801861 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/intro-to-digital-safety/digitalSafety_heroImage.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d659f90faec1ed2d2c45d98287310e3af0e5441a5079e43f1938099da1fc71f7 +size 239356 diff --git a/.cursor/rules/roblox/assets/education/intro-to-digital-safety/digitalSafety_reportClick.jpg b/.cursor/rules/roblox/assets/education/intro-to-digital-safety/digitalSafety_reportClick.jpg new file mode 100644 index 00000000..23ebac66 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/intro-to-digital-safety/digitalSafety_reportClick.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99e24fe0832a08be16592f7204a9233c312cff9d8b95aefce6e08e853563ebae +size 1098751 diff --git a/.cursor/rules/roblox/assets/education/intro-to-digital-safety/digitalSafety_showReport.jpg b/.cursor/rules/roblox/assets/education/intro-to-digital-safety/digitalSafety_showReport.jpg new file mode 100644 index 00000000..94c6850b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/intro-to-digital-safety/digitalSafety_showReport.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a19c211b43d1bb9d171ac4dd6f2b0ccbc63f30631ca5c2d53c5a7aa8f2fa62d5 +size 1684383 diff --git a/.cursor/rules/roblox/assets/education/intro-to-digital-safety/digitalSafety_youtube.png b/.cursor/rules/roblox/assets/education/intro-to-digital-safety/digitalSafety_youtube.png new file mode 100644 index 00000000..6bc83cea --- /dev/null +++ b/.cursor/rules/roblox/assets/education/intro-to-digital-safety/digitalSafety_youtube.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22b259a617e0d29a99ac36a368a5c52351446a095b8262b464191222473f65d0 +size 163605 diff --git a/.cursor/rules/roblox/assets/education/legacy/ConfigureServer.png b/.cursor/rules/roblox/assets/education/legacy/ConfigureServer.png new file mode 100644 index 00000000..33eef046 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/ConfigureServer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cfcce5d2d4b13a85dfaa508b90b6c3c32eb6f2cfe02a2f50879ff5d3ba19c214 +size 25199 diff --git a/.cursor/rules/roblox/assets/education/legacy/Handout-CollaborationGuidelines.docx b/.cursor/rules/roblox/assets/education/legacy/Handout-CollaborationGuidelines.docx new file mode 100644 index 00000000..b6966924 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/Handout-CollaborationGuidelines.docx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:733c7f7bc45a6d6215e51522a330cfb9490ef71e58220f45ea29d63db62e7ea9 +size 188594 diff --git a/.cursor/rules/roblox/assets/education/legacy/Handout-CollabrationGuidelines.pdf b/.cursor/rules/roblox/assets/education/legacy/Handout-CollabrationGuidelines.pdf new file mode 100644 index 00000000..8d804c08 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/Handout-CollabrationGuidelines.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb96fb16a1e0112634c8f6063e14da26bdb33cd7a50081855af768245b43992e +size 233312 diff --git a/.cursor/rules/roblox/assets/education/legacy/Handout_-_Computer_Science_Quiz.docx b/.cursor/rules/roblox/assets/education/legacy/Handout_-_Computer_Science_Quiz.docx new file mode 100644 index 00000000..799a25ec --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/Handout_-_Computer_Science_Quiz.docx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ffd8e80febbe84b609d8da8b5f204aaaf73201153258eae498fb8fd31a08cb1b +size 41421 diff --git a/.cursor/rules/roblox/assets/education/legacy/Handout_-_Computer_Science_Quiz.pdf b/.cursor/rules/roblox/assets/education/legacy/Handout_-_Computer_Science_Quiz.pdf new file mode 100644 index 00000000..b5f2d09f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/Handout_-_Computer_Science_Quiz.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca24ff8dbbc3f765f5a2cb157ad2b3dcc5f6b234490a255ba0af61ea1dd3045b +size 67086 diff --git a/.cursor/rules/roblox/assets/education/legacy/Handout_-_Getting_Ready.pdf b/.cursor/rules/roblox/assets/education/legacy/Handout_-_Getting_Ready.pdf new file mode 100644 index 00000000..6680e6e9 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/Handout_-_Getting_Ready.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:252ba6216314eb9b28440c6a1ede6530b943b0ed2a96def060f6180124b46478 +size 98444 diff --git a/.cursor/rules/roblox/assets/education/legacy/Handout_-_Project_Rubric.docx b/.cursor/rules/roblox/assets/education/legacy/Handout_-_Project_Rubric.docx new file mode 100644 index 00000000..d05c9efa --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/Handout_-_Project_Rubric.docx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8c0db0edacd58bbb78f9e2aad9d8592f25155b0ed00e0ce2d969fef4d348611 +size 42132 diff --git a/.cursor/rules/roblox/assets/education/legacy/Handout_-_Project_Rubric.pdf b/.cursor/rules/roblox/assets/education/legacy/Handout_-_Project_Rubric.pdf new file mode 100644 index 00000000..751b462e --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/Handout_-_Project_Rubric.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49d0c223ce87e47529a70c9b681b04d71546060a786c4f78aa073f624de5a5de +size 72132 diff --git a/.cursor/rules/roblox/assets/education/legacy/Handout_-_Roblox_Client_Quick_Start_Guide.pdf b/.cursor/rules/roblox/assets/education/legacy/Handout_-_Roblox_Client_Quick_Start_Guide.pdf new file mode 100644 index 00000000..410ac920 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/Handout_-_Roblox_Client_Quick_Start_Guide.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f033a700656b4bb8a676f5b894ea7fd5a30d02139cf237cbc0b88c589f53d279 +size 1598737 diff --git a/.cursor/rules/roblox/assets/education/legacy/Handout_-_Roblox_Glossary.pdf b/.cursor/rules/roblox/assets/education/legacy/Handout_-_Roblox_Glossary.pdf new file mode 100644 index 00000000..49fd5fe3 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/Handout_-_Roblox_Glossary.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b8b6e6408091aa63e93fa32796c7985bf920a089282855990ff2abee96cce7f +size 78079 diff --git a/.cursor/rules/roblox/assets/education/legacy/NameServer.png b/.cursor/rules/roblox/assets/education/legacy/NameServer.png new file mode 100644 index 00000000..7eefacab --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/NameServer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:506e579a7d95d1c4c222b217160cba40c98c0f95d1cd7d525a7934aa2bc8f88c +size 250844 diff --git a/.cursor/rules/roblox/assets/education/legacy/RobloxStudio-Cheatsheet.pdf b/.cursor/rules/roblox/assets/education/legacy/RobloxStudio-Cheatsheet.pdf new file mode 100644 index 00000000..00a0485a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/RobloxStudio-Cheatsheet.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7eaf238958e52079681283a6cf5a0e1bdb5070c63f761b66383f54b61c4e15d +size 87578 diff --git a/.cursor/rules/roblox/assets/education/legacy/Roblox_Account_Creation_(Student_Handout).pdf b/.cursor/rules/roblox/assets/education/legacy/Roblox_Account_Creation_(Student_Handout).pdf new file mode 100644 index 00000000..819c0071 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/Roblox_Account_Creation_(Student_Handout).pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f71d475640071842e168f0c23b44f56767186c6992be95af54518116a9575ddc +size 97653 diff --git a/.cursor/rules/roblox/assets/education/legacy/Roblox_Assessment_Handouts.zip b/.cursor/rules/roblox/assets/education/legacy/Roblox_Assessment_Handouts.zip new file mode 100644 index 00000000..7cbe53da --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/Roblox_Assessment_Handouts.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5be68c345ea4e91fd083167373ee1b138d66ad92858c773ddd1d1c89c8616052 +size 212777 diff --git a/.cursor/rules/roblox/assets/education/legacy/Roblox_Classroom_Kit.zip b/.cursor/rules/roblox/assets/education/legacy/Roblox_Classroom_Kit.zip new file mode 100644 index 00000000..f2cf596b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/Roblox_Classroom_Kit.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71089c7f99ab456dd4d3503af091ba8b42be92844a7194d5e70107713db09765 +size 27411246 diff --git a/.cursor/rules/roblox/assets/education/legacy/Safety_education_brochure.pdf b/.cursor/rules/roblox/assets/education/legacy/Safety_education_brochure.pdf new file mode 100644 index 00000000..b884df4c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/Safety_education_brochure.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:167c63f917ba27b6aea1a4a587f69b66619402bef9dfa04c166453f5a40097f8 +size 256254 diff --git a/.cursor/rules/roblox/assets/education/legacy/ServersTab.png b/.cursor/rules/roblox/assets/education/legacy/ServersTab.png new file mode 100644 index 00000000..1dc80ccf --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/ServersTab.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87be77d68e4ed48e17acf6c96542ce5c7f0486f82267aeb55ab6f531e64ab1fc +size 300914 diff --git a/.cursor/rules/roblox/assets/education/legacy/Twitterheader1500x500.jpg b/.cursor/rules/roblox/assets/education/legacy/Twitterheader1500x500.jpg new file mode 100644 index 00000000..84724b05 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/Twitterheader1500x500.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c940908c62c7fc08ff3a9196084ad03d87b888360a720693e451ac198a5a26cc +size 190747 diff --git a/.cursor/rules/roblox/assets/education/legacy/VIPGamePage.png b/.cursor/rules/roblox/assets/education/legacy/VIPGamePage.png new file mode 100644 index 00000000..10c196ea --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/VIPGamePage.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b0ae6b6f3f2940d2f9192440e86767377637e62756280ebc7709f552a687bd08 +size 30632 diff --git a/.cursor/rules/roblox/assets/education/legacy/cityScape_312x200.jpg b/.cursor/rules/roblox/assets/education/legacy/cityScape_312x200.jpg new file mode 100644 index 00000000..79046b25 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/cityScape_312x200.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fcd36439afe0c8145aea196a7505fbccb94aa1098cfe8c48f41868a2d249422 +size 39251 diff --git a/.cursor/rules/roblox/assets/education/legacy/classroomThumbnail_312x200.png b/.cursor/rules/roblox/assets/education/legacy/classroomThumbnail_312x200.png new file mode 100644 index 00000000..7b19ea73 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/classroomThumbnail_312x200.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a5dc7647d37459afeb0eff132e8e4ff0c659916a6919bb03f37af8743ccdc5f +size 111252 diff --git a/.cursor/rules/roblox/assets/education/legacy/coding4_loopingArraysThumbnail.jpg b/.cursor/rules/roblox/assets/education/legacy/coding4_loopingArraysThumbnail.jpg new file mode 100644 index 00000000..4d7e5c13 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/coding4_loopingArraysThumbnail.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2091c3a69927c6506bd6a0cda539e807dde51103faf494d641311f7e3a5ecf4c +size 23016 diff --git a/.cursor/rules/roblox/assets/education/legacy/collabrationArticle_heroBanner.jpg b/.cursor/rules/roblox/assets/education/legacy/collabrationArticle_heroBanner.jpg new file mode 100644 index 00000000..42751240 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/collabrationArticle_heroBanner.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8fef327d8d926d3f052423b438cad0a4a24a42405263b3cf91c3ca0359927392 +size 134233 diff --git a/.cursor/rules/roblox/assets/education/legacy/devStarted-allowCopying.png b/.cursor/rules/roblox/assets/education/legacy/devStarted-allowCopying.png new file mode 100644 index 00000000..cd90b562 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/devStarted-allowCopying.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:691fe044ff81cf72c3311a359e3bb658ed6ece72942ea1fa9821a4d977c2133e +size 10088 diff --git a/.cursor/rules/roblox/assets/education/legacy/devStarted-clickCreate.png b/.cursor/rules/roblox/assets/education/legacy/devStarted-clickCreate.png new file mode 100644 index 00000000..763cfd45 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/devStarted-clickCreate.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:320f3dc7f20ad404d9e995a1026647c4857df6c41e6842f2b47075ead559580e +size 3865 diff --git a/.cursor/rules/roblox/assets/education/legacy/devStarted-createNewGame.jpg b/.cursor/rules/roblox/assets/education/legacy/devStarted-createNewGame.jpg new file mode 100644 index 00000000..664a6119 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/devStarted-createNewGame.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc00f210bd5f32651737cf0d2f866373686f1fc1be4ebab1e25b6f87d16d86a4 +size 55889 diff --git a/.cursor/rules/roblox/assets/education/legacy/devStarted-editPlace.png b/.cursor/rules/roblox/assets/education/legacy/devStarted-editPlace.png new file mode 100644 index 00000000..af17706c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/devStarted-editPlace.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04417b61d0fe3723bc0e37c6efebe3d306f103b2cfffaff08d92a421d6d81422 +size 10440 diff --git a/.cursor/rules/roblox/assets/education/legacy/devStarted-editTemplate.png b/.cursor/rules/roblox/assets/education/legacy/devStarted-editTemplate.png new file mode 100644 index 00000000..75d11f4d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/devStarted-editTemplate.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e700ee6b11e735c0f408d0bc6ac8bf20b75386faf5a2ad0058076e9ed281aa7 +size 6399 diff --git a/.cursor/rules/roblox/assets/education/legacy/devStarted-gameSettings.png b/.cursor/rules/roblox/assets/education/legacy/devStarted-gameSettings.png new file mode 100644 index 00000000..7ebb0292 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/devStarted-gameSettings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:464b44d3e74324ef6a460f5c0590302cf0a117a4e4a74f494fe1dc3676a7c1d3 +size 5926 diff --git a/.cursor/rules/roblox/assets/education/legacy/devStarted-setCreator.jpg b/.cursor/rules/roblox/assets/education/legacy/devStarted-setCreator.jpg new file mode 100644 index 00000000..19ea34e9 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/devStarted-setCreator.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1d8191f7927721175a16c31ae8b754fc1773ced48bf1516a09be57829341f64 +size 11746 diff --git a/.cursor/rules/roblox/assets/education/legacy/devTemplates-BrandingExample.jpg b/.cursor/rules/roblox/assets/education/legacy/devTemplates-BrandingExample.jpg new file mode 100644 index 00000000..3f1db41d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/devTemplates-BrandingExample.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:452b0242b69c5fc454f83dac675159713bdda2c13ea80c1b692a9d7497377e2d +size 170082 diff --git a/.cursor/rules/roblox/assets/education/legacy/devTemplates-assetKit-01.jpg b/.cursor/rules/roblox/assets/education/legacy/devTemplates-assetKit-01.jpg new file mode 100644 index 00000000..0e1d424c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/devTemplates-assetKit-01.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d77bc869e5d558d654725814500b69d11283e7b9dcca2b94538d66a335aa9761 +size 112762 diff --git a/.cursor/rules/roblox/assets/education/legacy/devTemplates-assetKit-02.jpg b/.cursor/rules/roblox/assets/education/legacy/devTemplates-assetKit-02.jpg new file mode 100644 index 00000000..8beb2830 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/devTemplates-assetKit-02.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bfabfe21dd0bfd10b275b0add06a15307e8f55277911be28bd29abed4358c86 +size 103491 diff --git a/.cursor/rules/roblox/assets/education/legacy/devTemplates-mansions-byjus.jpg b/.cursor/rules/roblox/assets/education/legacy/devTemplates-mansions-byjus.jpg new file mode 100644 index 00000000..88cda0d6 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/devTemplates-mansions-byjus.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c61297242dd21322a081c795d4298c944ddf156fea414ff6dda6f98ae7a5e419 +size 157565 diff --git a/.cursor/rules/roblox/assets/education/legacy/devTemplates-mansions-original.jpg b/.cursor/rules/roblox/assets/education/legacy/devTemplates-mansions-original.jpg new file mode 100644 index 00000000..1b217ec1 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/devTemplates-mansions-original.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63512fc1363d2deb5b0ff5c2b864defd2ba803ab8d49db2dfaf74c7b48751b07 +size 115020 diff --git a/.cursor/rules/roblox/assets/education/legacy/devTemplates-newTemplates-city.jpg b/.cursor/rules/roblox/assets/education/legacy/devTemplates-newTemplates-city.jpg new file mode 100644 index 00000000..b964ceea --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/devTemplates-newTemplates-city.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d68835578bd1b2ed63f8ea57ce67d6e979b2062593cd552a68b85b9882d62b7b +size 73784 diff --git a/.cursor/rules/roblox/assets/education/legacy/devTemplates-newTemplates-spaceship.jpg b/.cursor/rules/roblox/assets/education/legacy/devTemplates-newTemplates-spaceship.jpg new file mode 100644 index 00000000..5435523f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/devTemplates-newTemplates-spaceship.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea8cd64238f3b5ec90a8296afd23d232adf8282972dc33229289af4317acf5a3 +size 54584 diff --git a/.cursor/rules/roblox/assets/education/legacy/hero-banner-peopleTalking.jpg b/.cursor/rules/roblox/assets/education/legacy/hero-banner-peopleTalking.jpg new file mode 100644 index 00000000..2377db0f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/hero-banner-peopleTalking.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a30c1f205f2b3a5b8668f5d6c555db094928e8968694b45a402259121998b69 +size 142001 diff --git a/.cursor/rules/roblox/assets/education/legacy/hero-classroomLab.jpg b/.cursor/rules/roblox/assets/education/legacy/hero-classroomLab.jpg new file mode 100644 index 00000000..7310b1f4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/hero-classroomLab.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:796709994ce5b1fe134fe65188ed226fab580bdc7b858afb0d6cbcbb6a5231f1 +size 102281 diff --git a/.cursor/rules/roblox/assets/education/legacy/impactPage_hero.jpg b/.cursor/rules/roblox/assets/education/legacy/impactPage_hero.jpg new file mode 100644 index 00000000..6c7adf1c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/impactPage_hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93463a0e7ea3930714828101a7cee16ca346cda6b8d75c14d0e4f5267a8132a9 +size 230818 diff --git a/.cursor/rules/roblox/assets/education/legacy/introToGameDesign_thumbnail.jpg b/.cursor/rules/roblox/assets/education/legacy/introToGameDesign_thumbnail.jpg new file mode 100644 index 00000000..98185e05 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/introToGameDesign_thumbnail.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:525f1a9e4595e2d375d2ef6759846419e6f817e40cb85c9576dbdb98c4b3ac8e +size 40418 diff --git a/.cursor/rules/roblox/assets/education/legacy/introToStudio_thumbnail.jpg b/.cursor/rules/roblox/assets/education/legacy/introToStudio_thumbnail.jpg new file mode 100644 index 00000000..2f162175 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/introToStudio_thumbnail.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79c0f51300972e44b016daaacc272ea8424e6ee86f782bb65aa1a38529060f84 +size 42409 diff --git a/.cursor/rules/roblox/assets/education/legacy/knnoss-palace-example.jpg b/.cursor/rules/roblox/assets/education/legacy/knnoss-palace-example.jpg new file mode 100644 index 00000000..61448137 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/knnoss-palace-example.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9db83cc53e04e3c7b34790027db778c7b49dc691773b38835502025fd242183 +size 542167 diff --git a/.cursor/rules/roblox/assets/education/legacy/module1-exampleStudio.jpg b/.cursor/rules/roblox/assets/education/legacy/module1-exampleStudio.jpg new file mode 100644 index 00000000..b8a02b69 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/module1-exampleStudio.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8cbe3a2fa998d4a91bf381da0288956fc7cbd4fd9c68e16da2a8ac82b702b633 +size 446183 diff --git a/.cursor/rules/roblox/assets/education/legacy/module1-gameExamples-normalCurve.jpg b/.cursor/rules/roblox/assets/education/legacy/module1-gameExamples-normalCurve.jpg new file mode 100644 index 00000000..f18b1640 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/module1-gameExamples-normalCurve.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84fe5da1cd2e9775a72d9f46e97034975ce9b3db2ce9a4b7fde8a3dc0ed17a20 +size 98756 diff --git a/.cursor/rules/roblox/assets/education/legacy/module1-gameExamples-ocean.jpg b/.cursor/rules/roblox/assets/education/legacy/module1-gameExamples-ocean.jpg new file mode 100644 index 00000000..b2fd9727 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/module1-gameExamples-ocean.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20fa7b535666f5d899e9a094193ad8395ace908632ac0f46da9111ceac83c093 +size 85808 diff --git a/.cursor/rules/roblox/assets/education/legacy/module2-addEmail.png b/.cursor/rules/roblox/assets/education/legacy/module2-addEmail.png new file mode 100644 index 00000000..75e0ae15 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/module2-addEmail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be50243cf84085d53ee3b73f0b8b6b7ea4995de80b09dc268d20a03fa3d12b21 +size 54651 diff --git a/.cursor/rules/roblox/assets/education/legacy/module2-capture.jpg b/.cursor/rules/roblox/assets/education/legacy/module2-capture.jpg new file mode 100644 index 00000000..8dc8d656 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/module2-capture.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3bdc40e445e26b128ab74e59761e3ef8c755ae97aeac2f6f5b3c23f18cefc0b +size 57893 diff --git a/.cursor/rules/roblox/assets/education/legacy/module2-clickPlay.jpg b/.cursor/rules/roblox/assets/education/legacy/module2-clickPlay.jpg new file mode 100644 index 00000000..464484c7 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/module2-clickPlay.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:411a629398a3b8d53be8738e15f149dc6555b884a472fda72ac52d9b3dddce43 +size 289807 diff --git a/.cursor/rules/roblox/assets/education/legacy/module2-finishedTraining.jpg b/.cursor/rules/roblox/assets/education/legacy/module2-finishedTraining.jpg new file mode 100644 index 00000000..9189697c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/module2-finishedTraining.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:050bacb01e08bfae6a2e38d9d18e007b937a22cb102e24fd9f5eb8082faab6ed +size 87565 diff --git a/.cursor/rules/roblox/assets/education/legacy/module2-gamePage copy.png b/.cursor/rules/roblox/assets/education/legacy/module2-gamePage copy.png new file mode 100644 index 00000000..f2d5b346 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/module2-gamePage copy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c17d9f6bf46fb728b8d082abedffaf17423774eb4424aadaf27036d167fb77f +size 350693 diff --git a/.cursor/rules/roblox/assets/education/legacy/module2-gamePage.png b/.cursor/rules/roblox/assets/education/legacy/module2-gamePage.png new file mode 100644 index 00000000..01d1c89f --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/module2-gamePage.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:914ea21c7b510694d860fa6228b33811170209002b82b429b59ccbb664f9fe62 +size 344710 diff --git a/.cursor/rules/roblox/assets/education/legacy/module2-homepage.jpg b/.cursor/rules/roblox/assets/education/legacy/module2-homepage.jpg new file mode 100644 index 00000000..35708a4d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/module2-homepage.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9791cd6db351655137b2038028a69bf52543b83f16708afe313d9272f84a908e +size 65593 diff --git a/.cursor/rules/roblox/assets/education/legacy/module2-settings.png b/.cursor/rules/roblox/assets/education/legacy/module2-settings.png new file mode 100644 index 00000000..deb3fda5 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/module2-settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e6ded29670d4725ef852e7e63ec243745ea53b77fc00472c02e76f781bcaab2 +size 16122 diff --git a/.cursor/rules/roblox/assets/education/legacy/module2-trainingExample.jpg b/.cursor/rules/roblox/assets/education/legacy/module2-trainingExample.jpg new file mode 100644 index 00000000..108cfd01 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/module2-trainingExample.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf5e43ec99459cb01a1870e00196d9d82afa182ce655cbce9039e349f75317d0 +size 166382 diff --git a/.cursor/rules/roblox/assets/education/legacy/module3-signinScreen.jpg b/.cursor/rules/roblox/assets/education/legacy/module3-signinScreen.jpg new file mode 100644 index 00000000..ef3b4266 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/module3-signinScreen.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8cb1e373d67f017114c16a791d397845e2ff250d9463e8b35dd314a9d7cb1255 +size 76460 diff --git a/.cursor/rules/roblox/assets/education/legacy/module4-luaLearningQuiz.png b/.cursor/rules/roblox/assets/education/legacy/module4-luaLearningQuiz.png new file mode 100644 index 00000000..ea95d448 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/module4-luaLearningQuiz.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc6d49631c143f2e921abe9932313877d7fbeb278bd6b16f64405a9f5b9a0ddd +size 19300 diff --git a/.cursor/rules/roblox/assets/education/legacy/module4-showChat.jpg b/.cursor/rules/roblox/assets/education/legacy/module4-showChat.jpg new file mode 100644 index 00000000..30fa671b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/module4-showChat.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8659ab7b1c61ca1b3d7356663bb0b9a17ca95bf6f737a4b5bda07fcef76a019e +size 27010 diff --git a/.cursor/rules/roblox/assets/education/legacy/module5-gameImages-450x250-lua.jpg b/.cursor/rules/roblox/assets/education/legacy/module5-gameImages-450x250-lua.jpg new file mode 100644 index 00000000..136e24fd --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/module5-gameImages-450x250-lua.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40452f30e5f565baba272710527bbc2a66f5bcf2d36ea023bca800560245ca0f +size 21119 diff --git a/.cursor/rules/roblox/assets/education/legacy/module5-gameImages-450x250-ocean.jpg b/.cursor/rules/roblox/assets/education/legacy/module5-gameImages-450x250-ocean.jpg new file mode 100644 index 00000000..30ef043d8 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/module5-gameImages-450x250-ocean.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:494ef056b5bfe2da53ee1fb9a5fd0252831bc349d1b574bca25d54cf4e5f3984 +size 82087 diff --git a/.cursor/rules/roblox/assets/education/legacy/plane-crazy.jpg b/.cursor/rules/roblox/assets/education/legacy/plane-crazy.jpg new file mode 100644 index 00000000..8d18d36e --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/plane-crazy.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b51198d2bfffefe6022dab5adff1f2a46af3a071b526830ab9ec468e5c076c3 +size 37391 diff --git a/.cursor/rules/roblox/assets/education/legacy/thumbnail_digitalCitizenship.jpg b/.cursor/rules/roblox/assets/education/legacy/thumbnail_digitalCitizenship.jpg new file mode 100644 index 00000000..38a72dcf --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/thumbnail_digitalCitizenship.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a1bbf0fa2cc28f21bbc555516587afa183e62a5454799e78b008d824be2b329 +size 60956 diff --git a/.cursor/rules/roblox/assets/education/legacy/thumbnail_digitalCitizenship_312x200.jpg b/.cursor/rules/roblox/assets/education/legacy/thumbnail_digitalCitizenship_312x200.jpg new file mode 100644 index 00000000..af65a74b --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/thumbnail_digitalCitizenship_312x200.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:829d6b3d26e8d0e2b3f6c331a186cba056aeda50db91cc55428a92628ed3f98b +size 50716 diff --git a/.cursor/rules/roblox/assets/education/legacy/worldbuilding_thumbnail.jpg b/.cursor/rules/roblox/assets/education/legacy/worldbuilding_thumbnail.jpg new file mode 100644 index 00000000..46063d4d --- /dev/null +++ b/.cursor/rules/roblox/assets/education/legacy/worldbuilding_thumbnail.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea70c53cc042366e613d7554cef0693268e8d294ef744bb01f172adc502e3f8f +size 50194 diff --git a/.cursor/rules/roblox/assets/education/lesson-plans/adventureGameReferenceHandout.pdf b/.cursor/rules/roblox/assets/education/lesson-plans/adventureGameReferenceHandout.pdf new file mode 100644 index 00000000..bab381e8 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/lesson-plans/adventureGameReferenceHandout.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f35f8a9a436825238d0a1834f4db7aff6624061adc74199635fe8a3a495a434 +size 124135 diff --git a/.cursor/rules/roblox/assets/education/lesson-plans/adventureGameVisionHandout.pdf b/.cursor/rules/roblox/assets/education/lesson-plans/adventureGameVisionHandout.pdf new file mode 100644 index 00000000..a0313eb7 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/lesson-plans/adventureGameVisionHandout.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c87233822a61ba5d569bdf7a4204a50dd8ae29f0922d118a89d9ec000d4c5ebb +size 95312 diff --git a/.cursor/rules/roblox/assets/education/lesson-plans/animateInRoblox-evaluation.pdf b/.cursor/rules/roblox/assets/education/lesson-plans/animateInRoblox-evaluation.pdf new file mode 100644 index 00000000..c8832e95 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/lesson-plans/animateInRoblox-evaluation.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31cd7b6f2e12b5cb90691dd2df1398c4207f3bc1f7e50f0942ee7e2744064049 +size 72032 diff --git a/.cursor/rules/roblox/assets/education/lesson-plans/animateInRoblox-hero.jpg b/.cursor/rules/roblox/assets/education/lesson-plans/animateInRoblox-hero.jpg new file mode 100644 index 00000000..8a6f7152 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/lesson-plans/animateInRoblox-hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:381ffe99ba9cbe7be8cef107cf9fda34003a09de6de71ca961002613ccdcc621 +size 84335 diff --git a/.cursor/rules/roblox/assets/education/lesson-plans/animateInRoblox-presentation.pptx b/.cursor/rules/roblox/assets/education/lesson-plans/animateInRoblox-presentation.pptx new file mode 100644 index 00000000..a5301cd1 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/lesson-plans/animateInRoblox-presentation.pptx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ddbf1e6c880ed01d871569525184c545d2f27fa344579ebec9d812c1fe32441 +size 5330326 diff --git a/.cursor/rules/roblox/assets/education/lesson-plans/createAndDestroy-hero.jpg b/.cursor/rules/roblox/assets/education/lesson-plans/createAndDestroy-hero.jpg new file mode 100644 index 00000000..dbd95807 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/lesson-plans/createAndDestroy-hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59953e970eb28683cac51da171c1be1b71f587066ca43a2ec87e64a42eb13ac4 +size 245084 diff --git a/.cursor/rules/roblox/assets/education/lesson-plans/createAndDestroy-presentation.pptx b/.cursor/rules/roblox/assets/education/lesson-plans/createAndDestroy-presentation.pptx new file mode 100644 index 00000000..930d1bb4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/lesson-plans/createAndDestroy-presentation.pptx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f30b50f9125f72c20ab85d0a2c9e698d0b1bece92bccf67e2d79791cc1d72153 +size 6670391 diff --git a/.cursor/rules/roblox/assets/education/lesson-plans/galactic-speedway-hero.jpg b/.cursor/rules/roblox/assets/education/lesson-plans/galactic-speedway-hero.jpg new file mode 100644 index 00000000..82d3dda4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/lesson-plans/galactic-speedway-hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e98b92863283e304106956e9bb827056447cc7436f7c266055b65c987eca24b1 +size 134609 diff --git a/.cursor/rules/roblox/assets/education/lesson-plans/galacticSpeedway-evaluationHandout.pdf b/.cursor/rules/roblox/assets/education/lesson-plans/galacticSpeedway-evaluationHandout.pdf new file mode 100644 index 00000000..75126a41 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/lesson-plans/galacticSpeedway-evaluationHandout.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0bbf1e8d935e9d4c576a2a190e872e80e8493aece42d11f300d6caf11490815 +size 47416 diff --git a/.cursor/rules/roblox/assets/education/lesson-plans/galacticSpeedway-presentation.pptx b/.cursor/rules/roblox/assets/education/lesson-plans/galacticSpeedway-presentation.pptx new file mode 100644 index 00000000..5d898636 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/lesson-plans/galacticSpeedway-presentation.pptx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8696ba82dd9f13bd4df88c8f9b90650b25dd0797a1e78fee8875be186d2a0725 +size 7052174 diff --git a/.cursor/rules/roblox/assets/education/lesson-plans/galacticSpeedway-quizQuestions.pdf b/.cursor/rules/roblox/assets/education/lesson-plans/galacticSpeedway-quizQuestions.pdf new file mode 100644 index 00000000..4cb3202a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/lesson-plans/galacticSpeedway-quizQuestions.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ea0cf39786cdfed4437a59485bc9a59d516cd3d2af6131b0eaa14b901c740bc +size 65282 diff --git a/.cursor/rules/roblox/assets/education/lesson-plans/introToGameDesign-brainstormHandout.pdf b/.cursor/rules/roblox/assets/education/lesson-plans/introToGameDesign-brainstormHandout.pdf new file mode 100644 index 00000000..71b97316 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/lesson-plans/introToGameDesign-brainstormHandout.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bae3a579782beda47f30c174f2283841c3a9286406e7b166869ac0fce1b82be +size 56240 diff --git a/.cursor/rules/roblox/assets/education/lesson-plans/introToGames-hero.jpg b/.cursor/rules/roblox/assets/education/lesson-plans/introToGames-hero.jpg new file mode 100644 index 00000000..71ddcd19 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/lesson-plans/introToGames-hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09962f4848396f06ba4d54844802f990ceda0302613e1a69f121fb1303a84c29 +size 115262 diff --git a/.cursor/rules/roblox/assets/education/lesson-plans/robloxDeveloper-hero.jpg b/.cursor/rules/roblox/assets/education/lesson-plans/robloxDeveloper-hero.jpg new file mode 100644 index 00000000..a4577d55 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/lesson-plans/robloxDeveloper-hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:faad2f30d7db7521c5a881e1f99b5e32861d08aebc055503ef970fa99d34acbc +size 81074 diff --git a/.cursor/rules/roblox/assets/education/lesson-plans/storyGames-hero.jpg b/.cursor/rules/roblox/assets/education/lesson-plans/storyGames-hero.jpg new file mode 100644 index 00000000..2c82bb6a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/lesson-plans/storyGames-hero.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:317075e3b9713c31b0be11c4b1a7dff26fd12f724e25dab8ccab40af352982ca +size 146838 diff --git a/.cursor/rules/roblox/assets/education/lesson-plans/storyGames-overviewVideo.mp4 b/.cursor/rules/roblox/assets/education/lesson-plans/storyGames-overviewVideo.mp4 new file mode 100644 index 00000000..ec32c7c2 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/lesson-plans/storyGames-overviewVideo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b117ee2c8bfa4ec4b4c1666c6906dd64d5bba63352b0cca67e3d49b8535e24a +size 4008902 diff --git a/.cursor/rules/roblox/assets/education/stock-graphics/edu-marketing.zip b/.cursor/rules/roblox/assets/education/stock-graphics/edu-marketing.zip new file mode 100644 index 00000000..dbce0099 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/stock-graphics/edu-marketing.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b93649782d4cca69883610607d087cb579393c46590c07ecd54af92ef717051 +size 502048545 diff --git a/.cursor/rules/roblox/assets/education/stock-graphics/hero-robloxHighSchool.jpg b/.cursor/rules/roblox/assets/education/stock-graphics/hero-robloxHighSchool.jpg new file mode 100644 index 00000000..d3ce1d4e --- /dev/null +++ b/.cursor/rules/roblox/assets/education/stock-graphics/hero-robloxHighSchool.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13b265a7b2dd1b772419cb1b7b9d2c99949987784daf83cb4def5920ee9700de +size 138867 diff --git a/.cursor/rules/roblox/assets/education/stock-graphics/hero-robloxUsersPark.jpg b/.cursor/rules/roblox/assets/education/stock-graphics/hero-robloxUsersPark.jpg new file mode 100644 index 00000000..dbddd08a --- /dev/null +++ b/.cursor/rules/roblox/assets/education/stock-graphics/hero-robloxUsersPark.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89dbef696fb2926f0d1f4e4b811e835c54e86d5989d3c1af13c51cb5425d1327 +size 220130 diff --git a/.cursor/rules/roblox/assets/education/stock-graphics/hero-spaceStudents.jpg b/.cursor/rules/roblox/assets/education/stock-graphics/hero-spaceStudents.jpg new file mode 100644 index 00000000..942040ef --- /dev/null +++ b/.cursor/rules/roblox/assets/education/stock-graphics/hero-spaceStudents.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2163c31f41a65bffc0ddac29f5afe24454129abed02770aa9327c96535d8109 +size 134725 diff --git a/.cursor/rules/roblox/assets/education/stock-graphics/hero-studentTeaching.jpg b/.cursor/rules/roblox/assets/education/stock-graphics/hero-studentTeaching.jpg new file mode 100644 index 00000000..04f0e86c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/stock-graphics/hero-studentTeaching.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3548b9ee57120bd82843304c1d48a276c6821dd6b158bf349cd0ef1e5166c39d +size 82321 diff --git a/.cursor/rules/roblox/assets/education/stock-graphics/thumbnail-studentTeaching.jpg b/.cursor/rules/roblox/assets/education/stock-graphics/thumbnail-studentTeaching.jpg new file mode 100644 index 00000000..0eadd87c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/stock-graphics/thumbnail-studentTeaching.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ed7c6b425c5c93d88b8551d024eca738e46de698de8499c3045a25438770d53 +size 45219 diff --git a/.cursor/rules/roblox/assets/education/stock-graphics/thumbnail-teacherInClassroom.jpg b/.cursor/rules/roblox/assets/education/stock-graphics/thumbnail-teacherInClassroom.jpg new file mode 100644 index 00000000..7010cbf4 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/stock-graphics/thumbnail-teacherInClassroom.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec5a0a8af602ec1bc54dd1e27b42c0162f40c9bdd147d608d2303e97507c74d7 +size 47810 diff --git a/.cursor/rules/roblox/assets/education/story-games/StoryExample.png b/.cursor/rules/roblox/assets/education/story-games/StoryExample.png new file mode 100644 index 00000000..807b4d85 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/story-games/StoryExample.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c0bb3328013180a65bb38e338bbc9ff468d9af8b8463b18041789d330687747 +size 265318 diff --git a/.cursor/rules/roblox/assets/education/story-games/StoryManager.png b/.cursor/rules/roblox/assets/education/story-games/StoryManager.png new file mode 100644 index 00000000..d41b054c --- /dev/null +++ b/.cursor/rules/roblox/assets/education/story-games/StoryManager.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ec552182377da6da9774a7050c8a3f487993222778cb3f11170093420384ff0 +size 34648 diff --git a/.cursor/rules/roblox/assets/education/story-games/Story_Games_Template.rbxl b/.cursor/rules/roblox/assets/education/story-games/Story_Games_Template.rbxl new file mode 100644 index 00000000..51d125bf --- /dev/null +++ b/.cursor/rules/roblox/assets/education/story-games/Story_Games_Template.rbxl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:657503a99bdddf4e151099d10102b079b7df0aacc0e14476f51449924a350894 +size 93818 diff --git a/.cursor/rules/roblox/assets/education/story-games/wcc2018_annotatedStory.png b/.cursor/rules/roblox/assets/education/story-games/wcc2018_annotatedStory.png new file mode 100644 index 00000000..3d5b8600 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/story-games/wcc2018_annotatedStory.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ba1760a6a3cd5c998af585e2a86ae24fdf289046a0d332388c349ab8b54170d +size 30256 diff --git a/.cursor/rules/roblox/assets/education/story-games/wcc2018_quizGameExample_900x500.jpg b/.cursor/rules/roblox/assets/education/story-games/wcc2018_quizGameExample_900x500.jpg new file mode 100644 index 00000000..a5080dbc --- /dev/null +++ b/.cursor/rules/roblox/assets/education/story-games/wcc2018_quizGameExample_900x500.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c31ef5ac8dd1cf709a3037a71817a45197cf3948601355ad58671ddc84eeff4 +size 100968 diff --git a/.cursor/rules/roblox/assets/education/story-games/wccVideo_final_wSound.mp4 b/.cursor/rules/roblox/assets/education/story-games/wccVideo_final_wSound.mp4 new file mode 100644 index 00000000..ec32c7c2 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/story-games/wccVideo_final_wSound.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b117ee2c8bfa4ec4b4c1666c6906dd64d5bba63352b0cca67e3d49b8535e24a +size 4008902 diff --git a/.cursor/rules/roblox/assets/education/story-games/wcc_heroOverhead.jpg b/.cursor/rules/roblox/assets/education/story-games/wcc_heroOverhead.jpg new file mode 100644 index 00000000..5f2b9280 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/story-games/wcc_heroOverhead.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cf94f1c2b96284676508a29ea4e0a53e3a6681b8a09de42bfb3b1e665612e83 +size 145104 diff --git a/.cursor/rules/roblox/assets/education/story-games/wcc_heroPedestal.jpg b/.cursor/rules/roblox/assets/education/story-games/wcc_heroPedestal.jpg new file mode 100644 index 00000000..f06f8870 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/story-games/wcc_heroPedestal.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0aad244721e6c05f3fd486a3e0901ba80a186e1ff45ed760fa8496efde5f9e15 +size 85996 diff --git a/.cursor/rules/roblox/assets/education/story-games/wcc_heroUsing.jpg b/.cursor/rules/roblox/assets/education/story-games/wcc_heroUsing.jpg new file mode 100644 index 00000000..38a66ca2 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/story-games/wcc_heroUsing.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c794059e3b01a445c8177a1e7889dc504e8950b609599d3155ada9de7aa81103 +size 111960 diff --git a/.cursor/rules/roblox/assets/education/story-games/wcc_lessonThumbnail_1.png b/.cursor/rules/roblox/assets/education/story-games/wcc_lessonThumbnail_1.png new file mode 100644 index 00000000..08c118af --- /dev/null +++ b/.cursor/rules/roblox/assets/education/story-games/wcc_lessonThumbnail_1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:255d135d48a7972681e446094a6a6f0c0d646638b47a5ff59ebcf963c27eae6c +size 47322 diff --git a/.cursor/rules/roblox/assets/education/story-games/wcc_lessonThumbnail_2.png b/.cursor/rules/roblox/assets/education/story-games/wcc_lessonThumbnail_2.png new file mode 100644 index 00000000..84edeb20 --- /dev/null +++ b/.cursor/rules/roblox/assets/education/story-games/wcc_lessonThumbnail_2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02daecd102adaeb32217e9e0bd0003560c74d3421de3f7f140b5dc878c21abfd +size 69833 diff --git a/.cursor/rules/roblox/assets/education/story-games/wcc_lessonThumbnail_3.png b/.cursor/rules/roblox/assets/education/story-games/wcc_lessonThumbnail_3.png new file mode 100644 index 00000000..16aff9bb --- /dev/null +++ b/.cursor/rules/roblox/assets/education/story-games/wcc_lessonThumbnail_3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ca7ac393fc7c75cd61fbab38cb90ef97e710a345cd6d0c5a60b88724e6cb2a2 +size 110844 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/ArcHandles/ArcHandles-Example.jpg b/.cursor/rules/roblox/assets/engine-api/classes/ArcHandles/ArcHandles-Example.jpg new file mode 100644 index 00000000..b391fc8f --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/ArcHandles/ArcHandles-Example.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14f009c4345b914b02d39f8832fadb281f5dad61780ba613a4c1bffb4430f094 +size 173952 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/Beam/Curvature-Diagram.png b/.cursor/rules/roblox/assets/engine-api/classes/Beam/Curvature-Diagram.png new file mode 100644 index 00000000..17e88de8 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/Beam/Curvature-Diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe795848d6e2761237a0e322c03cce53b34cff03648e3cf9a4e12bac1f1f8969 +size 312376 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/Camera/DeviceSafeAreaVsFullscreen.png b/.cursor/rules/roblox/assets/engine-api/classes/Camera/DeviceSafeAreaVsFullscreen.png new file mode 100644 index 00000000..663f76f4 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/Camera/DeviceSafeAreaVsFullscreen.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9e16043206e975bedc018b6e15b0c74ebaf7a0df55b520f82539dd5dd58d8dd +size 349377 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/Camera/NearPlaneZ.jpg b/.cursor/rules/roblox/assets/engine-api/classes/Camera/NearPlaneZ.jpg new file mode 100644 index 00000000..522bab05 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/Camera/NearPlaneZ.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bdffb2547a3cdc3ef224de045f52fc69f823ee2a663febf3fa0c57105945f001 +size 283403 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/Camera/ViewportPointToRayOrigin.png b/.cursor/rules/roblox/assets/engine-api/classes/Camera/ViewportPointToRayOrigin.png new file mode 100644 index 00000000..127514fe --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/Camera/ViewportPointToRayOrigin.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:864741016b22c13fa132017e021183dad5fba5641a7fb98def80154aba841aef +size 325771 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/DepthOfFieldEffect/Depth-Of-Field-Diagram.svg b/.cursor/rules/roblox/assets/engine-api/classes/DepthOfFieldEffect/Depth-Of-Field-Diagram.svg new file mode 100644 index 00000000..06c68b2f --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/DepthOfFieldEffect/Depth-Of-Field-Diagram.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee44decaae436b008d368687fe7e2f2b69c6c8b8c8979ff3cdb06446dbb5eba5 +size 10910 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/EditableMesh/GetAdjacentTriangles.png b/.cursor/rules/roblox/assets/engine-api/classes/EditableMesh/GetAdjacentTriangles.png new file mode 100644 index 00000000..80a759b2 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/EditableMesh/GetAdjacentTriangles.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c857a1e90218d202fef2061639608ae27a50665a781bc9848feedea2bb9abfd +size 9271 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/EditableMesh/GetAdjacentVertices.png b/.cursor/rules/roblox/assets/engine-api/classes/EditableMesh/GetAdjacentVertices.png new file mode 100644 index 00000000..90f9d956 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/EditableMesh/GetAdjacentVertices.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a27b272cb51172e9161c11bf57270c5f6f7930b4ae2862dc5679e394ee9bf59c +size 8273 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/EditableMesh/Winding.png b/.cursor/rules/roblox/assets/engine-api/classes/EditableMesh/Winding.png new file mode 100644 index 00000000..7190f2d8 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/EditableMesh/Winding.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f085294bf773d926beb238ea5f808b77186c04fa734afcf586a64c1bed87f99a +size 29288 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/GuiBase2d/AbsolutePositionCoordinateSystem.png b/.cursor/rules/roblox/assets/engine-api/classes/GuiBase2d/AbsolutePositionCoordinateSystem.png new file mode 100644 index 00000000..9aa18bd8 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/GuiBase2d/AbsolutePositionCoordinateSystem.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0022f040550c3f2ed338203a2b2fc267dd3f15974add0fbd465c7cc0287dc211 +size 349547 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/HapticEffect/Position-Radius.png b/.cursor/rules/roblox/assets/engine-api/classes/HapticEffect/Position-Radius.png new file mode 100644 index 00000000..d394be57 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/HapticEffect/Position-Radius.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec286d76443dd0a5320b0665b18c4b61f0930f7b24621dbb8180867ad15bce81 +size 116693 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/ScreenGui/ClipToDeviceSafeArea-False.png b/.cursor/rules/roblox/assets/engine-api/classes/ScreenGui/ClipToDeviceSafeArea-False.png new file mode 100644 index 00000000..246190f1 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/ScreenGui/ClipToDeviceSafeArea-False.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ec52767b1899ae4e3bc03d1665d5a4388400a097dd531df0074d90263bffcd2 +size 336032 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/ScreenGui/ClipToDeviceSafeArea-True.png b/.cursor/rules/roblox/assets/engine-api/classes/ScreenGui/ClipToDeviceSafeArea-True.png new file mode 100644 index 00000000..a98898a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/ScreenGui/ClipToDeviceSafeArea-True.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:340061c127397d0977ad3cc7246122dfc61111030e39577e0e84fe158da59be4 +size 334083 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/ScreenshotHud/Diagram.jpg b/.cursor/rules/roblox/assets/engine-api/classes/ScreenshotHud/Diagram.jpg new file mode 100644 index 00000000..61361021 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/ScreenshotHud/Diagram.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42819acf63845a202d8ddd569b91b5bd76a787915e9f48e5b2ac78e454c47011 +size 212188 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/FillDirection.png b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/FillDirection.png new file mode 100644 index 00000000..2bfa93a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/FillDirection.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19f8d4a14076f5b793a82e93c8549440c8fe8088b61072d640d6af7b39a94195 +size 40081 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/FlexMode-Fill.png b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/FlexMode-Fill.png new file mode 100644 index 00000000..dab4a58b --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/FlexMode-Fill.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69714eef99ea1c602996475ea803f1e6d89be41ec6c6f24e5dd15c18779f32ad +size 48700 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/FlexMode-Grow.png b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/FlexMode-Grow.png new file mode 100644 index 00000000..ce0cb51a --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/FlexMode-Grow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64f763680c168038173293cf53ea58d63074941838155d221df474ab6119ea52 +size 25823 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/FlexMode-Shrink.png b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/FlexMode-Shrink.png new file mode 100644 index 00000000..8ab5ba17 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/FlexMode-Shrink.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e00b1fc438dcd1dd091710cafec4de8a24a5152017dfc856853331b67dbce4a7 +size 25702 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/HorizontalFlex-Cross-Direction.png b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/HorizontalFlex-Cross-Direction.png new file mode 100644 index 00000000..aa9ea15c --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/HorizontalFlex-Cross-Direction.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6051bf7777905dbcd65863c28d03ef9363356e5cca7e89adc60df9233b30ca3e +size 28522 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/HorizontalFlex-Options.png b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/HorizontalFlex-Options.png new file mode 100644 index 00000000..ec1fee19 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/HorizontalFlex-Options.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24a5df3a8e71f9726224c0978d4fb2acf991826f970d9871741b3e1a7c9e9fd7 +size 65055 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/HorizontalFlex-Tabs-3.png b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/HorizontalFlex-Tabs-3.png new file mode 100644 index 00000000..c2ca70b2 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/HorizontalFlex-Tabs-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:543d676381e4a65ad2f92dadd57d7cc1280cb29e8071cab7275c4f32cd46a29d +size 165158 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/HorizontalFlex-Tabs-6.png b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/HorizontalFlex-Tabs-6.png new file mode 100644 index 00000000..51d0d2b1 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/HorizontalFlex-Tabs-6.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dab6905839a4a0457c48d4ee90cf018c6e9df93ec6b5da7f38801dcb573cc131 +size 170940 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/ItemLineAlignment-Start.png b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/ItemLineAlignment-Start.png new file mode 100644 index 00000000..a51cb6d0 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/ItemLineAlignment-Start.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53cf1cc2ccf757260f3e62d464542833f449e5166c98a7e353cda6212f5c398d +size 173561 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/ItemLineAlignment-Stretch.png b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/ItemLineAlignment-Stretch.png new file mode 100644 index 00000000..6629ef41 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/ItemLineAlignment-Stretch.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e50e06c7b785300e3ce459735f934423662470dd2f26773377747992791b8b7 +size 176420 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/ItemLineAlignment.png b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/ItemLineAlignment.png new file mode 100644 index 00000000..d7d3e612 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/ItemLineAlignment.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53bf95f93831b019396c2b04c1b172f9c711549e5a94414dd28f32b631be91ce +size 80107 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/SortOrder.png b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/SortOrder.png new file mode 100644 index 00000000..5a11b689 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/SortOrder.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ccf852b0ee52ae208bd93b994d8106081acad9f56299b41a18ed6f2506002738 +size 23376 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/VerticalAlignment-Center.png b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/VerticalAlignment-Center.png new file mode 100644 index 00000000..b2b6656c --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/VerticalAlignment-Center.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37307a274d34e1e26f584f775324f4447d40a02fa0c66e4db42e2919a2ae830a +size 22410 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/VerticalFlex-Cross-Direction.png b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/VerticalFlex-Cross-Direction.png new file mode 100644 index 00000000..70c58f88 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/VerticalFlex-Cross-Direction.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4fb5f12e046a865d7be36eeb6540219bfbe4e4f0ffea6765fe1dfd42ce01099 +size 31174 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/VerticalFlex-Options.png b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/VerticalFlex-Options.png new file mode 100644 index 00000000..1c9b69b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/VerticalFlex-Options.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99de0c73d56072f8714e5037d6ac4c6e5a63ea7446d194b03966303b4138a47e +size 55021 diff --git a/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/Wraps.png b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/Wraps.png new file mode 100644 index 00000000..f9d939bf --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/classes/UIListLayout/Wraps.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4d611b4c6f69bec1f4e06595f4f536aef8dc5554bd52d7b088e5e3123d42eb3 +size 33345 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Accanthis-ADF-Std.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Accanthis-ADF-Std.png new file mode 100644 index 00000000..6194cbac --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Accanthis-ADF-Std.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:acf237bddd1277427d4cc229d9c59b88e1c5a14dc2ac015106b58afecc45f863 +size 32166 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Amatic-SC.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Amatic-SC.png new file mode 100644 index 00000000..90a41434 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Amatic-SC.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa035b465b104219c4c60eedbff50c0184c530697123eacdf7a4b4350d275253 +size 57588 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Arimo.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Arimo.png new file mode 100644 index 00000000..859ae98b --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Arimo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ebbe34a47535cbb9aac399f6f0605d60e7514153520516ec5b12ecf36151d659 +size 79821 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Balthazar.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Balthazar.png new file mode 100644 index 00000000..551aaf92 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Balthazar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb07cdb82c64cd519b4e1f4bf9665d182d9f3c3ca04199ef58241f923a8c93a5 +size 36904 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Bangers.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Bangers.png new file mode 100644 index 00000000..a283fbdb --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Bangers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e82c11aff3329e71ab69d2a669361bf75ab83e2a4dfabe1ca123b7241597a28 +size 43159 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Builder-Sans.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Builder-Sans.png new file mode 100644 index 00000000..00d73b38 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Builder-Sans.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff84a3fba4c66b5693e9cfacf00085b352d9605db73b360bcc1b419d61277acc +size 118002 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Comic-Neue-Angular.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Comic-Neue-Angular.png new file mode 100644 index 00000000..472922f8 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Comic-Neue-Angular.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05c29453bd8745d2a00fa51528756f26f3299a9b103fbbc08884664fd0bb1b1b +size 30122 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Creepster.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Creepster.png new file mode 100644 index 00000000..6226c145 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Creepster.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f456c6c10b070568f5a8ec4eeb9cf413c1fd15130bab6e068597a1d85a9b2b8f +size 42584 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Denk-One.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Denk-One.png new file mode 100644 index 00000000..3a95057a --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Denk-One.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b948c2d9b165fd8231182af06182c29f1134ca9f77497258d9740ee89a20b42 +size 33671 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Fondamento.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Fondamento.png new file mode 100644 index 00000000..bda43f28 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Fondamento.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ec928034cc0718c553b1e2cec2e59bc8feb96c88d427d454678efede157e9e7 +size 36233 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Fredoka-One.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Fredoka-One.png new file mode 100644 index 00000000..123c5ad0 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Fredoka-One.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2b72f9c6c01e956d06a43c2bcdd4674fa45771cae86ac826771bd62fc8580bc +size 33990 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Grenze-Gotisch.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Grenze-Gotisch.png new file mode 100644 index 00000000..509017b8 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Grenze-Gotisch.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78b01197aa6d13e504ef9fa68cbb549abfbb4f474358fcd8caf2f1033616b4f6 +size 186658 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Guru.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Guru.png new file mode 100644 index 00000000..1c6d84e4 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Guru.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5466f2119a7681a420c4f23570d48aaf5b92e2edfc561bcceca1638db5cffdbd +size 35920 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Highway-Gothic.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Highway-Gothic.png new file mode 100644 index 00000000..3f20d59a --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Highway-Gothic.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1505cbcfe40c54dc29ddec6266e51beab9b5d1f2c4e8841851283d605026f1f8 +size 28814 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Inconsolata.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Inconsolata.png new file mode 100644 index 00000000..dbb7e2fc --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Inconsolata.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:004a8d9f2028ae8ff11e747dd51196aed7e4fa14e4e2ca02402294278b6697dd +size 122226 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Indie-Flower.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Indie-Flower.png new file mode 100644 index 00000000..71571e75 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Indie-Flower.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d642de76880cd71423d7d383816d5b457d893b35d8baa3d58d720d4981c127c +size 37199 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Josefin-Sans.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Josefin-Sans.png new file mode 100644 index 00000000..02ca575f --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Josefin-Sans.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5896f44e556b8c2ed73455917de1fb97988ae9f093bd6919044584972c5288b5 +size 111090 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Jura.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Jura.png new file mode 100644 index 00000000..2b8d437e --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Jura.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38441ec9ca3d1064c280e2e4a05476018375fbd0a326b0aeba94608e96c306bc +size 80932 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Kalam.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Kalam.png new file mode 100644 index 00000000..41065dee --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Kalam.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:465f846264d84a0c2f1dd9e664a283af52d05e3cc3431f3b35c043228dc38394 +size 80186 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Luckiest-Guy.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Luckiest-Guy.png new file mode 100644 index 00000000..751e48b8 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Luckiest-Guy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e559949f061690d0e6cda902dc0fb0988fa2c047354bff2bcd607ae4f70bb46a +size 33397 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Merriweather.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Merriweather.png new file mode 100644 index 00000000..8290635b --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Merriweather.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a6dbd1080057f8d98f167081cd827b3ef5b4a8fc5885622bd81e80d27ecd063 +size 94643 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Michroma.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Michroma.png new file mode 100644 index 00000000..19171807 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Michroma.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7d590ca20b2ce71e2dc687a55df7a13697761d3c3431a875f13e5295aee6d6b +size 25987 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Montserrat.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Montserrat.png new file mode 100644 index 00000000..5d1966c2 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Montserrat.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:92a41ea05b811f41ad8fd468d583d7317d50e6478752ffec1b590903d7156fb7 +size 128880 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Nunito.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Nunito.png new file mode 100644 index 00000000..55057bd2 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Nunito.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:088d22d5f98467396b6643a64ad20d7f8e62d1626f0a913552b8db4ddb420468 +size 127754 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Oswald.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Oswald.png new file mode 100644 index 00000000..e115db0f --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Oswald.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0761ac81833fa75cf79eef315f783b25fb8762d5aea7fa4d7706e1d56bbb768 +size 102737 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Patrick-Hand.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Patrick-Hand.png new file mode 100644 index 00000000..94da5686 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Patrick-Hand.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:819ff13cc2020b616f605c8746c71af1c0e957d17b6fddbddf6b44cba0eebcb3 +size 36452 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Permanent-Marker.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Permanent-Marker.png new file mode 100644 index 00000000..1488db78 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Permanent-Marker.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69a21de97685ae9431ec6fb425ba2d2d34151f8690dfb96bbb92d8ebb4117e71 +size 35978 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Press-Start-2P.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Press-Start-2P.png new file mode 100644 index 00000000..1756cd7c --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Press-Start-2P.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac2cc19d1751597fbf5d045b516cf343347c7d96a8b1ce07017b21c73d68dbc0 +size 14099 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Roboto-Condensed.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Roboto-Condensed.png new file mode 100644 index 00000000..f1ff12d1 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Roboto-Condensed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a88de4e512c49ae73c2feef095f37b863210d4d3fa8653afc1e953d53b41a90 +size 56891 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Roboto-Mono.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Roboto-Mono.png new file mode 100644 index 00000000..7872f773 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Roboto-Mono.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f30c122cb630ddaacd715d49ddd799d674dc08564855784faa0950dbdadb9a8 +size 120528 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Roboto.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Roboto.png new file mode 100644 index 00000000..7b328e6c --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Roboto.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ba39e75c022714c3998d67b76227bdbc9605bf6cba207b290d077405eab810e +size 104898 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Roman-Antique.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Roman-Antique.png new file mode 100644 index 00000000..07bd590a --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Roman-Antique.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9459d98f38f90d9de813aaab70267f10c97c4652411cdb4d753a39ee1105f4a4 +size 39169 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Sarpanch.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Sarpanch.png new file mode 100644 index 00000000..8fd128a6 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Sarpanch.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab5cda0a5fd60a733ec088b3b61bb1165fb487284a1c842819865763e89500fd +size 72114 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Source-Sans-Pro.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Source-Sans-Pro.png new file mode 100644 index 00000000..41024a10 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Source-Sans-Pro.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f9d287360e7c5daf578feb5eb1f31a0018f33b5b20c277650d77b53c5cd723d +size 108195 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Special-Elite.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Special-Elite.png new file mode 100644 index 00000000..005cc714 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Special-Elite.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a6e45a50af210d8e97929ee30497bf5e24baacef53663b108a57369723fca9e +size 43879 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Titillium-Web.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Titillium-Web.png new file mode 100644 index 00000000..bc559848 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Titillium-Web.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee65dbf2150093eda00a0330cbd264829eca6692531d8671abb6b3a0c5b3ffa8 +size 105367 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Ubuntu.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Ubuntu.png new file mode 100644 index 00000000..f588bbf0 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Ubuntu.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ca849e63a626c32019ce1d187ba4de6453febdd396226dbfec6d2492b047393 +size 78779 diff --git a/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Zekton.png b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Zekton.png new file mode 100644 index 00000000..ef3fe169 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/datatypes/Font/Zekton.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80d9c9c74fc0746b609ffbe2487447618d4cc5cf7e6d1db5b88bfb935160d31f +size 25810 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/AlphaMode/Fern-Cutout.png b/.cursor/rules/roblox/assets/engine-api/enums/AlphaMode/Fern-Cutout.png new file mode 100644 index 00000000..c9622f6d --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/AlphaMode/Fern-Cutout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3ce87941d82258178b92a39c173b94a7c3de3f510dfbee8bac10a27d5290db0 +size 249943 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/AlphaMode/Fern-Overlay.png b/.cursor/rules/roblox/assets/engine-api/enums/AlphaMode/Fern-Overlay.png new file mode 100644 index 00000000..c9993f8f --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/AlphaMode/Fern-Overlay.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05e8fbfc9beb5f83c9c17133cfdbd21752cac3c8e91fa9f868e40591f0b4ae60 +size 275478 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/AudioChannelLayout/Mono.jpg b/.cursor/rules/roblox/assets/engine-api/enums/AudioChannelLayout/Mono.jpg new file mode 100644 index 00000000..f3f2235b --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/AudioChannelLayout/Mono.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82fda136126cf7eb9723d5f18db346178b9c9cdddb71c4faeaedc412c66b49a3 +size 196751 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/AudioChannelLayout/Quad.jpg b/.cursor/rules/roblox/assets/engine-api/enums/AudioChannelLayout/Quad.jpg new file mode 100644 index 00000000..baa1016b --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/AudioChannelLayout/Quad.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23a023234a880eee589506733c6bb3443c97d7b2eb5220eb6707e98999c22fea +size 222797 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/AudioChannelLayout/Stereo.jpg b/.cursor/rules/roblox/assets/engine-api/enums/AudioChannelLayout/Stereo.jpg new file mode 100644 index 00000000..d4425a1d --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/AudioChannelLayout/Stereo.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b13296c511654e74e4305d1b3deca1d6fad29b3f34c19f4d6ffefca39523411 +size 203627 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/AudioChannelLayout/Surround_5.jpg b/.cursor/rules/roblox/assets/engine-api/enums/AudioChannelLayout/Surround_5.jpg new file mode 100644 index 00000000..112dd58e --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/AudioChannelLayout/Surround_5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7df6717f66f5b521ea4bd8da1c56250aaaafd3501be39453d8ba97ef656558dd +size 227595 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/AudioChannelLayout/Surround_5_1.jpg b/.cursor/rules/roblox/assets/engine-api/enums/AudioChannelLayout/Surround_5_1.jpg new file mode 100644 index 00000000..7ed98100 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/AudioChannelLayout/Surround_5_1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc2cefe0bd786511e031a7ac66a96b3b7f02541971e913841fa4504d4f556b23 +size 230861 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/AudioChannelLayout/Surround_7_1.jpg b/.cursor/rules/roblox/assets/engine-api/enums/AudioChannelLayout/Surround_7_1.jpg new file mode 100644 index 00000000..97293c70 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/AudioChannelLayout/Surround_7_1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97e3987815b364fd768867ff81cf2b3314d6eeac1f2fd4556cd4a9504e1a5540 +size 251067 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/AudioChannelLayout/Surround_7_1_4.jpg b/.cursor/rules/roblox/assets/engine-api/enums/AudioChannelLayout/Surround_7_1_4.jpg new file mode 100644 index 00000000..0ba70b60 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/AudioChannelLayout/Surround_7_1_4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:728f0113eee24026a02e49901bfddc532ac90fdff1fe543af59779942b690532 +size 288760 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/EasingStyle/Easing-Styles-In.png b/.cursor/rules/roblox/assets/engine-api/enums/EasingStyle/Easing-Styles-In.png new file mode 100644 index 00000000..2939ba22 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/EasingStyle/Easing-Styles-In.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81118254962813c671617216b0693d312a1d4055f9733e91575e596a6da55432 +size 128510 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/EasingStyle/Easing-Styles-InOut.png b/.cursor/rules/roblox/assets/engine-api/enums/EasingStyle/Easing-Styles-InOut.png new file mode 100644 index 00000000..5760d9eb --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/EasingStyle/Easing-Styles-InOut.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b001782d33abec4c6864a468152df838ec1d278c210c35012e9e2ede3660d2f +size 127321 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/EasingStyle/Easing-Styles-Out.png b/.cursor/rules/roblox/assets/engine-api/enums/EasingStyle/Easing-Styles-Out.png new file mode 100644 index 00000000..b7a055ef --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/EasingStyle/Easing-Styles-Out.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f13cad7b9573a817666966fe877ef39c41b980adb4ab06f4d9cd9b4a401f0413 +size 126595 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/AmaticSC.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/AmaticSC.png new file mode 100644 index 00000000..74ea178a --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/AmaticSC.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5635c28a2314308178be5f5e8f846f2742e013fc6e02eb66051a5e223c38e062 +size 31753 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/Antique.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/Antique.png new file mode 100644 index 00000000..5e64e3a0 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/Antique.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:645521fd0b548658bb81ed697b0ddfe75f78e1a86b1dfaf86cce1669ceda474a +size 40303 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/Arcade.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/Arcade.png new file mode 100644 index 00000000..8514c9c7 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/Arcade.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c226edee055d94c4ea68c19b7c943e9a903e1c0fc279627d7b731d6cdeb6f5a +size 12094 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/Arimo.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/Arimo.png new file mode 100644 index 00000000..d1fd2c05 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/Arimo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1217aead581b14d826092ee285ed8d0aedadd78f2fc296f22cac85e7e33ee39 +size 31653 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/ArimoBold.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/ArimoBold.png new file mode 100644 index 00000000..febf134e --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/ArimoBold.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87fd1f7b50afe1f2a9155ad1fc6614f29c9958a1286af3fd7d513e0011f4faed +size 31570 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/Bangers.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/Bangers.png new file mode 100644 index 00000000..3fff1afb --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/Bangers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:121a995ec24e119c325ddba421e9d727ed83580fecab6175f49df884c4f585ac +size 41506 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/Bodoni.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/Bodoni.png new file mode 100644 index 00000000..c642b8cc --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/Bodoni.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a42112fe8df4d40972d6ee585ca81a81dda130b635130bb61c275909f86a1844 +size 30879 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/BuilderSans.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/BuilderSans.png new file mode 100644 index 00000000..2d1dec14 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/BuilderSans.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8560cae37a4c6760acff5b78ca38a57f61374f598950c0ae88df5398e136e4cd +size 31927 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/BuilderSansBold.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/BuilderSansBold.png new file mode 100644 index 00000000..26fd67c7 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/BuilderSansBold.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4da08afe2669833f9a599aa99f7dff823ff533aefef957174c052c14bc60d1fe +size 31281 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/BuilderSansExtraBold.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/BuilderSansExtraBold.png new file mode 100644 index 00000000..78fdf60b --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/BuilderSansExtraBold.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48c028a04914009a9cc624791082e9085454ee73b8ba658d111ae42344b26c22 +size 31577 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/BuilderSansMedium.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/BuilderSansMedium.png new file mode 100644 index 00000000..3888527e --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/BuilderSansMedium.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d57936a3ee1503d3b1e1996aca5e762df9c0650e0debd2b7348511b7dafaf6f +size 31910 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/Cartoon.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/Cartoon.png new file mode 100644 index 00000000..9cb56812 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/Cartoon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eeb6fd0a5f5f649d1c311f48c8664793a1f3a0e68c17a1c9a089d328de83910c +size 30762 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/Code.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/Code.png new file mode 100644 index 00000000..38fee7e8 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/Code.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78fa859e534d5accdf087c25eab0f245e6946cf2d9b2c2b97e74ae67994ea08d +size 29380 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/Creepster.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/Creepster.png new file mode 100644 index 00000000..b0c2aa4a --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/Creepster.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bed3cae4b4140c0ecb3391d0d8a8817b3ae1ac2773b73d038058d179475bc534 +size 41283 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/DenkOne.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/DenkOne.png new file mode 100644 index 00000000..3c16e940 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/DenkOne.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f782e6b62aae6a05d950c1fa05ef745c6261b82cda57409eb527a19370348d3 +size 33273 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/Fantasy.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/Fantasy.png new file mode 100644 index 00000000..0a90197c --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/Fantasy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47ad674314c90fa32520903c90bd1dffaa222005a570fe22661d2f4d2749d10f +size 36280 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/Fondamento.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/Fondamento.png new file mode 100644 index 00000000..e689f7b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/Fondamento.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc7e5fc174277fdacd0851f874ae1faf96f87f0c5d47531f1252158769740fdc +size 37945 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/FredokaOne.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/FredokaOne.png new file mode 100644 index 00000000..561b0ffa --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/FredokaOne.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfdc6b15d11732937462aae1b7646363fe5fb7ab09de836a782c0365119a37a6 +size 34786 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/Garamond.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/Garamond.png new file mode 100644 index 00000000..7e85f4b0 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/Garamond.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3596ed52cbeb4b289b0cde9e5105baaf5131c66722cb19bf3e53368e77e78541 +size 36917 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/GrenzeGotisch.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/GrenzeGotisch.png new file mode 100644 index 00000000..39391fd0 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/GrenzeGotisch.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9aded09802c9bc206f86153e81da471ca23e907d6f7fb30448c376d9c8597581 +size 38844 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/Highway.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/Highway.png new file mode 100644 index 00000000..1bd50d82 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/Highway.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af9219ffda3f17fcbd5b66b355ab45b750d6e74d5df7272e2faaf44b96233928 +size 29958 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/IndieFlower.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/IndieFlower.png new file mode 100644 index 00000000..7c0355fe --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/IndieFlower.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:670dc62923883b31250101d25a2cc324807687a14ad4f0742419afeed1858a6f +size 38276 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/JosefinSans.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/JosefinSans.png new file mode 100644 index 00000000..3719722d --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/JosefinSans.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae010bbb35656ad45bd6bc480031ccec924e51ab55d92eb8075cd378ecee4ba6 +size 29920 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/Jura.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/Jura.png new file mode 100644 index 00000000..2b6d8baf --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/Jura.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bc811c5d8119613af30c9062931467d921cb1fd380ba57655d4efade4a153a1 +size 29456 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/Kalam.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/Kalam.png new file mode 100644 index 00000000..7e4fab34 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/Kalam.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e80b475154289616979cfc061d51fde7477d7d6234de936b45c3ee31ba1bb07a +size 39318 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/Legacy.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/Legacy.png new file mode 100644 index 00000000..d3400d37 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/Legacy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70542f30127dc305648395830ac9678e76beace0cd41482fa58ce2d4e80f26c6 +size 30163 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/LuckiestGuy.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/LuckiestGuy.png new file mode 100644 index 00000000..2057e8d4 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/LuckiestGuy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d07d2cb01662659a5edb5a9c6fa39ffbdd55867358919cb977ff98673b970ceb +size 35346 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/Merriweather.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/Merriweather.png new file mode 100644 index 00000000..73a13abd --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/Merriweather.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44c4eb40ce5258ceadcc9f30fd73af64ded03b559cbd92791bea33b6075af781 +size 37967 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/Michroma.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/Michroma.png new file mode 100644 index 00000000..3633f45c --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/Michroma.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c7e74dd4c3405949266c99d89d2cc1b0181f40b2c000c0528350de2ba0412c1 +size 29309 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/Nunito.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/Nunito.png new file mode 100644 index 00000000..241d31e6 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/Nunito.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c82ddd4f34ea708e294cb52c4f472f37ff6fb281e7d9b792a1d19133b16568c7 +size 35292 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/Oswald.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/Oswald.png new file mode 100644 index 00000000..4afec077 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/Oswald.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cde8b54ac042a5572dd18b1df0e715dfb0b2df2aede5ca010e0356530f1eb4aa +size 32069 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/PatrickHand.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/PatrickHand.png new file mode 100644 index 00000000..ab1ed470 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/PatrickHand.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:915d18b8cf7f610440153d94418f8f5388658754d6a0c93f9836e455f4c4cc3a +size 37966 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/PermanentMarker.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/PermanentMarker.png new file mode 100644 index 00000000..02c6bf44 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/PermanentMarker.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:623e1a0390f8e79f313f507e40abb1756e50f9d60e06286dc8e188ffafa8a40b +size 40618 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/Roboto.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/Roboto.png new file mode 100644 index 00000000..c6b4715b --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/Roboto.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f487537d4264fd1a09dc333f30879aeae62d8cb3b4205d23256d0826f76e09b +size 34071 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/RobotoCondensed.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/RobotoCondensed.png new file mode 100644 index 00000000..e7ada026 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/RobotoCondensed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d48f66a587acaaab50a9080e9a6d1183d97ea36ca4bc736571a016de8e136938 +size 31801 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/RobotoMono.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/RobotoMono.png new file mode 100644 index 00000000..9b7331cf --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/RobotoMono.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ebac72ed2ea5a9409f9f3ac38ffa694d1b0dacc9d4e0dfec2e0a820175b5d29d +size 33746 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/Sarpanch.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/Sarpanch.png new file mode 100644 index 00000000..d75cb0e7 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/Sarpanch.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bb382e8d72e8dbf842ff48d33d315fc5468880690780081e6416136786c895e +size 22213 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/SciFi.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/SciFi.png new file mode 100644 index 00000000..98ff6492 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/SciFi.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08eb840a0f8b3e7615aed881b202909642176d3487cc1aaf7387a4403c146c7d +size 24716 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/SourceSans.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/SourceSans.png new file mode 100644 index 00000000..c67763d4 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/SourceSans.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:506692c38c5fc0b8835de5b2215399c9f1776f04365410f57e3f143d1972281a +size 31781 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/SourceSansBold.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/SourceSansBold.png new file mode 100644 index 00000000..d1543f54 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/SourceSansBold.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35319b4efdc524bec6a900730bd8ffd49bc3346d64c3aad802d4a8d36f6bec9c +size 31191 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/SourceSansItalic.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/SourceSansItalic.png new file mode 100644 index 00000000..7eef5030 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/SourceSansItalic.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3071ef73ab7465b7ae7e9ff2ac3277b771ea763d562d14e4ffa4376f4c20ff9f +size 34136 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/SourceSansLight.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/SourceSansLight.png new file mode 100644 index 00000000..8ba0584f --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/SourceSansLight.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43240bd32b7232fc86078fb5def62f340953fd84b2049f7fcd734480ed0e3206 +size 30608 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/SourceSansSemibold.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/SourceSansSemibold.png new file mode 100644 index 00000000..3b9026a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/SourceSansSemibold.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b64884b89e17a7860799b683ab1503e02452a1a0f2184e3e41267a97e2650136 +size 31832 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/SpecialElite.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/SpecialElite.png new file mode 100644 index 00000000..fcec4eb7 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/SpecialElite.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:827f5dc88a3d4143e6dc79008ba6d3c2e295424feedcdf3daca364589631aa21 +size 47886 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/TitilliumWeb.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/TitilliumWeb.png new file mode 100644 index 00000000..e34dd136 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/TitilliumWeb.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f087e9fcd1c00c6705de0eb2b3e8e9cfcefa5a498bc06ca691fdbbc648cdf176 +size 32551 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/Font/Ubuntu.png b/.cursor/rules/roblox/assets/engine-api/enums/Font/Ubuntu.png new file mode 100644 index 00000000..c854ec00 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/Font/Ubuntu.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3855e2b2cd52425cf0e1bde94add568ee1982f025305e7704ee1ef5d5733fe3f +size 34064 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/ScreenInsets/CoreUISafeInsets.png b/.cursor/rules/roblox/assets/engine-api/enums/ScreenInsets/CoreUISafeInsets.png new file mode 100644 index 00000000..dac9b175 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/ScreenInsets/CoreUISafeInsets.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b97340b1766ea6223da1543aae6335c7e3e699392ece3828e5c20f8634fb5855 +size 339954 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/ScreenInsets/DeviceSafeInsets.png b/.cursor/rules/roblox/assets/engine-api/enums/ScreenInsets/DeviceSafeInsets.png new file mode 100644 index 00000000..dc4c54f9 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/ScreenInsets/DeviceSafeInsets.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9430cc3f61c39dfdaf1d0dc63e0d49389436867fae890c3d2a990eb0057b116 +size 322046 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/ScreenInsets/Inset-Regions-All.png b/.cursor/rules/roblox/assets/engine-api/enums/ScreenInsets/Inset-Regions-All.png new file mode 100644 index 00000000..36dd632f --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/ScreenInsets/Inset-Regions-All.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1d2c34112196dc3334e3c834575bed76a5d59d9ad7faf3e5991bcbf0a756bf4 +size 357049 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/ScreenInsets/None.png b/.cursor/rules/roblox/assets/engine-api/enums/ScreenInsets/None.png new file mode 100644 index 00000000..c8f0384a --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/ScreenInsets/None.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:673644fe7a3d861aa5df2d01c595f57ef50597b9e0d68e2eaf74ee3372e664c5 +size 287485 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/ScreenInsets/Top-Bar-Cutout.png b/.cursor/rules/roblox/assets/engine-api/enums/ScreenInsets/Top-Bar-Cutout.png new file mode 100644 index 00000000..e2f21648 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/ScreenInsets/Top-Bar-Cutout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:177b8ea9654978f1c7ac6869a6b31c610cfe1aa3eeca9e9b804df6ee8c246da8 +size 275023 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/ScreenInsets/TopbarSafeInsets.png b/.cursor/rules/roblox/assets/engine-api/enums/ScreenInsets/TopbarSafeInsets.png new file mode 100644 index 00000000..cab730b2 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/ScreenInsets/TopbarSafeInsets.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a982f31c30c1037b8f98080e9953eab77d8fa8a2878938ae779490f1591dc6d5 +size 271400 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/TextureMode/Stretch.png b/.cursor/rules/roblox/assets/engine-api/enums/TextureMode/Stretch.png new file mode 100644 index 00000000..4ff7d037 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/TextureMode/Stretch.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51364a5b3f82f82a3c5b1b22821a9ab198a2f01c52e4e092681b4ddc112e0fa0 +size 169144 diff --git a/.cursor/rules/roblox/assets/engine-api/enums/TextureMode/Wrap-Static.png b/.cursor/rules/roblox/assets/engine-api/enums/TextureMode/Wrap-Static.png new file mode 100644 index 00000000..c387ef0e --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/enums/TextureMode/Wrap-Static.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a0679367c838947ed0452b6822e521d81a8d3539d76b6e53d94b3297b87bc57 +size 202158 diff --git a/.cursor/rules/roblox/assets/engine-api/libraries/bit32/32-Bit-Restriction.png b/.cursor/rules/roblox/assets/engine-api/libraries/bit32/32-Bit-Restriction.png new file mode 100644 index 00000000..977bf3b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/libraries/bit32/32-Bit-Restriction.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:041e65012dc857001718d92d80063f0d224a866d5f0b186b4de739fcc954c662 +size 28517 diff --git a/.cursor/rules/roblox/assets/engine-api/libraries/bit32/AND.png b/.cursor/rules/roblox/assets/engine-api/libraries/bit32/AND.png new file mode 100644 index 00000000..23927047 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/libraries/bit32/AND.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc2dda66e483fbe941238cd40bfb8eadce8b22518ad981c48b277f4776aeacd0 +size 23500 diff --git a/.cursor/rules/roblox/assets/engine-api/libraries/bit32/LSHIFT.png b/.cursor/rules/roblox/assets/engine-api/libraries/bit32/LSHIFT.png new file mode 100644 index 00000000..d3c962ca --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/libraries/bit32/LSHIFT.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9778258fa293d560496b6e3477eaf381232da539ae65bf27d002fc18c6f559f3 +size 18013 diff --git a/.cursor/rules/roblox/assets/engine-api/libraries/bit32/NOT.png b/.cursor/rules/roblox/assets/engine-api/libraries/bit32/NOT.png new file mode 100644 index 00000000..d399a02b --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/libraries/bit32/NOT.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45ea96decd8eabe9fd2f5a1b0fe54e19cff682aba88bfb4da41cfcb56d6c92e6 +size 13611 diff --git a/.cursor/rules/roblox/assets/engine-api/libraries/bit32/OR.png b/.cursor/rules/roblox/assets/engine-api/libraries/bit32/OR.png new file mode 100644 index 00000000..29749516 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/libraries/bit32/OR.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60130b2625a75b2e1fd0e21e2852a6f01f7624b143f4e5be9b4b6a3c5d27b757 +size 22785 diff --git a/.cursor/rules/roblox/assets/engine-api/libraries/bit32/RSHIFT.png b/.cursor/rules/roblox/assets/engine-api/libraries/bit32/RSHIFT.png new file mode 100644 index 00000000..7eb78443 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/libraries/bit32/RSHIFT.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:315c10d354197b4c33fc4b4872dbc15c01e1128c774c960f41815b088e66db27 +size 18707 diff --git a/.cursor/rules/roblox/assets/engine-api/libraries/bit32/XOR.png b/.cursor/rules/roblox/assets/engine-api/libraries/bit32/XOR.png new file mode 100644 index 00000000..9bb9727e --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-api/libraries/bit32/XOR.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f6dabfe9e4c69195ccfe3bf1615d012efb4cd6a3b093055dd7e4022aa86f592 +size 26717 diff --git a/.cursor/rules/roblox/assets/engine-comparisons/Studio-Properties.png b/.cursor/rules/roblox/assets/engine-comparisons/Studio-Properties.png new file mode 100644 index 00000000..c30be075 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-comparisons/Studio-Properties.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e99bdbf78948091cf42d870e814ec43ded56d7c15ee1d77b19d15263507f9e4 +size 87843 diff --git a/.cursor/rules/roblox/assets/engine-comparisons/Unity-Editor-Layout.png b/.cursor/rules/roblox/assets/engine-comparisons/Unity-Editor-Layout.png new file mode 100644 index 00000000..1acf0307 --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-comparisons/Unity-Editor-Layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:331b28802bde3f4934cace9ee27e14e9e953ffe73014160302f1b47719b9c856 +size 323830 diff --git a/.cursor/rules/roblox/assets/engine-comparisons/Unreal-Details-Panel.png b/.cursor/rules/roblox/assets/engine-comparisons/Unreal-Details-Panel.png new file mode 100644 index 00000000..c012590f --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-comparisons/Unreal-Details-Panel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f5a2c21c6c180bb0cfa92e1e6e0b858235aa26326dcb1426de754693d760278 +size 123461 diff --git a/.cursor/rules/roblox/assets/engine-comparisons/Unreal-Editor-Layout.png b/.cursor/rules/roblox/assets/engine-comparisons/Unreal-Editor-Layout.png new file mode 100644 index 00000000..80ddd04f --- /dev/null +++ b/.cursor/rules/roblox/assets/engine-comparisons/Unreal-Editor-Layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c15ec3263522030818c5291172b98a38dcdbe4a7482fb2d67af1abef47ad58b7 +size 458673 diff --git a/.cursor/rules/roblox/assets/feeds/advertising.webp b/.cursor/rules/roblox/assets/feeds/advertising.webp new file mode 100644 index 00000000..74871c88 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/advertising.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07ddb133ece34dac51a1fe32b75ba69fbef99ef7a6d63fddf96cf25aad117b03 +size 7648 diff --git a/.cursor/rules/roblox/assets/feeds/age-based-chat.webp b/.cursor/rules/roblox/assets/feeds/age-based-chat.webp new file mode 100644 index 00000000..030b45fd --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/age-based-chat.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8263a237050e69a138026ee0b98b1e7264770f071531d6c85de219d6a3e156fa +size 30692 diff --git a/.cursor/rules/roblox/assets/feeds/age_chat.webp b/.cursor/rules/roblox/assets/feeds/age_chat.webp new file mode 100644 index 00000000..3ad00a3b --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/age_chat.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c0ad978ad4eb85f5a9ec2d81de8c817f0f82e4abe52ff12c0b82535011fb2b0 +size 94002 diff --git a/.cursor/rules/roblox/assets/feeds/analytics_essentials.webp b/.cursor/rules/roblox/assets/feeds/analytics_essentials.webp new file mode 100644 index 00000000..c293d4f8 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/analytics_essentials.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9d245744a46761348a98a6c8188d86506c933d9bf82f47d5cc5dbefe0595768 +size 6824 diff --git a/.cursor/rules/roblox/assets/feeds/animations.webp b/.cursor/rules/roblox/assets/feeds/animations.webp new file mode 100644 index 00000000..fd34a956 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/animations.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:640baa71ffd8dcdacbbf257dd1c77ddb516568c3556550605ca7baf54a2bebba +size 5554 diff --git a/.cursor/rules/roblox/assets/feeds/asset_repo.webp b/.cursor/rules/roblox/assets/feeds/asset_repo.webp new file mode 100644 index 00000000..76c9f79f --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/asset_repo.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7410e7172c101b30847d77de8cd2602afd5b8e1926a2b8eeaff615f24ee87d93 +size 213146 diff --git a/.cursor/rules/roblox/assets/feeds/assets.webp b/.cursor/rules/roblox/assets/feeds/assets.webp new file mode 100644 index 00000000..5d382a0c --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/assets.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d936128090bfe109e627921ce2c08da04bd5ef15ae31fc41a3bfd8a0f54e9a6 +size 9564 diff --git a/.cursor/rules/roblox/assets/feeds/audio_speaker.webp b/.cursor/rules/roblox/assets/feeds/audio_speaker.webp new file mode 100644 index 00000000..95893274 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/audio_speaker.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:904f6559cd45b0bcaec9bc1bc7f7c0f658b9c4248776861e091bb1ef33bbd243 +size 594 diff --git a/.cursor/rules/roblox/assets/feeds/autosetup.webp b/.cursor/rules/roblox/assets/feeds/autosetup.webp new file mode 100644 index 00000000..dcfd6bb8 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/autosetup.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:937708512befb0cb361ae788d89f44ed4435039c622540933d8e0b449d0db88d +size 124108 diff --git a/.cursor/rules/roblox/assets/feeds/avatar.png b/.cursor/rules/roblox/assets/feeds/avatar.png new file mode 100644 index 00000000..bd72a54a --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/avatar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dcb0045e8907ea1c74e373c35a29297957e932afd7fa610372e766f1aa968d13 +size 54389 diff --git a/.cursor/rules/roblox/assets/feeds/avatar_items.webp b/.cursor/rules/roblox/assets/feeds/avatar_items.webp new file mode 100644 index 00000000..cc1c35cf --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/avatar_items.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5f643a5285f3f4cdbd7bcd284ff40cda2b5c455e11bd600cc62d267368545c0 +size 44144 diff --git a/.cursor/rules/roblox/assets/feeds/avatars.webp b/.cursor/rules/roblox/assets/feeds/avatars.webp new file mode 100644 index 00000000..576fd86e --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/avatars.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32c4793f7eb465ca567e6c764214e86b791f3308bc030b21b11a5f709068f118 +size 12234 diff --git a/.cursor/rules/roblox/assets/feeds/bans_dash.webp b/.cursor/rules/roblox/assets/feeds/bans_dash.webp new file mode 100644 index 00000000..ca615bf8 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/bans_dash.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:121fb375b564fc9f2b774db068b0c2d04220791adb73c069dfca9fdd26b64b58 +size 48212 diff --git a/.cursor/rules/roblox/assets/feeds/blender_stream.webp b/.cursor/rules/roblox/assets/feeds/blender_stream.webp new file mode 100644 index 00000000..606963a4 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/blender_stream.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5c183f1d9152ecbf67d5fd454411abc460c42b368150722411bd15794afaaf9 +size 194384 diff --git a/.cursor/rules/roblox/assets/feeds/boots.webp b/.cursor/rules/roblox/assets/feeds/boots.webp new file mode 100644 index 00000000..1d7e1cd0 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/boots.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fde744b3d571819142d8c93d9e648d0353940e629e1dbf5b935e37f91eccb96 +size 162070 diff --git a/.cursor/rules/roblox/assets/feeds/browse_store_dark.webp b/.cursor/rules/roblox/assets/feeds/browse_store_dark.webp new file mode 100644 index 00000000..f03c80b8 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/browse_store_dark.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:447461169c6a15289e24b7d011d7850787cee39ccbb8c60fbf6384edfb9fb05d +size 44076 diff --git a/.cursor/rules/roblox/assets/feeds/browse_store_light.webp b/.cursor/rules/roblox/assets/feeds/browse_store_light.webp new file mode 100644 index 00000000..eb8119e5 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/browse_store_light.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:565a5a76ca8924cc7f85c11b3ef8254009962d64adf74f9009aff7665331838c +size 42414 diff --git a/.cursor/rules/roblox/assets/feeds/caging.webp b/.cursor/rules/roblox/assets/feeds/caging.webp new file mode 100644 index 00000000..4bd6d7ba --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/caging.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed2e889fbf9f4a00ce322de0545d6cd3bf21d658a2deed1e179bd81532c4f259 +size 551802 diff --git a/.cursor/rules/roblox/assets/feeds/camera_manip.webp b/.cursor/rules/roblox/assets/feeds/camera_manip.webp new file mode 100644 index 00000000..aa70627a --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/camera_manip.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b86453f94eb32a5f81ab0a6db57d71451d78f61ac61f7b2b2d9e8444b1bc8be +size 163230 diff --git a/.cursor/rules/roblox/assets/feeds/character_specs.webp b/.cursor/rules/roblox/assets/feeds/character_specs.webp new file mode 100644 index 00000000..cc5707fd --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/character_specs.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b257bdc3cc4305ead34d5569258254b183e183c9c7191fed544d0a41bbf710c +size 11228 diff --git a/.cursor/rules/roblox/assets/feeds/characters.webp b/.cursor/rules/roblox/assets/feeds/characters.webp new file mode 100644 index 00000000..9e5e62d3 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/characters.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd2e4fb02110b55aa44a18623aeb88b125cfe29e2e99b6df46fe99bbc01d923c +size 11152 diff --git a/.cursor/rules/roblox/assets/feeds/client_mem.webp b/.cursor/rules/roblox/assets/feeds/client_mem.webp new file mode 100644 index 00000000..dcfbee74 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/client_mem.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7c02ceb0cc862308ef9e495c719a5f8d2f57f107dad6b2c077339f6f1fada87 +size 113692 diff --git a/.cursor/rules/roblox/assets/feeds/clothing.webp b/.cursor/rules/roblox/assets/feeds/clothing.webp new file mode 100644 index 00000000..b12cf8d0 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/clothing.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f81aaf0576747dd3d9f305fc2ec7b023a1ffd977d8ad202414c2102fd71720cb +size 253694 diff --git a/.cursor/rules/roblox/assets/feeds/code_org.webp b/.cursor/rules/roblox/assets/feeds/code_org.webp new file mode 100644 index 00000000..c954688e --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/code_org.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:173ac64a9ed1011edaaa18567b618e60bb5c8ac7394db218c75196001d2d88a5 +size 112398 diff --git a/.cursor/rules/roblox/assets/feeds/collaboration.webp b/.cursor/rules/roblox/assets/feeds/collaboration.webp new file mode 100644 index 00000000..b419f4eb --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/collaboration.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c77f7fe978ff0da8bb56ec5eb3b6090c245404edf04dc6a14752743c3e478df9 +size 10154 diff --git a/.cursor/rules/roblox/assets/feeds/content_updates.webp b/.cursor/rules/roblox/assets/feeds/content_updates.webp new file mode 100644 index 00000000..b6ace059 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/content_updates.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29c41a0ea914743242761c72001cf8945802b45866fa19ea50ef9b1fc721b069 +size 14250 diff --git a/.cursor/rules/roblox/assets/feeds/core_loops.webp b/.cursor/rules/roblox/assets/feeds/core_loops.webp new file mode 100644 index 00000000..7e68d65b --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/core_loops.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53416f998f9cc86022f6ecc2d5b40e2b3070d4da51d281cd2fb5c320c31829e3 +size 7502 diff --git a/.cursor/rules/roblox/assets/feeds/create_sliding_door.webp b/.cursor/rules/roblox/assets/feeds/create_sliding_door.webp new file mode 100644 index 00000000..04a3b46e --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/create_sliding_door.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6196baffd2932b2e1d209d47376b3de1c8ed15c5b1e60c65c05051b0ede418a +size 70394 diff --git a/.cursor/rules/roblox/assets/feeds/creator_hub.png b/.cursor/rules/roblox/assets/feeds/creator_hub.png new file mode 100644 index 00000000..3c7715df --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/creator_hub.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f6c02defa1918b7839c29bd4e1d9ba9de32f9e1f75b7e900eda616f6782df94 +size 28029 diff --git a/.cursor/rules/roblox/assets/feeds/data_model.webp b/.cursor/rules/roblox/assets/feeds/data_model.webp new file mode 100644 index 00000000..1faaf686 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/data_model.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:511c8b2ef280155d33f2500f073ce3323ee7b9a8596330fd4648fbc14a96f7ba +size 3652 diff --git a/.cursor/rules/roblox/assets/feeds/datamodel.png b/.cursor/rules/roblox/assets/feeds/datamodel.png new file mode 100644 index 00000000..861c1293 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/datamodel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:494927820ca815aacd4d0fc728bdefab402a501bc949d95f68e61793b1bd0c77 +size 42543 diff --git a/.cursor/rules/roblox/assets/feeds/datastores_mmo.webp b/.cursor/rules/roblox/assets/feeds/datastores_mmo.webp new file mode 100644 index 00000000..fe3c80ff --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/datastores_mmo.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3531eedafb79a6fbe1b8cc789064cf3c6fa94535b811ba2e576e40bef4870192 +size 103886 diff --git a/.cursor/rules/roblox/assets/feeds/debugger.webp b/.cursor/rules/roblox/assets/feeds/debugger.webp new file mode 100644 index 00000000..6d175a79 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/debugger.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c427296a0001ca0bd44a6efc2f8e769b42ee4477adb39e52d483f314dd85aca3 +size 101156 diff --git a/.cursor/rules/roblox/assets/feeds/debugging.webp b/.cursor/rules/roblox/assets/feeds/debugging.webp new file mode 100644 index 00000000..1be90bca --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/debugging.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f0e547327560c6333d25d3b8604f1aa605e3b6142bd604224eb7574995f166c +size 27396 diff --git a/.cursor/rules/roblox/assets/feeds/developer_console.webp b/.cursor/rules/roblox/assets/feeds/developer_console.webp new file mode 100644 index 00000000..84c43256 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/developer_console.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8a72cbe28963c6bdf333452b8be17f5bbffae18c8981e240e1b4f4fe1a7cc5a +size 13500 diff --git a/.cursor/rules/roblox/assets/feeds/dynamic_cloth.webp b/.cursor/rules/roblox/assets/feeds/dynamic_cloth.webp new file mode 100644 index 00000000..1fda9422 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/dynamic_cloth.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd6fbddcbb8f8d9e11bae20b9deac55fa25bbf2c3c37b6311eaa3b489a9bc4cf +size 57218 diff --git a/.cursor/rules/roblox/assets/feeds/engine.png b/.cursor/rules/roblox/assets/feeds/engine.png new file mode 100644 index 00000000..5ab48ae2 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/engine.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8bcb451b681b5b88f8d3cf939067b02cd6dad30868af1dd6d59ce53890229f4 +size 48237 diff --git a/.cursor/rules/roblox/assets/feeds/enyu.webp b/.cursor/rules/roblox/assets/feeds/enyu.webp new file mode 100644 index 00000000..c96ab9f4 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/enyu.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa06224a56ebd4a5e87455f5c3ec26956c4d3aa53ce6727f371b2e9bbbba0379 +size 61538 diff --git a/.cursor/rules/roblox/assets/feeds/event_sequencer.webp b/.cursor/rules/roblox/assets/feeds/event_sequencer.webp new file mode 100644 index 00000000..9ca815bf --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/event_sequencer.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12c81447f13ce4a924c44d7692fd53f32b3a5a6799fac13f221f8880ffd4c94e +size 8880 diff --git a/.cursor/rules/roblox/assets/feeds/events.webp b/.cursor/rules/roblox/assets/feeds/events.webp new file mode 100644 index 00000000..7d12df30 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/events.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a4b1ad5f8839929d8c7954b455d90b82d0b45ad4431541de2cede1a4a3ee624 +size 10792 diff --git a/.cursor/rules/roblox/assets/feeds/forum_widget_thumbnail.png b/.cursor/rules/roblox/assets/feeds/forum_widget_thumbnail.png new file mode 100644 index 00000000..39689ab2 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/forum_widget_thumbnail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f961f438df706193fc97ff6060b3e3c167ecd91510eaef88ef1089634349929 +size 2863 diff --git a/.cursor/rules/roblox/assets/feeds/forum_widget_thumbnail@2x.png b/.cursor/rules/roblox/assets/feeds/forum_widget_thumbnail@2x.png new file mode 100644 index 00000000..cc41113e --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/forum_widget_thumbnail@2x.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8192f0bbe5fee8f467b723fffe5fd01b0c96bde08f4b1e51964e5b01e34348c +size 5756 diff --git a/.cursor/rules/roblox/assets/feeds/fps_design.webp b/.cursor/rules/roblox/assets/feeds/fps_design.webp new file mode 100644 index 00000000..df748322 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/fps_design.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51acbc244ffa364f84781e4d2d18280dc3b6c3d6a2f83ff5dcc50dbf188b906a +size 187046 diff --git a/.cursor/rules/roblox/assets/feeds/friend_invite.webp b/.cursor/rules/roblox/assets/feeds/friend_invite.webp new file mode 100644 index 00000000..eccca9e6 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/friend_invite.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1d620d4ee29b250f3cfbf968a98a5f5c5c02f4f70bbbc6d5b77043aa25de3e7 +size 261508 diff --git a/.cursor/rules/roblox/assets/feeds/game_design.webp b/.cursor/rules/roblox/assets/feeds/game_design.webp new file mode 100644 index 00000000..6d4597d3 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/game_design.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8285975852533f19070e97fd800aaec700a6fa23d882ac508cac4007ebaca91e +size 23262 diff --git a/.cursor/rules/roblox/assets/feeds/generate_textures_with_ai.webp b/.cursor/rules/roblox/assets/feeds/generate_textures_with_ai.webp new file mode 100644 index 00000000..06a77440 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/generate_textures_with_ai.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0057824ebfeb8abbc9b3cb152feb184211ba9a7bd2644c35f4274070fee4797 +size 106158 diff --git a/.cursor/rules/roblox/assets/feeds/getting_started_ugc.webp b/.cursor/rules/roblox/assets/feeds/getting_started_ugc.webp new file mode 100644 index 00000000..46b6c5bd --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/getting_started_ugc.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7648c93b3a5c969d7496f28e68c4251e06af1f3989aed76bad301b922488f708 +size 87922 diff --git a/.cursor/rules/roblox/assets/feeds/graybox.webp b/.cursor/rules/roblox/assets/feeds/graybox.webp new file mode 100644 index 00000000..137d7416 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/graybox.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd6932bfddca25bb133e835acceaec6accca3d6d31714ab0397f5e57686e3dff +size 75000 diff --git a/.cursor/rules/roblox/assets/feeds/halloween_game_jam.webp b/.cursor/rules/roblox/assets/feeds/halloween_game_jam.webp new file mode 100644 index 00000000..bdd40a44 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/halloween_game_jam.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2eb259ec8c81a161a16e6fab5ae9b7de96003a05f1b23469fbf73151a8cf4b8 +size 214900 diff --git a/.cursor/rules/roblox/assets/feeds/heads.webp b/.cursor/rules/roblox/assets/feeds/heads.webp new file mode 100644 index 00000000..85646f6a --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/heads.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f11b27debaca89a957260bc980e04b11dd124870a20b0ee77db30de8385f89d +size 8190 diff --git a/.cursor/rules/roblox/assets/feeds/input.webp b/.cursor/rules/roblox/assets/feeds/input.webp new file mode 100644 index 00000000..a4403377 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/input.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e51a4deb581dee5dca8b869ec83a942d4e71567a74003af3b0896cb173cb6bc +size 4502 diff --git a/.cursor/rules/roblox/assets/feeds/laser_beam.png b/.cursor/rules/roblox/assets/feeds/laser_beam.png new file mode 100644 index 00000000..c295ee16 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/laser_beam.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1235036833e5241ff5c545d1332f9f627327bd20a56db0255008d328088450c +size 22191 diff --git a/.cursor/rules/roblox/assets/feeds/laser_beam_tutorial.png b/.cursor/rules/roblox/assets/feeds/laser_beam_tutorial.png new file mode 100644 index 00000000..a71038af --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/laser_beam_tutorial.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86b1423d31090c42b8fd5bff5fea948ee8ef3bd9dbf3c3e52b0d5515b7da9685 +size 75772 diff --git a/.cursor/rules/roblox/assets/feeds/layered_clothing.webp b/.cursor/rules/roblox/assets/feeds/layered_clothing.webp new file mode 100644 index 00000000..af02516e --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/layered_clothing.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25e6df86d961b328a81bb8ed4ecb06e6f5a53d613916a598cbe9ba5ed0d99494 +size 8668 diff --git a/.cursor/rules/roblox/assets/feeds/lighting_effects.webp b/.cursor/rules/roblox/assets/feeds/lighting_effects.webp new file mode 100644 index 00000000..ebf438a8 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/lighting_effects.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dbedc4fcb5e7789d5a525d4eb6e2238b8cc1777badd2af4e1cfc407031798e9d +size 7258 diff --git a/.cursor/rules/roblox/assets/feeds/lighting_terrain.webp b/.cursor/rules/roblox/assets/feeds/lighting_terrain.webp new file mode 100644 index 00000000..43facb64 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/lighting_terrain.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b59b067ac292b17a6759f4cd51d4f2dfa5f001e4b9449e7cbdad44392d985ab +size 252026 diff --git a/.cursor/rules/roblox/assets/feeds/localization.webp b/.cursor/rules/roblox/assets/feeds/localization.webp new file mode 100644 index 00000000..a266f8ee --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/localization.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa326ce8e1f9e3a4d56ec5e2258c6ed21f6d47d775e442e7aa1e39e6ccfdf2ad +size 8930 diff --git a/.cursor/rules/roblox/assets/feeds/lod.webp b/.cursor/rules/roblox/assets/feeds/lod.webp new file mode 100644 index 00000000..7ff741f3 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/lod.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce76defce4f77aaa7dab47c9ad5353ad9d684c2a827416ea0f4ee29072a954cb +size 103894 diff --git a/.cursor/rules/roblox/assets/feeds/luau_oop.webp b/.cursor/rules/roblox/assets/feeds/luau_oop.webp new file mode 100644 index 00000000..033715b3 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/luau_oop.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3bb96e863383f838d1652c15b702fe406fef5ccfe7ea58e05adec3b14f0444bf +size 42724 diff --git a/.cursor/rules/roblox/assets/feeds/luau_time.webp b/.cursor/rules/roblox/assets/feeds/luau_time.webp new file mode 100644 index 00000000..6200c06f --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/luau_time.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9af622ebe46ccc82e1b0ab8495fd1b786fb9e2144d045da0f2c0e4aa1a14446 +size 101310 diff --git a/.cursor/rules/roblox/assets/feeds/make_hair.webp b/.cursor/rules/roblox/assets/feeds/make_hair.webp new file mode 100644 index 00000000..6b75901e --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/make_hair.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57de22f4cd15869d642b4d971db1bfa238f01d369866e07407adf04d8df2027c +size 149892 diff --git a/.cursor/rules/roblox/assets/feeds/making-a-bag.webp b/.cursor/rules/roblox/assets/feeds/making-a-bag.webp new file mode 100644 index 00000000..89df473c --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/making-a-bag.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08dd664d7202755007208473a431b25622416095d4c36d3d793e607514e76aa8 +size 48400 diff --git a/.cursor/rules/roblox/assets/feeds/matchmaking.webp b/.cursor/rules/roblox/assets/feeds/matchmaking.webp new file mode 100644 index 00000000..05085a67 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/matchmaking.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25f05b9653e378b4b0733d75f0f060625df7442e69efca480e8b2c555d5e26b7 +size 9622 diff --git a/.cursor/rules/roblox/assets/feeds/memory_leaks.webp b/.cursor/rules/roblox/assets/feeds/memory_leaks.webp new file mode 100644 index 00000000..eebce465 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/memory_leaks.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84a9fb39e17fb90eb7ecdb222ab0d44300e9a7264b9f42b7c44188c4c2c7d9f4 +size 52268 diff --git a/.cursor/rules/roblox/assets/feeds/microprofiler.webp b/.cursor/rules/roblox/assets/feeds/microprofiler.webp new file mode 100644 index 00000000..4bdea833 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/microprofiler.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d58376f268c9de251d03cc88f3d680af3d6da82994b094f46dd47abea41dbe79 +size 12092 diff --git a/.cursor/rules/roblox/assets/feeds/microprofiler_advanced.webp b/.cursor/rules/roblox/assets/feeds/microprofiler_advanced.webp new file mode 100644 index 00000000..ad110dd8 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/microprofiler_advanced.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af6c9f14b0bdf9fd77791f92f7a0df7c2eb32abe87eb34d2a89a3f3a0f4b4e33 +size 60742 diff --git a/.cursor/rules/roblox/assets/feeds/microprofiler_how_to.webp b/.cursor/rules/roblox/assets/feeds/microprofiler_how_to.webp new file mode 100644 index 00000000..933de12b --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/microprofiler_how_to.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1e2512d9eeee0b2aa8ad7935ea6b315a6de70db7342e2e569a477aea692fbde +size 201522 diff --git a/.cursor/rules/roblox/assets/feeds/microprofiler_memory_profiling.webp b/.cursor/rules/roblox/assets/feeds/microprofiler_memory_profiling.webp new file mode 100644 index 00000000..e7679f59 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/microprofiler_memory_profiling.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ccb8ea536906fc95e04d7032bfceecef0f64a59b7ffb17d26753fe5749b30a3c +size 109446 diff --git a/.cursor/rules/roblox/assets/feeds/modulescripts_sleit.webp b/.cursor/rules/roblox/assets/feeds/modulescripts_sleit.webp new file mode 100644 index 00000000..3e2f3015 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/modulescripts_sleit.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3198378dded2670a10ee13302912aaafb96ad1a4e9faf2b3ed1a520b2fe4b352 +size 140708 diff --git a/.cursor/rules/roblox/assets/feeds/npc_kit.webp b/.cursor/rules/roblox/assets/feeds/npc_kit.webp new file mode 100644 index 00000000..7b56c427 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/npc_kit.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:066fea53a8404bbee9077609caa4bb4aeddff39b0ebb2257460ce2e7c4f0f735 +size 8592 diff --git a/.cursor/rules/roblox/assets/feeds/obby_chat.webp b/.cursor/rules/roblox/assets/feeds/obby_chat.webp new file mode 100644 index 00000000..f1968bf5 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/obby_chat.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3821dd27bef00c454583225baacfa3fdc6e6dc25b908f320678d8f0cab74efe +size 276370 diff --git a/.cursor/rules/roblox/assets/feeds/performance_basics.webp b/.cursor/rules/roblox/assets/feeds/performance_basics.webp new file mode 100644 index 00000000..448a90ac --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/performance_basics.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3af04dfa502c8472cf8a3effa229c43570bdb4dc284a5a73cd72f9fe709c04db +size 94600 diff --git a/.cursor/rules/roblox/assets/feeds/physics_101.webp b/.cursor/rules/roblox/assets/feeds/physics_101.webp new file mode 100644 index 00000000..aa720f64 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/physics_101.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6acb28e7482eef7152523f6f137a86e907f78b613096a4ffca50cc0f3de46422 +size 40466 diff --git a/.cursor/rules/roblox/assets/feeds/players.webp b/.cursor/rules/roblox/assets/feeds/players.webp new file mode 100644 index 00000000..91e4c2ac --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/players.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a355e50c11f7aa15ecf5df02efe986fe686e74ddfc8b4a21ee0d29e1620f291 +size 12780 diff --git a/.cursor/rules/roblox/assets/feeds/plugins.webp b/.cursor/rules/roblox/assets/feeds/plugins.webp new file mode 100644 index 00000000..11af6635 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/plugins.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc576c244c02a5b5e4ddb55b53dc20a70d2e6ab6864c13cafa323b205fff32c8 +size 11666 diff --git a/.cursor/rules/roblox/assets/feeds/polarcub_store.webp b/.cursor/rules/roblox/assets/feeds/polarcub_store.webp new file mode 100644 index 00000000..1349e4ae --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/polarcub_store.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b08c5ac2e4c139db4fb9eb0211f86422532dc39bb936c91c40950c3c4668093a +size 334952 diff --git a/.cursor/rules/roblox/assets/feeds/polish_environment.webp b/.cursor/rules/roblox/assets/feeds/polish_environment.webp new file mode 100644 index 00000000..e190a4cb --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/polish_environment.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4736ce46ac3cd5100bc0886e52033577f835a2e1e645aee09f8d60762605b617 +size 85484 diff --git a/.cursor/rules/roblox/assets/feeds/promotion.webp b/.cursor/rules/roblox/assets/feeds/promotion.webp new file mode 100644 index 00000000..214f07fb --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/promotion.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb22a2d9a9f487ae1a74e818ac90f4a88723408749c7f2e47a50ce9934aab84f +size 9742 diff --git a/.cursor/rules/roblox/assets/feeds/real_world_optimization.webp b/.cursor/rules/roblox/assets/feeds/real_world_optimization.webp new file mode 100644 index 00000000..a770cf10 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/real_world_optimization.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c48c038e5d2a380b0679a4620fc0010a8ecb0ecf5d56f36be0f0e359e48d71f +size 540288 diff --git a/.cursor/rules/roblox/assets/feeds/rewarded_ads.webp b/.cursor/rules/roblox/assets/feeds/rewarded_ads.webp new file mode 100644 index 00000000..86b3d7f6 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/rewarded_ads.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a7b0282bc6faf860c88988ee12e83ec80a37af297bfebfc7163b2ece8c6e905 +size 27082 diff --git a/.cursor/rules/roblox/assets/feeds/rigging.webp b/.cursor/rules/roblox/assets/feeds/rigging.webp new file mode 100644 index 00000000..3e915f3e --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/rigging.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02fd489019980c92245b8afd127a337f6f8e59e481f545e38ecac6b0b9238cdc +size 3200 diff --git a/.cursor/rules/roblox/assets/feeds/rigid_accessory.webp b/.cursor/rules/roblox/assets/feeds/rigid_accessory.webp new file mode 100644 index 00000000..3a59dd79 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/rigid_accessory.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f46bc31427c61634111b7b754bee014cda1d8b56aa860979922f01a6d64e9587 +size 59830 diff --git a/.cursor/rules/roblox/assets/feeds/robloxYoutubeAvatar.webp b/.cursor/rules/roblox/assets/feeds/robloxYoutubeAvatar.webp new file mode 100644 index 00000000..ee4b6cf6 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/robloxYoutubeAvatar.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd2d7bc8c8e9bc7ce4b059afe7ac045601c28e04124ffcac27528769dd3b89a1 +size 8666 diff --git a/.cursor/rules/roblox/assets/feeds/roblox_studio.webp b/.cursor/rules/roblox/assets/feeds/roblox_studio.webp new file mode 100644 index 00000000..8e4b6a90 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/roblox_studio.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1bf5649ab5fcb75992671eefe25fb2f23760ebe413a9f34b97f204d3dda28d64 +size 7172 diff --git a/.cursor/rules/roblox/assets/feeds/rp_interview.webp b/.cursor/rules/roblox/assets/feeds/rp_interview.webp new file mode 100644 index 00000000..49c73d38 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/rp_interview.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:948fed227a8e8c1bbf7aeb5f7b3c6ba0470b55eacad37fec23ad5e5c9402dc44 +size 215896 diff --git a/.cursor/rules/roblox/assets/feeds/rp_modeling.webp b/.cursor/rules/roblox/assets/feeds/rp_modeling.webp new file mode 100644 index 00000000..80bfcde1 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/rp_modeling.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3fbf9501538b2241b838a2dadcc2584f3cf09c8413cf1a3adaafcc9b0c09ec8b +size 215184 diff --git a/.cursor/rules/roblox/assets/feeds/rp_texturing.webp b/.cursor/rules/roblox/assets/feeds/rp_texturing.webp new file mode 100644 index 00000000..8326d8b9 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/rp_texturing.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65534f5c25135811609b522c53d4c99e9cac462c90c00a3e1f63376eeeeae3b3 +size 195438 diff --git a/.cursor/rules/roblox/assets/feeds/rush_ugc.webp b/.cursor/rules/roblox/assets/feeds/rush_ugc.webp new file mode 100644 index 00000000..4959977b --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/rush_ugc.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f94bf3bff54b8c7e79e358e5669c2d4b7bae2807d43f639cc3e8a0d1dc858e83 +size 405728 diff --git a/.cursor/rules/roblox/assets/feeds/script_editor.webp b/.cursor/rules/roblox/assets/feeds/script_editor.webp new file mode 100644 index 00000000..5dc9f261 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/script_editor.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1aa4a28a39896fa4aa5a2b7c86ad2d176a8da384c65c15456699b3c306d8a920 +size 13486 diff --git a/.cursor/rules/roblox/assets/feeds/script_locations.webp b/.cursor/rules/roblox/assets/feeds/script_locations.webp new file mode 100644 index 00000000..717a1023 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/script_locations.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33bbfba5f0cd38444a4981b51d12fc9bf4c720fb6767b529584f2c0f2b6e1fd0 +size 43046 diff --git a/.cursor/rules/roblox/assets/feeds/scripting.webp b/.cursor/rules/roblox/assets/feeds/scripting.webp new file mode 100644 index 00000000..ef45f91e --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/scripting.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d59e190ed5e17e6c88189fa0f542fd1f9a1606085da7974e0d0d92e6b06a4018 +size 3304 diff --git a/.cursor/rules/roblox/assets/feeds/shoes.webp b/.cursor/rules/roblox/assets/feeds/shoes.webp new file mode 100644 index 00000000..58f4a296 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/shoes.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c8612267479f0395bed859aa71af53a2b9b07296e4b50ab7fd991586cffddff +size 140840 diff --git a/.cursor/rules/roblox/assets/feeds/single_multi_script.webp b/.cursor/rules/roblox/assets/feeds/single_multi_script.webp new file mode 100644 index 00000000..0f46d806 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/single_multi_script.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f91d61977068c3ec7086be21495cbfbac1ac9331546d38b098ade687a2c7126 +size 124862 diff --git a/.cursor/rules/roblox/assets/feeds/sketch.png b/.cursor/rules/roblox/assets/feeds/sketch.png new file mode 100644 index 00000000..caade157 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/sketch.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f3766cef3c884e7c30124a0eea1b9f41f07167bc354e416d666e4b240a3df102 +size 76331 diff --git a/.cursor/rules/roblox/assets/feeds/smooth_damp.webp b/.cursor/rules/roblox/assets/feeds/smooth_damp.webp new file mode 100644 index 00000000..9137a3f2 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/smooth_damp.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25bff09fb0ef86a043ec65c344ce0980e2895a7328431e0d8abab97bd3deea05 +size 93120 diff --git a/.cursor/rules/roblox/assets/feeds/social_design.webp b/.cursor/rules/roblox/assets/feeds/social_design.webp new file mode 100644 index 00000000..d35a93ee --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/social_design.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e17d765f535ca94a64596d884edbc9b31ff1fd047710a964132818e036ab1942 +size 7950 diff --git a/.cursor/rules/roblox/assets/feeds/stephen_remotes.webp b/.cursor/rules/roblox/assets/feeds/stephen_remotes.webp new file mode 100644 index 00000000..f8e6289f --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/stephen_remotes.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68bbb6a50658747cd71cf1c3d1d5a0cf220923670c4ecc448d61ef783cca7f52 +size 103068 diff --git a/.cursor/rules/roblox/assets/feeds/studio_comments.webp b/.cursor/rules/roblox/assets/feeds/studio_comments.webp new file mode 100644 index 00000000..d40ae8fe --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/studio_comments.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fbccc00d17d36291a09c0c42fd6dd51bdaae991b8aec7db845e85f148125754 +size 88610 diff --git a/.cursor/rules/roblox/assets/feeds/studio_icon.webp b/.cursor/rules/roblox/assets/feeds/studio_icon.webp new file mode 100644 index 00000000..50c36eaa --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/studio_icon.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68d616978f46b5671a3d067e7a522751bc5ee2d78bdcca8173a8739ff39ddc69 +size 16452 diff --git a/.cursor/rules/roblox/assets/feeds/studio_shortcuts.webp b/.cursor/rules/roblox/assets/feeds/studio_shortcuts.webp new file mode 100644 index 00000000..4e1eb6cb --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/studio_shortcuts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e16e48ca50845e785192b9166def1732f3115a1cd299a3b87c4a7891ed08050a +size 13672 diff --git a/.cursor/rules/roblox/assets/feeds/studio_tour.png b/.cursor/rules/roblox/assets/feeds/studio_tour.png new file mode 100644 index 00000000..1edb9bdd --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/studio_tour.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ac9ea33dfeb9ebd6d138e166b93e44fff163c564b6bb0644e9cbf36759f5c91 +size 60329 diff --git a/.cursor/rules/roblox/assets/feeds/studio_upsell.webp b/.cursor/rules/roblox/assets/feeds/studio_upsell.webp new file mode 100644 index 00000000..1d430874 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/studio_upsell.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:099dce976473f7f3d918ea4014fb03b5ff87e60ec59ba5b406ee3e2458384845 +size 9074 diff --git a/.cursor/rules/roblox/assets/feeds/subscription_design.webp b/.cursor/rules/roblox/assets/feeds/subscription_design.webp new file mode 100644 index 00000000..adecd106 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/subscription_design.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c2977fd82213cc5c8a87f7ddfe213522af1e2fbc761e1a191b38f4619d8967e +size 44888 diff --git a/.cursor/rules/roblox/assets/feeds/terrain_editor.webp b/.cursor/rules/roblox/assets/feeds/terrain_editor.webp new file mode 100644 index 00000000..dd13e6da --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/terrain_editor.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38f83c8d06609589d86d517bbde1931ee053bb116ec7b7d38f50e32be4737d79 +size 4030 diff --git a/.cursor/rules/roblox/assets/feeds/tutorials.png b/.cursor/rules/roblox/assets/feeds/tutorials.png new file mode 100644 index 00000000..b6afd40f --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/tutorials.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1cf1cdfa6d5e16a80b24532d41cfb851f3462014ef1e1fe6f88cb59dc4bbacb6 +size 48788 diff --git a/.cursor/rules/roblox/assets/feeds/ugc_homestore.webp b/.cursor/rules/roblox/assets/feeds/ugc_homestore.webp new file mode 100644 index 00000000..8dac75c1 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/ugc_homestore.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51a3a4708a5d70ac60a67a654ab50786809ac1ff1ed75b1115f6fcffa3ce5858 +size 258864 diff --git a/.cursor/rules/roblox/assets/feeds/ui_style.webp b/.cursor/rules/roblox/assets/feeds/ui_style.webp new file mode 100644 index 00000000..b8b5f185 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/ui_style.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a198b967f2186ec5db521549f7ef485501f2631d47dd00baebf419b8a5ee5fe3 +size 43880 diff --git a/.cursor/rules/roblox/assets/feeds/user_base.webp b/.cursor/rules/roblox/assets/feeds/user_base.webp new file mode 100644 index 00000000..4a5d8d8c --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/user_base.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c359a9a183bc08cae753172abe9bf11bab6212212a221f5bbe73e23a1e9832e7 +size 13466 diff --git a/.cursor/rules/roblox/assets/feeds/version_control.webp b/.cursor/rules/roblox/assets/feeds/version_control.webp new file mode 100644 index 00000000..b6073aec --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/version_control.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a94ac02fab340129695b54d4fe278043fccfe645df997bf35d049a70e85df8a2 +size 173724 diff --git a/.cursor/rules/roblox/assets/feeds/video_previews.webp b/.cursor/rules/roblox/assets/feeds/video_previews.webp new file mode 100644 index 00000000..f8f6720a --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/video_previews.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db6c06de9990609f03309350b1d8069d2f0bfd561e2a171405b6fb288d9bc2b2 +size 44230 diff --git a/.cursor/rules/roblox/assets/feeds/workspace.webp b/.cursor/rules/roblox/assets/feeds/workspace.webp new file mode 100644 index 00000000..88874673 --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/workspace.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31fde6e4cf23d651380ea4e16efe297a49cccfa8590ff84392cad39f8ba9f7d8 +size 4902 diff --git a/.cursor/rules/roblox/assets/feeds/world_building.webp b/.cursor/rules/roblox/assets/feeds/world_building.webp new file mode 100644 index 00000000..c77057da --- /dev/null +++ b/.cursor/rules/roblox/assets/feeds/world_building.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e91cc9e0d2ff77d9feb2eff487e8c448ad9833a14be61c6e298144abd8c5f25 +size 59076 diff --git a/.cursor/rules/roblox/assets/game-design/balancing-virtual-economies/balancing-virtual-economies-1.png b/.cursor/rules/roblox/assets/game-design/balancing-virtual-economies/balancing-virtual-economies-1.png new file mode 100644 index 00000000..2fb30732 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/balancing-virtual-economies/balancing-virtual-economies-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de741f08909602994d8c10634ed41e619289dd995b5e51f3bbc4acc51a7ca852 +size 10274 diff --git a/.cursor/rules/roblox/assets/game-design/balancing-virtual-economies/balancing-virtual-economies-2.png b/.cursor/rules/roblox/assets/game-design/balancing-virtual-economies/balancing-virtual-economies-2.png new file mode 100644 index 00000000..d7e3c114 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/balancing-virtual-economies/balancing-virtual-economies-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:783f029575e70d1d70c28586ad09dcb1b1d44fc84f837f983de143f0f43f5a1c +size 21378 diff --git a/.cursor/rules/roblox/assets/game-design/balancing-virtual-economies/balancing-virtual-economies-3.png b/.cursor/rules/roblox/assets/game-design/balancing-virtual-economies/balancing-virtual-economies-3.png new file mode 100644 index 00000000..57d63d4d --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/balancing-virtual-economies/balancing-virtual-economies-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f24aff3c78b76044e3c6a75fd26db0670da8573f1693ac3ad60a3039dae89d2f +size 25371 diff --git a/.cursor/rules/roblox/assets/game-design/balancing-virtual-economies/balancing-virtual-economies-4.png b/.cursor/rules/roblox/assets/game-design/balancing-virtual-economies/balancing-virtual-economies-4.png new file mode 100644 index 00000000..d428206a --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/balancing-virtual-economies/balancing-virtual-economies-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16bdff0171f6a74b6ac6a200bd077faa42cdbe0f9d4f427a5a83a1835203d6c1 +size 20073 diff --git a/.cursor/rules/roblox/assets/game-design/content-update/content-update1.jpg b/.cursor/rules/roblox/assets/game-design/content-update/content-update1.jpg new file mode 100644 index 00000000..7343bbab --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/content-update/content-update1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a82b8f5f1408211d69de2fc1a4609a89dca9aff118f80c7951c5bfb891babc0f +size 175731 diff --git a/.cursor/rules/roblox/assets/game-design/content-update/content-update2.png b/.cursor/rules/roblox/assets/game-design/content-update/content-update2.png new file mode 100644 index 00000000..9e045b61 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/content-update/content-update2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:444101528b18e6b42170804640facb7533b52dd112c6a0df05a53dc3f774ba8a +size 18013 diff --git a/.cursor/rules/roblox/assets/game-design/content-update/content-update3.png b/.cursor/rules/roblox/assets/game-design/content-update/content-update3.png new file mode 100644 index 00000000..b786b843 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/content-update/content-update3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c3098727f0261a2c47802fc107cf6224e1922455b46f068f1a9a93307a87ab9 +size 48977 diff --git a/.cursor/rules/roblox/assets/game-design/content-update/content-update4.jpg b/.cursor/rules/roblox/assets/game-design/content-update/content-update4.jpg new file mode 100644 index 00000000..da269c89 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/content-update/content-update4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a4622d422df83800d430a2724f0760a2be132d271ffdda012184920cb8e8963 +size 225140 diff --git a/.cursor/rules/roblox/assets/game-design/content-update/content-update5.jpg b/.cursor/rules/roblox/assets/game-design/content-update/content-update5.jpg new file mode 100644 index 00000000..ba9b4f39 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/content-update/content-update5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5cfe84484fea8558376c96b426fc2f8432c4a0a4ebea6d503cc21cd0130521e +size 82704 diff --git a/.cursor/rules/roblox/assets/game-design/content-update/content-update6.png b/.cursor/rules/roblox/assets/game-design/content-update/content-update6.png new file mode 100644 index 00000000..a390210a --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/content-update/content-update6.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:013684aebf694950611272ff1cae355a7a00524cba54b0b125cb496a917fb2e4 +size 388662 diff --git a/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-1.png b/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-1.png new file mode 100644 index 00000000..56860ade --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:384b4bf27ffd695672b902ebed5f9298bd7baba9e92a96467c5cba5aeb5590e9 +size 1627385 diff --git a/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-12.png b/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-12.png new file mode 100644 index 00000000..51ec5169 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-12.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72571ffced7dec0093a4ec77abc50a7e9002c398aa2253d1d38c76f459013352 +size 1795690 diff --git a/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-13.png b/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-13.png new file mode 100644 index 00000000..5319654f --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-13.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e89f09524af16f038cdddf37663d5d2400b4781da2642c0b0981802f3f4d54b +size 917380 diff --git a/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-2.png b/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-2.png new file mode 100644 index 00000000..ee333e26 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bdc6c084ed4690a735ddce3237881f2d5a9cc98de82af9a12244e3f0229f4f69 +size 1524035 diff --git a/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-3.png b/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-3.png new file mode 100644 index 00000000..0d510400 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc0fc093cd747fa3f64ea06063e8e7ed4ccf2208654f46564e97ae2361778ff0 +size 1842899 diff --git a/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-4.png b/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-4.png new file mode 100644 index 00000000..f6b31c14 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f13b7a6db38fec753bf5b654fbf78cff5449ab9c187420ab69d5d10aa7b3697e +size 1752152 diff --git a/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-5.png b/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-5.png new file mode 100644 index 00000000..6db52889 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9c685d06acf592b65d6582a5e04c936df90eea128b44220897cf0816ef06018 +size 3061376 diff --git a/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-6.png b/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-6.png new file mode 100644 index 00000000..fe0df5bd --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-6.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89473e0c137b92f1c7274356257b5e4a3150a5a558ef527e555d30e535b4e532 +size 373058 diff --git a/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-7.png b/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-7.png new file mode 100644 index 00000000..25d96e5d --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-7.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a5ac6e638fac1117112763c238d86124f0c9eb4c74d0a6b0056c08a02d35da1 +size 406583 diff --git a/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-8.png b/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-8.png new file mode 100644 index 00000000..515a18f0 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-8.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c36431f9c6dd13d2621d47b87d5c00192268701627fd9ec3b5d10a87ce31088d +size 33341 diff --git a/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-9.png b/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-9.png new file mode 100644 index 00000000..6c6ef335 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/contextual-purchases/contextual-purchases-9.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dbf85a47fabe8ae6389d30275b63e7dcb4dda16b679b9fc499ecee73aeba9dc5 +size 1130944 diff --git a/.cursor/rules/roblox/assets/game-design/core-loops/core-loops1.png b/.cursor/rules/roblox/assets/game-design/core-loops/core-loops1.png new file mode 100644 index 00000000..a0226b06 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/core-loops/core-loops1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfdb7dd158344f13126232565fa490e95dc1e4e9212ad592e538999090c90cd0 +size 2479693 diff --git a/.cursor/rules/roblox/assets/game-design/core-loops/core-loops2.png b/.cursor/rules/roblox/assets/game-design/core-loops/core-loops2.png new file mode 100644 index 00000000..abfcaeb3 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/core-loops/core-loops2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e27c028d9875c394f094f46d947ef58badd78b389b6ec9c284fb7958eca14b6f +size 2505150 diff --git a/.cursor/rules/roblox/assets/game-design/core-loops/core-loops3.png b/.cursor/rules/roblox/assets/game-design/core-loops/core-loops3.png new file mode 100644 index 00000000..72cd0109 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/core-loops/core-loops3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:273aeeb33a577f9f6f006dda64519b29d817036fd5b4e7c1158f333841e59400 +size 2529296 diff --git a/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-0.png b/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-0.png new file mode 100644 index 00000000..9df2580a --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c74e7bee0c1d74fd84bf4e242400cc06aeef1820058ad1734c220ef94dca98a +size 174175 diff --git a/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-1.png b/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-1.png new file mode 100644 index 00000000..67d724fa --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:863558c1b4a349274d7f916e7a6398362a9213c7ef9fe2b1da57861802bd0c8d +size 368515 diff --git a/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-10.png b/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-10.png new file mode 100644 index 00000000..2a1d11a0 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-10.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86181cdc206eee50e64f0b61d6b85843fcb016caeb60d163d79489b6e30a0d6a +size 220268 diff --git a/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-11.png b/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-11.png new file mode 100644 index 00000000..208cf07d --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-11.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc4acb1523a7991bc19f40d889a0100cbee68d7857c3cbd80475cb4b594c3be5 +size 1337954 diff --git a/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-2.png b/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-2.png new file mode 100644 index 00000000..926574fc --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5666637482c6850de1e6934f31eaf39eb677cc381f58b808a040c9767feaf6c1 +size 191307 diff --git a/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-3.png b/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-3.png new file mode 100644 index 00000000..0d9e0262 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d340c80a98ee656137932532ba606ef9dd481e5e3f90e9f71993b680fd43771 +size 1669088 diff --git a/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-4.png b/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-4.png new file mode 100644 index 00000000..d3d432aa --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad6e04b0a5967a2d515cc4678cb9c72e84c95117a5089ab2a46a9ca83a528358 +size 183189 diff --git a/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-5.png b/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-5.png new file mode 100644 index 00000000..c4c13774 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32bd311dc7d5e555ff503506e7c275111c24cc083173e315f3ab1a8f7b6c0b83 +size 3184542 diff --git a/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-7.png b/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-7.png new file mode 100644 index 00000000..f204f3af --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-7.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ba2ee2844f3b9450bfb896c21a08e8306e45a711e3807fc960df9535dda2f35 +size 1358292 diff --git a/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-8.png b/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-8.png new file mode 100644 index 00000000..6aaaef0a --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-8.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a4638fbb95ae14b7b13530d22b719c498d777ad88e76caf5a13688cc0d3bc85 +size 217509 diff --git a/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-9.png b/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-9.png new file mode 100644 index 00000000..7e3b5daf --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/introduction-to-quest-design/quest-design-9.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c1ab7cefd20742483901169d782113bd056c915997f0eb9e81fa860ab62d95d +size 146207 diff --git a/.cursor/rules/roblox/assets/game-design/live-ops-planning/live-ops-communication.png b/.cursor/rules/roblox/assets/game-design/live-ops-planning/live-ops-communication.png new file mode 100644 index 00000000..251ef02a --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/live-ops-planning/live-ops-communication.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0a625ed3c07d1def774fce6a6186be8d335df456fbe66064377c4749ea73a20 +size 122686 diff --git a/.cursor/rules/roblox/assets/game-design/live-ops-planning/live-ops-planning.png b/.cursor/rules/roblox/assets/game-design/live-ops-planning/live-ops-planning.png new file mode 100644 index 00000000..618915da --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/live-ops-planning/live-ops-planning.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29518ef19cb5abaad854532a77f5e73d2d3673f58867888f93fe089bd0a6be4c +size 1935517 diff --git a/.cursor/rules/roblox/assets/game-design/live-ops/live-ops-1.png b/.cursor/rules/roblox/assets/game-design/live-ops/live-ops-1.png new file mode 100644 index 00000000..5b3f6e52 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/live-ops/live-ops-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56fab3dd15be37559435134284f58d3d448ab1abda24d99ab98e56f6cb1d6d84 +size 387577 diff --git a/.cursor/rules/roblox/assets/game-design/live-ops/live-ops-2.png b/.cursor/rules/roblox/assets/game-design/live-ops/live-ops-2.png new file mode 100644 index 00000000..b8aaa0d8 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/live-ops/live-ops-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e42ebd1ee632af6d114beec530a81e96d47123451cb184482d28a7b08c8ed8ef +size 752819 diff --git a/.cursor/rules/roblox/assets/game-design/live-ops/live-ops-3.png b/.cursor/rules/roblox/assets/game-design/live-ops/live-ops-3.png new file mode 100644 index 00000000..4cf041fc --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/live-ops/live-ops-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da60c4326446976a17487d2d9bf2918a758ef6e4f6c57b4014b2863630fb6b13 +size 933409 diff --git a/.cursor/rules/roblox/assets/game-design/live-ops/live-ops-4.png b/.cursor/rules/roblox/assets/game-design/live-ops/live-ops-4.png new file mode 100644 index 00000000..f311d685 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/live-ops/live-ops-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a1610f0a9a3075caadd24d70e75bbcb38bbc8641fc992c82255a7857909ceaf +size 1149319 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-0.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-0.png new file mode 100644 index 00000000..59e854b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85324d1f88d4db73c0b0c53904cf9ce412dab4a4ea53d91b2f0be9310a8cf9e8 +size 3303454 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-1.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-1.png new file mode 100644 index 00000000..17ee95be --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8fe1fa7809332bb7225ce4edd3883f85422450ad1c700abb6feb97d77ed949f +size 3912474 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-10.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-10.png new file mode 100644 index 00000000..6f5f9843 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-10.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5bb55382a4fea106021932f1c326b62deb949a112911b501bba371b88cda1714 +size 468664 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-11.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-11.png new file mode 100644 index 00000000..7454fe53 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-11.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b6a623f3782c04f517177fc607771041d48dcbb296e96e3caadd35637085a91 +size 2700191 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-12.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-12.png new file mode 100644 index 00000000..f345f09f --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-12.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32b5a8e758ca3f40e53bc26b2a22d7c2af2d0d29fde5c75813030b23afd271e4 +size 1565704 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-13.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-13.png new file mode 100644 index 00000000..89dbf6b8 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-13.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e52103f67866ff3859c3485111bf9bc04a228b534bfbff24426e545bb4410eaa +size 814532 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-14.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-14.png new file mode 100644 index 00000000..c8375132 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-14.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ab6e484df34d41497fefde7b638cb236937a377b9fcf436f5b747e200c105ca +size 246521 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-15.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-15.png new file mode 100644 index 00000000..280282b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-15.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b3c87536cc98528af437e39151aab815dd16728894e3e429024b03da9449f89 +size 965748 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-16.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-16.png new file mode 100644 index 00000000..f360f17f --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-16.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e54aa10bed2981c47ddf529c50ab0295de14b7c82db2cdf3a8c2d47063260efc +size 198404 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-17.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-17.png new file mode 100644 index 00000000..c134b145 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-17.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd143886f80afa9f1322000d2fd7baa94b494b1d13dd1e711456c25396d9cd6d +size 185103 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-18.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-18.png new file mode 100644 index 00000000..1ebf4ef7 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-18.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bfcdb09af0a86e3d6cb3b2b63d0b6da0357b7e7da0d73956fe42652f9d5fd6ae +size 261495 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-19.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-19.png new file mode 100644 index 00000000..1c1e4f47 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-19.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7dfc29749b17236b9ade0baf9025c7770d4bd0dcd57b29c1b6cbc6f05061dcb +size 200075 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-2.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-2.png new file mode 100644 index 00000000..62f1d9b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87a77e08d56356538c35bd663bea9dc4ae4f2796a3f5fd62631a540b3afa6bd4 +size 248833 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-20.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-20.png new file mode 100644 index 00000000..8decd17a --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-20.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:266cb2a33af3a5d65524b19ee78763ff784811cc923b218a6c2feb7a302afe2a +size 595242 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-21.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-21.png new file mode 100644 index 00000000..93b36c2c --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-21.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:806de053da7628ad6a78e4ae4192eded64536b0ffd13bc071dea82e8a719c9b3 +size 449338 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-22.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-22.png new file mode 100644 index 00000000..4d882704 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-22.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90e33dd53f472210c6a01715bb47dee971a682353bcc4af33269c832c01f1c82 +size 511679 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-23.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-23.png new file mode 100644 index 00000000..9e24d1c5 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-23.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:266f21f3424b107b65856e9c79222760ddfa57b2e338fcf90bb0a9c549190a7c +size 495697 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-24.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-24.png new file mode 100644 index 00000000..37a062be --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-24.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25478ae877301ea4790ec147b1358da7a76ca33fbc6706eab84163b0d0ff7d63 +size 2799676 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-3.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-3.png new file mode 100644 index 00000000..19d42bdf --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:136f1ceb4c8d4cfc8ff1210442271753037c7575e22416a67f9f9c0f227b42cb +size 162645 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-4.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-4.png new file mode 100644 index 00000000..5d9113f7 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73a90696cf8a79ff1204b8da5cfc1d48bc24d3c25625511b29fcf5db867384e6 +size 236330 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-5.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-5.png new file mode 100644 index 00000000..24d78d43 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42dff11b3fd955e4af637c7e2b61d2b8ad7b02d3bf1d4bf685f0ca0ccf7f0e04 +size 2149965 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-6.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-6.png new file mode 100644 index 00000000..ec67589f --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-6.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc5ee550bea3062ddf1c0d28863cefb4941476ac9e9ee01af097f205a7a42c03 +size 171108 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-7.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-7.png new file mode 100644 index 00000000..291d2a7e --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-7.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89d76cb98d8d07e7a56ad96d6a9ca592c95e67517aa84dd5635823065095f707 +size 430058 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-8.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-8.png new file mode 100644 index 00000000..d33fddd8 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-8.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e143202fa6dd1e80d472244fbd5e208d3378fc5e224cad703fae2030f700f322 +size 332446 diff --git a/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-9.png b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-9.png new file mode 100644 index 00000000..21b410b0 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/monetization-foundations/monetization-foundation-9.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9c78b7c0313e626cdb70e897da6b1af5cf93fa7efcac557ff2e5d1d60cafdfc +size 1194902 diff --git a/.cursor/rules/roblox/assets/game-design/onboarding-techniques/contextual-tutorial-1.png b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/contextual-tutorial-1.png new file mode 100644 index 00000000..608f897d --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/contextual-tutorial-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:369d0b1680d3f8eca1a581ae3f43467d4c9008ef0c15c89cc5b2bffd5fb77ab7 +size 780106 diff --git a/.cursor/rules/roblox/assets/game-design/onboarding-techniques/contextual-tutorial-2.png b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/contextual-tutorial-2.png new file mode 100644 index 00000000..51c56d63 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/contextual-tutorial-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc7e5d78a625d4e849a7c1925b88a95ccb17ad7effa76027a04b0670b11cb4cb +size 894888 diff --git a/.cursor/rules/roblox/assets/game-design/onboarding-techniques/contextual-tutorial-3.png b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/contextual-tutorial-3.png new file mode 100644 index 00000000..a0a0001e --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/contextual-tutorial-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9127d4c206197c75dfa89a6b7bfa937af38f998c8f66b20e84013245a54092a7 +size 767551 diff --git a/.cursor/rules/roblox/assets/game-design/onboarding-techniques/contextual-tutorial-4.png b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/contextual-tutorial-4.png new file mode 100644 index 00000000..8757ff1f --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/contextual-tutorial-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cdeceb7189e601640efb6d423a0e1bbc58165af15e8cceea68a6eb1ad2fc9d4d +size 721133 diff --git a/.cursor/rules/roblox/assets/game-design/onboarding-techniques/timed-hints-1.png b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/timed-hints-1.png new file mode 100644 index 00000000..0e615da8 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/timed-hints-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bfc7102cc1dfd107bdb9cd0db0898b6b4cf80785924efe3549cdbdd973cf9955 +size 264180 diff --git a/.cursor/rules/roblox/assets/game-design/onboarding-techniques/timed-hints-2.png b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/timed-hints-2.png new file mode 100644 index 00000000..9ea9eac1 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/timed-hints-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c1f55d50d54e1c602d1e323a599c9553c5181fb00de58a5a3ddeef45808f11c +size 276213 diff --git a/.cursor/rules/roblox/assets/game-design/onboarding-techniques/timed-hints-3.png b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/timed-hints-3.png new file mode 100644 index 00000000..6cef7235 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/timed-hints-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a677137fe75c7920fb4d1f0b069e7e0cc1d2813a9aeae2f820b3e49916ee8be4 +size 1277774 diff --git a/.cursor/rules/roblox/assets/game-design/onboarding-techniques/timed-hints-4.png b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/timed-hints-4.png new file mode 100644 index 00000000..8b864c2e --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/timed-hints-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27e2d7499ef8990ea22340590e0a9ece0ef60c78c608af15e61bfe12cf5590c7 +size 837447 diff --git a/.cursor/rules/roblox/assets/game-design/onboarding-techniques/visual-elements-1.png b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/visual-elements-1.png new file mode 100644 index 00000000..a18c8ffa --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/visual-elements-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a210adbc45049f92cf58c75df4ebae864cb604f7a7a27ac848201d3e288a89c1 +size 5358778 diff --git a/.cursor/rules/roblox/assets/game-design/onboarding-techniques/visual-elements-2.png b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/visual-elements-2.png new file mode 100644 index 00000000..4bc3e1a7 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/visual-elements-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51861f65b87446bea091f80e3c26e405ad2fe99c0fdce3b053b4e694fae58d31 +size 993483 diff --git a/.cursor/rules/roblox/assets/game-design/onboarding-techniques/visual-elements-3.png b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/visual-elements-3.png new file mode 100644 index 00000000..02a592a0 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/visual-elements-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89dae3637139bbb4e5c9d5e834f4463f9919a3a7cac26a3a30a5554039309625 +size 1241974 diff --git a/.cursor/rules/roblox/assets/game-design/onboarding-techniques/visual-elements-4.png b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/visual-elements-4.png new file mode 100644 index 00000000..f0a3f049 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/visual-elements-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca240c1dfd40e34aecd944d247282d28aa8a80a1b80048a4a729e32c686df225 +size 1089789 diff --git a/.cursor/rules/roblox/assets/game-design/onboarding-techniques/visual-elements-5.png b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/visual-elements-5.png new file mode 100644 index 00000000..27c823df --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/visual-elements-5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e05d3e6c6e384f5540e1b960706a9b80b6c52576588a849d48b7832d12f0cf3 +size 1964740 diff --git a/.cursor/rules/roblox/assets/game-design/onboarding-techniques/visual-elements-6.png b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/visual-elements-6.png new file mode 100644 index 00000000..8d7f35c6 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/visual-elements-6.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22647f5f1d00d6a4c59d53216b98a0485db09dc848d1e02d49afb19c368877e8 +size 709946 diff --git a/.cursor/rules/roblox/assets/game-design/onboarding-techniques/visual-elements-7.png b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/visual-elements-7.png new file mode 100644 index 00000000..95b175ff --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/onboarding-techniques/visual-elements-7.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c29282cd82f13d36b53e2ba67d5dc1ad657fd89284918cdc64d4c5a18b57d749 +size 1691262 diff --git a/.cursor/rules/roblox/assets/game-design/onboarding/onboarding_1.png b/.cursor/rules/roblox/assets/game-design/onboarding/onboarding_1.png new file mode 100644 index 00000000..9863a61d --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/onboarding/onboarding_1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:382832ca8d9abde2c9bac9c2d0f08489f9addfeb52551371f8aa9d2ac2bd7116 +size 53031 diff --git a/.cursor/rules/roblox/assets/game-design/onboarding/onboarding_2.png b/.cursor/rules/roblox/assets/game-design/onboarding/onboarding_2.png new file mode 100644 index 00000000..b2adda4d --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/onboarding/onboarding_2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f481472cf8c4d48450f7a49c1a17bb6284fa7800b419c19b46104503f2805851 +size 178929 diff --git a/.cursor/rules/roblox/assets/game-design/onboarding/onboarding_3.png b/.cursor/rules/roblox/assets/game-design/onboarding/onboarding_3.png new file mode 100644 index 00000000..b8630a1f --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/onboarding/onboarding_3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a6c0ad74a8960f34e296b7a13464ec407b63f42da8ff6508ca742c74baa8b49 +size 96061 diff --git a/.cursor/rules/roblox/assets/game-design/onboarding/onboarding_4.png b/.cursor/rules/roblox/assets/game-design/onboarding/onboarding_4.png new file mode 100644 index 00000000..93b36c2c --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/onboarding/onboarding_4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:806de053da7628ad6a78e4ae4192eded64536b0ffd13bc071dea82e8a719c9b3 +size 449338 diff --git a/.cursor/rules/roblox/assets/game-design/prototyping/prototyping-1.png b/.cursor/rules/roblox/assets/game-design/prototyping/prototyping-1.png new file mode 100644 index 00000000..94f7acda --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/prototyping/prototyping-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce6b32c6eb2c7d44e44c00b770168808e67fad46e99111fedea53c7d9434709f +size 3047542 diff --git a/.cursor/rules/roblox/assets/game-design/prototyping/prototyping-2.png b/.cursor/rules/roblox/assets/game-design/prototyping/prototyping-2.png new file mode 100644 index 00000000..6c161234 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/prototyping/prototyping-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f822940d4fbe59091b6d45efee9177253108ed8738d4d9631e29c280c558ccb +size 2191308 diff --git a/.cursor/rules/roblox/assets/game-design/prototyping/prototyping-3.png b/.cursor/rules/roblox/assets/game-design/prototyping/prototyping-3.png new file mode 100644 index 00000000..347c3be3 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/prototyping/prototyping-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6cfc7e4df66d3639e64575b85698582a2a452414c7f00d1a939647758b65039 +size 355508 diff --git a/.cursor/rules/roblox/assets/game-design/prototyping/prototyping-4.png b/.cursor/rules/roblox/assets/game-design/prototyping/prototyping-4.png new file mode 100644 index 00000000..11bdd4f0 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/prototyping/prototyping-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e5a38def6576a1d5257319cbc71bf8ca6f48b8467cfefb9ea18a7bd4919c46e +size 415491 diff --git a/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-0.png b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-0.png new file mode 100644 index 00000000..93b36c2c --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:806de053da7628ad6a78e4ae4192eded64536b0ffd13bc071dea82e8a719c9b3 +size 449338 diff --git a/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-1.png b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-1.png new file mode 100644 index 00000000..2430e300 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:328ac3f07063bfba442739be38bbdddc10e0eddfd8dc028fb07ef1d67a50424a +size 3728516 diff --git a/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-10.png b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-10.png new file mode 100644 index 00000000..71c75593 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-10.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9f59500588e9c5eda18494999cb6bcbfdb6df73d02cc5ac42a0db12cc7bb739 +size 1056855 diff --git a/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-12.png b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-12.png new file mode 100644 index 00000000..07f2438f --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-12.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86f6c1cc1155b6b0fe9d2687a620b36651d83e0011f90e7163fd1afd930eb05e +size 1839257 diff --git a/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-13.png b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-13.png new file mode 100644 index 00000000..e75ab8f7 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-13.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12a5eb0ed1630dc47d2aadead9b528f0c7324c7e92f75edd044e1e848f882013 +size 335884 diff --git a/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-14.png b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-14.png new file mode 100644 index 00000000..ddab8217 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-14.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0ada76f040aef35536c594218fa6788e65a41406db67784fa181b5ec42ccb1d +size 624013 diff --git a/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-2.png b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-2.png new file mode 100644 index 00000000..37a062be --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25478ae877301ea4790ec147b1358da7a76ca33fbc6706eab84163b0d0ff7d63 +size 2799676 diff --git a/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-4.png b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-4.png new file mode 100644 index 00000000..4fcefd0c --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9da99ba974599d57c342c376be62001b0531facb038527c024fbe8fe28e99b7 +size 772141 diff --git a/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-5.png b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-5.png new file mode 100644 index 00000000..fe97056d --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80d0f7233eb380a36f576e48a7279df9d71b55f9e1c10cd2751a18f5664fb666 +size 782324 diff --git a/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-6.png b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-6.png new file mode 100644 index 00000000..665798b1 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-6.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:efa7263c55f9a31c07c948512235d139c68c111d9e5a0cbda08e17692b978939 +size 943748 diff --git a/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-7.png b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-7.png new file mode 100644 index 00000000..6eceaaa3 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-7.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:325d4a2979466421777bd3a6ff5e94f72a0034907d699be22738707b7c4f4a11 +size 857668 diff --git a/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-8.png b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-8.png new file mode 100644 index 00000000..241d192d --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-8.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eaf5de39ad275dc022b8fe460aea73d052fb0576175b70a4b57379bf19dad2bb +size 848599 diff --git a/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-9.png b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-9.png new file mode 100644 index 00000000..14f27103 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-9.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c86ba7c301e34ff781fa2d30468a83d6239bce75819777dba34196c68dbb6544 +size 1086249 diff --git a/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-ui1.png b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-ui1.png new file mode 100644 index 00000000..a092cf6e --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-ui1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eea87036953feb92f2a535484b0dfeeaf7e097661027eccb7f8334510c95d61b +size 41408 diff --git a/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-ui2.png b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-ui2.png new file mode 100644 index 00000000..241d7445 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design-ui2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:188505eda4b3bb14794f1de7d964ce20c17c357a37f6021c4d86448cdc30ce24 +size 75921 diff --git a/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design.pdf b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design.pdf new file mode 100644 index 00000000..2927d6db --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-design.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c415f2680d3bf4f33286437725b8db16cdc1ec3796b7cb44bf0042ec669ed53 +size 343279 diff --git a/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-spreadsheet-.xlsx b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-spreadsheet-.xlsx new file mode 100644 index 00000000..35343b56 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-spreadsheet-.xlsx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:002125efc9648ffb21ff18605549db212d241e7ace50c35c895d55f68b0d29ec +size 27250 diff --git a/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-ui.pdf b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-ui.pdf new file mode 100644 index 00000000..63b85ecb --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/season-pass-design/season-pass-ui.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:460eb663d2df5772ce38f61e787c79dcaff431a11bc4a4ac37710eab2b6a4ea8 +size 1967194 diff --git a/.cursor/rules/roblox/assets/game-design/subscriptions/subscriptions-1.png b/.cursor/rules/roblox/assets/game-design/subscriptions/subscriptions-1.png new file mode 100644 index 00000000..6655229a --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/subscriptions/subscriptions-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f97ad0509c0a367cb213ef29ededefebfb5b13ef8571432892ba831789cd0222 +size 634357 diff --git a/.cursor/rules/roblox/assets/game-design/subscriptions/subscriptions-2.png b/.cursor/rules/roblox/assets/game-design/subscriptions/subscriptions-2.png new file mode 100644 index 00000000..59a395ca --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/subscriptions/subscriptions-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e35246316b31f98222d5dfe2606b9c6d6da257aeac01405f98480781d1e96c65 +size 113534 diff --git a/.cursor/rules/roblox/assets/game-design/subscriptions/subscriptions-3.png b/.cursor/rules/roblox/assets/game-design/subscriptions/subscriptions-3.png new file mode 100644 index 00000000..c6271370 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/subscriptions/subscriptions-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a6e60ec8693ef25382fce68fe666fe122bfc6bf501eec9ce127254b8c360566 +size 107568 diff --git a/.cursor/rules/roblox/assets/game-design/subscriptions/subscriptions-4.png b/.cursor/rules/roblox/assets/game-design/subscriptions/subscriptions-4.png new file mode 100644 index 00000000..208cf07d --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/subscriptions/subscriptions-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc4acb1523a7991bc19f40d889a0100cbee68d7857c3cbd80475cb4b594c3be5 +size 1337954 diff --git a/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-1.png b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-1.png new file mode 100644 index 00000000..6f3fc613 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08af8314de05e69ddbf1b35e9dd258a41fcdfea0cab00cf31f554095f95801da +size 1794939 diff --git a/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-10.png b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-10.png new file mode 100644 index 00000000..2cf88cf8 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-10.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e54e36a60b2530b4334fdbe1318a05b231530157e387c64fdcea84194d70effa +size 1723588 diff --git a/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-11.png b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-11.png new file mode 100644 index 00000000..ddc0489b --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-11.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e081262b6d195c71b75aec5ace957f8aa2a201c641ae6f6a180f8a5b4426b9f5 +size 1590193 diff --git a/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-12.png b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-12.png new file mode 100644 index 00000000..8b1510ae --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-12.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a01b865c759cd79bd2ab859735126672832b5495d28e7690ddc20e82c00e5ad +size 1469725 diff --git a/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-13.png b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-13.png new file mode 100644 index 00000000..7a298ed2 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-13.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c04c493df7855601a34724c44725066fcb253f14f36cb2134f1eae2108fe8c5 +size 259941 diff --git a/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-14.png b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-14.png new file mode 100644 index 00000000..74783487 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-14.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6568d1373004fa995ad012c453da336fae09a5ac209f1df9d85f8275a9cc8f9a +size 341695 diff --git a/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-15.png b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-15.png new file mode 100644 index 00000000..569fc7f6 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-15.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f573cd9ab9142a531c2c62b0230ce9a27e2a4f6203b505d011f146a3976367fa +size 1261913 diff --git a/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-16.png b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-16.png new file mode 100644 index 00000000..30373ac7 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-16.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4057a9b3fba8e3662ccadf27b0ad4f5c13eaba7032bb9054487fd67656c8c569 +size 719489 diff --git a/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-17.png b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-17.png new file mode 100644 index 00000000..5486fe23 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-17.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:faef05bb4c062ec36b33f18007fe7d6df60714f6745b863819bed374fdc17ed9 +size 42450 diff --git a/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-18-video.mp4 b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-18-video.mp4 new file mode 100644 index 00000000..4b15f913 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-18-video.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3bfcdaaa3de827ecfee9a3bcf476ece9a93c42d3d27737db44ceb27a2ffc32a4 +size 10818931 diff --git a/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-2.png b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-2.png new file mode 100644 index 00000000..284d3966 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb3d55239c29fb67c989ed8c68d84005900f24d79bf0e81100228c611ad1cc3c +size 486719 diff --git a/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-3.png b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-3.png new file mode 100644 index 00000000..548c2bd8 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0104bf0f06a6be99f6fb568b6824fc83f9086b0e918483d4265f482e785dfb1 +size 555440 diff --git a/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-4.png b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-4.png new file mode 100644 index 00000000..7f4c2b3a --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbc09758d013e13c32da810466f41643c252e4715cee0519113065f6922da368 +size 7348358 diff --git a/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-6.png b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-6.png new file mode 100644 index 00000000..dd15199b --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-6.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:787b678ca893ddb4e7cdf42e48e7fd371711cbe27159d60834dcc53d54b7967e +size 1784652 diff --git a/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-7.png b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-7.png new file mode 100644 index 00000000..d6d18505 --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-7.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42f97429d495f9b791068d53ce0031cde4c9a14c7db1375b77d50ab56b9dcc19 +size 1586728 diff --git a/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-8.png b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-8.png new file mode 100644 index 00000000..93b36c2c --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-8.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:806de053da7628ad6a78e4ae4192eded64536b0ffd13bc071dea82e8a719c9b3 +size 449338 diff --git a/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-9.png b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-9.png new file mode 100644 index 00000000..f3ea370b --- /dev/null +++ b/.cursor/rules/roblox/assets/game-design/ui-ux-design/ui-ux-design-9.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d80e814413196032f72ab318a91c72d7190d5a7bac8979b26a87e86d3f8ca965 +size 1502182 diff --git a/.cursor/rules/roblox/assets/getting-started/AssetPack-Catapult.jpg b/.cursor/rules/roblox/assets/getting-started/AssetPack-Catapult.jpg new file mode 100644 index 00000000..b0e880a3 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/AssetPack-Catapult.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e127dfb9a26157e788381569f75339554efaa1c825912a35415576c7c2b71eeb +size 546421 diff --git a/.cursor/rules/roblox/assets/getting-started/AssetPack-Platform.jpg b/.cursor/rules/roblox/assets/getting-started/AssetPack-Platform.jpg new file mode 100644 index 00000000..011019e2 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/AssetPack-Platform.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5796c38983e7b8c01d496fae04f14e33c4a236cc36e2386410390d40b479f31e +size 461298 diff --git a/.cursor/rules/roblox/assets/getting-started/AssetPack-Projectiles.jpg b/.cursor/rules/roblox/assets/getting-started/AssetPack-Projectiles.jpg new file mode 100644 index 00000000..1354edd9 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/AssetPack-Projectiles.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a97e0489da9c751df06997de346daa013dfb343570ae18b6c3a90fd297413a17 +size 521708 diff --git a/.cursor/rules/roblox/assets/getting-started/AssetPack-Viewport.jpg b/.cursor/rules/roblox/assets/getting-started/AssetPack-Viewport.jpg new file mode 100644 index 00000000..da0c5464 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/AssetPack-Viewport.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d7c2f2a1f99ba8d26212c6866ba56c413b582c1b8ab5702d2e70334d5ca1e08 +size 2065845 diff --git a/.cursor/rules/roblox/assets/getting-started/Baseplate-Template-Icon.png b/.cursor/rules/roblox/assets/getting-started/Baseplate-Template-Icon.png new file mode 100644 index 00000000..5474c872 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Baseplate-Template-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d6b34af46cd599eb3f5834d605527663de9489ecc7b5bf71915f5687ed19cec +size 86297 diff --git a/.cursor/rules/roblox/assets/getting-started/Baseplate-Tile.png b/.cursor/rules/roblox/assets/getting-started/Baseplate-Tile.png new file mode 100644 index 00000000..bbb761e7 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Baseplate-Tile.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86659f78d1794b44cd5ef062092292b32ddde2f0bf50d2e82f06552056df0ed7 +size 110891 diff --git a/.cursor/rules/roblox/assets/getting-started/Course-Completed.jpg b/.cursor/rules/roblox/assets/getting-started/Course-Completed.jpg new file mode 100644 index 00000000..8ed954f5 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Course-Completed.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e61f8554b38258a0c655117742b2e9b72c01ceff0d2c51dd3269b1caead2e87e +size 187345 diff --git a/.cursor/rules/roblox/assets/getting-started/Course-Gravity.mp4 b/.cursor/rules/roblox/assets/getting-started/Course-Gravity.mp4 new file mode 100644 index 00000000..c9f4022e --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Course-Gravity.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:194c89e2129264ba9f38a77a2edfcdf7b39016a5169e2ee8e5e7942f848e50e7 +size 1335097 diff --git a/.cursor/rules/roblox/assets/getting-started/Course-No-Baseplate.jpg b/.cursor/rules/roblox/assets/getting-started/Course-No-Baseplate.jpg new file mode 100644 index 00000000..192d42da --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Course-No-Baseplate.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15537e14c8664831730ac8d9b6b7cf4f74bcefae017fc118a147f5643a7721c9 +size 98636 diff --git a/.cursor/rules/roblox/assets/getting-started/DataModel-End.png b/.cursor/rules/roblox/assets/getting-started/DataModel-End.png new file mode 100644 index 00000000..148da85b --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/DataModel-End.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cdc5d400c1ea35394d5736b070ba35234977d9776b7f8f853593c27bbb4b8ed +size 72727 diff --git a/.cursor/rules/roblox/assets/getting-started/DataModel-Start.png b/.cursor/rules/roblox/assets/getting-started/DataModel-Start.png new file mode 100644 index 00000000..bb6f79dc --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/DataModel-Start.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3bd7c0fd1a21869362652c46dafe70817d56f8d5f24ad26e524414a000173e9d +size 24397 diff --git a/.cursor/rules/roblox/assets/getting-started/DataModel-Workspace.png b/.cursor/rules/roblox/assets/getting-started/DataModel-Workspace.png new file mode 100644 index 00000000..2a79fd82 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/DataModel-Workspace.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f0e8dc8fb066c7454b0c69848e6488b4e35b779b9d616b6086b20cefcfb327d +size 111082 diff --git a/.cursor/rules/roblox/assets/getting-started/Experience-Page-Default.jpg b/.cursor/rules/roblox/assets/getting-started/Experience-Page-Default.jpg new file mode 100644 index 00000000..5b82cbc1 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Experience-Page-Default.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:923be08c0ea94bf8b9bfd86a7461f6da1ab65ede296f25f7ad15878758dbc265 +size 225970 diff --git a/.cursor/rules/roblox/assets/getting-started/First-Inserted-Part.jpg b/.cursor/rules/roblox/assets/getting-started/First-Inserted-Part.jpg new file mode 100644 index 00000000..787521a8 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/First-Inserted-Part.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbd4ca4e4152c87282f1931b8c942053afc59f1219b289e276ffa402f58cba22 +size 210465 diff --git a/.cursor/rules/roblox/assets/getting-started/First-Part-Moved.jpg b/.cursor/rules/roblox/assets/getting-started/First-Part-Moved.jpg new file mode 100644 index 00000000..0e71a53c --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/First-Part-Moved.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a74777bf0202e7c345181131d7640435106ba16d2a8386b2c17bb40022462bf +size 162718 diff --git a/.cursor/rules/roblox/assets/getting-started/First-Part-Rotated.jpg b/.cursor/rules/roblox/assets/getting-started/First-Part-Rotated.jpg new file mode 100644 index 00000000..52c1eedc --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/First-Part-Rotated.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5925c389df12b6d881924a4f9f6e73bf9782d729b29e4e270de867225631b037 +size 168093 diff --git a/.cursor/rules/roblox/assets/getting-started/First-Part-Scaled.jpg b/.cursor/rules/roblox/assets/getting-started/First-Part-Scaled.jpg new file mode 100644 index 00000000..08b1ff75 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/First-Part-Scaled.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9bd991b0d0028a0f7068ef2e460eb22d676bf780fd1d04fa130b492c0249efb9 +size 158101 diff --git a/.cursor/rules/roblox/assets/getting-started/First-Part-Styled.jpg b/.cursor/rules/roblox/assets/getting-started/First-Part-Styled.jpg new file mode 100644 index 00000000..fd23a985 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/First-Part-Styled.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfb279392ac74b676e81758ba13f85c9a36a25a8df080bd519c9b34a51460eba +size 206995 diff --git a/.cursor/rules/roblox/assets/getting-started/ModernCity-Tile.png b/.cursor/rules/roblox/assets/getting-started/ModernCity-Tile.png new file mode 100644 index 00000000..9122107f --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/ModernCity-Tile.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bccf8cf6675a878955bfc2e02402b38253b8938c007fca3402e5dda4a30ae648 +size 185762 diff --git a/.cursor/rules/roblox/assets/getting-started/New-Template-With-Spawn-Location.jpg b/.cursor/rules/roblox/assets/getting-started/New-Template-With-Spawn-Location.jpg new file mode 100644 index 00000000..5ec14f14 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/New-Template-With-Spawn-Location.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60962c87b1c6cabb04d8612a315581c6a3a7f08fd863ffe86597cf16d9206057 +size 220843 diff --git a/.cursor/rules/roblox/assets/getting-started/Overview.jpg b/.cursor/rules/roblox/assets/getting-started/Overview.jpg new file mode 100644 index 00000000..53338808 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Overview.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:073c7f5e9aaec40f2acfdf3c2ff40ae4bf81caf54e031b3212ba544ee3360a66 +size 1708704 diff --git a/.cursor/rules/roblox/assets/getting-started/Projectile-TooClose.mp4 b/.cursor/rules/roblox/assets/getting-started/Projectile-TooClose.mp4 new file mode 100644 index 00000000..fb3064f0 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Projectile-TooClose.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6bdad77bb2158e8cb91dc08bb10a586c71ca24bf46efa220695da1b8282797ea +size 2864779 diff --git a/.cursor/rules/roblox/assets/getting-started/Projectile-TooFar.mp4 b/.cursor/rules/roblox/assets/getting-started/Projectile-TooFar.mp4 new file mode 100644 index 00000000..05497408 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Projectile-TooFar.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71962f95e94c716fd8a75d7756c3044e6a9d72518eb0ee898645d09b827b076d +size 3346441 diff --git a/.cursor/rules/roblox/assets/getting-started/Projectiles-1.jpg b/.cursor/rules/roblox/assets/getting-started/Projectiles-1.jpg new file mode 100644 index 00000000..f177013b --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Projectiles-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9929015093dcb6757015a86c48fc90a7e9c3c58b3af6c1d71b47e2e1769f4732 +size 1745536 diff --git a/.cursor/rules/roblox/assets/getting-started/Projectiles-2.jpg b/.cursor/rules/roblox/assets/getting-started/Projectiles-2.jpg new file mode 100644 index 00000000..de7b29f9 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Projectiles-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4c847f6da3494ab216e1b7b554adf3e221390789ad2151f7291b6817f4e2f82 +size 1742828 diff --git a/.cursor/rules/roblox/assets/getting-started/Projectiles-3.mp4 b/.cursor/rules/roblox/assets/getting-started/Projectiles-3.mp4 new file mode 100644 index 00000000..1b7c8c2a --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Projectiles-3.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5d579663824f072e9c8ab09456238563ef6b933bce75097394308beebe710be +size 9492809 diff --git a/.cursor/rules/roblox/assets/getting-started/Publish-2A.png b/.cursor/rules/roblox/assets/getting-started/Publish-2A.png new file mode 100644 index 00000000..91dac291 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Publish-2A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b5c97e843ac1e479743e3b1a98f2584bdd2e1ba5345a11000c2c39d72097994 +size 128620 diff --git a/.cursor/rules/roblox/assets/getting-started/Publish-2B.png b/.cursor/rules/roblox/assets/getting-started/Publish-2B.png new file mode 100644 index 00000000..fb4a9be7 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Publish-2B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7477f45b72e390dbf0b468a7d6b64e4c5bc151fd877b593d671c56538177cf60 +size 130741 diff --git a/.cursor/rules/roblox/assets/getting-started/Racing-Tile.png b/.cursor/rules/roblox/assets/getting-started/Racing-Tile.png new file mode 100644 index 00000000..cfa96bf5 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Racing-Tile.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9de1109d40e7fb9681d004f98e122be876548eadf7a02f81ed9c731b6a5ae60 +size 178904 diff --git a/.cursor/rules/roblox/assets/getting-started/Scripts-1.png b/.cursor/rules/roblox/assets/getting-started/Scripts-1.png new file mode 100644 index 00000000..5668c19e --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Scripts-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63fa3ba5fe7ca9a7492c3551b5358ff1709e4095e504afeb5d199b36a4075fd8 +size 92973 diff --git a/.cursor/rules/roblox/assets/getting-started/Scripts-2.png b/.cursor/rules/roblox/assets/getting-started/Scripts-2.png new file mode 100644 index 00000000..d5dc991b --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Scripts-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3d65b2776247f511f968dc3831ee6dd89048044dbf28062329d0b02e325e901 +size 94031 diff --git a/.cursor/rules/roblox/assets/getting-started/Scripts-3.png b/.cursor/rules/roblox/assets/getting-started/Scripts-3.png new file mode 100644 index 00000000..139b1c95 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Scripts-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf2d73245ffb03d2299c5251c137f5d7a44273caeab4e898b4c552d184a67018 +size 94328 diff --git a/.cursor/rules/roblox/assets/getting-started/Scripts-5B.mp4 b/.cursor/rules/roblox/assets/getting-started/Scripts-5B.mp4 new file mode 100644 index 00000000..d3f505e8 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Scripts-5B.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91bead40d8a4853353cd2009684b06615902f5d159ffbce5615470d83295e596 +size 6552326 diff --git a/.cursor/rules/roblox/assets/getting-started/Scripts-5C.mp4 b/.cursor/rules/roblox/assets/getting-started/Scripts-5C.mp4 new file mode 100644 index 00000000..bdcf5a87 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Scripts-5C.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f10df8a16f86372db9793959eee68f53975300562c952eaba88b9dbcce02c67 +size 6092107 diff --git a/.cursor/rules/roblox/assets/getting-started/Targets-1B.png b/.cursor/rules/roblox/assets/getting-started/Targets-1B.png new file mode 100644 index 00000000..6790dc22 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Targets-1B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd97ea567fecbd11358e0161474df0ec389e839b2cc61c1246294b59822e7845 +size 56012 diff --git a/.cursor/rules/roblox/assets/getting-started/Targets-1C.jpg b/.cursor/rules/roblox/assets/getting-started/Targets-1C.jpg new file mode 100644 index 00000000..ce5b06ce --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Targets-1C.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a019e9e4ee3586af099688ddf933e8554d2bcd6aa42b58fbedac52eea77817ac +size 1846151 diff --git a/.cursor/rules/roblox/assets/getting-started/Targets-2.jpg b/.cursor/rules/roblox/assets/getting-started/Targets-2.jpg new file mode 100644 index 00000000..32f397eb --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Targets-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:adc1f58ca6adf8f82162b0aab8198407dc71acdb1ebecee049d1837ab74c40fe +size 662465 diff --git a/.cursor/rules/roblox/assets/getting-started/Targets-3.jpg b/.cursor/rules/roblox/assets/getting-started/Targets-3.jpg new file mode 100644 index 00000000..b5363194 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Targets-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:970a7ab0e30f5141296ccb4b1624415200f5fbf64984f41e818164eab644b535 +size 675555 diff --git a/.cursor/rules/roblox/assets/getting-started/Workspace-Baseplate-Selected.png b/.cursor/rules/roblox/assets/getting-started/Workspace-Baseplate-Selected.png new file mode 100644 index 00000000..ab6ef849 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/Workspace-Baseplate-Selected.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aec8ebe5723cdbaaa859deffb7a74aed9dcc8eb93d8bcc9eef8b80e178c404a6 +size 45323 diff --git a/.cursor/rules/roblox/assets/getting-started/developing-on-roblox/Global-User-Community-Chart.jpg b/.cursor/rules/roblox/assets/getting-started/developing-on-roblox/Global-User-Community-Chart.jpg new file mode 100644 index 00000000..dc417f98 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/developing-on-roblox/Global-User-Community-Chart.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d3e8d17547d49537536a845ddca16c47bcd005051f17ebc97cfa879e2aa38d8 +size 256679 diff --git a/.cursor/rules/roblox/assets/getting-started/developing-on-roblox/Percentage-O13-Users-Chart.jpg b/.cursor/rules/roblox/assets/getting-started/developing-on-roblox/Percentage-O13-Users-Chart.jpg new file mode 100644 index 00000000..da3beb53 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/developing-on-roblox/Percentage-O13-Users-Chart.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99b2374484f4abb715ba819ab2e160f11a7756b0ed1d90a192fe1d8d48fda7c1 +size 103676 diff --git a/.cursor/rules/roblox/assets/getting-started/platform-overview/Community.jpg b/.cursor/rules/roblox/assets/getting-started/platform-overview/Community.jpg new file mode 100644 index 00000000..4a6dbfb1 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/platform-overview/Community.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8dce77f68427667751acf324c10ba4b0f0f62e5d5516904ac4d2ae1c6e2e92b +size 270469 diff --git a/.cursor/rules/roblox/assets/getting-started/platform-overview/Everything-You-Need.jpg b/.cursor/rules/roblox/assets/getting-started/platform-overview/Everything-You-Need.jpg new file mode 100644 index 00000000..3c97c02e --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/platform-overview/Everything-You-Need.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c104c1d0df2557b601e20a165b514a811cd32fe3261deb302439874bc7dfc241 +size 436551 diff --git a/.cursor/rules/roblox/assets/getting-started/platform-overview/Everything-You-Need.png b/.cursor/rules/roblox/assets/getting-started/platform-overview/Everything-You-Need.png new file mode 100644 index 00000000..21d34a5c --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/platform-overview/Everything-You-Need.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3fa4c6952a5632a41649d1fcabdb00b12dbc3b8f5c1cba42850e9be5c9ed7fbc +size 674073 diff --git a/.cursor/rules/roblox/assets/getting-started/platform-overview/Instant-Global-Access.jpg b/.cursor/rules/roblox/assets/getting-started/platform-overview/Instant-Global-Access.jpg new file mode 100644 index 00000000..eaadb0ab --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/platform-overview/Instant-Global-Access.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d62401216822046b565e000a50a4699500d896ac3eb268371cb1be62be189d9a +size 283734 diff --git a/.cursor/rules/roblox/assets/getting-started/platform-overview/Rapid-Iteration.jpg b/.cursor/rules/roblox/assets/getting-started/platform-overview/Rapid-Iteration.jpg new file mode 100644 index 00000000..7ee93a59 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/platform-overview/Rapid-Iteration.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9230fbc4931cee9da114d3599411022c1d160fd923dc245485fa09f44960cc2 +size 230922 diff --git a/.cursor/rules/roblox/assets/getting-started/platform-overview/Rapid-Iteration.png b/.cursor/rules/roblox/assets/getting-started/platform-overview/Rapid-Iteration.png new file mode 100644 index 00000000..d0ced7c1 --- /dev/null +++ b/.cursor/rules/roblox/assets/getting-started/platform-overview/Rapid-Iteration.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4802507807de626fb1d618779f9eb8197a436f37d37828bb5e8120892e53a154 +size 1002450 diff --git a/.cursor/rules/roblox/assets/ip-licensing/AddIPToIPFamily.png b/.cursor/rules/roblox/assets/ip-licensing/AddIPToIPFamily.png new file mode 100644 index 00000000..28206528 --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/AddIPToIPFamily.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c47129c3036cdd1860ab8e694c7e847c1da79ffd4f4f0650994345f2dfca046 +size 117324 diff --git a/.cursor/rules/roblox/assets/ip-licensing/AddLicense.png b/.cursor/rules/roblox/assets/ip-licensing/AddLicense.png new file mode 100644 index 00000000..650138d5 --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/AddLicense.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b7dc1f147a8db3f0f9d20939da42fa9fee811e2bd61746710828607047be9fa +size 57104 diff --git a/.cursor/rules/roblox/assets/ip-licensing/AddLicenseStep.png b/.cursor/rules/roblox/assets/ip-licensing/AddLicenseStep.png new file mode 100644 index 00000000..1ab137bf --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/AddLicenseStep.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87b367cc11b03a5280b5972c0dac611ff7bbf292efe85dd6e290fcc87546181c +size 120671 diff --git a/.cursor/rules/roblox/assets/ip-licensing/AvailableLicenses.png b/.cursor/rules/roblox/assets/ip-licensing/AvailableLicenses.png new file mode 100644 index 00000000..1b80cf6d --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/AvailableLicenses.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41c4808c1bfc71a6499c5ed3fc03f4dc5b301237a2e16b896525c92e53b58ff3 +size 659777 diff --git a/.cursor/rules/roblox/assets/ip-licensing/BlueLockLogo.png b/.cursor/rules/roblox/assets/ip-licensing/BlueLockLogo.png new file mode 100644 index 00000000..632f9da2 --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/BlueLockLogo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e98318b1fab7065d6cdc19ebcd759ab18bec7d7dcda2c112bef2efc09bb451f9 +size 468047 diff --git a/.cursor/rules/roblox/assets/ip-licensing/CreateIPFamily.png b/.cursor/rules/roblox/assets/ip-licensing/CreateIPFamily.png new file mode 100644 index 00000000..cd6dd869 --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/CreateIPFamily.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1be6cba056491a3e98e14c3cc8f72fe5c67ef1638b843cf73f837fe7fdc5abf9 +size 122282 diff --git a/.cursor/rules/roblox/assets/ip-licensing/CreateIPFamily2.png b/.cursor/rules/roblox/assets/ip-licensing/CreateIPFamily2.png new file mode 100644 index 00000000..8882885b --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/CreateIPFamily2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37d4f2591af308edde3a86cf0210d9cd9c160df2d7c6d765bca148c7ee5ac6f1 +size 75601 diff --git a/.cursor/rules/roblox/assets/ip-licensing/CreateIPFamily_NoFlow.png b/.cursor/rules/roblox/assets/ip-licensing/CreateIPFamily_NoFlow.png new file mode 100644 index 00000000..f9f0e4f3 --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/CreateIPFamily_NoFlow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0451e6280203a5f70b6abad10ea37bb7a85e22b7b24eaed26c4bac175c51afaa +size 90058 diff --git a/.cursor/rules/roblox/assets/ip-licensing/CreateIPFamily_YesFlow.png b/.cursor/rules/roblox/assets/ip-licensing/CreateIPFamily_YesFlow.png new file mode 100644 index 00000000..2e03e9ef --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/CreateIPFamily_YesFlow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c77d53e4b229543af4b8f7d2f42abb8aee4fda85aa30a761bf8e7f9544097bd7 +size 143554 diff --git a/.cursor/rules/roblox/assets/ip-licensing/CreateLicense.png b/.cursor/rules/roblox/assets/ip-licensing/CreateLicense.png new file mode 100644 index 00000000..5a6bac2a --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/CreateLicense.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28d597a0778bd4a3d731e6a19a85288da568eebbcb5f0b0492bdf2c066061784 +size 143610 diff --git a/.cursor/rules/roblox/assets/ip-licensing/CreateListing.png b/.cursor/rules/roblox/assets/ip-licensing/CreateListing.png new file mode 100644 index 00000000..0deb078a --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/CreateListing.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:550198f6a3b1eb34e3ba055f13a95fcddf93f2540594af1a5c46f45a522e9562 +size 69079 diff --git a/.cursor/rules/roblox/assets/ip-licensing/CreateListingStep.png b/.cursor/rules/roblox/assets/ip-licensing/CreateListingStep.png new file mode 100644 index 00000000..f15b738b --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/CreateListingStep.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e40acc21026239bd9f94ea60eb0b57e6a68c6cbc70a45e894884cad03ab29ae +size 60527 diff --git a/.cursor/rules/roblox/assets/ip-licensing/ExploreLicenses.png b/.cursor/rules/roblox/assets/ip-licensing/ExploreLicenses.png new file mode 100644 index 00000000..e589898d --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/ExploreLicenses.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e75467e4b3d6d0b08e66fe7de0decd943c263738bba0f61f6192878c32e3a174 +size 1235315 diff --git a/.cursor/rules/roblox/assets/ip-licensing/Fall.png b/.cursor/rules/roblox/assets/ip-licensing/Fall.png new file mode 100644 index 00000000..7ca995de --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/Fall.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:761174852836f7ff12e6d6f2f535e9df737ddbba61b6543a9c79cebd46775f4d +size 1279456 diff --git a/.cursor/rules/roblox/assets/ip-licensing/IPFamilies.png b/.cursor/rules/roblox/assets/ip-licensing/IPFamilies.png new file mode 100644 index 00000000..4e63f39b --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/IPFamilies.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ff7ba870f690814fe8bd924378a8969906bc83f6c85a2bcb8dd8d56961e6a38 +size 261735 diff --git a/.cursor/rules/roblox/assets/ip-licensing/IPLicensing.mp4 b/.cursor/rules/roblox/assets/ip-licensing/IPLicensing.mp4 new file mode 100644 index 00000000..e73a40df --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/IPLicensing.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:030c819e365daac81b24a921b2eb3d45265a035a3e18dac6847d8ae028aa3a46 +size 119326713 diff --git a/.cursor/rules/roblox/assets/ip-licensing/IPRegistrationFlow.png b/.cursor/rules/roblox/assets/ip-licensing/IPRegistrationFlow.png new file mode 100644 index 00000000..a9f64f2c --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/IPRegistrationFlow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78d5b531d61242a921a5c734d093043de21a6ae37715334acbb36c3176fbf3cc +size 264538 diff --git a/.cursor/rules/roblox/assets/ip-licensing/IPRegistrationPage.png b/.cursor/rules/roblox/assets/ip-licensing/IPRegistrationPage.png new file mode 100644 index 00000000..06222ac8 --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/IPRegistrationPage.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77b9873300145931fc3411379e354a65f4b9bbb7a380bfa1f98bea430ceda56e +size 211464 diff --git a/.cursor/rules/roblox/assets/ip-licensing/LicenseListing.png b/.cursor/rules/roblox/assets/ip-licensing/LicenseListing.png new file mode 100644 index 00000000..62e7a059 --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/LicenseListing.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ac2a53860536996dfb17b6fba5fcf1c539e6819bc4e8e6d6cff913ae4bcd6d5 +size 269503 diff --git a/.cursor/rules/roblox/assets/ip-licensing/LicensesCatalog.png b/.cursor/rules/roblox/assets/ip-licensing/LicensesCatalog.png new file mode 100644 index 00000000..3dc1eb9a --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/LicensesCatalog.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe697d8a5a7605df7763bf992690834622f25b0fdbcda1b7a8e0a4958a5d9be8 +size 718409 diff --git a/.cursor/rules/roblox/assets/ip-licensing/LicensesPage.png b/.cursor/rules/roblox/assets/ip-licensing/LicensesPage.png new file mode 100644 index 00000000..27d41040 --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/LicensesPage.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0498e2d791a9bd8336712441564153d8d11eadb6ce982b169626aa304ccd4f4 +size 153956 diff --git a/.cursor/rules/roblox/assets/ip-licensing/bluelock.png b/.cursor/rules/roblox/assets/ip-licensing/bluelock.png new file mode 100644 index 00000000..00959497 --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/bluelock.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ffee9fce2830227c712b660cd9250b3a47664a2d1e52e34b60c786f3839f2e4c +size 1964574 diff --git a/.cursor/rules/roblox/assets/ip-licensing/catalog.png b/.cursor/rules/roblox/assets/ip-licensing/catalog.png new file mode 100644 index 00000000..54becd3d --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/catalog.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c13d4dd5670f8fe99fad92b16f72fad00488572838e9104fbdc81594ce1460b0 +size 618003 diff --git a/.cursor/rules/roblox/assets/ip-licensing/kodansha.png b/.cursor/rules/roblox/assets/ip-licensing/kodansha.png new file mode 100644 index 00000000..2f33345d --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/kodansha.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:545cd3c1943ea01a4852fa8baeeee8b17b7075637ec72c17a2986b31e69f273c +size 5039768 diff --git a/.cursor/rules/roblox/assets/ip-licensing/lionsgate.jpg b/.cursor/rules/roblox/assets/ip-licensing/lionsgate.jpg new file mode 100644 index 00000000..72c6fcf3 --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/lionsgate.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e18bea5277be523d0c16d5c93aa247300570876f12eb307c8e09340347faf7d0 +size 42743 diff --git a/.cursor/rules/roblox/assets/ip-licensing/logo-dark.png b/.cursor/rules/roblox/assets/ip-licensing/logo-dark.png new file mode 100644 index 00000000..dcdc765f --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/logo-dark.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b8417d9d41e51b571535a9ca1051eecb7c0f887aea7457e536bfa169d27cf36 +size 87627 diff --git a/.cursor/rules/roblox/assets/ip-licensing/logo-light.png b/.cursor/rules/roblox/assets/ip-licensing/logo-light.png new file mode 100644 index 00000000..03f39f8c --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/logo-light.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a03bf03c0e766c7af062f1732963c1449e2586fafe0fe93adac2e6872a50ead +size 69100 diff --git a/.cursor/rules/roblox/assets/ip-licensing/rivals.png b/.cursor/rules/roblox/assets/ip-licensing/rivals.png new file mode 100644 index 00000000..72abcdeb --- /dev/null +++ b/.cursor/rules/roblox/assets/ip-licensing/rivals.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9308ba7dfe5e1fe9cdb0bbddb6f88bd4a5e3e30b3605235ed6ac74a8aeadf686 +size 560757 diff --git a/.cursor/rules/roblox/assets/landing/Avatar_Banner_Landing.jpg b/.cursor/rules/roblox/assets/landing/Avatar_Banner_Landing.jpg new file mode 100644 index 00000000..10fc01ce --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/Avatar_Banner_Landing.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a12f362a0ecab1f45f6a2de40a5d117de4e5b9393787c977fd15537f24f0d4bf +size 536342 diff --git a/.cursor/rules/roblox/assets/landing/Cloud_Banner_Landing.jpg b/.cursor/rules/roblox/assets/landing/Cloud_Banner_Landing.jpg new file mode 100644 index 00000000..9de2173f --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/Cloud_Banner_Landing.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9093d64d6debb96634d35af6c4983e225ca43b8c20c0cf6499b57631f57de772 +size 468645 diff --git a/.cursor/rules/roblox/assets/landing/Data-Model-Mapping.png b/.cursor/rules/roblox/assets/landing/Data-Model-Mapping.png new file mode 100644 index 00000000..b69b6c4b --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/Data-Model-Mapping.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f86fb3a1ec9a8a52f1d9373c0067dc29bec0fdb2eb661242c5446450c6bf32c4 +size 192231 diff --git a/.cursor/rules/roblox/assets/landing/Exp_Banner_Landing.jpg b/.cursor/rules/roblox/assets/landing/Exp_Banner_Landing.jpg new file mode 100644 index 00000000..6dd97f29 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/Exp_Banner_Landing.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a8f9048067dd8ea689d07efd7c2e10d82a7d76b1ff32637a970a8e629f74e31 +size 199608 diff --git a/.cursor/rules/roblox/assets/landing/Growth_Banner_Landing.jpg b/.cursor/rules/roblox/assets/landing/Growth_Banner_Landing.jpg new file mode 100644 index 00000000..eeae1300 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/Growth_Banner_Landing.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5d6057029160b8410b47823c37552340bdb76bb36b48efc84759111408f0f4d +size 146535 diff --git a/.cursor/rules/roblox/assets/landing/affiliate-link.webp b/.cursor/rules/roblox/assets/landing/affiliate-link.webp new file mode 100644 index 00000000..0c32a650 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/affiliate-link.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69f4aab8036c15c78c5c664c6bc495757d4afdbde83213c95c154dde0c9e93f8 +size 235076 diff --git a/.cursor/rules/roblox/assets/landing/aged-up-avatar.jpg b/.cursor/rules/roblox/assets/landing/aged-up-avatar.jpg new file mode 100644 index 00000000..d95aea70 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/aged-up-avatar.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78aef3c76ea88e3805f521dc2f1f7f6f488f4f20e2ceee5a5eb93cee198d160c +size 183904 diff --git a/.cursor/rules/roblox/assets/landing/app.jpg b/.cursor/rules/roblox/assets/landing/app.jpg new file mode 100644 index 00000000..8d0e1672 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/app.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5c93b2b6927b87dd36069f323bb54f1e0c4489733030d4a4ded10fb1995f777 +size 173602 diff --git a/.cursor/rules/roblox/assets/landing/assets.png b/.cursor/rules/roblox/assets/landing/assets.png new file mode 100644 index 00000000..231d3578 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/assets.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:314461eff430f06ba8b544deb2bcfdfac022161e6970c94a4945592e1d82d659 +size 215326 diff --git a/.cursor/rules/roblox/assets/landing/avatar-play.jpg b/.cursor/rules/roblox/assets/landing/avatar-play.jpg new file mode 100644 index 00000000..c26bdaf4 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/avatar-play.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a86f9e26933a04b346128cc62ad610d3d1c5525fa862a70ec680bc2d80925bba +size 401900 diff --git a/.cursor/rules/roblox/assets/landing/blender-logo.png b/.cursor/rules/roblox/assets/landing/blender-logo.png new file mode 100644 index 00000000..6b0cf018 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/blender-logo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:028872ba3f83b50921b2bba292ef4950fabc62a981ba8c1725aeb745dd5edc9b +size 97279 diff --git a/.cursor/rules/roblox/assets/landing/chat-translation.jpg b/.cursor/rules/roblox/assets/landing/chat-translation.jpg new file mode 100644 index 00000000..4750b8c0 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/chat-translation.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6267af7ffadf575e53873d2809bfb3af13c6c29af83557117b708fda92a9eaaa +size 331755 diff --git a/.cursor/rules/roblox/assets/landing/cloud/banner.jpg b/.cursor/rules/roblox/assets/landing/cloud/banner.jpg new file mode 100644 index 00000000..624c0531 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/cloud/banner.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11ce0502d5c2ce8162f9aeceecfc2eef018505ce6fe241b5bf4ab8511de80ee3 +size 284549 diff --git a/.cursor/rules/roblox/assets/landing/core-experience.png b/.cursor/rules/roblox/assets/landing/core-experience.png new file mode 100644 index 00000000..52d0a99c --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/core-experience.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db447c88b27fa1c5cb9412e178b4352b647268d05441e2641af38f6ef02f54e2 +size 1061191 diff --git a/.cursor/rules/roblox/assets/landing/datamodel.png b/.cursor/rules/roblox/assets/landing/datamodel.png new file mode 100644 index 00000000..25dd872b --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/datamodel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd20836983a119cac9b9f36a4cc917550f6f9c27fc081cfd133c38e551fb79e3 +size 176779 diff --git a/.cursor/rules/roblox/assets/landing/device-family.png b/.cursor/rules/roblox/assets/landing/device-family.png new file mode 100644 index 00000000..3ecdfd92 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/device-family.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ac47522c09b5d951010e3fd96d37d193aad15bddcd0fcc44785880e3bc0594a +size 838285 diff --git a/.cursor/rules/roblox/assets/landing/discovery.jpg b/.cursor/rules/roblox/assets/landing/discovery.jpg new file mode 100644 index 00000000..9575ce3c --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/discovery.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01c1695cda140abc4ace4b7cd811713e3472f25663715f12d6e84a194bc37e4c +size 421584 diff --git a/.cursor/rules/roblox/assets/landing/ebp.jpg b/.cursor/rules/roblox/assets/landing/ebp.jpg new file mode 100644 index 00000000..c1602dad --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/ebp.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d05577db5ece8e0b77f3064fda65ce520a200c0cc56b0acd6cdef587aed04fb +size 131957 diff --git a/.cursor/rules/roblox/assets/landing/education/banner.jpg b/.cursor/rules/roblox/assets/landing/education/banner.jpg new file mode 100644 index 00000000..a3f3b5a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/education/banner.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c17b0125c0a7d6c55809f4b1343cfc1efd20e884ef1419d6e012e7b18900576 +size 251390 diff --git a/.cursor/rules/roblox/assets/landing/engine-simulation.gif b/.cursor/rules/roblox/assets/landing/engine-simulation.gif new file mode 100644 index 00000000..1a88c1b2 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/engine-simulation.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87bd85ce0c5510bc04686d2c4c3f84024948d6db13dfcb29bfc34b971a26d12e +size 10321864 diff --git a/.cursor/rules/roblox/assets/landing/engine/banner.jpg b/.cursor/rules/roblox/assets/landing/engine/banner.jpg new file mode 100644 index 00000000..92129102 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/engine/banner.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c41e0d9de660eb73f590de8ce7711d3db6739a79fffb91b5758f48fd7986bbd +size 175310 diff --git a/.cursor/rules/roblox/assets/landing/get-started/Laser-Tag-Template.jpg b/.cursor/rules/roblox/assets/landing/get-started/Laser-Tag-Template.jpg new file mode 100644 index 00000000..5f2f029d --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/get-started/Laser-Tag-Template.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f531f93e08c7dedce8f7e272a6966e7e2c7593f363ba4544fa55e688f65fa839 +size 99238 diff --git a/.cursor/rules/roblox/assets/landing/get-started/Platformer-Template.png b/.cursor/rules/roblox/assets/landing/get-started/Platformer-Template.png new file mode 100644 index 00000000..ad6490a6 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/get-started/Platformer-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a5c07ca3071a0a586c3e34879053f06a8944ec1651e7257604016849cf4d8e9 +size 3146100 diff --git a/.cursor/rules/roblox/assets/landing/get-started/Racing-Detailed.jpg b/.cursor/rules/roblox/assets/landing/get-started/Racing-Detailed.jpg new file mode 100644 index 00000000..37dba833 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/get-started/Racing-Detailed.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6c6f2cd857fa553609f4a4943aaf80803fb980617342d83174e008749f0ca20 +size 573171 diff --git a/.cursor/rules/roblox/assets/landing/get-started/baseplate-template.png b/.cursor/rules/roblox/assets/landing/get-started/baseplate-template.png new file mode 100644 index 00000000..7235ea2e --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/get-started/baseplate-template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a70f761584ba2244c563b599dbb671ef9097b07e062cd7cda6444fc3be3aa591 +size 237976 diff --git a/.cursor/rules/roblox/assets/landing/get-started/first-experience.png b/.cursor/rules/roblox/assets/landing/get-started/first-experience.png new file mode 100644 index 00000000..df05ef0b --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/get-started/first-experience.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ee02a9c9f33ea0e901adaba8dc42f013c442dd281547b9e8894eb3f552ceab2 +size 1129662 diff --git a/.cursor/rules/roblox/assets/landing/get-started/modern-city-template.png b/.cursor/rules/roblox/assets/landing/get-started/modern-city-template.png new file mode 100644 index 00000000..64e91855 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/get-started/modern-city-template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b0d24f9147ba0e263dcd3a551baecc0829b992d6ee4de278a9f7853237d6605c +size 551614 diff --git a/.cursor/rules/roblox/assets/landing/get-started/racing-template.png b/.cursor/rules/roblox/assets/landing/get-started/racing-template.png new file mode 100644 index 00000000..569cc82c --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/get-started/racing-template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf146c9ee032ff6ac0f7bd376e0dad6cbf8ff9ca34806f85e4cb14d87c79f8b3 +size 585572 diff --git a/.cursor/rules/roblox/assets/landing/get-started/studio.png b/.cursor/rules/roblox/assets/landing/get-started/studio.png new file mode 100644 index 00000000..7ecb8579 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/get-started/studio.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:253c6f0c3b5c661d22b1685dc5afd844197bea3a95755ab702c5506a474c6319 +size 1934133 diff --git a/.cursor/rules/roblox/assets/landing/get-started/video-interviews.jpg b/.cursor/rules/roblox/assets/landing/get-started/video-interviews.jpg new file mode 100644 index 00000000..f6be1441 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/get-started/video-interviews.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c59900b1dfe755e2ba4a0ae4989b265ed25dc0c054629944db28e731c4ec28ec +size 112902 diff --git a/.cursor/rules/roblox/assets/landing/groups.jpg b/.cursor/rules/roblox/assets/landing/groups.jpg new file mode 100644 index 00000000..7cad11fc --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/groups.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6f1970962afc176f947649218553e31cb183a5fdff46859cfcab62c6d3239cc +size 195987 diff --git a/.cursor/rules/roblox/assets/landing/guides/banner.jpg b/.cursor/rules/roblox/assets/landing/guides/banner.jpg new file mode 100644 index 00000000..d0f5e58d --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/guides/banner.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3028756f300cbd6e3287e7c3075266a9fad2ea1abbc7c889c067f472e634d802 +size 156026 diff --git a/.cursor/rules/roblox/assets/landing/home/articleBanner_announcements.png b/.cursor/rules/roblox/assets/landing/home/articleBanner_announcements.png new file mode 100644 index 00000000..5fa72f40 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/home/articleBanner_announcements.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cf3085e63fd0d6386724e30d2de3ff66399d10afc1bd6466cb500828c097bc4 +size 21738 diff --git a/.cursor/rules/roblox/assets/landing/home/articleBanner_avatar.png b/.cursor/rules/roblox/assets/landing/home/articleBanner_avatar.png new file mode 100644 index 00000000..8d93ea55 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/home/articleBanner_avatar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1dfb8c8f756aa14318adeb63ead8557b54774c97140ba70cf6ce9e2d7cfcc699 +size 24887 diff --git a/.cursor/rules/roblox/assets/landing/home/articleBanner_building_visuals.png b/.cursor/rules/roblox/assets/landing/home/articleBanner_building_visuals.png new file mode 100644 index 00000000..7cc512ee --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/home/articleBanner_building_visuals.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12009cbad1a34a61df17d1c40230208596374a7c354bfe4726194ada85cd701d +size 24554 diff --git a/.cursor/rules/roblox/assets/landing/home/articleBanner_education_tutorials.png b/.cursor/rules/roblox/assets/landing/home/articleBanner_education_tutorials.png new file mode 100644 index 00000000..2eff2ffa --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/home/articleBanner_education_tutorials.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f70ffe2b2ff567f5a6258e33cbd18f9bb5f310308474631da7c3b385be3b495b +size 25661 diff --git a/.cursor/rules/roblox/assets/landing/home/articleBanner_open_cloud.png b/.cursor/rules/roblox/assets/landing/home/articleBanner_open_cloud.png new file mode 100644 index 00000000..e298f1f0 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/home/articleBanner_open_cloud.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f345b2c2cf4f2598093f497e06cd5a30ab3f94e94fe5c0f30d85c7bafd6b8531 +size 17792 diff --git a/.cursor/rules/roblox/assets/landing/home/articleBanner_production.png b/.cursor/rules/roblox/assets/landing/home/articleBanner_production.png new file mode 100644 index 00000000..4a0d291c --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/home/articleBanner_production.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea72c94502db89990cbcfa5951cb343f8072ae37af3ae8da94ceda7e4089e559 +size 25625 diff --git a/.cursor/rules/roblox/assets/landing/home/articleBanner_scripting.png b/.cursor/rules/roblox/assets/landing/home/articleBanner_scripting.png new file mode 100644 index 00000000..feef4a6e --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/home/articleBanner_scripting.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6924045b5624c0d3db08453213417493dbd1b192cdf195aa4fb05caabc952acf +size 24040 diff --git a/.cursor/rules/roblox/assets/landing/home/articleBanner_studio.png b/.cursor/rules/roblox/assets/landing/home/articleBanner_studio.png new file mode 100644 index 00000000..3e1cd692 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/home/articleBanner_studio.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b05ffa479ad930ff87e711a5942eb88ce8f9bf38ee28139db1781004bddb80d8 +size 25272 diff --git a/.cursor/rules/roblox/assets/landing/home/banner.jpg b/.cursor/rules/roblox/assets/landing/home/banner.jpg new file mode 100644 index 00000000..61e3cd89 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/home/banner.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78ef314222a250d7f7974e16e43e743bcd20f6ca01278361dc602602b130c344 +size 228056 diff --git a/.cursor/rules/roblox/assets/landing/home/creator-store.jpg b/.cursor/rules/roblox/assets/landing/home/creator-store.jpg new file mode 100644 index 00000000..3ce10eab --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/home/creator-store.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19db8f6d18c1566b1c720849885065787bd0264ee24d2205653cb07b63141d11 +size 304092 diff --git a/.cursor/rules/roblox/assets/landing/home/discover.jpg b/.cursor/rules/roblox/assets/landing/home/discover.jpg new file mode 100644 index 00000000..2a2114f1 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/home/discover.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3cac90c37b23708fb2a35f2556a4892f6f53fe6aede4cc041a43e13e2f89766 +size 572176 diff --git a/.cursor/rules/roblox/assets/landing/home/started_creator_dashboard.jpg b/.cursor/rules/roblox/assets/landing/home/started_creator_dashboard.jpg new file mode 100644 index 00000000..bbfad3ea --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/home/started_creator_dashboard.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cae5d4d5c660b2cefe1d5138c3890d0a47554ba6aa92982b3987eb5768771877 +size 53379 diff --git a/.cursor/rules/roblox/assets/landing/home/started_studio.jpg b/.cursor/rules/roblox/assets/landing/home/started_studio.jpg new file mode 100644 index 00000000..76d7dee6 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/home/started_studio.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:219ac921ef6ef9dceb5cd4b05b929526131a1714d8e60e7445410d749574a2ef +size 128989 diff --git a/.cursor/rules/roblox/assets/landing/home/topic_avatar.jpg b/.cursor/rules/roblox/assets/landing/home/topic_avatar.jpg new file mode 100644 index 00000000..b7f1e2bb --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/home/topic_avatar.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6aa5686a3f9a0f79a07c19806188b17447b21f49ba2b567cee06d3f154cda27 +size 73506 diff --git a/.cursor/rules/roblox/assets/landing/home/topic_building_visuals.jpg b/.cursor/rules/roblox/assets/landing/home/topic_building_visuals.jpg new file mode 100644 index 00000000..bcb8f277 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/home/topic_building_visuals.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f0b5e304e1e8098c0c967ae9c72ca47e6d77d8f9372466045847d1bc22c92cd +size 149646 diff --git a/.cursor/rules/roblox/assets/landing/home/topic_education.jpg b/.cursor/rules/roblox/assets/landing/home/topic_education.jpg new file mode 100644 index 00000000..6300c225 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/home/topic_education.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b15d40379fb44a14e0ab364277f5515fb333f293ef1047e98fdcbc1c0d605241 +size 160272 diff --git a/.cursor/rules/roblox/assets/landing/home/topic_production.jpg b/.cursor/rules/roblox/assets/landing/home/topic_production.jpg new file mode 100644 index 00000000..dcc6d76f --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/home/topic_production.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5b5c45686744f4f33fc7f383dd03bea98067756f4d149701d0f87e960e77485 +size 153371 diff --git a/.cursor/rules/roblox/assets/landing/home/topic_scripting.jpg b/.cursor/rules/roblox/assets/landing/home/topic_scripting.jpg new file mode 100644 index 00000000..e7493209 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/home/topic_scripting.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e750da740c80a5ad7ad9a23af8585176dca9630e9da7c247f3ad7e7ebfacf75 +size 174090 diff --git a/.cursor/rules/roblox/assets/landing/hub-home.jpg b/.cursor/rules/roblox/assets/landing/hub-home.jpg new file mode 100644 index 00000000..f5058ac4 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/hub-home.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1a06606cef5894c5da480b9b8a1ea247ea0e51cd1c38362d7ab82e99af12f31 +size 256263 diff --git a/.cursor/rules/roblox/assets/landing/in-exp-monetization.jpg b/.cursor/rules/roblox/assets/landing/in-exp-monetization.jpg new file mode 100644 index 00000000..c7403985 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/in-exp-monetization.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b29584b52b6c44ffdcd89407d88bc65e8d363aa4b8b6c36935024178ad1db215 +size 468347 diff --git a/.cursor/rules/roblox/assets/landing/limited-items.png b/.cursor/rules/roblox/assets/landing/limited-items.png new file mode 100644 index 00000000..9cae5b5e --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/limited-items.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6726ca57f16884edbffe92c432f050e65ef1bb6e081ed9fed1a39d958c65dab +size 297783 diff --git a/.cursor/rules/roblox/assets/landing/marketplace.jpg b/.cursor/rules/roblox/assets/landing/marketplace.jpg new file mode 100644 index 00000000..734de5f6 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/marketplace.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6e3d4ea1233512d3b6e1d82b573b351e02858e0bf947c796ec9c4d487131180 +size 215075 diff --git a/.cursor/rules/roblox/assets/landing/plugins.jpg b/.cursor/rules/roblox/assets/landing/plugins.jpg new file mode 100644 index 00000000..6c6fd54f --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/plugins.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43b382f1339d3a522217114e5b0957ea6e9146b3e730365411989d51b18ef707 +size 119030 diff --git a/.cursor/rules/roblox/assets/landing/price-floors.png b/.cursor/rules/roblox/assets/landing/price-floors.png new file mode 100644 index 00000000..f450a3a8 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/price-floors.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09142535f196efc0acb7ef982cadc599fab8633f278c51f0f32acb897c81d8c2 +size 284879 diff --git a/.cursor/rules/roblox/assets/landing/scripting-animation.gif b/.cursor/rules/roblox/assets/landing/scripting-animation.gif new file mode 100644 index 00000000..f4f9fb31 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/scripting-animation.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d5a78b4a7315cf87275cfb7df7af51ef5baa81da48e6945163af0fd031bff65 +size 9827618 diff --git a/.cursor/rules/roblox/assets/landing/scripting.png b/.cursor/rules/roblox/assets/landing/scripting.png new file mode 100644 index 00000000..a93be0f9 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/scripting.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4045c32630a8cbe26f9d789d02a8747825334fb319ad6a92b083df297438970 +size 263716 diff --git a/.cursor/rules/roblox/assets/landing/sponsored-items.jpg b/.cursor/rules/roblox/assets/landing/sponsored-items.jpg new file mode 100644 index 00000000..7bb1fbc5 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/sponsored-items.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2d060d16fba8ceee4300a189e8fc77df37bb182fd184c944f723ccd83be3aed +size 75077 diff --git a/.cursor/rules/roblox/assets/landing/store.jpg b/.cursor/rules/roblox/assets/landing/store.jpg new file mode 100644 index 00000000..3c7d436d --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/store.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84fa7b0727f65788451e00c02ab7ae65f30fb200a5ca3551679f27a4586514ba +size 201824 diff --git a/.cursor/rules/roblox/assets/landing/ugchomestore.jpeg b/.cursor/rules/roblox/assets/landing/ugchomestore.jpeg new file mode 100644 index 00000000..abce2555 --- /dev/null +++ b/.cursor/rules/roblox/assets/landing/ugchomestore.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6b960340bb9e04a82fb7b5db1980a78815c636b1ba821aca5a5e25b034885e3 +size 202869 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/aero-fluid-dynamics/Global-Wind-Gusts.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/aero-fluid-dynamics/Global-Wind-Gusts.mp4 new file mode 100644 index 00000000..defcafef --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/aero-fluid-dynamics/Global-Wind-Gusts.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:108fbd3f1da7cb2509d12c10cc8a1cb2c3902f00c6be67644e670254814f1745 +size 18401609 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/aero-fluid-dynamics/Global-Wind-Particles.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/aero-fluid-dynamics/Global-Wind-Particles.mp4 new file mode 100644 index 00000000..d53a4e01 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/aero-fluid-dynamics/Global-Wind-Particles.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b040a97ab207f279b0e4859bddb22297571ddb65c9f941790f9e64b349bf0329 +size 18927846 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/aero-fluid-dynamics/Global-Wind-Showcase.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/aero-fluid-dynamics/Global-Wind-Showcase.mp4 new file mode 100644 index 00000000..49d9ff4a --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/aero-fluid-dynamics/Global-Wind-Showcase.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7ca96c126f388f89d8be7bfe6d4f867ac9e1c5e85d098743912d1fba4a219e0 +size 13864702 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/aero-fluid-dynamics/Wind-Direction-Widget.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/aero-fluid-dynamics/Wind-Direction-Widget.jpg new file mode 100644 index 00000000..dac5e942 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/aero-fluid-dynamics/Wind-Direction-Widget.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1fd37ed86de5ee114e930ac2c075a834367340742c4e0eab77eee22727ea6aaf +size 301633 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Color-A.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Color-A.jpg new file mode 100644 index 00000000..14f273b1 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Color-A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c179536cafee326fd987dab7fadd830f5c678b5eac50a640578e5bd352104b0 +size 144512 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Color-B.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Color-B.jpg new file mode 100644 index 00000000..fcfc1bea --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Color-B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3adbc335162f3f799a1790dc14c8d7c012c13618a7b6822295fb229241917e8d +size 148242 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Decay-A.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Decay-A.jpg new file mode 100644 index 00000000..6a29d790 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Decay-A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f40941f0731bb45abe7b067df973cb6af25dfdb14ef15658a02effd2bb79fd54 +size 143340 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Decay-B.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Decay-B.jpg new file mode 100644 index 00000000..9e125cb2 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Decay-B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a2ed5f27a3ba835fe682825914a9baf7b3bd77304ab524c9b92f8836ae8e276 +size 160738 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Density-A.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Density-A.jpg new file mode 100644 index 00000000..9bcf9122 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Density-A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2d1adb05702d932c2a8e678032e2ec380bd3fcdf4d0b6a1da9d6ead307306ba +size 172962 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Density-B.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Density-B.jpg new file mode 100644 index 00000000..6239a1d2 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Density-B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:589ecef30723bfefb5b724e9e19c2183c9c603c964b6807c1f93cb7cad4a5301 +size 160056 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Glare-A.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Glare-A.jpg new file mode 100644 index 00000000..9399751b --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Glare-A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a5c71752d59a0456785f41fed347fc711b43425c27a76bac21e1b3819986458 +size 154288 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Glare-B.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Glare-B.jpg new file mode 100644 index 00000000..6a29d790 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Glare-B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f40941f0731bb45abe7b067df973cb6af25dfdb14ef15658a02effd2bb79fd54 +size 143340 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Haze-A.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Haze-A.jpg new file mode 100644 index 00000000..4cdf273c --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Haze-A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7c3665e65408875bc0fc440cb10c695860d63d9699ead19226ea5917aa0b962 +size 143692 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Haze-B.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Haze-B.jpg new file mode 100644 index 00000000..cd9fa1cd --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Haze-B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f745f81986418133f1bfaf3b82ddac35d2dfeb4d042e8c41657b95bc90443c70 +size 110586 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Offset-A.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Offset-A.jpg new file mode 100644 index 00000000..e7d79052 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Offset-A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84f7b14880cd5d06145cfef9462f27c11812413ae84b35afc3e4dd5170e3c786 +size 157159 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Offset-B.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Offset-B.jpg new file mode 100644 index 00000000..b2fa339a --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Offset-B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a75b8241d70f1b2b31d3ab099d08328b3c7a51bbed411d121b8202b071072317 +size 157507 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Sahara-Sunset.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Sahara-Sunset.jpg new file mode 100644 index 00000000..35174e3b --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Sahara-Sunset.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06a3d725a08c8e7f118e8aa93b2f26f2ac8bde0ebdeafa68cde004dc8d2cda27 +size 111662 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Showcase.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Showcase.jpg new file mode 100644 index 00000000..b915e158 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/atmosphere/Showcase.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b98239480c3eb33eb32f2af9c4690ef628d6b9a63675d9543f4debb47141ed4d +size 100949 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/beam/Attachments-Rotated.png b/.cursor/rules/roblox/assets/lighting-and-effects/beam/Attachments-Rotated.png new file mode 100644 index 00000000..370eb3e9 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/beam/Attachments-Rotated.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fe406eebf2c67b541778d131b7a3e0a8c2eda0c3f4ef9161ca89d62e78058ec +size 66673 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/beam/ColorSequence-Applied.png b/.cursor/rules/roblox/assets/lighting-and-effects/beam/ColorSequence-Applied.png new file mode 100644 index 00000000..f140db13 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/beam/ColorSequence-Applied.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2efa81dfb9aa5f15b8816a25b0b069e952bafd85289ce8ca193ddaeb0e12fd6b +size 134383 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/beam/Curves-Applied.png b/.cursor/rules/roblox/assets/lighting-and-effects/beam/Curves-Applied.png new file mode 100644 index 00000000..adca06cb --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/beam/Curves-Applied.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:472eae0516c49ea578acaac091e6ca8fbc2cc4594c4c742602724232d8441637 +size 165226 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/beam/Default-Beam.png b/.cursor/rules/roblox/assets/lighting-and-effects/beam/Default-Beam.png new file mode 100644 index 00000000..2ce3abff --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/beam/Default-Beam.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c90d1cf74ae66d7b7ee4a5429252416b1110e503820d6d1fb85138845b54bff6 +size 63199 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/beam/FaceCamera.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/beam/FaceCamera.mp4 new file mode 100644 index 00000000..8b95718d --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/beam/FaceCamera.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29d9177cfd98ea12f5e4275aacc9f949170384ed1a897133d9decd51bb5d2a17 +size 1507917 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/beam/Showcase.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/beam/Showcase.mp4 new file mode 100644 index 00000000..336207b1 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/beam/Showcase.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13e3fe00d60927a1be24bade0f2bfb329cb2995cfa60bef9ba18b10b405559fe +size 4645569 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/beam/Texture-Applied.png b/.cursor/rules/roblox/assets/lighting-and-effects/beam/Texture-Applied.png new file mode 100644 index 00000000..7d445fb2 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/beam/Texture-Applied.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a6567500954a695c9171bd51f6ff9f3d00f8dff72e399a313c71f7cca543008 +size 43193 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/beam/Transparency-Applied.png b/.cursor/rules/roblox/assets/lighting-and-effects/beam/Transparency-Applied.png new file mode 100644 index 00000000..d91d488b --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/beam/Transparency-Applied.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4f1ef5be49aeed1318cd391d90a24918a711f52cef69b042b62585a406bc962 +size 41432 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/beam/Width-Adjusted.png b/.cursor/rules/roblox/assets/lighting-and-effects/beam/Width-Adjusted.png new file mode 100644 index 00000000..222a68ca --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/beam/Width-Adjusted.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b49541d46b97f50f923c4c44af7821ccde7696c05ed62c01c514441a5ebc34b +size 152131 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/clouds/Color-A.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/clouds/Color-A.jpg new file mode 100644 index 00000000..5aabb676 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/clouds/Color-A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0799231f8bcadcd3e744ab8b06516b0728df6d9e8964329ad02227eb5d3a8266 +size 156460 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/clouds/Color-B.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/clouds/Color-B.jpg new file mode 100644 index 00000000..dec6db80 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/clouds/Color-B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fbe84a3b8d6a604ebd9eaf6ee6371df77577cc0afb610d9605fd167d55a692f +size 144567 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/clouds/Cover-A.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/clouds/Cover-A.jpg new file mode 100644 index 00000000..59b855e2 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/clouds/Cover-A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1130aef3359c5221a1ccfcdf4cb4ebf70ecc265b8d7e733bfcc3c50684461693 +size 150685 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/clouds/Cover-B.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/clouds/Cover-B.jpg new file mode 100644 index 00000000..41c912a1 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/clouds/Cover-B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08799c4af3d2115dfa92ef1a79cfdc115699c5c30eb2c4ffff5ff8aa12258a93 +size 146875 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/clouds/Density-A.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/clouds/Density-A.jpg new file mode 100644 index 00000000..fc431f46 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/clouds/Density-A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c9145847d822a41d776dc5f197220a4a852966115ed0934303f5dab53df59f5 +size 148976 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/clouds/Density-B.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/clouds/Density-B.jpg new file mode 100644 index 00000000..9033b9d8 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/clouds/Density-B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26909337796af7aba685e18ac1f8bb01e3a8c3a625a3099218a990d3dd455349 +size 144013 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/clouds/Showcase.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/clouds/Showcase.mp4 new file mode 100644 index 00000000..2237e064 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/clouds/Showcase.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce8c4eedecd6f3765a8760be77c62562aad2b39f9c56c4698620338ee4c63fa4 +size 4396162 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Brightness-10.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Brightness-10.jpg new file mode 100644 index 00000000..65b8147d --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Brightness-10.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ed4876be5d655dec5d6cc6a214fb909f61dc7027d6140aa10bb051bf770132e +size 136380 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Brightness-2.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Brightness-2.jpg new file mode 100644 index 00000000..7f6a9ebd --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Brightness-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a27050f0890062b10c25b4151b1ec45912572781fcca39e84241d5daa44e93d +size 121884 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Brightness-50.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Brightness-50.jpg new file mode 100644 index 00000000..db36da9f --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Brightness-50.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c224c37445f2d74b2aa0d7c45fe89bb1d20df9bc6cca8a7bf0a5271b2b84873 +size 135549 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Color-0-255-125.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Color-0-255-125.jpg new file mode 100644 index 00000000..4eec1e7b --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Color-0-255-125.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3926b925913ae527d923ec7cfa27190296abe45d7b004d4e8ebf0cc26a7094f0 +size 137589 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Color-255-100-50.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Color-255-100-50.jpg new file mode 100644 index 00000000..cd2ed184 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Color-255-100-50.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e144d6a1d90048866c58cb81be99c8bd980472ae3be7af9d5a279a9cc015c8f3 +size 130130 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Color-75-150-255.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Color-75-150-255.jpg new file mode 100644 index 00000000..f0215c58 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Color-75-150-255.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04cba0397489957bc3a869775f7a0a5815bdd0a5622db5a66dee20e8ee3ceebf +size 129833 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Shadows-False.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Shadows-False.jpg new file mode 100644 index 00000000..c47ce31a --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Shadows-False.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:230538b5d3a23e243d94125a47617b563680b49aab444bb168563768f5cb4dcf +size 261018 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Shadows-True.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Shadows-True.jpg new file mode 100644 index 00000000..f29c4628 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Light-Shadows-True.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec196bfd77485acbe64e63c0fe484aef91deb604eae6d9d022a760b167aefa46 +size 264801 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/PointLight-Range-12.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/PointLight-Range-12.jpg new file mode 100644 index 00000000..6b37039b --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/PointLight-Range-12.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb2ee40b59a41d7a755341096cb61864d50d7ff712300d92765037efa7bf2d35 +size 236523 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/PointLight-Range-8.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/PointLight-Range-8.jpg new file mode 100644 index 00000000..3a81d869 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/PointLight-Range-8.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a16685213638ce598355a6f076a2511f9afacd8d164876b19047aa09e971cfab +size 208169 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Showcase.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Showcase.jpg new file mode 100644 index 00000000..4d16435d --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/Showcase.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74d15edfdd28284caacb4394f3acd141c4d1cc73ade4da89b3e9ffad46acd469 +size 139953 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/SpotLight-Angle-30.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/SpotLight-Angle-30.jpg new file mode 100644 index 00000000..7fa546d7 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/SpotLight-Angle-30.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfd3f103ba3efe295d70e46c1e2ca55e44f066928c1b2f42b1646b559ca5df5f +size 242134 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/SpotLight-Angle-75.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/SpotLight-Angle-75.jpg new file mode 100644 index 00000000..7cb001fa --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/SpotLight-Angle-75.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7244ce1dc1f5afb8719273b97e068b279b92c13f0a5d6785ffc7a25237784a5 +size 264358 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/SpotLight-Face-Bottom.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/SpotLight-Face-Bottom.jpg new file mode 100644 index 00000000..9c751d85 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/SpotLight-Face-Bottom.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c398760731d79619ace5718cd0c775ffc9f732d6eeb547224e56ddd907d4288 +size 255838 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/SpotLight-Face-Left.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/SpotLight-Face-Left.jpg new file mode 100644 index 00000000..f2be620e --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/SpotLight-Face-Left.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c634e4ef0d56b1da2e21c5d19a84277cc39f39d51fd35f046411864392d64343 +size 252716 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/SurfaceLight-Angle-0.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/SurfaceLight-Angle-0.jpg new file mode 100644 index 00000000..111cf1c0 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/SurfaceLight-Angle-0.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6e2480da1f81b8ac377357dde7903614871e0cc94f78bdb2cedd8f25e897e82 +size 245574 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/SurfaceLight-Face-Bottom.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/SurfaceLight-Face-Bottom.jpg new file mode 100644 index 00000000..b651a6d7 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/SurfaceLight-Face-Bottom.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4731216a38d9764c78e6910b315fbad007ad400b6b43003c3496d58c8be9668 +size 256996 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/SurfaceLight-Face-Right.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/SurfaceLight-Face-Right.jpg new file mode 100644 index 00000000..5a08cfda --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/light-sources/SurfaceLight-Face-Right.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc29a4e5ff6927dc2bab2ea4e87faac3999fc2d1cb5f785a3f652891a9a71022 +size 273860 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/Ambient-0-0-0.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/Ambient-0-0-0.jpg new file mode 100644 index 00000000..ee07c544 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/Ambient-0-0-0.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61bf68b96c3cd7715e48583a7bfd2f31e920918644bfa77ac9c4f88543cd5ec3 +size 203378 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/Ambient-160-80-0.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/Ambient-160-80-0.jpg new file mode 100644 index 00000000..f15e2372 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/Ambient-160-80-0.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07de6071621bb425633795e14c3a4111b7b2fef86d604268545aee03ec3f7908 +size 205718 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/Ambient-25-0-125.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/Ambient-25-0-125.jpg new file mode 100644 index 00000000..89f9981c --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/Ambient-25-0-125.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8f0f2b96d50179187e432a10a656900470f3be5d07ebdf49e14fc7184c24d64 +size 209236 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/Brightness-0.5.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/Brightness-0.5.jpg new file mode 100644 index 00000000..c303c4a8 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/Brightness-0.5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3902a4286afe8136f524936f7908eccd78554306b529b7cf0642e656f5c261f0 +size 125065 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/Brightness-1.5.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/Brightness-1.5.jpg new file mode 100644 index 00000000..7d296315 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/Brightness-1.5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e012fd72f4776137c54e99c16e7e7b033edc9737567f8b11abe36cce105960e +size 167652 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/Brightness-3.75.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/Brightness-3.75.jpg new file mode 100644 index 00000000..20297829 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/Brightness-3.75.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e67823e4767b13e533030c7ef138d4ce6d2d043df49a5903322fa8d9028d67c +size 216722 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ColorShift-Bottom-0-255-190.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ColorShift-Bottom-0-255-190.jpg new file mode 100644 index 00000000..b99755a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ColorShift-Bottom-0-255-190.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c107c8d56864e7649acc94c09a9c9d15a0bb760e30114d16da35a569304e72fc +size 184315 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ColorShift-Bottom-255-0-220.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ColorShift-Bottom-255-0-220.jpg new file mode 100644 index 00000000..602f3e27 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ColorShift-Bottom-255-0-220.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a01249e31b28724b2cd31e72db460bdfdf1df8323405b42f9928212927d1691 +size 182560 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ColorShift-Top-0-100-255.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ColorShift-Top-0-100-255.jpg new file mode 100644 index 00000000..46c7e373 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ColorShift-Top-0-100-255.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a6cad863b1a2d72bb6a077a2c5a8e67d633e1a078bbadcccbfb6980aaf208ed +size 166949 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ColorShift-Top-255-60-0.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ColorShift-Top-255-60-0.jpg new file mode 100644 index 00000000..fa7ed828 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ColorShift-Top-255-60-0.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f2baa57166364cd58ce1f1f040264820d1726e148e8a3ac9c24497b98edf82f +size 172126 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/EnvironmentDiffuseScale-0.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/EnvironmentDiffuseScale-0.jpg new file mode 100644 index 00000000..99958143 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/EnvironmentDiffuseScale-0.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:230c3d055f9effc72854689337d2971e9270b03776c13b884d56d093c6304b92 +size 145078 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/EnvironmentDiffuseScale-1.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/EnvironmentDiffuseScale-1.jpg new file mode 100644 index 00000000..f384a3b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/EnvironmentDiffuseScale-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfe3fc987f15b980a6ddfdcebaac65003c1776dda52d328206680d529d1f76e5 +size 151617 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/EnvironmentSpecularScale-0.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/EnvironmentSpecularScale-0.jpg new file mode 100644 index 00000000..f33e5bc9 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/EnvironmentSpecularScale-0.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ce0ca8afc3cc2256f471c4af367d11d4fb4ca816177c6eb83f75cafc85ac4dc +size 160351 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/EnvironmentSpecularScale-1.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/EnvironmentSpecularScale-1.jpg new file mode 100644 index 00000000..5a0bc141 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/EnvironmentSpecularScale-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6de464c7dc418aeb29887a55b6f3b9cd68c8668fd21d45b690e5c2d64a125ad7 +size 185347 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ExposureCompensation--1.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ExposureCompensation--1.jpg new file mode 100644 index 00000000..e277ecd7 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ExposureCompensation--1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d3d27afafb633fb0e91ae3a88174225a82ec69de73365275dd8a910112fd7a3 +size 100189 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ExposureCompensation-0.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ExposureCompensation-0.jpg new file mode 100644 index 00000000..415490d7 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ExposureCompensation-0.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61f067eac629d42aa973742583c6355ad7d86d832865ec88ad7dcd49ff995ad4 +size 124147 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ExposureCompensation-1.25.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ExposureCompensation-1.25.jpg new file mode 100644 index 00000000..833530ea --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ExposureCompensation-1.25.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd1cac36b7cc0cdf65a412b7968fc75758e4e808bb3cf3f9f8a15d8250ccb4ec +size 139380 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/Geographic-Latitude.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/Geographic-Latitude.mp4 new file mode 100644 index 00000000..abc946aa --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/Geographic-Latitude.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f355601dbe157c3bd8977d53d780910690cf5c2462f0e7c2ceff4b975112d2c8 +size 7109542 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/GlobalShadows-False.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/GlobalShadows-False.jpg new file mode 100644 index 00000000..d317b265 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/GlobalShadows-False.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfa29c41aba01087bfbad4b0dd7bad56fd3e68ad0d2a11a29898f7bc17d32aab +size 142081 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/GlobalShadows-True.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/GlobalShadows-True.jpg new file mode 100644 index 00000000..810ee482 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/GlobalShadows-True.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e1afbfaa724864f98b8a4abf855fefb1a3082fc3a9461ca09a3344ba04fa59a +size 125161 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/LightingStyle-Realistic.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/LightingStyle-Realistic.jpg new file mode 100644 index 00000000..f2c0fc73 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/LightingStyle-Realistic.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bcff7287ea9d471dcabde7e8217bfcadf3b6577cbca192be6a7c2d413779c1b2 +size 347000 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/LightingStyle-Soft.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/LightingStyle-Soft.jpg new file mode 100644 index 00000000..97fbf550 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/LightingStyle-Soft.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96d54d1c067eda3388b37dd5dfdeae0bb28e3e44a5d05fb37e64c7922fced8e6 +size 350293 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/OutdoorAmbient-0-175-255.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/OutdoorAmbient-0-175-255.jpg new file mode 100644 index 00000000..5b09e2a6 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/OutdoorAmbient-0-175-255.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cdabe7ce0d02f4055aa5b194362dccec3804a7186a510b8d20da87ac7536e92f +size 110378 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/OutdoorAmbient-200-150-240.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/OutdoorAmbient-200-150-240.jpg new file mode 100644 index 00000000..ebe83a4c --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/OutdoorAmbient-200-150-240.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc80fedc2685da82bbca8a0b08e1d7c2e23b5c51c31e446b28e4b70bc4bf934a +size 109818 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/OutdoorAmbient-255-150-50.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/OutdoorAmbient-255-150-50.jpg new file mode 100644 index 00000000..75d1f273 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/OutdoorAmbient-255-150-50.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3003b98acba3db61e213455539f838657acaf6689cb94d434078c19d472e2b4 +size 117154 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ShadowSoftness-0.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ShadowSoftness-0.jpg new file mode 100644 index 00000000..07705c72 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ShadowSoftness-0.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5210c37505914d7d065d9ad624eed926f5720a453eaee1b48cc4f62a3ff07063 +size 145182 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ShadowSoftness-1.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ShadowSoftness-1.jpg new file mode 100644 index 00000000..0f95ae8c --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/ShadowSoftness-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c364a13b2e3fe964bfdaf4766c6d0142146a23b6c103e8f8dbc486e164e13120 +size 136080 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/TimeOfDay-0.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/TimeOfDay-0.jpg new file mode 100644 index 00000000..3d18d361 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/TimeOfDay-0.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93203b47d5d51ebe128f2951e67039ba53f24afc9ac3f77b917b8b7825e40591 +size 132819 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/TimeOfDay-17.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/TimeOfDay-17.jpg new file mode 100644 index 00000000..785803f3 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/TimeOfDay-17.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d425d8999671453112e0f41bfd7ee78d891c0d8d087e0118b71916a776cf19c8 +size 222032 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/TimeOfDay-6.3.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/TimeOfDay-6.3.jpg new file mode 100644 index 00000000..86f305ac --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/lighting-properties/TimeOfDay-6.3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5d80e49b9d21f59d26521ad3babd42e7a7f621bdc80c0458c4ccf1247da3eb5 +size 200685 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/8x8-Explosion.png b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/8x8-Explosion.png new file mode 100644 index 00000000..4bd02798 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/8x8-Explosion.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06b82c2f8d9d8f4638dccbefeb84552c67ad99c00fb832d67d315c2c7ef061a7 +size 431505 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Color-Examples.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Color-Examples.jpg new file mode 100644 index 00000000..83457a70 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Color-Examples.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4900309e8435afc0e4789332fc5164a560c2aaac0cf4625e868126868b06bba +size 191391 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Cylinder-ShapePartial-0.5.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Cylinder-ShapePartial-0.5.jpg new file mode 100644 index 00000000..4ddf5274 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Cylinder-ShapePartial-0.5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d274a557dce627615c7e91fb51730c4018646dfd224aa12d02622a2bc0dc271e +size 101797 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Cylinder-ShapePartial-0.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Cylinder-ShapePartial-0.jpg new file mode 100644 index 00000000..51f12164 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Cylinder-ShapePartial-0.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41bc3f4623397eb769abeb344d3824e800181812af96d42b730a82b404d479e8 +size 103451 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Cylinder-Surface.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Cylinder-Surface.jpg new file mode 100644 index 00000000..dedd07da --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Cylinder-Surface.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14f970269eb911359cb45530e0d8a7787a74f4f4e922b826f741a5a23dd44915 +size 104148 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Cylinder-Volume.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Cylinder-Volume.jpg new file mode 100644 index 00000000..dbbcdff4 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Cylinder-Volume.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f5ff7c6568dced97445bd13c96c23446bb64e2ecd0414ada7c5df2a35f377dc +size 101002 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Disc-ShapePartial-0.1.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Disc-ShapePartial-0.1.jpg new file mode 100644 index 00000000..fac4fd80 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Disc-ShapePartial-0.1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:264550a847ede9ec397af22c432fb9e6dcc2e26c48dad9cfe863d94bfcf8c6d5 +size 107598 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Disc-ShapePartial-0.5.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Disc-ShapePartial-0.5.jpg new file mode 100644 index 00000000..cfec3a49 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Disc-ShapePartial-0.5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:faac4c339ee1b83c87082deee8cc606243b2fff5c078198aeaa28bb6d616b7de +size 103700 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Emission-Direction.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Emission-Direction.mp4 new file mode 100644 index 00000000..0c5976e1 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Emission-Direction.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0846e6ea10a74b5f5bc651ca141851e7ff25c5f549cbc5fca3a06ea8daf5c291 +size 5467699 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Flipbook.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Flipbook.mp4 new file mode 100644 index 00000000..df3299f2 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Flipbook.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7c54c7bcbd86fdfb11cc4767718e4aa3d6b3f334dc912dbd25983149881838b +size 3687059 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/LightEmission.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/LightEmission.mp4 new file mode 100644 index 00000000..40f8bad7 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/LightEmission.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65cbf869669b9fedaab5efa3a4c5fad4eb1f8624acab7db2887f147bad100b41 +size 3092908 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Orientation.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Orientation.mp4 new file mode 100644 index 00000000..80fd836b --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Orientation.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6293f76351599cfa7cbc3a48d5f28f8086cd97932a50402512962cda6c0b68cd +size 9706293 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Shape-Box.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Shape-Box.jpg new file mode 100644 index 00000000..6dd956e7 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Shape-Box.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5f8bce9f792fc921ee9086f7439a477dcdcf3eadd24a5d72295ee5e059c64c8 +size 101300 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Shape-Cylinder.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Shape-Cylinder.jpg new file mode 100644 index 00000000..c6ab1599 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Shape-Cylinder.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7080077db7ee3f36659468396ce9e04db5471eb5ed490471f1351141fcb0aa3 +size 100273 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Shape-Disc.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Shape-Disc.jpg new file mode 100644 index 00000000..c9a7afc1 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Shape-Disc.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:92541620d4e677f18acd2e0ac8ce82a758bf14e9b7ffcd6cce55891338ccde73 +size 101121 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Shape-Sphere.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Shape-Sphere.jpg new file mode 100644 index 00000000..28a7a42c --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Shape-Sphere.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52de844ee2634557698e6fc99061d1ca232bb79ffc81eea7feeb1f86b17e3e31 +size 101203 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/ShapeInOut.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/ShapeInOut.mp4 new file mode 100644 index 00000000..db1742e1 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/ShapeInOut.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff84ced0c38d86b37968bb3b8cb86224d9aa7b8f18b4a3b6636dad03ea93dc49 +size 5729860 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Showcase.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Showcase.mp4 new file mode 100644 index 00000000..065531ae --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Showcase.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce13ee297f14afa98df3edd3482ac563bf47ed7ab1654f0c1cf1ee16dd677e2d +size 3648506 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Size-Envelope.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Size-Envelope.mp4 new file mode 100644 index 00000000..99add40b --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Size-Envelope.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8c41df785a1171955a3862f1a6663be9fbdc7876a36fe064dc7caed49aed084 +size 2867761 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Speed.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Speed.mp4 new file mode 100644 index 00000000..ffdd8524 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Speed.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d62196980691abdf1ea6ddf451411c3bbe50399aaeeb8991a95cdae10b5b640a +size 3314263 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Sphere-ShapePartial-0.5.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Sphere-ShapePartial-0.5.jpg new file mode 100644 index 00000000..ee2c2847 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Sphere-ShapePartial-0.5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb9321db416ea8d915e63acdb0c51fda37902e49d2f2de7baf59fa9e4d043e16 +size 101886 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/SpreadAngle.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/SpreadAngle.mp4 new file mode 100644 index 00000000..bcd9792c --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/SpreadAngle.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3b570f08bacdc73dc0085d358c6b12df23b21865cd03b71768caba0db3710d1 +size 6701290 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Squash.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Squash.mp4 new file mode 100644 index 00000000..e583b269 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Squash.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5dcee432aab966e2596295691e078d33497c6c6953d6fc04c6c5fce5acb30990 +size 2700048 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Texture-Examples.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Texture-Examples.mp4 new file mode 100644 index 00000000..91ccb76c --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Texture-Examples.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21fbdc8ecae2bac6ea99ea0e13d9e42c73aee1132ce3f961f3a5296ee3d5343f +size 3359762 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Texture-Indicated.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Texture-Indicated.jpg new file mode 100644 index 00000000..401bf9ce --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Texture-Indicated.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef22890d124ca69f980545383e99c30343d5f69f98e1d88119d39a0fe61db703 +size 122012 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Transparency.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Transparency.mp4 new file mode 100644 index 00000000..b2188cfc --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/particle-emitter/Transparency.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b49ae2ac7a196859cacca2f11be9a687b49ecc93e864d399bc0703e697dcf412 +size 5910427 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/BloomEffect-With.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/BloomEffect-With.jpg new file mode 100644 index 00000000..feb8dda8 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/BloomEffect-With.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4145db1659d2db76ab5984545b6b8344ab91bfc7ab95e01102d261aef809edae +size 122673 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/BloomEffect-Without.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/BloomEffect-Without.jpg new file mode 100644 index 00000000..c2a94c3b --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/BloomEffect-Without.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:674e7185d326c4d2374a48a62ed96177054df9f55a7ec841451a6674098c213d +size 123560 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/BlurEffect-With.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/BlurEffect-With.jpg new file mode 100644 index 00000000..5809bea6 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/BlurEffect-With.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:599d53962013d92c698a7be9e06e7c07ce9371854985ba0606af1ef1798dfd56 +size 80145 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/BlurEffect-Without.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/BlurEffect-Without.jpg new file mode 100644 index 00000000..eb004f73 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/BlurEffect-Without.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bce9c32cf5eeb00cdab95e47a67b9f51d6eba71b55b9b6176d3fc2ab84902fac +size 123986 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/ColorCorrectionEffect-With.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/ColorCorrectionEffect-With.jpg new file mode 100644 index 00000000..80ab1bf1 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/ColorCorrectionEffect-With.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c82b242adab153d68c28d55ca2321948b71ea073af12c372b41f80fd9de9e504 +size 107385 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/ColorCorrectionEffect-Without.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/ColorCorrectionEffect-Without.jpg new file mode 100644 index 00000000..18ae86bb --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/ColorCorrectionEffect-Without.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1fafcc19fa984c41b44e083397e6efaae162305d3555af5d27634b51124c7f9d +size 114525 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/ColorGrading-Default.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/ColorGrading-Default.jpg new file mode 100644 index 00000000..06a3a541 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/ColorGrading-Default.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68115afb00d64985e2bc2bad2618e34614669b6116145270d8d9705f4b74fbc8 +size 203289 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/ColorGrading-Retro.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/ColorGrading-Retro.jpg new file mode 100644 index 00000000..f16a1621 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/ColorGrading-Retro.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc5776feec9ab79ae82f2361a5ac532fdfadea60415463da4b766feddf233257 +size 186353 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/DepthOfFieldEffect-With.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/DepthOfFieldEffect-With.jpg new file mode 100644 index 00000000..d76c31a6 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/DepthOfFieldEffect-With.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66c575e2ad7dfde2e65b79810601b77b67b98d30e0bd76014ccdc26243fc6aca +size 176246 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/DepthOfFieldEffect-Without.jpg b/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/DepthOfFieldEffect-Without.jpg new file mode 100644 index 00000000..5cfc32c9 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/DepthOfFieldEffect-Without.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a288a9f2dec8d0cbe13c60a7f009939713493d748397432b68db8671e0cd493 +size 204755 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/Sun-Rays-Effect.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/Sun-Rays-Effect.mp4 new file mode 100644 index 00000000..db47a24a --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/post-processing/Sun-Rays-Effect.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e3d103020235f89ece97a5d3bbc52e1d5fb0e2ed995538b1cdff9812364fd34 +size 6490670 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/skybox/Skybox-Folded.png b/.cursor/rules/roblox/assets/lighting-and-effects/skybox/Skybox-Folded.png new file mode 100644 index 00000000..2d00b9b8 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/skybox/Skybox-Folded.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ddf72166152f347372209895b5d6bd72a73dd11fa0b1999af9c4e9f41179c305 +size 672399 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/skybox/Skybox-Orientation.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/skybox/Skybox-Orientation.mp4 new file mode 100644 index 00000000..2283b6be --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/skybox/Skybox-Orientation.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45052e21e070983eab5833b5924da659608e0a3c8fd53ae6b2927d27ddc2720b +size 10650302 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/skybox/Skybox-Property-Faces.png b/.cursor/rules/roblox/assets/lighting-and-effects/skybox/Skybox-Property-Faces.png new file mode 100644 index 00000000..a1921036 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/skybox/Skybox-Property-Faces.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95f3955ba3bccf4edc94cb51c5f8540c9239ba1669fd11d7af31c5fcb61ad4fd +size 232126 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/skybox/Skybox-Unfolded.png b/.cursor/rules/roblox/assets/lighting-and-effects/skybox/Skybox-Unfolded.png new file mode 100644 index 00000000..29bdac40 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/skybox/Skybox-Unfolded.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bb0d5ac700d4bbe5a9efedc8df82010f063a97e00d47d98bdaa73c9a2657d62 +size 238360 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/trail/Attachment-Width-Between.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/trail/Attachment-Width-Between.mp4 new file mode 100644 index 00000000..28793c7a --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/trail/Attachment-Width-Between.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d6ff2df353bf386562ba94e5f2d0c29492727d9cd8d97fb9fbc61af30ff6b39 +size 2272647 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/trail/Color-Static-Gradient.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/trail/Color-Static-Gradient.mp4 new file mode 100644 index 00000000..8effd5a0 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/trail/Color-Static-Gradient.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7ea228be6210fd8d1ebf49b7774b4bbded5fab027f263c449f4ff20149adaad +size 3804417 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/trail/Lifetime.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/trail/Lifetime.mp4 new file mode 100644 index 00000000..1c955f39 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/trail/Lifetime.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b69640af53d14ebb862befb6513f6e3bb4cdc2b9c5196403d4b18708a8134eef +size 1006009 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/trail/Showcase.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/trail/Showcase.mp4 new file mode 100644 index 00000000..1c8227e5 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/trail/Showcase.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:442c0bf6993811c3e30f11c14a74b936d7ef7b05972b63f2bec9e017c564bd36 +size 3244336 diff --git a/.cursor/rules/roblox/assets/lighting-and-effects/trail/Textures.mp4 b/.cursor/rules/roblox/assets/lighting-and-effects/trail/Textures.mp4 new file mode 100644 index 00000000..4875c4b5 --- /dev/null +++ b/.cursor/rules/roblox/assets/lighting-and-effects/trail/Textures.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b178927ac15dac2d2b734e03fd87cc026a46db3a65758aef47570b5bbf75882 +size 2559755 diff --git a/.cursor/rules/roblox/assets/localization/ATC-Studio-Disabled.png b/.cursor/rules/roblox/assets/localization/ATC-Studio-Disabled.png new file mode 100644 index 00000000..21f95666 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/ATC-Studio-Disabled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:647f3b7cc58b6dd17589c31a1385641a2b3d00b7988c111dcd0c44f31e87a370 +size 79482 diff --git a/.cursor/rules/roblox/assets/localization/ATC-Studio-Enabled.png b/.cursor/rules/roblox/assets/localization/ATC-Studio-Enabled.png new file mode 100644 index 00000000..67d86cdf --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/ATC-Studio-Enabled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a75c6094204d7fd808e1fc382ca1cf44f4b01eaad5b7d9c0de1deddf394c289e +size 81101 diff --git a/.cursor/rules/roblox/assets/localization/Add-Languages-Menu.png b/.cursor/rules/roblox/assets/localization/Add-Languages-Menu.png new file mode 100644 index 00000000..64304a8f --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Add-Languages-Menu.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:352dc7487063cedce76b8892584a9c0f4132fa8f492496b4b28b81ddb3c1d25c +size 32814 diff --git a/.cursor/rules/roblox/assets/localization/Add-Languages.png b/.cursor/rules/roblox/assets/localization/Add-Languages.png new file mode 100644 index 00000000..7114cd8a --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Add-Languages.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:769a2d4ab24dbd135af2eeb187db68eba89d80a29a3ad36db9b7e70550213d19 +size 103240 diff --git a/.cursor/rules/roblox/assets/localization/Automatic-Translation-Quotas.png b/.cursor/rules/roblox/assets/localization/Automatic-Translation-Quotas.png new file mode 100644 index 00000000..005eef24 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Automatic-Translation-Quotas.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d8247ca4cdae5e84b9842060a2660d582592d072a00ad90622306fa040861c0 +size 85009 diff --git a/.cursor/rules/roblox/assets/localization/Change-Source-Language-Dropdown.png b/.cursor/rules/roblox/assets/localization/Change-Source-Language-Dropdown.png new file mode 100644 index 00000000..41a97f3e --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Change-Source-Language-Dropdown.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5932d538596fb44b88e5450eb8c9dd5386745a92367a7c2e03c5ec334d2ac7c9 +size 103009 diff --git a/.cursor/rules/roblox/assets/localization/Concept-Banner.jpg b/.cursor/rules/roblox/assets/localization/Concept-Banner.jpg new file mode 100644 index 00000000..1d3b9d0f --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Concept-Banner.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50a2fbcfec39a1e30f94d225afe686a7784576953161bf7ac79ee65616f25639 +size 229588 diff --git a/.cursor/rules/roblox/assets/localization/Dynamic-Content-Example-A.jpg b/.cursor/rules/roblox/assets/localization/Dynamic-Content-Example-A.jpg new file mode 100644 index 00000000..c47d2a4c --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Dynamic-Content-Example-A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:629f0943867526f1775c007bdd11ae5a8b994f3ec30c3e177092c1ad7bc1e7ec +size 92654 diff --git a/.cursor/rules/roblox/assets/localization/Dynamic-Content-Example-B.jpg b/.cursor/rules/roblox/assets/localization/Dynamic-Content-Example-B.jpg new file mode 100644 index 00000000..9474b56c --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Dynamic-Content-Example-B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84159f45ea67a937e98321743179093686b45ffd9872cc9ba9cc39ce6a98e849 +size 88790 diff --git a/.cursor/rules/roblox/assets/localization/Dynamic-Content-Example-C.jpg b/.cursor/rules/roblox/assets/localization/Dynamic-Content-Example-C.jpg new file mode 100644 index 00000000..59d9f355 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Dynamic-Content-Example-C.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb8fae964e8361cf29b95cefe8b3297562e2e7942fa515c09370e69c95d6ab1a +size 86204 diff --git a/.cursor/rules/roblox/assets/localization/Experience-Page-Configure-Localization.png b/.cursor/rules/roblox/assets/localization/Experience-Page-Configure-Localization.png new file mode 100644 index 00000000..353070c5 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Experience-Page-Configure-Localization.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d1153224fb7d8706b9ec7609beb21cb4c022c7f35cf7976462f25a1c0f41000 +size 85371 diff --git a/.cursor/rules/roblox/assets/localization/Game-Settings-Configure-Localization.png b/.cursor/rules/roblox/assets/localization/Game-Settings-Configure-Localization.png new file mode 100644 index 00000000..c5a6a845 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Game-Settings-Configure-Localization.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2293b880bb3c2c11323c7a572a62e9f6c94c7c373e5f6430b8e8b0afc5330d69 +size 26761 diff --git a/.cursor/rules/roblox/assets/localization/In-Experience-Language-Switcher-Modal.png b/.cursor/rules/roblox/assets/localization/In-Experience-Language-Switcher-Modal.png new file mode 100644 index 00000000..91d5280a --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/In-Experience-Language-Switcher-Modal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:969bf1465cea86319a0cbe851f45eb862620999cc0d79a29831da3e5ca3e73da +size 580183 diff --git a/.cursor/rules/roblox/assets/localization/In-Experience-Language-Switcher.png b/.cursor/rules/roblox/assets/localization/In-Experience-Language-Switcher.png new file mode 100644 index 00000000..e632b376 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/In-Experience-Language-Switcher.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55e41ed635717af7159abe3c72329b7104ccd9032f2d571a4147dc3461b0e784 +size 1320223 diff --git a/.cursor/rules/roblox/assets/localization/Invite-User-As-Translator.png b/.cursor/rules/roblox/assets/localization/Invite-User-As-Translator.png new file mode 100644 index 00000000..0a0fc625 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Invite-User-As-Translator.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed28681d255c1ac0ca1e761e02a4f77d2a14dc453b869c0cb137a90c8b3332c7 +size 25461 diff --git a/.cursor/rules/roblox/assets/localization/Locale-Left-Nav.png b/.cursor/rules/roblox/assets/localization/Locale-Left-Nav.png new file mode 100644 index 00000000..60fc66c7 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Locale-Left-Nav.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80e5c2dd3e6d56a34bb4bf8564fc208761042fb399e6d17e26cf1c57dea2d391 +size 194718 diff --git a/.cursor/rules/roblox/assets/localization/Locale-Source.png b/.cursor/rules/roblox/assets/localization/Locale-Source.png new file mode 100644 index 00000000..6c704583 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Locale-Source.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e23c95de30a930ef04e25fa57e5487e45d9e6d73e9b81fdb9d5c8dbb928eaec +size 116660 diff --git a/.cursor/rules/roblox/assets/localization/Locale-Translation.png b/.cursor/rules/roblox/assets/localization/Locale-Translation.png new file mode 100644 index 00000000..0a44ac33 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Locale-Translation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b0115025df7d64c881a21b9841d10a81e7ba710a02ab7f1cb2122898d9e4b99d +size 274448 diff --git a/.cursor/rules/roblox/assets/localization/Localized-Image-English.png b/.cursor/rules/roblox/assets/localization/Localized-Image-English.png new file mode 100644 index 00000000..2bf40702 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Localized-Image-English.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8870148b2f6c2a6f18652e4e12012bde95d258876ba62e79c6ab1bff21dded41 +size 107937 diff --git a/.cursor/rules/roblox/assets/localization/Localized-Image-Portuguese.png b/.cursor/rules/roblox/assets/localization/Localized-Image-Portuguese.png new file mode 100644 index 00000000..81c9cc0c --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Localized-Image-Portuguese.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:347b3d8a52d19e6af63d550adffc9078d28e206b71b2301f56dff74319de0571 +size 106377 diff --git a/.cursor/rules/roblox/assets/localization/Localized-Image-Spanish.png b/.cursor/rules/roblox/assets/localization/Localized-Image-Spanish.png new file mode 100644 index 00000000..147165f5 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Localized-Image-Spanish.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2af6acc51cfd8d4215bc16ae33456ebeed763e09e7c6f24739892cf384660d9 +size 107866 diff --git a/.cursor/rules/roblox/assets/localization/Lock-Translations.png b/.cursor/rules/roblox/assets/localization/Lock-Translations.png new file mode 100644 index 00000000..ef8e6390 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Lock-Translations.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7999a016049edcadad40970a01c0226f3f1f2afcbbdf59b72685f81d2cb31b90 +size 59423 diff --git a/.cursor/rules/roblox/assets/localization/Parameter-Diagram.png b/.cursor/rules/roblox/assets/localization/Parameter-Diagram.png new file mode 100644 index 00000000..f37be168 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Parameter-Diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:975eefe4a14c3894278a603a54a7a7605dfc5ede689ab5d030801927d207e92d +size 27359 diff --git a/.cursor/rules/roblox/assets/localization/Portal-Add-Source-String.png b/.cursor/rules/roblox/assets/localization/Portal-Add-Source-String.png new file mode 100644 index 00000000..3ad27542 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Portal-Add-Source-String.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dadb882efc935f28a79945f98b1ba96865571ee71a8d90fd435c3625844c55fb +size 64927 diff --git a/.cursor/rules/roblox/assets/localization/Portal-Adding-Information-Thumbnail.png b/.cursor/rules/roblox/assets/localization/Portal-Adding-Information-Thumbnail.png new file mode 100644 index 00000000..5fbb43b6 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Portal-Adding-Information-Thumbnail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31a572e32605677beee1d6d3e5eacb9dae50831fbf0999cd30a470f8deb8b915 +size 133501 diff --git a/.cursor/rules/roblox/assets/localization/Portal-Adding-Information.png b/.cursor/rules/roblox/assets/localization/Portal-Adding-Information.png new file mode 100644 index 00000000..8cf05935 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Portal-Adding-Information.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c7111f339287f2d8cef621e430973712b7f8c9f68009f3b9561e281207444df +size 106706 diff --git a/.cursor/rules/roblox/assets/localization/Portal-Adding-Product.png b/.cursor/rules/roblox/assets/localization/Portal-Adding-Product.png new file mode 100644 index 00000000..8311ca42 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Portal-Adding-Product.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00119b0dc89082f7e22ccbf981236787a7851d02191f9b5548d1fbc9535d05f1 +size 129589 diff --git a/.cursor/rules/roblox/assets/localization/Portal-Adding-String.png b/.cursor/rules/roblox/assets/localization/Portal-Adding-String.png new file mode 100644 index 00000000..18ec649e --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Portal-Adding-String.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a44f6c845fea6d73399847539f5ebe658eed5c4a465777d5f0e3a10f9698169d +size 171997 diff --git a/.cursor/rules/roblox/assets/localization/Portal-Automatic-Translation.png b/.cursor/rules/roblox/assets/localization/Portal-Automatic-Translation.png new file mode 100644 index 00000000..2254d179 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Portal-Automatic-Translation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1fb8ac8d2c3d89c599c9a445a7ad80a30571fd5c64b73634f47cb06d64a32a7 +size 103945 diff --git a/.cursor/rules/roblox/assets/localization/Portal-Clear-Strings.png b/.cursor/rules/roblox/assets/localization/Portal-Clear-Strings.png new file mode 100644 index 00000000..9e662e90 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Portal-Clear-Strings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22433a7e4fee47cf63df54d1f25e33adfd135351119cc2dd54ac991c6ba1b7bb +size 343814 diff --git a/.cursor/rules/roblox/assets/localization/Portal-Enable-ATC-Auto.png b/.cursor/rules/roblox/assets/localization/Portal-Enable-ATC-Auto.png new file mode 100644 index 00000000..0985ecca --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Portal-Enable-ATC-Auto.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c0e7db5d999e9f50db7ba16c46620f8cd976ed6bfc6a16bf265a527e32a1837 +size 280168 diff --git a/.cursor/rules/roblox/assets/localization/Portal-Enable-ATC.png b/.cursor/rules/roblox/assets/localization/Portal-Enable-ATC.png new file mode 100644 index 00000000..43dcf439 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Portal-Enable-ATC.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00d360e3ec0d2b1442fc259b4248b4f8bf22eac2f9e960393e358249c50d312e +size 280528 diff --git a/.cursor/rules/roblox/assets/localization/Portal-Manually-Remove.png b/.cursor/rules/roblox/assets/localization/Portal-Manually-Remove.png new file mode 100644 index 00000000..c68d6a8c --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Portal-Manually-Remove.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:deca759d3dc90715fda607927dd23bc9769b9175292659e39c12fef4ba066e0d +size 11461 diff --git a/.cursor/rules/roblox/assets/localization/Portal-Translate.png b/.cursor/rules/roblox/assets/localization/Portal-Translate.png new file mode 100644 index 00000000..f19dead7 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Portal-Translate.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03b6dbb48fa739267186915dab9475ea5277bb24b6e56c99db87f62f4b8a3254 +size 49140 diff --git a/.cursor/rules/roblox/assets/localization/Portal-Use-Translated-Content.png b/.cursor/rules/roblox/assets/localization/Portal-Use-Translated-Content.png new file mode 100644 index 00000000..a4981fd0 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Portal-Use-Translated-Content.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc40e7235d2442b2aa77c5a4a74da730ad0625c8c27f5ff8a1632f7e6afeb3d0 +size 280037 diff --git a/.cursor/rules/roblox/assets/localization/Translation-Reports.png b/.cursor/rules/roblox/assets/localization/Translation-Reports.png new file mode 100644 index 00000000..67e383d9 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Translation-Reports.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70851993eda68575330e9114dfc2bdbcbd14d504c11ea9fe1832dce861590e64 +size 56547 diff --git a/.cursor/rules/roblox/assets/localization/Translator-Portal.png b/.cursor/rules/roblox/assets/localization/Translator-Portal.png new file mode 100644 index 00000000..1e636a26 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Translator-Portal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e41ce0f9c65b2dccff46983c5e0afb0e5158c92a5c851d2a7331d87d3a87db4a +size 374975 diff --git a/.cursor/rules/roblox/assets/localization/Translators-Tab.png b/.cursor/rules/roblox/assets/localization/Translators-Tab.png new file mode 100644 index 00000000..f5705895 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Translators-Tab.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb80ed7a074a3abced6b86445f43eff68e9a0954706c988a0a0206618f2e8e4e +size 54927 diff --git a/.cursor/rules/roblox/assets/localization/Update-Log.png b/.cursor/rules/roblox/assets/localization/Update-Log.png new file mode 100644 index 00000000..3aa466e5 --- /dev/null +++ b/.cursor/rules/roblox/assets/localization/Update-Log.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ef98bb62e44d7f6d1bde34803b86315d1cba39de5703605eed2520f39cc538a +size 128140 diff --git a/.cursor/rules/roblox/assets/makeup/Blender_Screenshot.png b/.cursor/rules/roblox/assets/makeup/Blender_Screenshot.png new file mode 100644 index 00000000..ddbff190 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/Blender_Screenshot.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e48fdc1e80ea0df35b050f3a54877c0a4b83865ce4870f348729478824fb62c +size 432286 diff --git a/.cursor/rules/roblox/assets/makeup/Creation-Steps-1.png b/.cursor/rules/roblox/assets/makeup/Creation-Steps-1.png new file mode 100644 index 00000000..5d3f2f98 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/Creation-Steps-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6709b4d44fdf357ce8dd8d9b8e5fd4779c3e082b7c5e45472503fefd934f84e +size 39363 diff --git a/.cursor/rules/roblox/assets/makeup/Creation-Steps-2.png b/.cursor/rules/roblox/assets/makeup/Creation-Steps-2.png new file mode 100644 index 00000000..1f97d8b8 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/Creation-Steps-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b06ec1ad5818426c7dc7bbfaf4a566ee3b600a2f7fce593e5a640d31578911aa +size 218263 diff --git a/.cursor/rules/roblox/assets/makeup/Creation-Steps-3.png b/.cursor/rules/roblox/assets/makeup/Creation-Steps-3.png new file mode 100644 index 00000000..3e1d1bbe --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/Creation-Steps-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5afb45b6e67a8e64c6e97b440bfa8f22df398b9fe66f4fcd1f52a49e5cb12dda +size 174917 diff --git a/.cursor/rules/roblox/assets/makeup/Imported-DataModel.png b/.cursor/rules/roblox/assets/makeup/Imported-DataModel.png new file mode 100644 index 00000000..1c4fee90 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/Imported-DataModel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa094c124dc88a46fe4534b51761e6642d4866a11b145829b49356d259062a41 +size 108039 diff --git a/.cursor/rules/roblox/assets/makeup/Makeup-Blender-Datamodel.png b/.cursor/rules/roblox/assets/makeup/Makeup-Blender-Datamodel.png new file mode 100644 index 00000000..aabd84c6 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/Makeup-Blender-Datamodel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:caf6d2239dd4ef63b60321749fe7fce3e0fe38fc54731b1caa54a9fa84b958a9 +size 44762 diff --git a/.cursor/rules/roblox/assets/makeup/Makeup-Character-Folders.png b/.cursor/rules/roblox/assets/makeup/Makeup-Character-Folders.png new file mode 100644 index 00000000..8b2ac8f0 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/Makeup-Character-Folders.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e82e84d5771d12b933b830b46c9ee9bd61706effb72e3f54bada6edd7aacc90c +size 58825 diff --git a/.cursor/rules/roblox/assets/makeup/Makeup-Eye-Acc.png b/.cursor/rules/roblox/assets/makeup/Makeup-Eye-Acc.png new file mode 100644 index 00000000..c453d0df --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/Makeup-Eye-Acc.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0f6981e58d9730d76fa1a79d605cc5f1c62f27c938fbb7d8b1ea5f17ece91d6 +size 17347 diff --git a/.cursor/rules/roblox/assets/makeup/Makeup-Eye-Accessory-Datamodel.png b/.cursor/rules/roblox/assets/makeup/Makeup-Eye-Accessory-Datamodel.png new file mode 100644 index 00000000..32027477 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/Makeup-Eye-Accessory-Datamodel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c9d384792b843010734c65ea81efb2d28c4966f1b2422d572c1c96eba944f04 +size 43750 diff --git a/.cursor/rules/roblox/assets/makeup/Makeup-Eye-Section.png b/.cursor/rules/roblox/assets/makeup/Makeup-Eye-Section.png new file mode 100644 index 00000000..2b02c401 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/Makeup-Eye-Section.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:991a9e54079ac1e91b65a9c880d4c0b91075ca7da385d4ada281b1c095d903d5 +size 675556 diff --git a/.cursor/rules/roblox/assets/makeup/Makeup-Face-No-Highlights.png b/.cursor/rules/roblox/assets/makeup/Makeup-Face-No-Highlights.png new file mode 100644 index 00000000..5496b705 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/Makeup-Face-No-Highlights.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6eda218caeaf0cbf0f0cb63c0c3422f51262a151d98d43dc59c2e9b805d385c +size 683017 diff --git a/.cursor/rules/roblox/assets/makeup/Makeup-Face-Section.png b/.cursor/rules/roblox/assets/makeup/Makeup-Face-Section.png new file mode 100644 index 00000000..3f55975d --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/Makeup-Face-Section.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08636550ff4c8b2474f2848e8fbf8ad7f97fd939ff54a9135b7806e9fb20e8fe +size 725690 diff --git a/.cursor/rules/roblox/assets/makeup/Makeup-Full-Render.png b/.cursor/rules/roblox/assets/makeup/Makeup-Full-Render.png new file mode 100644 index 00000000..ba5f0f0b --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/Makeup-Full-Render.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:111775694f0e0573af14bfa5d8267ebc4d5ed61a5933230131335e94caf99457 +size 677964 diff --git a/.cursor/rules/roblox/assets/makeup/Makeup-Mouth-Section.png b/.cursor/rules/roblox/assets/makeup/Makeup-Mouth-Section.png new file mode 100644 index 00000000..9d5fdc66 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/Makeup-Mouth-Section.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5c29ba7f88bc55ae90d1d75eb33b127e3b523a6f5034b84717afb55d2102527 +size 582730 diff --git a/.cursor/rules/roblox/assets/makeup/Makeup-Studio-Datamodel.png b/.cursor/rules/roblox/assets/makeup/Makeup-Studio-Datamodel.png new file mode 100644 index 00000000..0f59f005 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/Makeup-Studio-Datamodel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41bb05b938556bf85b2fc1db5d9952fba34673646657c3df8b0a1395bf0cae9b +size 12866 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Anthro-A.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Anthro-A.png new file mode 100644 index 00000000..7410ff72 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Anthro-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1dbd48e3220022f9812a673a2891e3fe357aa32fefce65dd6a46424a51d8f189 +size 530220 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Anthro-B.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Anthro-B.png new file mode 100644 index 00000000..d8efe36b --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Anthro-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14e45c3dcce7dbe0ec373f1320e9cc0e0701de3b6b939902696772fb3d74d884 +size 435328 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Creatures-A.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Creatures-A.png new file mode 100644 index 00000000..0944b705 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Creatures-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6697ae03796bc7c9030d6d555c90c04741f9253645c0a6cfdc84b145208680ca +size 427142 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Creatures-B.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Creatures-B.png new file mode 100644 index 00000000..64fdab1f --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Creatures-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83216e19d7cfef1c28614c9b93e852cf038113b6014c55d125bb25a52a053425 +size 287330 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Ears-A.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Ears-A.png new file mode 100644 index 00000000..e0e1aeba --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Ears-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46f1c850b9515d77fcf8dada54db6d484e87e2cab5e2fb93997960994bb6e3b2 +size 119308 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Ears-B.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Ears-B.png new file mode 100644 index 00000000..23581c35 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Ears-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f32a18d608ec486e9feae001a826adb24dbcbc0bdac0bcea3151282c4e7c67e5 +size 47824 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Equidistant-A.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Equidistant-A.png new file mode 100644 index 00000000..abd69f18 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Equidistant-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76340277ffeb68911b3e811d3d83dcf28d7800df4f2170c8b604b1cb6299c94b +size 12708 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Equidistant-B.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Equidistant-B.png new file mode 100644 index 00000000..79c52ebe --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Equidistant-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe0a08b8f16559f3f1f7199e4fc4ad100035a3e5d6f92d684db0b72d1305d1f2 +size 53456 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Eye-Enclosed.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Eye-Enclosed.png new file mode 100644 index 00000000..02d35a4d --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Eye-Enclosed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:674d9cbd7d681c6021cdeea0474220ef178869e4d9cc1afce06e13d34c867573 +size 89721 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Eye-Inner.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Eye-Inner.png new file mode 100644 index 00000000..e50c0992 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Eye-Inner.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:594f87c1ffcad79efd4ef858bf08fb25c863c76ca3b128b56b195c7a7414244d +size 270557 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Eyebrows-Layered-Clothing.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Eyebrows-Layered-Clothing.png new file mode 100644 index 00000000..bc65a3b3 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Eyebrows-Layered-Clothing.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4f9c6dbe4f68f5106ffc659c4150a20c2d445176a8cd588dd8a3b64d9bb3e77 +size 17242 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Eyebrows-Textured.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Eyebrows-Textured.png new file mode 100644 index 00000000..2f88e1a0 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Eyebrows-Textured.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b9b9d92694cf12f1be0ec9d0fae2fb8e1d4049e0c3c808fbf25814103f6ef4a +size 269828 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Eyebrows-head-tail.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Eyebrows-head-tail.png new file mode 100644 index 00000000..34bf1b15 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Eyebrows-head-tail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8926fc303ea852ea38e65e7657438bfddc7d9ff952af63ea080fc1902d2e03f +size 8191 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Hairline-A.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Hairline-A.png new file mode 100644 index 00000000..ccf43759 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Hairline-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c9ba7eb6762c3d03e3dd76e1e93b5a4cb9b3afd644f2e1f447a7d9b52c6de2b +size 191056 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Hairline-B.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Hairline-B.png new file mode 100644 index 00000000..78ac5c50 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Hairline-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbb924d1f2de9b459407996d8e46596df42ec98db244ce72508b08137c5544f6 +size 126338 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Hairline.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Hairline.png new file mode 100644 index 00000000..fb2b8fe8 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Hairline.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0a03a89d057c1485aab32483396035d916bb90233a1beb3bf76ea59acd25005 +size 164781 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Inorganic-A.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Inorganic-A.png new file mode 100644 index 00000000..e1c03745 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Inorganic-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9232e7e13f63d38fe281432894bb3250a296468a0e21b5ff46d453811d31094 +size 477473 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Inorganic-B.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Inorganic-B.png new file mode 100644 index 00000000..a9b88d16 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Inorganic-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4263dd8eef279829edbe7980cc745f68d0e5243344078d4df2e66aeb3d6a5e6 +size 364855 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Middle-axis.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Middle-axis.png new file mode 100644 index 00000000..5fccd2fc --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Middle-axis.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41dee3ac191f72ba9cadaeadc27c28f934d53aecce4ab003c9c1f52944b66724 +size 217646 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Missing-A.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Missing-A.png new file mode 100644 index 00000000..a16f9593 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Missing-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:899e815aec5dceb521e19994f95db059c08abd520f916b5c972724b91c1d794c +size 379730 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Missing-B.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Missing-B.png new file mode 100644 index 00000000..6c9f7034 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Missing-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04801f39776c15fd27c54108295adc5c10646195be506f8c053cbd936db7e44a +size 404142 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Missing-C.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Missing-C.png new file mode 100644 index 00000000..0f108a32 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Missing-C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2467c4398638b25e84efbf3e092de610c73ed7e342cc4072deca784e084add3d +size 897249 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Missing-D.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Missing-D.png new file mode 100644 index 00000000..dfec394c --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Missing-D.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79cb52c21290f010b60eac39cffb07d58bda220bf138dfa4eb5ed3559f0d112a +size 633778 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Missing-Eyebrows.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Missing-Eyebrows.png new file mode 100644 index 00000000..1cfb81ce --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Missing-Eyebrows.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86314be12757143b671e04a0afefa014c434be5a0f01cacd3377afade3bcc931 +size 114031 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Missing-Regions.jpg b/.cursor/rules/roblox/assets/makeup/caging-examples/Missing-Regions.jpg new file mode 100644 index 00000000..a0cf59bb --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Missing-Regions.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2dd8f8bfae851fe9624e1ce20ce03dc21c546cb0ebe102bdefb264ba1087ac31 +size 49579 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Mouth.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Mouth.png new file mode 100644 index 00000000..d09cbcd3 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Mouth.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f55ac1252f2e66f371909c53b8f96fd84ea923f47188c687f084062ddc6a991 +size 114815 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Neck-A.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Neck-A.png new file mode 100644 index 00000000..5e17042e --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Neck-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9780a4c46d2aa29ae446ff16d1e82f6728b310c8350c49cdbe466c9788ccf1c +size 19824 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Neck-B.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Neck-B.png new file mode 100644 index 00000000..5993236f --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Neck-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b48a34d21fd2afaf533bfcc019b5847de4f3b05101592847da2b51c16ae7b10b +size 73588 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Non-Vertex-A.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Non-Vertex-A.png new file mode 100644 index 00000000..4723a175 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Non-Vertex-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f9abf57b3668497a7c72ce053dbd72cb97f01ada50812f2326167a04052604e +size 56355 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Non-Vertex-B.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Non-Vertex-B.png new file mode 100644 index 00000000..c56fd2a4 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Non-Vertex-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb0e975123d1fb0b638ccbbd927c14edc4232e5aebbb2bf35908b18b012efba6 +size 181332 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Nose.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Nose.png new file mode 100644 index 00000000..4d7ba919 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Nose.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c082859e198b2aa26fe89cc570fd4b1a807efcdffe6c0f97459423992aeff6a +size 170475 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Paint-on-A.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Paint-on-A.png new file mode 100644 index 00000000..a1f3b5c2 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Paint-on-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:040585bd16cd80ccfb2b934f4531501b32ca6962877aca6c7e6e6d836d4639d4 +size 238801 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Paint-on-B.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Paint-on-B.png new file mode 100644 index 00000000..8c872370 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Paint-on-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5808296f63665984bfb689f6e09adacfec78db42ecf3c23717e25077a4ad1b2 +size 385544 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Primary-A.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Primary-A.png new file mode 100644 index 00000000..5ce7016c --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Primary-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8a162da472b7dc2c7869277407416a31451007c464f502be055b6006e5bd44f +size 191623 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Primary-B.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Primary-B.png new file mode 100644 index 00000000..bcb29361 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Primary-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb43bd1032a1c9c67ff2856c16e734705dc81affa55f2e218ff5cb2a6f0ff1e2 +size 293634 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Tight-Cage-A.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Tight-Cage-A.png new file mode 100644 index 00000000..88c4ef64 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Tight-Cage-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1e42fda94ded363e997f75bbdd65c8ca70e9cc497d51226d15b0b9e93a99705 +size 196840 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Tight-Cage-B.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Tight-Cage-B.png new file mode 100644 index 00000000..3e2ba95f --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Tight-Cage-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:88f2c1b44077c495d1531ba785320f7d05dce7eeaf60d7092172719c6b76955a +size 42364 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Vertex-A.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Vertex-A.png new file mode 100644 index 00000000..11dec133 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Vertex-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:453b7f58442489dd9c68f568b9177e7590513fb6634d1ffbe1c6cc3b4ded24b8 +size 14208 diff --git a/.cursor/rules/roblox/assets/makeup/caging-examples/Vertex-B.png b/.cursor/rules/roblox/assets/makeup/caging-examples/Vertex-B.png new file mode 100644 index 00000000..a8b2931d --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/caging-examples/Vertex-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c7d764c700bb6fad9ea414d84692f11e869434e541ca1d96b65f1ed12fc9992 +size 173217 diff --git a/.cursor/rules/roblox/assets/makeup/resources/Blender-Assign-New.png b/.cursor/rules/roblox/assets/makeup/resources/Blender-Assign-New.png new file mode 100644 index 00000000..dc62a927 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/resources/Blender-Assign-New.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f8a2004e7d81bebc0592a6061b8ae7834d104fc49ca163ac2aa1b9f2d5f087c +size 38185 diff --git a/.cursor/rules/roblox/assets/makeup/resources/Blender-Expected-Nodes.png b/.cursor/rules/roblox/assets/makeup/resources/Blender-Expected-Nodes.png new file mode 100644 index 00000000..4cc201a8 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/resources/Blender-Expected-Nodes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:62883a982ad0db630851c3cd53d3346f2172e6559ff82aafd735c5c03282a74c +size 125210 diff --git a/.cursor/rules/roblox/assets/makeup/resources/Blender-Select-Region.png b/.cursor/rules/roblox/assets/makeup/resources/Blender-Select-Region.png new file mode 100644 index 00000000..0a7bfd85 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/resources/Blender-Select-Region.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:465f072b20b054042a14633daeeb62b30c851ce6c23943b1f9616cc79b35aa80 +size 22505 diff --git a/.cursor/rules/roblox/assets/makeup/resources/Blender-Thumbnail.png b/.cursor/rules/roblox/assets/makeup/resources/Blender-Thumbnail.png new file mode 100644 index 00000000..37abd2d2 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/resources/Blender-Thumbnail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f01936a2a35cc795e89b52f255a2b5f442d83a257dde55e77fcccbf75bda6538 +size 774181 diff --git a/.cursor/rules/roblox/assets/makeup/resources/Blender-Unlink-Image.png b/.cursor/rules/roblox/assets/makeup/resources/Blender-Unlink-Image.png new file mode 100644 index 00000000..118a084d --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/resources/Blender-Unlink-Image.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ab672fe7ef7bd3c9152032cb11d94306cef3a43c0da9b691514496d31eb6956 +size 58980 diff --git a/.cursor/rules/roblox/assets/makeup/resources/Fbx-Thumbnail.png b/.cursor/rules/roblox/assets/makeup/resources/Fbx-Thumbnail.png new file mode 100644 index 00000000..604eaec1 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/resources/Fbx-Thumbnail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c19b75770479baf32c0c957e92a5eddf61b0a70741b7aa361461729221e8a8f2 +size 788517 diff --git a/.cursor/rules/roblox/assets/makeup/resources/Makeup-Reference-Blender.zip b/.cursor/rules/roblox/assets/makeup/resources/Makeup-Reference-Blender.zip new file mode 100644 index 00000000..f187eaf0 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/resources/Makeup-Reference-Blender.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c1c0ef142b2ca0dc9c09d53edc2e9f4fe55cfb382bf53b82cd193e43e9735c5 +size 76316174 diff --git a/.cursor/rules/roblox/assets/makeup/resources/Makeup-Reference-Fbx-Gltf.zip b/.cursor/rules/roblox/assets/makeup/resources/Makeup-Reference-Fbx-Gltf.zip new file mode 100644 index 00000000..d745009c --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/resources/Makeup-Reference-Fbx-Gltf.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e8489fdf72dc63c2ab3eda62f2b9aaa8b4649733428644911d10871ee037131 +size 414831799 diff --git a/.cursor/rules/roblox/assets/makeup/resources/Makeup-Reference-Maya.zip b/.cursor/rules/roblox/assets/makeup/resources/Makeup-Reference-Maya.zip new file mode 100644 index 00000000..89969bb6 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/resources/Makeup-Reference-Maya.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96d0506429d49043beca44fc8ce642492b5cf8e8f32d4bc5320a9218a54431ab +size 32733257 diff --git a/.cursor/rules/roblox/assets/makeup/resources/Makeup-Textures-Photoshop_Gimp.zip b/.cursor/rules/roblox/assets/makeup/resources/Makeup-Textures-Photoshop_Gimp.zip new file mode 100644 index 00000000..f822d51d --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/resources/Makeup-Textures-Photoshop_Gimp.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b9e1dde9d865ab63d058ff407312e0d7bdaad9d4494d8b551dbe55a8f54026e +size 30183818 diff --git a/.cursor/rules/roblox/assets/makeup/resources/Makeup-Textures-SubstancePainter.zip b/.cursor/rules/roblox/assets/makeup/resources/Makeup-Textures-SubstancePainter.zip new file mode 100644 index 00000000..514eb4cb --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/resources/Makeup-Textures-SubstancePainter.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da677ddb85347560722e718fee13b268a078b45cfcda03aa848cd4ddb256456a +size 416341554 diff --git a/.cursor/rules/roblox/assets/makeup/resources/Maya-Expected-Nodes.png b/.cursor/rules/roblox/assets/makeup/resources/Maya-Expected-Nodes.png new file mode 100644 index 00000000..078bbc54 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/resources/Maya-Expected-Nodes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e3535ad17f0d2b30b071cedca9d01f36272b5e24867a3a23c9317fd04786008 +size 102781 diff --git a/.cursor/rules/roblox/assets/makeup/resources/Maya-Replace-Texture.png b/.cursor/rules/roblox/assets/makeup/resources/Maya-Replace-Texture.png new file mode 100644 index 00000000..338eaeb8 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/resources/Maya-Replace-Texture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67a79c66774187c0298cb4d079fa4d8f12ee33eb7729ddc9a0e820772cdca09a +size 233754 diff --git a/.cursor/rules/roblox/assets/makeup/resources/Maya-Select-Graph-Network.png b/.cursor/rules/roblox/assets/makeup/resources/Maya-Select-Graph-Network.png new file mode 100644 index 00000000..38564c72 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/resources/Maya-Select-Graph-Network.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73f23197fad5401d2989db5ee8b032000914bd9ed42d8b7f383de6029fec7c81 +size 33239 diff --git a/.cursor/rules/roblox/assets/makeup/resources/Maya-Select-Hypershade.png b/.cursor/rules/roblox/assets/makeup/resources/Maya-Select-Hypershade.png new file mode 100644 index 00000000..e049d48e --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/resources/Maya-Select-Hypershade.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87d3824400f76e627df49c980c773b667a66cd182aaa894d1098abe6f751ce6a +size 28559 diff --git a/.cursor/rules/roblox/assets/makeup/resources/Maya-Thumbnail.png b/.cursor/rules/roblox/assets/makeup/resources/Maya-Thumbnail.png new file mode 100644 index 00000000..32618779 --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/resources/Maya-Thumbnail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b352392345db47a43a45b2c3964c6a3bed33261d135cc8780fb13db00235daaf +size 311939 diff --git a/.cursor/rules/roblox/assets/makeup/resources/Photoshop-Thumbnail.png b/.cursor/rules/roblox/assets/makeup/resources/Photoshop-Thumbnail.png new file mode 100644 index 00000000..7ed7a7ba --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/resources/Photoshop-Thumbnail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f01ba957af533bc6ad9ddc48b9f3e59e83cd5b501e05da37b0dcc9b2e40fe4bc +size 262534 diff --git a/.cursor/rules/roblox/assets/makeup/resources/Substance-Thumbnail.png b/.cursor/rules/roblox/assets/makeup/resources/Substance-Thumbnail.png new file mode 100644 index 00000000..65803d4c --- /dev/null +++ b/.cursor/rules/roblox/assets/makeup/resources/Substance-Thumbnail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d3f062110723122f4d4d028309cc55354bcc2370c8360eec2dc9ce298d2ef8a +size 828029 diff --git a/.cursor/rules/roblox/assets/matchmaking/CustomConfiguration_List.png b/.cursor/rules/roblox/assets/matchmaking/CustomConfiguration_List.png new file mode 100644 index 00000000..b8a29e8d --- /dev/null +++ b/.cursor/rules/roblox/assets/matchmaking/CustomConfiguration_List.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3bf4f27833d0352bc7434a60a0b6be467384684c72c9fa64a0ac589cf8acca08 +size 79622 diff --git a/.cursor/rules/roblox/assets/matchmaking/Custom_Matchmaking.png b/.cursor/rules/roblox/assets/matchmaking/Custom_Matchmaking.png new file mode 100644 index 00000000..ff3bb6eb --- /dev/null +++ b/.cursor/rules/roblox/assets/matchmaking/Custom_Matchmaking.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d54f5b791d07ab8f6ddb2b73273d89efb3c947c7b8dcce7e1a004875a89523dd +size 385387 diff --git a/.cursor/rules/roblox/assets/matchmaking/Default_Matchmaking.png b/.cursor/rules/roblox/assets/matchmaking/Default_Matchmaking.png new file mode 100644 index 00000000..14a70c94 --- /dev/null +++ b/.cursor/rules/roblox/assets/matchmaking/Default_Matchmaking.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8fff94e71ba1b1fcd2d0132f8348740a5bf9896e3cab03eb91821c7ea9f1f43 +size 343426 diff --git a/.cursor/rules/roblox/assets/matchmaking/MatchmakingAnalytics.png b/.cursor/rules/roblox/assets/matchmaking/MatchmakingAnalytics.png new file mode 100644 index 00000000..5ed4cf99 --- /dev/null +++ b/.cursor/rules/roblox/assets/matchmaking/MatchmakingAnalytics.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f5b69691ff79e0290f9b92a45c20f342690e50a2089bee0be5f20cc036e8c92 +size 56952 diff --git a/.cursor/rules/roblox/assets/matchmaking/Matchmaking_Analytics_Chart.png b/.cursor/rules/roblox/assets/matchmaking/Matchmaking_Analytics_Chart.png new file mode 100644 index 00000000..75628b40 --- /dev/null +++ b/.cursor/rules/roblox/assets/matchmaking/Matchmaking_Analytics_Chart.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e189a8748c218df86c20bd52ffc6c6aec0b27d58aee911d757b045bdddaf490 +size 98907 diff --git a/.cursor/rules/roblox/assets/matchmaking/Matchmaking_Simulation.png b/.cursor/rules/roblox/assets/matchmaking/Matchmaking_Simulation.png new file mode 100644 index 00000000..ae45b18a --- /dev/null +++ b/.cursor/rules/roblox/assets/matchmaking/Matchmaking_Simulation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1924a3d7fbb73bf91a419815a536c5c51b7f5450e13ba0cf7da64b46aa50e5f9 +size 158066 diff --git a/.cursor/rules/roblox/assets/matchmaking/Player_Attribute.png b/.cursor/rules/roblox/assets/matchmaking/Player_Attribute.png new file mode 100644 index 00000000..01ac247f --- /dev/null +++ b/.cursor/rules/roblox/assets/matchmaking/Player_Attribute.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:867b901c5a1dadcfe1b4660229e826fffeb1cab73615838f583f0d0d930374db +size 141383 diff --git a/.cursor/rules/roblox/assets/matchmaking/Preview_Custom_Signal.png b/.cursor/rules/roblox/assets/matchmaking/Preview_Custom_Signal.png new file mode 100644 index 00000000..020accc1 --- /dev/null +++ b/.cursor/rules/roblox/assets/matchmaking/Preview_Custom_Signal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8219886fc0a7e82982bf3003b41f359eb15981c1efd6cd58687b068e22c6a6ac +size 50469 diff --git a/.cursor/rules/roblox/assets/matchmaking/Server_Attribute.png b/.cursor/rules/roblox/assets/matchmaking/Server_Attribute.png new file mode 100644 index 00000000..c590781a --- /dev/null +++ b/.cursor/rules/roblox/assets/matchmaking/Server_Attribute.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:749055d420302ccb4bbe3223a8cc1ebc85dc169d6dc6e1d7a40a547cef3c2e1c +size 87058 diff --git a/.cursor/rules/roblox/assets/misc/Arrow-High.png b/.cursor/rules/roblox/assets/misc/Arrow-High.png new file mode 100644 index 00000000..2b41fafd --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Arrow-High.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1f7cab571e1cae327d4589dd3c72d4ec6ff62d0e165afb8965e4e7da8ab9b7b +size 776 diff --git a/.cursor/rules/roblox/assets/misc/Arrow-Higher.png b/.cursor/rules/roblox/assets/misc/Arrow-Higher.png new file mode 100644 index 00000000..b2ffc634 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Arrow-Higher.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6c3ec5e3effaaf3bb6447bcb9b52fe6e3d4e7ced361deabc77de0ae60296db2 +size 865 diff --git a/.cursor/rules/roblox/assets/misc/Arrow-Highest.png b/.cursor/rules/roblox/assets/misc/Arrow-Highest.png new file mode 100644 index 00000000..b2abd9f6 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Arrow-Highest.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b3f2f4e66ef439d6d258196208886a1124dfa10080e42e1bd3cfcf575d7cca7 +size 918 diff --git a/.cursor/rules/roblox/assets/misc/Arrow-Low.png b/.cursor/rules/roblox/assets/misc/Arrow-Low.png new file mode 100644 index 00000000..89882026 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Arrow-Low.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6cd4b3c9bd318cceafd56ebad208828d95d0d6a9d7fb8040e44a2e9f7e6930db +size 876 diff --git a/.cursor/rules/roblox/assets/misc/Arrow-Lower.png b/.cursor/rules/roblox/assets/misc/Arrow-Lower.png new file mode 100644 index 00000000..342f3b18 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Arrow-Lower.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2667dd3ff5430b62cf88c778a234cb7be24d51e37962c090bf0361909b354dd +size 1090 diff --git a/.cursor/rules/roblox/assets/misc/Arrow-Lowest.png b/.cursor/rules/roblox/assets/misc/Arrow-Lowest.png new file mode 100644 index 00000000..79de794c --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Arrow-Lowest.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3cdd5e216e125e1bc5c2bd57940b7a65f58bd1d516cc66a366c4f3a8ae35536a +size 1155 diff --git a/.cursor/rules/roblox/assets/misc/Arrow-Neutral.png b/.cursor/rules/roblox/assets/misc/Arrow-Neutral.png new file mode 100644 index 00000000..f07cacea --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Arrow-Neutral.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17b1b81cf78b0ab49f3ed8ab2aaf11cb58c3c5d3aae938e26fe26007d63a43e9 +size 1169 diff --git a/.cursor/rules/roblox/assets/misc/Audio-Error-Popup.png b/.cursor/rules/roblox/assets/misc/Audio-Error-Popup.png new file mode 100644 index 00000000..e60ab2a8 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Audio-Error-Popup.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95652d59c3e8ac25b27a5548e57a4a64a8bebef4cf05f7b779e108d421ea4c8d +size 128273 diff --git a/.cursor/rules/roblox/assets/misc/Box-Label-A.png b/.cursor/rules/roblox/assets/misc/Box-Label-A.png new file mode 100644 index 00000000..c06297d0 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Box-Label-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f27c97658800d196f31861a732a22a876793713265903909b1d867addacd1b33 +size 1123 diff --git a/.cursor/rules/roblox/assets/misc/Box-Label-B.png b/.cursor/rules/roblox/assets/misc/Box-Label-B.png new file mode 100644 index 00000000..5a1e8616 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Box-Label-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a6ad454f8f7ac7ce62d6ac5e20e9e361d1c644afff8a2079f907dddaf1330cc +size 1060 diff --git a/.cursor/rules/roblox/assets/misc/Box-Label-C.png b/.cursor/rules/roblox/assets/misc/Box-Label-C.png new file mode 100644 index 00000000..5e0562cd --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Box-Label-C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db3bbefb02925c130ad6b433fdc25e2850d35250774d851375f4ce0e7b6a3a0f +size 1204 diff --git a/.cursor/rules/roblox/assets/misc/Box-Label-D.png b/.cursor/rules/roblox/assets/misc/Box-Label-D.png new file mode 100644 index 00000000..9ebd846d --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Box-Label-D.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08807d2233fdfaf5b33f91c77d0e12aa7e04d05ca2ee1f752b502a90dfdff6f2 +size 1031 diff --git a/.cursor/rules/roblox/assets/misc/Box-Label-E.png b/.cursor/rules/roblox/assets/misc/Box-Label-E.png new file mode 100644 index 00000000..5b715e79 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Box-Label-E.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3cd1176153a98c8998b859a521e7de69ab6a895e59bb4ab2201389ff2ad286fb +size 807 diff --git a/.cursor/rules/roblox/assets/misc/Box-Label-F.png b/.cursor/rules/roblox/assets/misc/Box-Label-F.png new file mode 100644 index 00000000..d89bc7b3 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Box-Label-F.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cea699f15b15cb33a3d37b1f87560b0597422ae31d972c52b2de82cbec51d4c +size 810 diff --git a/.cursor/rules/roblox/assets/misc/Box-Label-G.png b/.cursor/rules/roblox/assets/misc/Box-Label-G.png new file mode 100644 index 00000000..f7a3012c --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Box-Label-G.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e625acd444228e5efcebd9db691d5697d5923888764d7d2a2a607d5adfeece9 +size 3051 diff --git a/.cursor/rules/roblox/assets/misc/Data-Share-Dialog.png b/.cursor/rules/roblox/assets/misc/Data-Share-Dialog.png new file mode 100644 index 00000000..793b9a6d --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Data-Share-Dialog.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75ccd96a21a8586b146ccc85435f8aa52a014807b11dddc42a4802f2e13e4396 +size 99155 diff --git a/.cursor/rules/roblox/assets/misc/Mouse-Icon-Busy.png b/.cursor/rules/roblox/assets/misc/Mouse-Icon-Busy.png new file mode 100644 index 00000000..41ee17e7 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Mouse-Icon-Busy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:539f14f19db153a201b7fa6303a1e6004bb23c50070bdda8570a08024de651de +size 1013 diff --git a/.cursor/rules/roblox/assets/misc/Mouse-Icon-Crosshair.png b/.cursor/rules/roblox/assets/misc/Mouse-Icon-Crosshair.png new file mode 100644 index 00000000..75093650 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Mouse-Icon-Crosshair.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95a0d5a5a19346a9baff771a2f490b64fc6da8f1a84c033cb9c2c92cac3e17f2 +size 124 diff --git a/.cursor/rules/roblox/assets/misc/Mouse-Icon-Forbidden.png b/.cursor/rules/roblox/assets/misc/Mouse-Icon-Forbidden.png new file mode 100644 index 00000000..75d13ea3 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Mouse-Icon-Forbidden.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:503a0298e5f2a7394d5c6b569d1b1c26f5c37ff7831d1fc62639d138ddb78c21 +size 804 diff --git a/.cursor/rules/roblox/assets/misc/Mouse-Icon-GrabbingHand.png b/.cursor/rules/roblox/assets/misc/Mouse-Icon-GrabbingHand.png new file mode 100644 index 00000000..dd76407b --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Mouse-Icon-GrabbingHand.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0aa67b71dab117d32e74699c0681c2d61a4779f038ea437ebc376951df391609 +size 982 diff --git a/.cursor/rules/roblox/assets/misc/Mouse-Icon-IBeam.png b/.cursor/rules/roblox/assets/misc/Mouse-Icon-IBeam.png new file mode 100644 index 00000000..fd504d68 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Mouse-Icon-IBeam.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0cd313f15b5a71dbad90df2c48016894e1de9ccecbf56705090c528a4534642 +size 534 diff --git a/.cursor/rules/roblox/assets/misc/Mouse-Icon-OpenHand.png b/.cursor/rules/roblox/assets/misc/Mouse-Icon-OpenHand.png new file mode 100644 index 00000000..63765fa3 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Mouse-Icon-OpenHand.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc2773e7738f40555fdaa5b26ee8e8575c7ee08a5ef3cc8d6ffdbffc114d16e2 +size 992 diff --git a/.cursor/rules/roblox/assets/misc/Mouse-Icon-Pointer.png b/.cursor/rules/roblox/assets/misc/Mouse-Icon-Pointer.png new file mode 100644 index 00000000..fa19fa4c --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Mouse-Icon-Pointer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a592db992920dd187289c1c37614649c4cc06bc1ddd6738e712fbca23aa867b0 +size 499 diff --git a/.cursor/rules/roblox/assets/misc/Mouse-Icon-PointingHand.png b/.cursor/rules/roblox/assets/misc/Mouse-Icon-PointingHand.png new file mode 100644 index 00000000..2373ae05 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Mouse-Icon-PointingHand.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93e6d0c3738a907deb05d1efdc70ea7119f2a204320d62f411fca6bbc3d8a113 +size 1083 diff --git a/.cursor/rules/roblox/assets/misc/Mouse-Icon-ResizeAll.png b/.cursor/rules/roblox/assets/misc/Mouse-Icon-ResizeAll.png new file mode 100644 index 00000000..3e0dd97b --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Mouse-Icon-ResizeAll.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d94919ca21096c7779c77bca9626b154abb73aa171cc316dd3c67ab2adb9071 +size 430 diff --git a/.cursor/rules/roblox/assets/misc/Mouse-Icon-ResizeEW.png b/.cursor/rules/roblox/assets/misc/Mouse-Icon-ResizeEW.png new file mode 100644 index 00000000..2d834307 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Mouse-Icon-ResizeEW.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:997aa375962d6cb57b52c130f155bebfb876636a7cd49d1416b4cb9a74a823e8 +size 321 diff --git a/.cursor/rules/roblox/assets/misc/Mouse-Icon-ResizeNESW.png b/.cursor/rules/roblox/assets/misc/Mouse-Icon-ResizeNESW.png new file mode 100644 index 00000000..efbb6249 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Mouse-Icon-ResizeNESW.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e39bb4a13523a525b15a8b45a44cb95e7fdc637a9cb89c342c11eeab8ab8a3a6 +size 391 diff --git a/.cursor/rules/roblox/assets/misc/Mouse-Icon-ResizeNS.png b/.cursor/rules/roblox/assets/misc/Mouse-Icon-ResizeNS.png new file mode 100644 index 00000000..efc67058 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Mouse-Icon-ResizeNS.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0454c54e0cd578ab448cd3d4c99656bcd39159f32112c55a3c441172a5bdc6d1 +size 291 diff --git a/.cursor/rules/roblox/assets/misc/Mouse-Icon-ResizeNWSE.png b/.cursor/rules/roblox/assets/misc/Mouse-Icon-ResizeNWSE.png new file mode 100644 index 00000000..3a0aa584 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Mouse-Icon-ResizeNWSE.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9985a0c3e8c26de34fe4e9c26b2f7f2900a0887c28740ecbd61e9fe002faecd3 +size 392 diff --git a/.cursor/rules/roblox/assets/misc/Mouse-Icon-ResizeSplitH.png b/.cursor/rules/roblox/assets/misc/Mouse-Icon-ResizeSplitH.png new file mode 100644 index 00000000..a1a2cfee --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Mouse-Icon-ResizeSplitH.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72f2791c509ba384b139d7136aab593fa3964440af79350c644b8b2a01bfc24d +size 349 diff --git a/.cursor/rules/roblox/assets/misc/Mouse-Icon-ResizeSplitV.png b/.cursor/rules/roblox/assets/misc/Mouse-Icon-ResizeSplitV.png new file mode 100644 index 00000000..84e7698b --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Mouse-Icon-ResizeSplitV.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6dfbf6e79e8ba55d6d703f826c28fc4c0ab84256172b81a6c59e6e8e4cbbc53f +size 311 diff --git a/.cursor/rules/roblox/assets/misc/Mouse-Icon-Wait.png b/.cursor/rules/roblox/assets/misc/Mouse-Icon-Wait.png new file mode 100644 index 00000000..067ce7e5 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Mouse-Icon-Wait.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1899793f94821296206349a280db30e7835454f33999fb7f0c726d2bc577a51c +size 951 diff --git a/.cursor/rules/roblox/assets/misc/SA-Icon-Laser-Tag.jpg b/.cursor/rules/roblox/assets/misc/SA-Icon-Laser-Tag.jpg new file mode 100644 index 00000000..567167bd --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/SA-Icon-Laser-Tag.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00b22a4a7c2224736944e58e13948b8389ba2f8ced3aa0c9d04f26d9d0f55317 +size 204300 diff --git a/.cursor/rules/roblox/assets/misc/SA-Icon-Racing.jpg b/.cursor/rules/roblox/assets/misc/SA-Icon-Racing.jpg new file mode 100644 index 00000000..c26dd2e8 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/SA-Icon-Racing.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:312a037e5b01c8911d695ebc8c09ee5880a007e6d1336289903c448fc529edea +size 188431 diff --git a/.cursor/rules/roblox/assets/misc/SA-Icon-Soccer.jpg b/.cursor/rules/roblox/assets/misc/SA-Icon-Soccer.jpg new file mode 100644 index 00000000..3cef0e73 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/SA-Icon-Soccer.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0de3ff75a9bdd61e29241b0c5309e4a553d0aa0a3247597d316d4a8ca7f13e4 +size 247035 diff --git a/.cursor/rules/roblox/assets/misc/Todays-Picks-Home.png b/.cursor/rules/roblox/assets/misc/Todays-Picks-Home.png new file mode 100644 index 00000000..567f122f --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Todays-Picks-Home.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb7c940febfd562e19b3902288c117b4b6d260745d772d51799698a3ad9cee09 +size 1386107 diff --git a/.cursor/rules/roblox/assets/misc/Todays-Picks-Marketplace.png b/.cursor/rules/roblox/assets/misc/Todays-Picks-Marketplace.png new file mode 100644 index 00000000..a6262811 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Todays-Picks-Marketplace.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0fa87484a1d27297da82c4f878ece9ba41d0d368d073a0a9d0576e72ec2e535d +size 715725 diff --git a/.cursor/rules/roblox/assets/misc/Webhooks-Bot-Workflow.png b/.cursor/rules/roblox/assets/misc/Webhooks-Bot-Workflow.png new file mode 100644 index 00000000..75092a28 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Webhooks-Bot-Workflow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f247b2c6d82b85abc8b1ef81c6f3a844decd12c7e7693a7e1e80229b3e33bde +size 21309 diff --git a/.cursor/rules/roblox/assets/misc/Webhooks-Example-Message-Body.png b/.cursor/rules/roblox/assets/misc/Webhooks-Example-Message-Body.png new file mode 100644 index 00000000..a072bf0a --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Webhooks-Example-Message-Body.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c573fc65c4d1b9005ac539f80b5d1a02616d138b9b5adcb98619612d5f77c47a +size 66385 diff --git a/.cursor/rules/roblox/assets/misc/Webhooks-Sample-Notification.png b/.cursor/rules/roblox/assets/misc/Webhooks-Sample-Notification.png new file mode 100644 index 00000000..ed32700b --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/Webhooks-Sample-Notification.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87b13a372b8bd713a3d628bd56bae5204d58bacb933186767245b446a27b29d0 +size 76268 diff --git a/.cursor/rules/roblox/assets/misc/blog_evergreen.png b/.cursor/rules/roblox/assets/misc/blog_evergreen.png new file mode 100644 index 00000000..40df0b53 --- /dev/null +++ b/.cursor/rules/roblox/assets/misc/blog_evergreen.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dccb4e0a428d74b52971e55fa0fcdc30ba8f5d5c72ad1e1672a5c3623b370cae +size 2519568 diff --git a/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Front-Face-Pointing-A.png b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Front-Face-Pointing-A.png new file mode 100644 index 00000000..985d81bf --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Front-Face-Pointing-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c9f26f20e6582f7c7663e4935128647af4d670043a6e67ea2a9c9cc9b22422f +size 264052 diff --git a/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Front-Face-Pointing-B.png b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Front-Face-Pointing-B.png new file mode 100644 index 00000000..e6be5100 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Front-Face-Pointing-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0fe3eb7e36978a5e4df5f4e47e07bfc8417f92a1621e11445783d00f8444d6b +size 275676 diff --git a/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Lerp-A.png b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Lerp-A.png new file mode 100644 index 00000000..0ad126c0 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Lerp-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7722f842ac7bcc9b344dd71384d8ec4b350e55eaf0be88645eaa07118cb20f5 +size 324745 diff --git a/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Lerp-B.png b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Lerp-B.png new file mode 100644 index 00000000..cdc467ef --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Lerp-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a7269f88e89b2c4be33c9274b308720a4e9146daf81f21e40d29c31aba3016a +size 317574 diff --git a/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Other-Part-Offset-A.png b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Other-Part-Offset-A.png new file mode 100644 index 00000000..d359e7e8 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Other-Part-Offset-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:615624326d2b9e2dcd5a131115193108eb8a145ef873fa9c7293aaa207243df9 +size 261596 diff --git a/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Other-Part-Offset-B.png b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Other-Part-Offset-B.png new file mode 100644 index 00000000..3883f6fd --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Other-Part-Offset-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e31f1cdaf2159da34e0262db3ea914de816dd7911fd87f56f6bb732953a09a56 +size 314989 diff --git a/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Other-Part-Relative-Position-A.png b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Other-Part-Relative-Position-A.png new file mode 100644 index 00000000..8dfaa4cc --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Other-Part-Relative-Position-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b1967598a2146e8f538e2ba8fc89d16a99aecb9c3ff6b53bf722e0a141aef41 +size 255163 diff --git a/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Other-Part-Relative-Position-B.png b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Other-Part-Relative-Position-B.png new file mode 100644 index 00000000..4d604dbf --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Other-Part-Relative-Position-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd8be3c661b0a8ec5a40d1f88d44980963f14776550532293b087890eca248af +size 320442 diff --git a/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Self-Offset-A.png b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Self-Offset-A.png new file mode 100644 index 00000000..bdfa48e6 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Self-Offset-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2631cd436cede2993eb8f28b0d5e82ce9ca91eb0c1cce757b6149a3c4d070561 +size 293093 diff --git a/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Self-Offset-B.png b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Self-Offset-B.png new file mode 100644 index 00000000..5f8c0154 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Self-Offset-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b3ba317e664eb91e6fc99e1ce50763929bc3434f6d79f9511cb97a1ab97d172 +size 304901 diff --git a/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Self-Rotate-A.png b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Self-Rotate-A.png new file mode 100644 index 00000000..d1069243 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Self-Rotate-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe9d98b698fefaa99ca47a87c8647efd65a96ac881514629c74c21a8e3d5d151 +size 250341 diff --git a/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Self-Rotate-B.png b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Self-Rotate-B.png new file mode 100644 index 00000000..e6007e4f --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Self-Rotate-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fe99e410a815706bbdcd2d23be4f4c444e2b5f0f3853261bf80ef819038d7bf +size 255595 diff --git a/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Strict-Position-A.png b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Strict-Position-A.png new file mode 100644 index 00000000..c4a195af --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Strict-Position-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8ad3e409f97a3d8c8f1c52bde2bd3b318f172e3d23b89c43b38297417a1b990 +size 237741 diff --git a/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Strict-Position-B.png b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Strict-Position-B.png new file mode 100644 index 00000000..cb5eca20 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Strict-Position-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98bc66dd64382893d5d6338777cafd8b323beedffa1fc9816b7c2d1a0c675fad +size 259486 diff --git a/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Strict-Rotation-A.png b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Strict-Rotation-A.png new file mode 100644 index 00000000..7f594cc1 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Strict-Rotation-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81aa52fdac4f9132419612e9fef6e2237b51a221ec3cb568bc9115bd8b5b43aa +size 235118 diff --git a/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Strict-Rotation-B.png b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Strict-Rotation-B.png new file mode 100644 index 00000000..0134dbce --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Strict-Rotation-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44a4159aad7685360e17ad273f71f69741bfbe8e092ad01e46b8ca99399d93c7 +size 218868 diff --git a/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Top-Face-Pointing-A.png b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Top-Face-Pointing-A.png new file mode 100644 index 00000000..03b2443d --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Top-Face-Pointing-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f06f21853c8b4c01dc8579413b65532245309c12d7508ad1738d3fb2f3553546 +size 300549 diff --git a/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Top-Face-Pointing-B.png b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Top-Face-Pointing-B.png new file mode 100644 index 00000000..e00ca4f5 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/cframes/CFrame-Top-Face-Pointing-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e57df7b71464947922b86d081b804f730cf938e27be949ed718153dc4160a5c3 +size 288998 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Explorer-MaterialVariant-Instances.png b/.cursor/rules/roblox/assets/modeling/materials/Explorer-MaterialVariant-Instances.png new file mode 100644 index 00000000..92e3f2af --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Explorer-MaterialVariant-Instances.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:703c5ef93b70dad4a1bfeb6e8c982064a2cb33001b903af45910a9ba2b166756 +size 20750 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-1A.jpg b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-1A.jpg new file mode 100644 index 00000000..d241b5a3 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-1A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96db8a4bfce6e0471e914650888a6757c20509283b5bae9c701473b378c78b04 +size 30072 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-1B.jpg b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-1B.jpg new file mode 100644 index 00000000..de2f5b1c --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-1B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:faac88e57b04c8ccbba5ede531cee141d4186e3d183e0f9a4609afa33b4c90a4 +size 34705 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-1C.jpg b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-1C.jpg new file mode 100644 index 00000000..dda0e044 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-1C.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ac5ea62ffa444b238c1e4b7d8437e17a983a980929d3b349c6fc3b1bee54ce1 +size 23415 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-1D.jpg b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-1D.jpg new file mode 100644 index 00000000..ad6463b5 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-1D.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:700df833a200f66f1562f1d6a830367c649d44d292fdf417365b66842e17ea82 +size 37352 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-2A.jpg b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-2A.jpg new file mode 100644 index 00000000..da68abf2 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-2A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a0cce84ad2768ff8f77cfa73c3e9192f376d12522c7f21d28b58f69278a9e6c +size 34192 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-2B.jpg b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-2B.jpg new file mode 100644 index 00000000..1c53fb57 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-2B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa4ad1a10e83c685ac70a602a1dfe59dcf6c9a74570800ad1e7f6b34f9b7ad08 +size 47471 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-2C.jpg b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-2C.jpg new file mode 100644 index 00000000..73af8dbc --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-2C.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23c78a5f35f6c7b41c575f7515b6a4362941026a7a27c67e69c639da0625fd70 +size 35712 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-2D.jpg b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-2D.jpg new file mode 100644 index 00000000..02f2881a --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-2D.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e212f22fb42071098b5a94d3ebcbe6209941eff17169a7642543aa56ea011846 +size 48054 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-3A.jpg b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-3A.jpg new file mode 100644 index 00000000..3fa6f7bb --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-3A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4ad4a7239125a29f86fe43ec4b067aa4e2eca51591575f7247609e708612e8c +size 43518 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-3B.jpg b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-3B.jpg new file mode 100644 index 00000000..1c711775 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-3B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1caae3ec59b06661bd2107361ed80753915c78ffefe4ca61c2fe876464d4196e +size 52235 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-3C.jpg b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-3C.jpg new file mode 100644 index 00000000..4253df50 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-3C.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f74726fe016fe03283f019d140e948ae4c8022cb2beb3dfe0cf03307a1d9845b +size 41819 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-3D.jpg b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-3D.jpg new file mode 100644 index 00000000..b7172c17 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-3D.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2913876961b429e3c5fe04798ffd96def714721ed7b820f5e9af45bb0adef1df +size 43341 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-4A.jpg b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-4A.jpg new file mode 100644 index 00000000..274991af --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-4A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67c1598b1c480ac368362bce1c2351d8bd3fa0fc499693708605ba4dacdbbe3d +size 52809 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-4B.jpg b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-4B.jpg new file mode 100644 index 00000000..2a5348d5 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-4B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bae64842b0595349d9329fca33ba7db3cae834dbcd8c6959a14a3a5ee3e64556 +size 28399 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-4C.jpg b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-4C.jpg new file mode 100644 index 00000000..b4b85b0d --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-4C.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b14a459495b16ec6a81b269951d0bde5721ee14efa0f9ae49f0fe63102c857fc +size 39853 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-4D.jpg b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-4D.jpg new file mode 100644 index 00000000..9750e94f --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Example-4D.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42249c65733d0f9e273167d8c149f1b263dc217d12d2a97ad4e2fe50820b0518 +size 39720 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Expanded-Options.png b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Expanded-Options.png new file mode 100644 index 00000000..14319770 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Expanded-Options.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2494f637dcdbc3b5a699c3efe1e0293c58d13adbbd4cf4250634004e9d82ec4e +size 98019 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Preview-On-Part.jpg b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Preview-On-Part.jpg new file mode 100644 index 00000000..7acd0822 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Preview-On-Part.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a1ec6ecd532ad21e115aa9ea8ed3deddc47c366f5984234238c3304842ccfdd +size 228682 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Preview.mp4 b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Preview.mp4 new file mode 100644 index 00000000..f13b5c68 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Material-Generator-Preview.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc1af435012b5322c129d6f57aeced81fec5e073740a742404e641bfbcab5c4a +size 4992139 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Properties-Material-And-MaterialVariant.png b/.cursor/rules/roblox/assets/modeling/materials/Properties-Material-And-MaterialVariant.png new file mode 100644 index 00000000..8140da7e --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Properties-Material-And-MaterialVariant.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c28529a5cc8c3a9e43d9102a77c7e01a355f09fc8d295e581281896343368596 +size 20391 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Properties-Part-CustomPhysicalProperties.png b/.cursor/rules/roblox/assets/modeling/materials/Properties-Part-CustomPhysicalProperties.png new file mode 100644 index 00000000..2b388a93 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Properties-Part-CustomPhysicalProperties.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c2b70bf28cb4b6ef654a52ca01ab08d246c00ea6c0f51b83d8b01058f28fbb6 +size 29799 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Properties-Physical-Overridden.png b/.cursor/rules/roblox/assets/modeling/materials/Properties-Physical-Overridden.png new file mode 100644 index 00000000..07555b91 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Properties-Physical-Overridden.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1932e591c73e7c8a641aa662e855f6ca370794a4bdfb3ae94fc7ebd3829f9eec +size 35287 diff --git a/.cursor/rules/roblox/assets/modeling/materials/Properties-View-Override.png b/.cursor/rules/roblox/assets/modeling/materials/Properties-View-Override.png new file mode 100644 index 00000000..caad94cf --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/materials/Properties-View-Override.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bcfc4cc840af3bdcb6f2d6c9901db92ea8930e8a28ec2a9990354ed37e497314 +size 29111 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/3d-Import-Queue.png b/.cursor/rules/roblox/assets/modeling/meshes/3d-Import-Queue.png new file mode 100644 index 00000000..87ce0437 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/3d-Import-Queue.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c62222fefdf0ed13ae9f49954c4470d70370662ae8f1b805a8f96aee98ecd74b +size 30353 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/3d-Importer-Panels.png b/.cursor/rules/roblox/assets/modeling/meshes/3d-Importer-Panels.png new file mode 100644 index 00000000..c34fc638 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/3d-Importer-Panels.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd07b555b0d323fa07d9a8812c6716a340cccb9a9ebc71ba11d63e0b8f0ad791 +size 150078 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/Base-Mesh-In-Marketplace.png b/.cursor/rules/roblox/assets/modeling/meshes/Base-Mesh-In-Marketplace.png new file mode 100644 index 00000000..1980b1ce --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/Base-Mesh-In-Marketplace.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:662938ce60a9a165e5ae503bc04e3e202608428e13cae49a11f2a16825c28ea4 +size 46650 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/Beyond-The-Dark-Example.png b/.cursor/rules/roblox/assets/modeling/meshes/Beyond-The-Dark-Example.png new file mode 100644 index 00000000..ab38eb83 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/Beyond-The-Dark-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ee3611f672ad2a15c34ab1be46d9b6cb961ef0ade037decdb0f7f53c64b44ad +size 337108 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/Blender-Scale-Examples.png b/.cursor/rules/roblox/assets/modeling/meshes/Blender-Scale-Examples.png new file mode 100644 index 00000000..28d23017 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/Blender-Scale-Examples.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54664ae02b5a04edcb154cf2f0344ed365ead4dd9d065d5d646c7198e692524a +size 385300 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/Collar-Attachment-1.png b/.cursor/rules/roblox/assets/modeling/meshes/Collar-Attachment-1.png new file mode 100644 index 00000000..ac6429bd --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/Collar-Attachment-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19b83f95ea3af840e2c216e074eb809c2a56cb31a54079beabcbd4ec9bd5002d +size 390475 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/Collar-Attachment-2.png b/.cursor/rules/roblox/assets/modeling/meshes/Collar-Attachment-2.png new file mode 100644 index 00000000..0d79f88a --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/Collar-Attachment-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fe4570f6e646dc4e20a611f955d8f6678c09389bf83880c9c0d9bc875fd2461 +size 378396 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/Grip_Attachments.png b/.cursor/rules/roblox/assets/modeling/meshes/Grip_Attachments.png new file mode 100644 index 00000000..d221399a --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/Grip_Attachments.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6934bad0dde52665ef6473f25dc66b46a1c57129c738eab28d017147f5847f61 +size 92829 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/Mesh-SurfaceAppearance.jpg b/.cursor/rules/roblox/assets/modeling/meshes/Mesh-SurfaceAppearance.jpg new file mode 100644 index 00000000..c63cee5c --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/Mesh-SurfaceAppearance.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3b2c2b4375cd16f6f0d1125f8e6603e074a535750b0af515f19e4642a0136ef +size 217374 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/Mesh-Textured.jpg b/.cursor/rules/roblox/assets/modeling/meshes/Mesh-Textured.jpg new file mode 100644 index 00000000..766ac948 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/Mesh-Textured.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:334d8232741db3237c0bea4d492006fecc05d8add4ce7d0d2227256de15ec89a +size 133640 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/Modeling-Requirements-Caps.png b/.cursor/rules/roblox/assets/modeling/meshes/Modeling-Requirements-Caps.png new file mode 100644 index 00000000..f689ee3d --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/Modeling-Requirements-Caps.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aab10199633efabdb7631cf42ffc70b28a150d565342c9cf41715dd322e908e3 +size 175614 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/Mystery-of-Duvall-Example.png b/.cursor/rules/roblox/assets/modeling/meshes/Mystery-of-Duvall-Example.png new file mode 100644 index 00000000..3f693b2b --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/Mystery-of-Duvall-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5cde331c47548441857dbb157b0a7b8344787bc9c64e5f609045a46de35eed6 +size 377108 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/Properties-TextureID.png b/.cursor/rules/roblox/assets/modeling/meshes/Properties-TextureID.png new file mode 100644 index 00000000..1ff7c716 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/Properties-TextureID.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f2efd3a4c859194d7a176805952cdf674234475fa176c30f18513ece3b70caf +size 9943 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/Reimport-menu.png b/.cursor/rules/roblox/assets/modeling/meshes/Reimport-menu.png new file mode 100644 index 00000000..6695f74c --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/Reimport-menu.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c38c544e436fbd1df4f05cda2ab251eda023eeef9190fa16a178d3ef973ccac +size 98117 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/Render-Fidelity-High.jpg b/.cursor/rules/roblox/assets/modeling/meshes/Render-Fidelity-High.jpg new file mode 100644 index 00000000..72ce4cc3 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/Render-Fidelity-High.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17fa13005a2d7505488d32ef446513b392d2c3fc656ca1402be5073ef64d57cd +size 123276 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/Render-Fidelity-Low.jpg b/.cursor/rules/roblox/assets/modeling/meshes/Render-Fidelity-Low.jpg new file mode 100644 index 00000000..12a61b92 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/Render-Fidelity-Low.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac4e4740f4774f2cdc8e2ffcc89e1d0134505ee3b53e61d3854b204198fb2154 +size 122099 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/Render-Fidelity-Medium.jpg b/.cursor/rules/roblox/assets/modeling/meshes/Render-Fidelity-Medium.jpg new file mode 100644 index 00000000..1b7cd8d4 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/Render-Fidelity-Medium.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51d45344e53df6dfb5bdc1c094ce67ca04e0ea905bffdd98980801522f0fe30c +size 124827 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/Warning-Mouse-Over.png b/.cursor/rules/roblox/assets/modeling/meshes/Warning-Mouse-Over.png new file mode 100644 index 00000000..238622ab --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/Warning-Mouse-Over.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81ca22906f7eb9f2aec76ec6eef56c2a02c0620a457dbc58b590d8a457ef0a81 +size 13966 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/Warning-Settings-Panel.png b/.cursor/rules/roblox/assets/modeling/meshes/Warning-Settings-Panel.png new file mode 100644 index 00000000..1f11a03a --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/Warning-Settings-Panel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ad2289db1a683c08143e3fd7461ffdf24fd1fc0481959e035e201cf164637ab +size 14752 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/Compositor-Example-Optimized.png b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/Compositor-Example-Optimized.png new file mode 100644 index 00000000..2076aec5 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/Compositor-Example-Optimized.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:214361f0cd244bf84de7dab0b21e7bfdf8175cbb3e0c5d7d5ef1fe72cb84b492 +size 298811 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/Compositor-Example-Poor.png b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/Compositor-Example-Poor.png new file mode 100644 index 00000000..b555a8aa --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/Compositor-Example-Poor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:542fffb643dd0c79d7b8dfe1c53be202db8367ebde77cda7382cd88d433dc775 +size 299779 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/Face-Tone-Beige.png b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/Face-Tone-Beige.png new file mode 100644 index 00000000..c95c857a --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/Face-Tone-Beige.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6ab6139e14b2aec490755d919d7d4ca8017b1d590abd486031e862635a5d059 +size 274565 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/Face-Tone-Blue.png b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/Face-Tone-Blue.png new file mode 100644 index 00000000..98b691d5 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/Face-Tone-Blue.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d32834626b6f6f84a1831d0f5a3aaf9efdaa49729b1fa1b471c47c8708ebfaed +size 245628 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/Face-Tone-Brown.png b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/Face-Tone-Brown.png new file mode 100644 index 00000000..ae3ec8b0 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/Face-Tone-Brown.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af88f0844cf0c8a8b6675cc83a36e3768e0fb333d324bcaf0e8193f6e52f170e +size 185733 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/Face-Tone-Pink.png b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/Face-Tone-Pink.png new file mode 100644 index 00000000..6c3b1137 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/Face-Tone-Pink.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b18c46777f5d9f060d7bfa4f8952533f4d79d0277395d3877dc33c0508525021 +size 275622 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/Face-Tone-Transparent.png b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/Face-Tone-Transparent.png new file mode 100644 index 00000000..32b61899 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/Face-Tone-Transparent.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7de625eb95cb334a69b073a8bbe28a176d82db53c976ebb359e958684e99e4b5 +size 521799 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/UV-Island-Optimized.png b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/UV-Island-Optimized.png new file mode 100644 index 00000000..cf338f24 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/UV-Island-Optimized.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1116aea2adb7b251cf4ccafbb93108cbb4b0cf46906d9726f5e30b7d4a44122 +size 620065 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/UV-Island-Poor.png b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/UV-Island-Poor.png new file mode 100644 index 00000000..c65f54bf --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/UV-Island-Poor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15e67445218900ebd253a0f16f8df5d46e4746c27207aa565b14c69ba4432c11 +size 624645 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/UV-Layout-Optimized.png b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/UV-Layout-Optimized.png new file mode 100644 index 00000000..320beaae --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/UV-Layout-Optimized.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9aefe749b14c5f271acfdedf0cef7913849411b2b4a7a55d0e20ba6001e31c50 +size 318351 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/UV-Layout-Poor.png b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/UV-Layout-Poor.png new file mode 100644 index 00000000..532c4d5e --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/UV-Layout-Poor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:621af69cb70eef8c42e591e9e92aa494d28ff05f8545b7d3ca54789b800cb5e2 +size 429995 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/UV_Grid_1024.png b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/UV_Grid_1024.png new file mode 100644 index 00000000..6a0c144f --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/UV_Grid_1024.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80bd263cf62218ec0c98d9d2b00cb7871ed97560c8f677c69341283ddc294020 +size 5805 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/UV_Grid_256.png b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/UV_Grid_256.png new file mode 100644 index 00000000..efca8c47 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/UV_Grid_256.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b6d7998529ea11f7a972c432bf8a3e5fcd0c25d3108ef247a62f2a5ab39fe86 +size 3062 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/UV_Grid_512.png b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/UV_Grid_512.png new file mode 100644 index 00000000..975aea66 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/mesh-requirements/UV_Grid_512.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bcc6eddc389e65a0c5e8251275b10363269d8a4e9c6fc188896edfc8d3847d64 +size 3806 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/reference-files/Body_Cage_Templates.zip b/.cursor/rules/roblox/assets/modeling/meshes/reference-files/Body_Cage_Templates.zip new file mode 100644 index 00000000..9fa53e1a --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/reference-files/Body_Cage_Templates.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:220e3ef25af770b97f46f4b4efbe11d88607e3a2883fa8e11b3db9f065c2a749 +size 5835588 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/reference-files/Clothing_Cage_Templates.zip b/.cursor/rules/roblox/assets/modeling/meshes/reference-files/Clothing_Cage_Templates.zip new file mode 100644 index 00000000..861492e7 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/reference-files/Clothing_Cage_Templates.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a23dc3dbbfa4a2fe72383a4f59a6abd1f701aabcecad0072e91809ac6742e4b +size 5770539 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/reference-files/Combined_Templates.zip b/.cursor/rules/roblox/assets/modeling/meshes/reference-files/Combined_Templates.zip new file mode 100644 index 00000000..d44d9896 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/reference-files/Combined_Templates.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14bb469916d34cb68abc75b4c08eed54f826e4ba8af6e4bc4808fbeb3250d3bc +size 6084730 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/reference-files/Rig_and_Attachments_Templates.zip b/.cursor/rules/roblox/assets/modeling/meshes/reference-files/Rig_and_Attachments_Templates.zip new file mode 100644 index 00000000..481a9a1d --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/reference-files/Rig_and_Attachments_Templates.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e96e8483143716b49369e8692f2c2c2c7ae0d3a3d936b58cf3b5dae73148ff7b +size 5373974 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/reference-files/lola-base-model.fbx b/.cursor/rules/roblox/assets/modeling/meshes/reference-files/lola-base-model.fbx new file mode 100644 index 00000000..af447512 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/reference-files/lola-base-model.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba86cad31b12c399321e5894163a2d9313eadd40766dccf5c4ce1b0357ed01e9 +size 2747788 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/reference-files/lola-rigged-r15.blend b/.cursor/rules/roblox/assets/modeling/meshes/reference-files/lola-rigged-r15.blend new file mode 100644 index 00000000..f7cdfe12 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/reference-files/lola-rigged-r15.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50b7e71f86cdb269d40f3a244d57385d581ead2ffb1b52e6d080376ba8331105 +size 5278816 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/reference-files/lola-skinned-s15.blend b/.cursor/rules/roblox/assets/modeling/meshes/reference-files/lola-skinned-s15.blend new file mode 100644 index 00000000..ebd3fece --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/reference-files/lola-skinned-s15.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73ad3e25086e15c907d5bc01b4ecc09869dcb6960ce6982102d0fbc5bfe639d9 +size 5336472 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/reference-files/shoebot-base-model.fbx b/.cursor/rules/roblox/assets/modeling/meshes/reference-files/shoebot-base-model.fbx new file mode 100644 index 00000000..cffca2a8 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/reference-files/shoebot-base-model.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6869726d2b4f0408899001340348daa8d8ceb93d2a7db546ecfb2c84f0e4e72c +size 321980 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/reference-files/shoebot-rigged-model.fbx b/.cursor/rules/roblox/assets/modeling/meshes/reference-files/shoebot-rigged-model.fbx new file mode 100644 index 00000000..9008cc39 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/reference-files/shoebot-rigged-model.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce58c39049007cc1f76c378169873bc1674776d82f5700b6b7c037dc0463248c +size 334316 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/1-resizing-base-model.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/1-resizing-base-model.mp4 new file mode 100644 index 00000000..ea72c9c6 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/1-resizing-base-model.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bee752a5df29acac05c703cb5e56dca1f5cb22c9b8c10edcf214bca87d9d413 +size 7584240 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/2-bone-visualization.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/2-bone-visualization.mp4 new file mode 100644 index 00000000..4955802c --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/2-bone-visualization.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23682e7a12605beaef23605243f0727829f6a3e431517afe00ffe86d2cdd05b6 +size 3083351 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/3-x-axis-mirror.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/3-x-axis-mirror.mp4 new file mode 100644 index 00000000..c3341d28 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/3-x-axis-mirror.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:686c6cc32914b1967794e6ee121d9ead87c6628cd1312c60fa25a79b0900e2cc +size 7251505 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/4-repositioning-bones.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/4-repositioning-bones.mp4 new file mode 100644 index 00000000..0a66e63c --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/4-repositioning-bones.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04a19bd885c191f9fa107b688e0540e43bd28d61002b4f96b4c560ee2f5269f3 +size 29853341 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/5-inspect-bones.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/5-inspect-bones.mp4 new file mode 100644 index 00000000..f258abf9 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/5-inspect-bones.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c768688766547e2466947b8400488e425208645167f511fae0f993ac92f2160f +size 3823960 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/6-parenting-bones.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/6-parenting-bones.mp4 new file mode 100644 index 00000000..43ceb25b --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/6-parenting-bones.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97325665525ba69cf9fb878c68fb456ab7019ea3e36d1d17da076122905d2e0d +size 5922393 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/7-assign-influence-head.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/7-assign-influence-head.mp4 new file mode 100644 index 00000000..7d537f27 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/7-assign-influence-head.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7e399693fb5a51916ef34c5322089bb84f30a46d3d518f7812ec494494b6096 +size 8926562 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/8-assign-influence.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/8-assign-influence.mp4 new file mode 100644 index 00000000..9a20e73c --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/8-assign-influence.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77e64c002042b9e8538cf5bbd60675fc80efdee8b747e6a3df12fac766ea15bb +size 11952567 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/9-test-bones.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/9-test-bones.mp4 new file mode 100644 index 00000000..51436d99 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/rigging-humanoid/9-test-bones.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:829e26fc217db97db63f0ad3d1242bcb596e055c00f8aa9316edf26225de79a7 +size 16503320 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/1-setting-up-blender.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/1-setting-up-blender.mp4 new file mode 100644 index 00000000..9d764fb8 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/1-setting-up-blender.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee083e879c27f4e7f438d25c84aaaf4af94a86bcb20baff933695b2b41f76f4c +size 5843512 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/2-adding-armature.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/2-adding-armature.mp4 new file mode 100644 index 00000000..aaf67a2f --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/2-adding-armature.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c935f223d8b689416eda2179d0711cd3348ea77fbf95ab163c1a471902f962e2 +size 6599652 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/3.1-positioning-bones.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/3.1-positioning-bones.mp4 new file mode 100644 index 00000000..bbcab235 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/3.1-positioning-bones.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95787d7fb70c267c71fd27773404e89c459290f00ae552504d0c80783de01d78 +size 4252147 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/3.2-positioning-bones.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/3.2-positioning-bones.mp4 new file mode 100644 index 00000000..3e9380b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/3.2-positioning-bones.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6713f5d7f4532e82439aeee97fc23a7d5e3c6ba515ee6368309bbd23aba03dc2 +size 7729956 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/3.3-positioning-bones.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/3.3-positioning-bones.mp4 new file mode 100644 index 00000000..5e40553c --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/3.3-positioning-bones.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ccb65078efa50e891cabe7dee848b0bdee7a8801617f910528e1a682c3701a5 +size 4721434 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/4-rename-bones.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/4-rename-bones.mp4 new file mode 100644 index 00000000..7ced14dd --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/4-rename-bones.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9749fab2c7e38f02e5397b7b0861f99c31ab2420b3db143fc8bc1e3d26c76e2d +size 6425574 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/5-parenting-armature.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/5-parenting-armature.mp4 new file mode 100644 index 00000000..3a9fb57f --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/5-parenting-armature.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0bd57eacd27e8969b4109fc65a0ec6bf7a4acb7c34a0220881f6bf5457cad441 +size 6202541 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/6.1-assigning-vertices.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/6.1-assigning-vertices.mp4 new file mode 100644 index 00000000..72871968 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/6.1-assigning-vertices.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d6f2e425a415eff86bd8f16ff27b492fdda1661d992f565b56719d34492884f +size 5355662 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/6.2-assigning-vertices.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/6.2-assigning-vertices.mp4 new file mode 100644 index 00000000..c267ecc6 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/6.2-assigning-vertices.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:634e11a84dca82f2be059a075483deff0b570877bd1dd5a5d716befee8fc36b6 +size 9012278 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/6.3-assigning-vertices.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/6.3-assigning-vertices.mp4 new file mode 100644 index 00000000..3c30a12e --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/6.3-assigning-vertices.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:acdaddbd3e662eb979b4e0f69f6550b1fbb08cacbf5bb7f9131a1c90a1b8d4fd +size 4894044 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/7-testing.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/7-testing.mp4 new file mode 100644 index 00000000..4df02f5f --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/7-testing.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29b16c3e6fbf82b0fbda62d44044e7dac4daca61df7dbc2c06944029f2fe3246 +size 14268165 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/rigging-r1-imported.png b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/rigging-r1-imported.png new file mode 100644 index 00000000..6de07ed5 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/rigging-simple/rigging-r1-imported.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2458d4e4aca37a462e600ecb7e91ccd6b386b20480f0c865d5fa984a42fc6a6a +size 1275393 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/1-bone-visualizations.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/1-bone-visualizations.mp4 new file mode 100644 index 00000000..ab6602af --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/1-bone-visualizations.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9847ef3b1c5a48789852ba20446cda94eb56a333a18c9c7d1baeb7f1ef3b329a +size 2680367 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/10-weight-paint-lower-arm.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/10-weight-paint-lower-arm.mp4 new file mode 100644 index 00000000..ae65f34b --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/10-weight-paint-lower-arm.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2c68387ca78950cbd85c6900b3feba9d614a6deeb5b58152db99dc98faa6988 +size 11094392 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/11-switch-to-upper-arm.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/11-switch-to-upper-arm.mp4 new file mode 100644 index 00000000..650cb618 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/11-switch-to-upper-arm.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:94dbcadfa180da8670724c5df21cc924da6945178eb9fe958830559df3eca471 +size 5957284 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/12-weight-paint-upper-arm.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/12-weight-paint-upper-arm.mp4 new file mode 100644 index 00000000..175136d8 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/12-weight-paint-upper-arm.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4750537644ba84c610d03af825a09861743ce383e5e5fae680bf8e0141517a8 +size 15483085 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/13-switch-to-upper-torso.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/13-switch-to-upper-torso.mp4 new file mode 100644 index 00000000..616ed90c --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/13-switch-to-upper-torso.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dbf6a4a65a86ed1db39204c223711e26cfa58bd298f0612edbafa52ed60045aa +size 3792259 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/14-weight-paint-upper-torso.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/14-weight-paint-upper-torso.mp4 new file mode 100644 index 00000000..376656c6 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/14-weight-paint-upper-torso.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca30bb776bca9a6a0132a075fd4cfa773efd5dbd3bf7beab39cf454aefa105cf +size 19622546 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/2-auto-normalize.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/2-auto-normalize.mp4 new file mode 100644 index 00000000..ed4aaa0c --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/2-auto-normalize.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee66cd9e556423eb0dd6a5a0938b108ceb932da4d6e2c7875888309eb77c0185 +size 6366806 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/3-select-head.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/3-select-head.mp4 new file mode 100644 index 00000000..c96a8fd1 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/3-select-head.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9cbb31bc4f82bd3120bd784e849fb7ad1e349b304cab06f64dc63a9f90b300d9 +size 5632609 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/4-weight-paint-head.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/4-weight-paint-head.mp4 new file mode 100644 index 00000000..3371afe7 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/4-weight-paint-head.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14ef9347c00054d6bcb1ca659fde700d8f5b64c3f37368d9ed3105a5b645e39c +size 33074578 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/5-test-head.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/5-test-head.mp4 new file mode 100644 index 00000000..de8dae2b --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/5-test-head.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d3ab218148ca3b7255ba8a0780347b02c17bab241d021e8b24856cb8ec2453f +size 7134427 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/6-select-hand-and-test.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/6-select-hand-and-test.mp4 new file mode 100644 index 00000000..2a3a7fa5 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/6-select-hand-and-test.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba6665bd0b3ef31f932383d740b82cdce9877c3614008870739d4b0daf7319b3 +size 7108186 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/7-weight-paint-hand.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/7-weight-paint-hand.mp4 new file mode 100644 index 00000000..f6ced71f --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/7-weight-paint-hand.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f14a2e9a3503f980c23a6d9ac57e2e361966837a29c3323737af3404843647c +size 10584515 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/8-test-hand.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/8-test-hand.mp4 new file mode 100644 index 00000000..49563edd --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/8-test-hand.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8e59c412995d40212c226d4e5f5be26ab7b9257c72d185d08c149c0845de3ec +size 3954150 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/9-switch-to-lower-arm.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/9-switch-to-lower-arm.mp4 new file mode 100644 index 00000000..1628b9f4 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/9-switch-to-lower-arm.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:072b30d3417bc47ba29d5ffabe19764bcf408f113eea0303b962334717cbf502 +size 7029420 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/Candywrap-Example.png b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/Candywrap-Example.png new file mode 100644 index 00000000..fdeb38f2 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/Candywrap-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c710cc2e1f9d8efc354c494bf4f685433fdbe916e3c444711409a3f5ca6be0fd +size 80897 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/autonormalize-example.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/autonormalize-example.mp4 new file mode 100644 index 00000000..b751e261 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/autonormalize-example.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad9dbd71989dd3aae97e31cafe7695ad3763a332ad18a04aabb13e06d2136256 +size 2846174 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/autonormalize-example2.mp4 b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/autonormalize-example2.mp4 new file mode 100644 index 00000000..99244177 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/autonormalize-example2.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0019d40f259747abd5bf0bf40eac41383ad69b16678d25c946000440d9c0353 +size 1477050 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/head-example-headbone-selected.png b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/head-example-headbone-selected.png new file mode 100644 index 00000000..42354551 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/head-example-headbone-selected.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:961ade00e78874fe1ce5277c20288d4c3aa96854e00ab69a587d0f8daa9b86cf +size 418967 diff --git a/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/head-example-uppertorso-selected.png b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/head-example-uppertorso-selected.png new file mode 100644 index 00000000..e0dd23a0 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/meshes/skinning-humanoid/head-example-uppertorso-selected.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38fe13a15c660b7df7050c4209fa344406d4bfc4589bfa704cc286ed933a9092 +size 400815 diff --git a/.cursor/rules/roblox/assets/modeling/model-objects/LevelOfDetail-Actual.jpg b/.cursor/rules/roblox/assets/modeling/model-objects/LevelOfDetail-Actual.jpg new file mode 100644 index 00000000..1d4fd50b --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/model-objects/LevelOfDetail-Actual.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51af26555e28350a13ebb5bbda6ed8efacafe74583d785956c7b35a9ec2a632f +size 107600 diff --git a/.cursor/rules/roblox/assets/modeling/model-objects/LevelOfDetail-Imposter.jpg b/.cursor/rules/roblox/assets/modeling/model-objects/LevelOfDetail-Imposter.jpg new file mode 100644 index 00000000..1de7fc01 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/model-objects/LevelOfDetail-Imposter.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:745c4b6e941f8f8ba8462a31a577f019ad5f3685e1d3b70dbfe344facf2a0117 +size 18861 diff --git a/.cursor/rules/roblox/assets/modeling/model-objects/LevelOfDetail-Original.jpg b/.cursor/rules/roblox/assets/modeling/model-objects/LevelOfDetail-Original.jpg new file mode 100644 index 00000000..115aac57 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/model-objects/LevelOfDetail-Original.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e27a1ebdaa750c0052eb9b7dcb247cc9916158c026c28363e35c545553755ff +size 27633 diff --git a/.cursor/rules/roblox/assets/modeling/model-objects/LevelOfDetail-Slim.jpg b/.cursor/rules/roblox/assets/modeling/model-objects/LevelOfDetail-Slim.jpg new file mode 100644 index 00000000..87744549 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/model-objects/LevelOfDetail-Slim.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a036d97c01b6abcd7b2ae7c8e47357476e512063ebbf2901ad542bc13043d30e +size 26578 diff --git a/.cursor/rules/roblox/assets/modeling/model-objects/LevelOfDetail-StreamingMesh.jpg b/.cursor/rules/roblox/assets/modeling/model-objects/LevelOfDetail-StreamingMesh.jpg new file mode 100644 index 00000000..f2fb80b5 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/model-objects/LevelOfDetail-StreamingMesh.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55e46237595c7ad0c0e7862b50f10bd7d4c6efdbb7587608e568e6fb24c8d1f8 +size 77564 diff --git a/.cursor/rules/roblox/assets/modeling/model-objects/Model-Example-3D.jpg b/.cursor/rules/roblox/assets/modeling/model-objects/Model-Example-3D.jpg new file mode 100644 index 00000000..92a8cba0 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/model-objects/Model-Example-3D.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b68b35efffacabe62d1f96137db8de2120c125d6a2d086e92c47c405d906f2d +size 150812 diff --git a/.cursor/rules/roblox/assets/modeling/model-objects/Model-Example-Hierarchy.png b/.cursor/rules/roblox/assets/modeling/model-objects/Model-Example-Hierarchy.png new file mode 100644 index 00000000..11ee76ae --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/model-objects/Model-Example-Hierarchy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1106dfecc0bf3aeae9bd3352894efb6a46e03023088805301e73c8f8f1e57059 +size 114829 diff --git a/.cursor/rules/roblox/assets/modeling/model-objects/Model-Group-Simple.png b/.cursor/rules/roblox/assets/modeling/model-objects/Model-Group-Simple.png new file mode 100644 index 00000000..adc4fdbe --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/model-objects/Model-Group-Simple.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5004f990a2508936a09e99412a58956beb937f7238c9a6e1c144293055b79d23 +size 33500 diff --git a/.cursor/rules/roblox/assets/modeling/parts/Basic-Part-Block.png b/.cursor/rules/roblox/assets/modeling/parts/Basic-Part-Block.png new file mode 100644 index 00000000..9c7622d3 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/parts/Basic-Part-Block.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de41fb7fba1592211fd6b34bd3e70ac3125ac495c13088f1568842615fe8db0a +size 188047 diff --git a/.cursor/rules/roblox/assets/modeling/parts/Basic-Part-Corner-Wedge.png b/.cursor/rules/roblox/assets/modeling/parts/Basic-Part-Corner-Wedge.png new file mode 100644 index 00000000..86eab48d --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/parts/Basic-Part-Corner-Wedge.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ee873236b446e11582a9b6d4acbff039f7bb9d5b97b0107a2fe31af0ec607b9 +size 391513 diff --git a/.cursor/rules/roblox/assets/modeling/parts/Basic-Part-Cylinder.png b/.cursor/rules/roblox/assets/modeling/parts/Basic-Part-Cylinder.png new file mode 100644 index 00000000..72b1744d --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/parts/Basic-Part-Cylinder.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:669245b8248c644a8d6912ca4cefb367546ad29fd79ce0ff4acf62d45f410091 +size 188650 diff --git a/.cursor/rules/roblox/assets/modeling/parts/Basic-Part-Sphere.png b/.cursor/rules/roblox/assets/modeling/parts/Basic-Part-Sphere.png new file mode 100644 index 00000000..168ff6b1 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/parts/Basic-Part-Sphere.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e06918c9a7d5c4f28b3d5c003f27b8b941cb975082de6583c86770d977a4e29 +size 218202 diff --git a/.cursor/rules/roblox/assets/modeling/parts/Basic-Part-Wedge.png b/.cursor/rules/roblox/assets/modeling/parts/Basic-Part-Wedge.png new file mode 100644 index 00000000..38187a9e --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/parts/Basic-Part-Wedge.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e44c41441e7a01a026c48fdc8a833f569bb362d1372ff742e0e80980bd7dddd4 +size 199428 diff --git a/.cursor/rules/roblox/assets/modeling/parts/Material-Neon.png b/.cursor/rules/roblox/assets/modeling/parts/Material-Neon.png new file mode 100644 index 00000000..e8663145 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/parts/Material-Neon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6d4a2e7a7ab9d8f13e8cd195b0d01636c7da364581842f458ffabc36586bb79 +size 288325 diff --git a/.cursor/rules/roblox/assets/modeling/parts/Material-SmoothPlastic.png b/.cursor/rules/roblox/assets/modeling/parts/Material-SmoothPlastic.png new file mode 100644 index 00000000..e342d5a7 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/parts/Material-SmoothPlastic.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e71149971add8462c9ab823f3a33bf369bc2d44b8aadd0c35a47e66709758f5 +size 164666 diff --git a/.cursor/rules/roblox/assets/modeling/parts/Mesh-Example.jpg b/.cursor/rules/roblox/assets/modeling/parts/Mesh-Example.jpg new file mode 100644 index 00000000..13d606e2 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/parts/Mesh-Example.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6bd4f179e5b6bc5d85851623fdeabdca1e132f42e9a2cac6e2dc75e8f54b35ff +size 101782 diff --git a/.cursor/rules/roblox/assets/modeling/parts/Move-Local-Orientation.png b/.cursor/rules/roblox/assets/modeling/parts/Move-Local-Orientation.png new file mode 100644 index 00000000..fd05598d --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/parts/Move-Local-Orientation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6ca3344c81197c2f5e1f1fe2f51854b0a969ded5e1866b1af1d831563de24ae +size 298106 diff --git a/.cursor/rules/roblox/assets/modeling/parts/Move-World-Orientation.png b/.cursor/rules/roblox/assets/modeling/parts/Move-World-Orientation.png new file mode 100644 index 00000000..a1778a30 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/parts/Move-World-Orientation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0dab02ee0050f3a625f2573b4890a5c1e2e36bf1141c2c260582687732d1cc46 +size 294879 diff --git a/.cursor/rules/roblox/assets/modeling/parts/Part-Example-CSG.jpg b/.cursor/rules/roblox/assets/modeling/parts/Part-Example-CSG.jpg new file mode 100644 index 00000000..adb834f2 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/parts/Part-Example-CSG.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12030691028c495e1e93a21150c40ad5ca09d7435b078824c5d0e939aa6f8d2f +size 88816 diff --git a/.cursor/rules/roblox/assets/modeling/parts/Transform-Move-Cursor-Drag-Snap.png b/.cursor/rules/roblox/assets/modeling/parts/Transform-Move-Cursor-Drag-Snap.png new file mode 100644 index 00000000..4c72eddf --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/parts/Transform-Move-Cursor-Drag-Snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:759a30b1b619b79de5f65b0388f770dae413b7b82985e0fb928397e7507d7d33 +size 359497 diff --git a/.cursor/rules/roblox/assets/modeling/parts/Transform-Move-Cursor-Drag-T-R.png b/.cursor/rules/roblox/assets/modeling/parts/Transform-Move-Cursor-Drag-T-R.png new file mode 100644 index 00000000..b40f858c --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/parts/Transform-Move-Cursor-Drag-T-R.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:531835a8d10ababec75397057451a03159d7e94f38d5643659a263ead5c52d01 +size 349992 diff --git a/.cursor/rules/roblox/assets/modeling/parts/Transform-Move-Indicator.png b/.cursor/rules/roblox/assets/modeling/parts/Transform-Move-Indicator.png new file mode 100644 index 00000000..f9093b08 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/parts/Transform-Move-Indicator.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3fa266186f8d0f8dc344c478a95522a1582b79d59ba1f6df18eccc6d1c984c41 +size 351593 diff --git a/.cursor/rules/roblox/assets/modeling/parts/Transform-Move-Pivot-Snap.png b/.cursor/rules/roblox/assets/modeling/parts/Transform-Move-Pivot-Snap.png new file mode 100644 index 00000000..5ab2136f --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/parts/Transform-Move-Pivot-Snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5801e9cb0aaf751099b7b15186be83d7324f377ad8bddcc9a170a0dc72ef3bb +size 366632 diff --git a/.cursor/rules/roblox/assets/modeling/parts/Transform-Move-Ruler-Snap.png b/.cursor/rules/roblox/assets/modeling/parts/Transform-Move-Ruler-Snap.png new file mode 100644 index 00000000..4ed41f5a --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/parts/Transform-Move-Ruler-Snap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a829ce9f07bdb2668c8b4c6b1d715d6aa23557adfa3af1f37e5b007d1e2bf6c2 +size 324267 diff --git a/.cursor/rules/roblox/assets/modeling/parts/Transform-Move-SM.png b/.cursor/rules/roblox/assets/modeling/parts/Transform-Move-SM.png new file mode 100644 index 00000000..ade9008f --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/parts/Transform-Move-SM.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3b0c62f73a076233e254c1f268caf4614a66977e3ca5f3961b99939e250b0fe +size 223953 diff --git a/.cursor/rules/roblox/assets/modeling/parts/Transform-Move.png b/.cursor/rules/roblox/assets/modeling/parts/Transform-Move.png new file mode 100644 index 00000000..d610544b --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/parts/Transform-Move.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d8ca3c475fec6c5693bc41f40601d41fadc4c98f7cbacc3206c2d3d43fd6df2 +size 191883 diff --git a/.cursor/rules/roblox/assets/modeling/parts/Transform-Rotate-SM.png b/.cursor/rules/roblox/assets/modeling/parts/Transform-Rotate-SM.png new file mode 100644 index 00000000..a3b5bc3d --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/parts/Transform-Rotate-SM.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e3584fd7c8b6d4f3e791f96e728bd6e7823cc8908374fbfc4c9173f76ffd315 +size 245922 diff --git a/.cursor/rules/roblox/assets/modeling/parts/Transform-Rotate.png b/.cursor/rules/roblox/assets/modeling/parts/Transform-Rotate.png new file mode 100644 index 00000000..54d9b578 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/parts/Transform-Rotate.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c79967d99f1e5196b996436b516dc5c43a74dafef0bb8d4606a4124bdd33ae5f +size 242129 diff --git a/.cursor/rules/roblox/assets/modeling/parts/Transform-Scale-SM.png b/.cursor/rules/roblox/assets/modeling/parts/Transform-Scale-SM.png new file mode 100644 index 00000000..58e3f9f9 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/parts/Transform-Scale-SM.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2d83d3e1fac2d809a3f911b52bfcbf6e3d1de272fc3807360930a01357c2bee +size 201342 diff --git a/.cursor/rules/roblox/assets/modeling/parts/Transform-Scale.png b/.cursor/rules/roblox/assets/modeling/parts/Transform-Scale.png new file mode 100644 index 00000000..02f1b854 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/parts/Transform-Scale.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e2a41389c77e8160ea4235bbe2f85ce867e7de5efabe0b8e206ae4ce7a74317 +size 173725 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Adding-Armature.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Adding-Armature.mp4 new file mode 100644 index 00000000..3a01fb77 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Adding-Armature.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09b68d3367056c8c827fdefb0631ea688a6b0141df79264e2aff1ef4ba304b0f +size 778745 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Animation-Editor-Add-Tracks.png b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Animation-Editor-Add-Tracks.png new file mode 100644 index 00000000..729acdc0 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Animation-Editor-Add-Tracks.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25eddd59e0116afcfbd90a854d68b73707998e887ba3a08f1db730ba343bd92e +size 24410 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Blender-Export-Settings-1.png b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Blender-Export-Settings-1.png new file mode 100644 index 00000000..4cd52d85 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Blender-Export-Settings-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:62a434597924b5f02991cc9b58de9897ef81f26a11553c613d437fde925a39be +size 86297 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Blender-Export-Settings-2.png b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Blender-Export-Settings-2.png new file mode 100644 index 00000000..82cc9800 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Blender-Export-Settings-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e937d7f25f8a9e8ec935a2fa2326200d007838f4b4a86038434b9706b3f6c50 +size 14241 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Blender-Export-Settings-3.png b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Blender-Export-Settings-3.png new file mode 100644 index 00000000..9c45cedc --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Blender-Export-Settings-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c70833aa396a17d608f74611dc88161fb9861ef089bafd106a221a047c9a6acb +size 21700 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Blender-Export-Settings-4.png b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Blender-Export-Settings-4.png new file mode 100644 index 00000000..f743c61d --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Blender-Export-Settings-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:427fa3593e95b16ddc1f8420d1d90a882b4fcfd592e17e314f6231b670e5a913 +size 11412 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Blender-Export-Settings-5.png b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Blender-Export-Settings-5.png new file mode 100644 index 00000000..f8dc6294 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Blender-Export-Settings-5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e47f1cb482cb8621778b009073e15ede07d0f2db7d3bb61e7a5eface7ac1f71a +size 27146 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Blender-Scene-Units-Icon.png b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Blender-Scene-Units-Icon.png new file mode 100644 index 00000000..11268f5b --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Blender-Scene-Units-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61a45a53009bf40de566e5dbdf8d5816399c3b78a417a797e7662ec434e6a3b8 +size 47924 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Blender-Scene-Units-Settings.png b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Blender-Scene-Units-Settings.png new file mode 100644 index 00000000..8bde06fe --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Blender-Scene-Units-Settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b29203b383945b1195f491c0d5413a7aee696264eebe1940bd60b6e2cda56003 +size 311042 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Bone-In-Front.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Bone-In-Front.mp4 new file mode 100644 index 00000000..e58b3f9e --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Bone-In-Front.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d3eef0a7bd67a63162603521f731c269df1bd09c6676d0680d6444c20428160 +size 609637 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Bone-Visualization.png b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Bone-Visualization.png new file mode 100644 index 00000000..3661302e --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Bone-Visualization.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b4fe45bbba6b382d708cf46c75df116cc4928cdb694b999b16af53f4e4bb65d +size 63579 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Brush-Settings.png b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Brush-Settings.png new file mode 100644 index 00000000..f09f133a --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Brush-Settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2571728967c31327a8366e560c95f95a1bebf92b95004927c3c6fd036253184 +size 18066 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Clothing-Data-Model.png b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Clothing-Data-Model.png new file mode 100644 index 00000000..e3b94f03 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Clothing-Data-Model.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f31c9a864e6bf1a6887635f3a3865d00400cdc72dba3fa099e8207ac2730ad7 +size 16807 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/CreatureModel.fbx b/.cursor/rules/roblox/assets/modeling/skinned-meshes/CreatureModel.fbx new file mode 100644 index 00000000..649c025a --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/CreatureModel.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e549fc365f75523685459a6b28b56fbea3721f3147f7983d21050e6797277a0 +size 4825184 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Enabling-Autonormalize.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Enabling-Autonormalize.mp4 new file mode 100644 index 00000000..44682ffc --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Enabling-Autonormalize.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20165756b97229b8b94f4f913fb32baff08ed20a6dc46b24493ea3cb92a76b87 +size 1262428 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Extrude-Last-Bone.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Extrude-Last-Bone.mp4 new file mode 100644 index 00000000..27744d91 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Extrude-Last-Bone.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:084471771696831815a6d428a099a72ffc2a3ef51647801aa05ffd0fc131c483 +size 1801190 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Extrude-Second-Bone.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Extrude-Second-Bone.mp4 new file mode 100644 index 00000000..89babc8c --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Extrude-Second-Bone.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df1bc3db72228365e613201b1784c24d94eb7fff0e1bc45cf2a1e8a2bf89aaba +size 1539063 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Head-Rigid-Example.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Head-Rigid-Example.mp4 new file mode 100644 index 00000000..a4029604 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Head-Rigid-Example.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3fd87c414b742a9a4a2c87a65ed758b9d5f80a6a150bea1f9a9505e42122381 +size 2799134 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Head-Skinned-Example.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Head-Skinned-Example.mp4 new file mode 100644 index 00000000..d191c50a --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Head-Skinned-Example.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:469be641e036bea3b8a0a9b548fbf2b28fe1ee86436d8874a4a41289bb78ca3a +size 2264177 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Import-Model.jpg b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Import-Model.jpg new file mode 100644 index 00000000..42abe7cd --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Import-Model.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3089d1339517247136163bbd61319675842726fb8331741fc9814716f1cd20ec +size 187483 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Lola.fbx b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Lola.fbx new file mode 100644 index 00000000..7fcb523e --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Lola.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a55f4df2002daec171db29cf562d7038d829716ac0d91e2a7dd4a2f8006cf4f6 +size 3745948 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/MapleLeafTree.fbx b/.cursor/rules/roblox/assets/modeling/skinned-meshes/MapleLeafTree.fbx new file mode 100644 index 00000000..cccd34f7 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/MapleLeafTree.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2dada4b3d018feaa5799d6898100f785864f751f62fb1a684eceadb22e3cd620 +size 14297196 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/MapleLeafTree_S3.zip b/.cursor/rules/roblox/assets/modeling/skinned-meshes/MapleLeafTree_S3.zip new file mode 100644 index 00000000..879dfd9d --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/MapleLeafTree_S3.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21047ab33692fd62100c68f9e74f0b92e1753accf398b05d5dfc176ea897c007 +size 9399196 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/MapleTreeS1.blend b/.cursor/rules/roblox/assets/modeling/skinned-meshes/MapleTreeS1.blend new file mode 100644 index 00000000..d11d15a9 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/MapleTreeS1.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:350c45f25e97c2fdcab50fe546cbcf5de37f09d19b43d0d46336bd1885c41131 +size 21235852 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Paint-Bottom-Bone.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Paint-Bottom-Bone.mp4 new file mode 100644 index 00000000..c9c55f46 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Paint-Bottom-Bone.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:62328f5c64cf5c434fbe459798b7a8e45671b23a1f7853df6f6a858950b694e5 +size 4436784 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Paint-Middle-Bone.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Paint-Middle-Bone.mp4 new file mode 100644 index 00000000..50745fc0 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Paint-Middle-Bone.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdb58e717e1fe00d359c5741ea836f9bb61f924da0596ed06a5914da329c556f +size 10587109 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Paint-Top-Bone.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Paint-Top-Bone.mp4 new file mode 100644 index 00000000..b686f596 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Paint-Top-Bone.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ebc2e268fb389dd9520f6ef3b7fa367edd03e9a6df672fca0d8a35973e1c2cc7 +size 4452237 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Parenting-Armature.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Parenting-Armature.mp4 new file mode 100644 index 00000000..8a0adb79 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Parenting-Armature.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c020914abe6b646cc881ee59e51ebe7a8599e3ecd3a58bfc82a91e3d432e3d5e +size 1773434 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Position-First-Bone.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Position-First-Bone.mp4 new file mode 100644 index 00000000..f079d2ae --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Position-First-Bone.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2eeafa4f8328050a6d86f17a7131bc973f622c50c3460d8dbcdcb1e97023d939 +size 2473551 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Renaming-Bones.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Renaming-Bones.mp4 new file mode 100644 index 00000000..d0ba3c60 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Renaming-Bones.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9243654e4b695c27b6d12bcaade4a457ff2d73396be6ec83bcc697927fec5850 +size 2352815 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Rig-Bone-Visualization.jpg b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Rig-Bone-Visualization.jpg new file mode 100644 index 00000000..8095ae30 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Rig-Bone-Visualization.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15fd48bbc753b4e87dee86c523a7eae2c6681e64d1490b791480c94436400493 +size 147020 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Rig-Constraint-Details.jpg b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Rig-Constraint-Details.jpg new file mode 100644 index 00000000..f84c8f48 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Rig-Constraint-Details.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0dd04bb7ab394505067a88260cd78e400f33539d893498801bbe4b9671062336 +size 142658 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Rig-Hierarchy-Blender.png b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Rig-Hierarchy-Blender.png new file mode 100644 index 00000000..54ebb711 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Rig-Hierarchy-Blender.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6758b59e9c2737c67afc3b5972a9ecbc3d95cda10af60c53eeac9f0993757ce +size 171133 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Rig-Hierarchy-Maya.png b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Rig-Hierarchy-Maya.png new file mode 100644 index 00000000..140cae21 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Rig-Hierarchy-Maya.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86bca1bab719474b36722395f8c13a661696210fbc0399ae72737ab5296895fc +size 71154 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Setting-Projected-Brush.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Setting-Projected-Brush.mp4 new file mode 100644 index 00000000..f780a659 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Setting-Projected-Brush.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7ffc46191741783b80fc08cce5058d1cd7c2b727d982ebef56f71808ba8636a +size 2251315 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Shoe-Data-Model.png b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Shoe-Data-Model.png new file mode 100644 index 00000000..cdea4778 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Shoe-Data-Model.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bbb9f68e5017d140126c9d54458a1c17e934f695d131ca3e40739b2155566d5e +size 25924 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Stick-Visualization.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Stick-Visualization.mp4 new file mode 100644 index 00000000..e0c7759b --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Stick-Visualization.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76c3b3bc05b535380061fa7f9fc966b542b7dc3736c07d7ba7f2021d41145c4b +size 815377 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Test-Bones.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Test-Bones.mp4 new file mode 100644 index 00000000..b44c0dba --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Test-Bones.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80ab02f295b25b272ee1bedd8d01aae7544ba6e15dbb2895612c23993eb4c2f2 +size 5208423 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Test-Bottom-Bone.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Test-Bottom-Bone.mp4 new file mode 100644 index 00000000..c91a5fd7 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Test-Bottom-Bone.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22dc5c8f96dc1756d70deda82786417af3c9b24cde03a86e133359750cfd52f9 +size 3562634 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Transform-Demo-AE.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Transform-Demo-AE.mp4 new file mode 100644 index 00000000..d03e0f61 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Transform-Demo-AE.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0958f34996a7132d1e39dab02c163035af2e284655310c8cc0b265af37742990 +size 1505634 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Transform-Demo-Default.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Transform-Demo-Default.mp4 new file mode 100644 index 00000000..8e4712ad --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Transform-Demo-Default.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd6b9335ce5cab00e5a938860c7eb1e011b195a7f2ce1ead71079204f4de373d +size 1558640 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Transform-Demo-Skinned.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Transform-Demo-Skinned.mp4 new file mode 100644 index 00000000..2e9bd96b --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Transform-Demo-Skinned.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c99affad13579c87c13ed63581807671ad89384155ac0a7abc4c259c56cb7aca +size 1553267 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/Weight-Painting-Example-Gradient.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Weight-Painting-Example-Gradient.mp4 new file mode 100644 index 00000000..1c40332a --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/Weight-Painting-Example-Gradient.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa77e3691dc6b18cda1ece678579f25f238f877167d919ae444d11bfb21e0ad4 +size 3035603 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/1_Hide-Armature.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/1_Hide-Armature.mp4 new file mode 100644 index 00000000..90fb98d4 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/1_Hide-Armature.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55b7218a6040e6116e9398241ecbe02e1d6ddc40a2500faf694c4d9011b0dbd0 +size 1845931 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/2_Set-Armature-Test.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/2_Set-Armature-Test.mp4 new file mode 100644 index 00000000..edd4d48a --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/2_Set-Armature-Test.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b31a3c220a81a344120d979d1b50e8e81de0e035e983f02a268a5eb6b2c4919 +size 7543496 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/3_Fix-Skinning-Example.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/3_Fix-Skinning-Example.mp4 new file mode 100644 index 00000000..da4ed370 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/3_Fix-Skinning-Example.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1bdac0b5d11949aec69e0cf6513b1795e8285efef62e0681301b07945dcbfb5f +size 22581348 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Blender-Preferences.png b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Blender-Preferences.png new file mode 100644 index 00000000..dad5b5a6 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Blender-Preferences.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85646084fa44145b9a132e551f10bc5237da857be6b7b30f2ae3e10989b3f5b7 +size 62104 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Calisthenics-Tool-Addon.png b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Calisthenics-Tool-Addon.png new file mode 100644 index 00000000..1f9d8b92 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Calisthenics-Tool-Addon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:caa0c21bc34cf91c1900eddb46024d1bf00b65e9c66bde720732ecabc3e0ae6a +size 142502 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Calisthenics-Tool-Open.png b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Calisthenics-Tool-Open.png new file mode 100644 index 00000000..f1cb655c --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Calisthenics-Tool-Open.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de0b6fcf23021aa6d925fdd79b1fb8b1967e2faae378af464e9724764b513a53 +size 24432 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/CalisthenicsTool.zip b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/CalisthenicsTool.zip new file mode 100644 index 00000000..50617724 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/CalisthenicsTool.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7ca2737d4387524fb5a9361d9f227c685b1adb1e6c046c6944d4e1e78985d46 +size 6791379 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Exporting-Model.png b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Exporting-Model.png new file mode 100644 index 00000000..40ac270f --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Exporting-Model.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6152fa04257ccf5492f3e26905b99b7702bed349d549c7edb0e43dd01b5071a8 +size 26243 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Fish-Character-No-FACS.fbx b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Fish-Character-No-FACS.fbx new file mode 100644 index 00000000..38e11586 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Fish-Character-No-FACS.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ceda28262020c3e0c4933aaa12f2bf646e6c78d59a67271ed64b7a869f915b4c +size 1852652 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Movement-Reference.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Movement-Reference.mp4 new file mode 100644 index 00000000..74f57642 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Movement-Reference.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9745ede96db4dfd63f6c8cb7b2a06fa81c11f1dc51c02ddb040aa3f9ba2d6b60 +size 2867056 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Normal-Reference.png b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Normal-Reference.png new file mode 100644 index 00000000..613e9949 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Normal-Reference.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb3eec718294dc576a939bd02bc905b1dff3896209eeb8e39b83e866e541c04e +size 419280 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Running-Reference.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Running-Reference.mp4 new file mode 100644 index 00000000..171c7a69 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Running-Reference.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c74c72059de7ae0e1ac22c880f59478e3b2d94d74d4e05f503f52932714efe2 +size 384018 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Slender-Reference.png b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Slender-Reference.png new file mode 100644 index 00000000..085f81ab --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Slender-Reference.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba22b3c05a26cdc81db16c016bad6356035f3c9ae5b7e201340a1bddea432480 +size 419871 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Toolbar-Slider.png b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Toolbar-Slider.png new file mode 100644 index 00000000..adc7fa8b --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Toolbar-Slider.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bbea9c11aabff12e9950447abb0fb14cb565fd02d78ae5503f3d5ae67ad6f4ca +size 25351 diff --git a/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Walking-Reference.mp4 b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Walking-Reference.mp4 new file mode 100644 index 00000000..cbaba4ff --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/skinned-meshes/calisthenic-tool/Walking-Reference.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f6573441d633e1f1e4c8bac317a95b6f70240a1d7f7c00f07722989adb40b6a +size 376043 diff --git a/.cursor/rules/roblox/assets/modeling/solid-modeling/CSG-SmoothingAngle-0.jpg b/.cursor/rules/roblox/assets/modeling/solid-modeling/CSG-SmoothingAngle-0.jpg new file mode 100644 index 00000000..07c6225e --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/solid-modeling/CSG-SmoothingAngle-0.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f658b385460074d977e376c713e0e0bf1d09ade7f7105f58c1182aeb92a18ac +size 65836 diff --git a/.cursor/rules/roblox/assets/modeling/solid-modeling/CSG-SmoothingAngle-50.jpg b/.cursor/rules/roblox/assets/modeling/solid-modeling/CSG-SmoothingAngle-50.jpg new file mode 100644 index 00000000..c262642f --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/solid-modeling/CSG-SmoothingAngle-50.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2433858bfa15f52b6f19f5ebf81efc15493aa9ba2f9d4ede5c6555cd49735863 +size 64240 diff --git a/.cursor/rules/roblox/assets/modeling/solid-modeling/Intersect-Result.jpg b/.cursor/rules/roblox/assets/modeling/solid-modeling/Intersect-Result.jpg new file mode 100644 index 00000000..1a375f84 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/solid-modeling/Intersect-Result.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ddea91222a90d47fece1f4e88ef4d38e95e3d7387821e91181a8b02ac1cba75 +size 151404 diff --git a/.cursor/rules/roblox/assets/modeling/solid-modeling/Negate-Result.jpg b/.cursor/rules/roblox/assets/modeling/solid-modeling/Negate-Result.jpg new file mode 100644 index 00000000..85e2dcb3 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/solid-modeling/Negate-Result.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8497398ae9023652cfd895bc26b52f432695872eb3b7d3cbcb77a658942c69d6 +size 162250 diff --git a/.cursor/rules/roblox/assets/modeling/solid-modeling/Negated-Part-To-Union.jpg b/.cursor/rules/roblox/assets/modeling/solid-modeling/Negated-Part-To-Union.jpg new file mode 100644 index 00000000..019adb2c --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/solid-modeling/Negated-Part-To-Union.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0c2395d115c862ba2236fb29848b2ca5218d31d40175f3a3070b06236c339e7 +size 180139 diff --git a/.cursor/rules/roblox/assets/modeling/solid-modeling/Separate-Parts-To-Intersect.jpg b/.cursor/rules/roblox/assets/modeling/solid-modeling/Separate-Parts-To-Intersect.jpg new file mode 100644 index 00000000..ebe01783 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/solid-modeling/Separate-Parts-To-Intersect.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af50fb06e9c2b74154d7eb347e3dbfe48325a88edeb636fcee64d6b2382dcd07 +size 178214 diff --git a/.cursor/rules/roblox/assets/modeling/solid-modeling/Separate-Parts-To-Subtract.jpg b/.cursor/rules/roblox/assets/modeling/solid-modeling/Separate-Parts-To-Subtract.jpg new file mode 100644 index 00000000..e93b7db7 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/solid-modeling/Separate-Parts-To-Subtract.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b530e4db48033f3ede7b541671905bd37ae8bc30755fe3abdce14336b408da6 +size 165992 diff --git a/.cursor/rules/roblox/assets/modeling/solid-modeling/Separate-Parts-To-Union.jpg b/.cursor/rules/roblox/assets/modeling/solid-modeling/Separate-Parts-To-Union.jpg new file mode 100644 index 00000000..60c7f602 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/solid-modeling/Separate-Parts-To-Union.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec2852267a4bd63b2cbf830170203a0ee9510d0eefa82daea3f6accf554c8d22 +size 181306 diff --git a/.cursor/rules/roblox/assets/modeling/solid-modeling/Union-Result.jpg b/.cursor/rules/roblox/assets/modeling/solid-modeling/Union-Result.jpg new file mode 100644 index 00000000..fbbf9570 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/solid-modeling/Union-Result.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:220f09dcb40af080544fa3b09bd22a76d5f589f69d3fa32ac03add3b963c0e6c +size 164329 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/010_SilkSatin.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/010_SilkSatin.png new file mode 100644 index 00000000..8b6445cf --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/010_SilkSatin.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9592f66ccf587b7e2bcbfce1e2555bc2512fa0a1d7e8655407ce8041af0dba3f +size 138853 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/011_VelvetSuede.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/011_VelvetSuede.png new file mode 100644 index 00000000..40fa22e1 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/011_VelvetSuede.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8c97f8c664a8c348822eca3859c4ccf4a266c078cc3731f95a2a7b8c0175fce +size 260203 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/012_GlossyLeather.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/012_GlossyLeather.png new file mode 100644 index 00000000..d913b472 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/012_GlossyLeather.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96aa658962398eb90fb602fea5e777394e8a68c30e010515dbc536a4838d5b90 +size 205437 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/013_WornLeather.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/013_WornLeather.png new file mode 100644 index 00000000..7c60c920 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/013_WornLeather.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16d12e8c60772b7ab33a9f7b71beb30bde3656332032ba8e6b5577cc60c3f242 +size 228133 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/014_Fur.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/014_Fur.png new file mode 100644 index 00000000..96cb4073 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/014_Fur.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9653afe1c4bc2c21e02e43c4ef1511e08cb1781e26cfc3959d40da8344deba95 +size 207743 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/015_Scales.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/015_Scales.png new file mode 100644 index 00000000..14460bf0 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/015_Scales.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:94eec19294a5f528327d260f8eddf6c2357d8886a8e30168fea278451d354371 +size 255083 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/016_Bone.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/016_Bone.png new file mode 100644 index 00000000..608560a3 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/016_Bone.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b9df5ad2b91fdc860574ee9c0c46d07497b9ce3ebedea09412eeab548d275de +size 617152 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/017_Skin.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/017_Skin.png new file mode 100644 index 00000000..27b89ef0 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/017_Skin.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:679658bcbb67eea0b21d4a54f345644a116dd34942827d08268f97e4a3a6bd59 +size 164366 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/018_Wax.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/018_Wax.png new file mode 100644 index 00000000..fb79047c --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/018_Wax.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:218f6e68de4f4e2c02ea91f02bb0540d731ee997c484fd7f41235a067684dd7c +size 526502 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/019_Marble.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/019_Marble.png new file mode 100644 index 00000000..185b88bf --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/019_Marble.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58658ad589ae1bc6bf8cf8d453be0c9227bb147a9c803c7fa95b3498b8bc2d4c +size 249778 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/01_GlossyPlastic.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/01_GlossyPlastic.png new file mode 100644 index 00000000..3f2cb73d --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/01_GlossyPlastic.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d18fe34e5d0f183436bc2725bf415a4a26ee2f96830c71cbb7296f3cda8f3fb +size 171465 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/020_Jade.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/020_Jade.png new file mode 100644 index 00000000..f6cc6e90 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/020_Jade.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca9bcac68842b726d42e2dd7d4149d04a1c5eb0786327c9145b7462f2dd772da +size 205999 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/021_PaintedMetal.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/021_PaintedMetal.png new file mode 100644 index 00000000..c2854b0c --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/021_PaintedMetal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b0024884c69da0ae9d820c657f136014fa3ba2400d986a950f59dbd0f06cf4c5 +size 162878 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/022_PureMetals.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/022_PureMetals.png new file mode 100644 index 00000000..cadc895f --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/022_PureMetals.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f02c7cb866527278a505ed46ae84f12a159e8f030ffee054e3ec646317d9bcee +size 137783 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/023_WornMetals.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/023_WornMetals.png new file mode 100644 index 00000000..b1aec859 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/023_WornMetals.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cda32fb0bc7e619de8c3c9f165fe5e4724b684153946b62e4a7006f15ea057f9 +size 186921 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/024_GlassMirror.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/024_GlassMirror.png new file mode 100644 index 00000000..9f127ded --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/024_GlassMirror.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:070127c21394583fa0eea6e2e3c50181dd0d86f470af61839bd722485eda9ad3 +size 208081 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/02_MattePlastic.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/02_MattePlastic.png new file mode 100644 index 00000000..70980b0a --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/02_MattePlastic.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1518de13a86bb1cc3b64f4797f2786cd81e6e2ce67e4ce9f03d3126e3677f732 +size 111191 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/03_Rubber.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/03_Rubber.png new file mode 100644 index 00000000..eca9f7a2 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/03_Rubber.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd586d52d468030fa823dd166a1005e9914a18fa9fa1a71373071e4ec4132648 +size 148106 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/04_Latex.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/04_Latex.png new file mode 100644 index 00000000..943fd2c8 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/04_Latex.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e686d54f9a1d62ec4343be95f86a6c047853bd6562e5bfdaec97d9d3669c37e +size 155878 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/05_GlossyWood.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/05_GlossyWood.png new file mode 100644 index 00000000..2d3b2a75 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/05_GlossyWood.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7c4b31df65964a6dea3bc466c66ffe0355f961fceb19c6fa8e2b4d07229a4f3 +size 204372 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/06_WornWood.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/06_WornWood.png new file mode 100644 index 00000000..4ea70744 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/06_WornWood.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e019db903f93fa99336fe2114f14cf245baf5bfc31f3daff0eb781c43bdcedab +size 216165 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/07_CottonCanvasDenim.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/07_CottonCanvasDenim.png new file mode 100644 index 00000000..1c7b1f9a --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/07_CottonCanvasDenim.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41a3df563044afaf919e7e6f7a43e8449c34139fd9744a93caf5aa9d8b05a603 +size 197704 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/08_PolyesterNylon.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/08_PolyesterNylon.png new file mode 100644 index 00000000..d98fc385 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/08_PolyesterNylon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a50a0e05191312d68cce8fabd16e68a31214ed2a528da65dc9d1e5653ad6c746 +size 275313 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/09_WoolLinen.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/09_WoolLinen.png new file mode 100644 index 00000000..f39adb0d --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/09_WoolLinen.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb7fa780eee4d3f3bca7dee67b828bc54bc8821baa320b67b8ad9d83c9a283d1 +size 209934 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Custom-Skin-Tone-Example.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Custom-Skin-Tone-Example.png new file mode 100644 index 00000000..c31bcdcb --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Custom-Skin-Tone-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b12f627cb251e1887f701a0b00bc8e0307ca33c5701094f59ab77b15350a1b0b +size 1796534 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Custom-Skin-Tone-Map.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Custom-Skin-Tone-Map.png new file mode 100644 index 00000000..fce76cda --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Custom-Skin-Tone-Map.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc6941c2cef507799283616fc4053245752d4369b4e6fe726bbb4504279e4fdc +size 499962 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Denim-Jacket-Sp.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Denim-Jacket-Sp.png new file mode 100644 index 00000000..dec77623 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Denim-Jacket-Sp.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4976cbf1a866770e2bc3af40e1a7718097527ab8a3e1b2dc34a04829a36772ce +size 166978 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Denim-Jacket-St.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Denim-Jacket-St.png new file mode 100644 index 00000000..ca6b704c --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Denim-Jacket-St.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46160de194ac07f82c0501b3391a1b3a068ddbb30f20cf6d89b1157824cf04e1 +size 163153 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Gold-Puffy-Jacket-Sp.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Gold-Puffy-Jacket-Sp.png new file mode 100644 index 00000000..8147897b --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Gold-Puffy-Jacket-Sp.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1ce8d275173f3f5c35562c9c3410fe7832f61fa19a0d73d562e15257becc870 +size 193417 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Gold-Puffy-Jacket-St.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Gold-Puffy-Jacket-St.png new file mode 100644 index 00000000..6eddc92c --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Gold-Puffy-Jacket-St.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28b6485330da4f135237a77df663c3a0a127b9b968561878f4b67b105af33c14 +size 206314 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Green-Jacket-Sp.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Green-Jacket-Sp.png new file mode 100644 index 00000000..55f4ec62 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Green-Jacket-Sp.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a972fcafddb8445388ffd2a54131dd9b4017f71d96f00c20c8734c2eea42031 +size 139252 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Green-Jacket-St.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Green-Jacket-St.png new file mode 100644 index 00000000..76b75b1e --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Green-Jacket-St.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38b8e0315a063321e06eeadf88cad4b19b3b2e2903cf1ee0b3c7ca78fde80e17 +size 130721 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Layered-Clothing-Example-2.jpg b/.cursor/rules/roblox/assets/modeling/surface-appearance/Layered-Clothing-Example-2.jpg new file mode 100644 index 00000000..9b91329a --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Layered-Clothing-Example-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc3e7d65922108529ca4b2eb690211389df87859c3051e5babd41206c1dfb68c +size 247402 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Layered-Clothing-Example.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Layered-Clothing-Example.png new file mode 100644 index 00000000..86c11bc3 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Layered-Clothing-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf6ddb0a6d4a4382a7be677e2d7a77b2cb06fae4ae80aa752c2e440e04f93a66 +size 727585 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Leather-Jacket-Sp.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Leather-Jacket-Sp.png new file mode 100644 index 00000000..84f2dd9d --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Leather-Jacket-Sp.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4864fc2be28d8a423b20dd18247c583eb687c14b22fb089dfbd301c6315e6dae +size 136106 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Leather-Jacket-St.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Leather-Jacket-St.png new file mode 100644 index 00000000..065cd716 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Leather-Jacket-St.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e0840162eec7ead35115bd4825036df35da6ae61fd411e44bc1b1ea6ba42580 +size 138576 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Metalness-0.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Metalness-0.png new file mode 100644 index 00000000..00246332 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Metalness-0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58dde3f9891ce3cd2279f6b8ba45cf861c94e3446a96d5fc5de1e3e490c86ee0 +size 147874 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Metalness-1.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Metalness-1.png new file mode 100644 index 00000000..507a0bf1 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Metalness-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b774332dd1eaa7a9196a5024bbd1a8a08bb292503e6be5d8c5e20738a0955fb2 +size 159711 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Metalness-Half.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Metalness-Half.png new file mode 100644 index 00000000..06e0cf7a --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Metalness-Half.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1fa9ce1269ec9a453085f3019c3bb957cd6673e72b463e48b99299512909c164 +size 159942 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Normal-0.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Normal-0.png new file mode 100644 index 00000000..ab715465 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Normal-0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87ab7d379713a40e6eb41d97789f07a00e10da63275dd3116ad9c356c03acd7e +size 103517 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Normal-1.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Normal-1.png new file mode 100644 index 00000000..e67972dc --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Normal-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b9d33fcba2572e8569a2c2ac525917582b1474a3cecd02bf5fb46a8f3b3a88f +size 225453 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Normal-Half.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Normal-Half.png new file mode 100644 index 00000000..c537e5d7 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Normal-Half.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6cc48688b75363649b5ebeeacee27a7f317695b0fabd9e2d4b7ef736b610428 +size 197183 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Normal-Map-0.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Normal-Map-0.png new file mode 100644 index 00000000..ecb301ab --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Normal-Map-0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28ca5e228eae2e03d44616bd42cbc835a321097a945bceb50988c9157dc34e7e +size 15934 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Normal-Map-1.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Normal-Map-1.png new file mode 100644 index 00000000..0e4801c0 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Normal-Map-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45969b3d80aec3814a760b5f0eea11204b8e093cf967b0e4046ae474eeb62482 +size 305398 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Normal-Map-Half.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Normal-Map-Half.png new file mode 100644 index 00000000..23eecc8b --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Normal-Map-Half.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a80eb487e463400b4f740722e5ef6491713ea09469f906e32930290a27bbb89 +size 258897 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Opacity-0.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Opacity-0.png new file mode 100644 index 00000000..16ea68aa --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Opacity-0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f9a3b4e1e2043b208551016e273e0e4c1ca62a74aa6f62507a1245030919610 +size 269385 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Opacity-1.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Opacity-1.png new file mode 100644 index 00000000..6327e39a --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Opacity-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77fc8025062787b4aea55babe01b2a2d4817e2a4640d252c13a44d8031682659 +size 324225 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Opacity-Half.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Opacity-Half.png new file mode 100644 index 00000000..4f07a1a1 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Opacity-Half.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4dacb2a9970393583280d9d038deb1bbaf40ebc93608c7254cc71db81054c346 +size 320566 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/OpacityTexture-0.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/OpacityTexture-0.png new file mode 100644 index 00000000..a7ec0d23 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/OpacityTexture-0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ef97edda97d144ac92db1ea080f40ed4ce045686cc4c31e2357a9158f13c600 +size 318230 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/OpacityTexture-1.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/OpacityTexture-1.png new file mode 100644 index 00000000..ad09a254 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/OpacityTexture-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37e7dfa6ea5619b0aabdf26e9d392f5ab8a99e48094c38e8ea17afcbf643e26f +size 357408 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/OpacityTexture-Half.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/OpacityTexture-Half.png new file mode 100644 index 00000000..734b6b83 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/OpacityTexture-Half.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8930c19da1caa11b1410c2633bc2e11155acd34dcd0485743902def8b64e9bec +size 426710 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Roughness-0.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Roughness-0.png new file mode 100644 index 00000000..c1fa3fab --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Roughness-0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83ce7ec176b42b2516b2db429cc30588bb40fe9eb1234a0d91e4f9459e5bea7b +size 157734 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Roughness-1.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Roughness-1.png new file mode 100644 index 00000000..164a55d9 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Roughness-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59950390c7b7984681a5cab21edcc8e865dd511237fbba41fa6d9cac9d7a98aa +size 96692 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Roughness-Half.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Roughness-Half.png new file mode 100644 index 00000000..91f97241 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Roughness-Half.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c4494887e5b953f09feb8bd07b7b73bc60eca03f84b1ad4dd346948720103a2 +size 103382 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Roughness-Metalness-Matrix.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Roughness-Metalness-Matrix.png new file mode 100644 index 00000000..853a155c --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Roughness-Metalness-Matrix.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76375bdcfab83539aac70d56991658d1f5e3d45462309cc4c72ecbb664189ddb +size 4948256 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-ColorMap.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-ColorMap.png new file mode 100644 index 00000000..6341dcb8 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-ColorMap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9afbef2818254365c78943d9150f8f9c7899d9279470a473639778a644a76d01 +size 7245 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-Gradient-Overlay.jpg b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-Gradient-Overlay.jpg new file mode 100644 index 00000000..4a8e8c8a --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-Gradient-Overlay.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20485f6db0d15c3dcfc0e89dff794aa511f150bb05fe9e208225e6687fd54eb8 +size 128125 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-Gradient-TintMask.jpg b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-Gradient-TintMask.jpg new file mode 100644 index 00000000..5dc92732 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-Gradient-TintMask.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7cc9b0a4d3ff7d6a51f50c2e8ed60697295f43bcf4714e6627372264936ef81b +size 151231 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-Gradient-Transparency.jpg b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-Gradient-Transparency.jpg new file mode 100644 index 00000000..c1399b85 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-Gradient-Transparency.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20f06293682e17efc44badb444b50efbca685fec8c30b60658a513b3a0ed2c87 +size 155663 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-Overlay.jpg b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-Overlay.jpg new file mode 100644 index 00000000..01721945 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-Overlay.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:192a65b83fd14910d392bbcea2c72f294b3a716d04200cacd72904a5a1360e17 +size 125878 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-TintMask-Bricks-Albedo.jpg b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-TintMask-Bricks-Albedo.jpg new file mode 100644 index 00000000..88f7aa9e --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-TintMask-Bricks-Albedo.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c90f647db1ab6e7e2caa837fdf0cd582e7dcf7a92c5b0db7c9a6bb0a97f4efc +size 218376 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-TintMask-Bricks-Alpha.jpg b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-TintMask-Bricks-Alpha.jpg new file mode 100644 index 00000000..e030fbac --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-TintMask-Bricks-Alpha.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0fe63b0f488e5d0d7416667038fc16cbdfa703f1e53844ca1e1901c04d1ccc03 +size 194535 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-TintMask-Bricks.jpg b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-TintMask-Bricks.jpg new file mode 100644 index 00000000..bb976a22 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-AlphaMode-TintMask-Bricks.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e023036c4e802b742eba82fa3e5491cf7a39e9bc9317f87bd60d6b6b7d8b3c1b +size 261517 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-ColorMap-After.jpg b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-ColorMap-After.jpg new file mode 100644 index 00000000..467f65c8 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-ColorMap-After.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:219d8dbabf56eb49c3339fd4eddc7242db7f3573e7abc8ad666c178ce101e388 +size 123289 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-ColorMap-Before.jpg b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-ColorMap-Before.jpg new file mode 100644 index 00000000..727cb6ea --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-ColorMap-Before.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15237ed8079b83fb36ecbc2991435190b377e4989421348655a1e21a3280869f +size 67112 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-ColorMap.jpg b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-ColorMap.jpg new file mode 100644 index 00000000..a8ece2cb --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-ColorMap.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99736bd13c92cd68a7bb81bc417419c8e130f950be8e7a0ad50c9cd51d764fc3 +size 216583 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-Example-1.jpg b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-Example-1.jpg new file mode 100644 index 00000000..986ada1a --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-Example-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36efc4b20e9c54304a2943f556340325331c3b129e70060fa9f303416b13a01e +size 226046 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-Example-3.jpg b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-Example-3.jpg new file mode 100644 index 00000000..f0e111d7 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-Example-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5dedd5a39a9eb7bdba85066a347aa0da3145e788051b494e11410478e33cdbd6 +size 227195 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-MetalnessMap-After.jpg b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-MetalnessMap-After.jpg new file mode 100644 index 00000000..7da41677 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-MetalnessMap-After.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d84ddf1f0b9bf75e924e3ec02bc852148c2eb2abfe569bc45a41b38a0c9b2ebb +size 129617 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-MetalnessMap-Before.jpg b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-MetalnessMap-Before.jpg new file mode 100644 index 00000000..8ce5ef80 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-MetalnessMap-Before.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4a3ee5ceb6253c1a11aecbaacc648bf66c2203d99b95c47ffe6a0b7e3d34396 +size 81542 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-MetalnessMap.jpg b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-MetalnessMap.jpg new file mode 100644 index 00000000..b867f9f6 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-MetalnessMap.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07b31e88be3723bf734e33ed53ca3804d1124f1b8249e4a908fe063d0d8ab298 +size 152815 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-NormalMap-After.jpg b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-NormalMap-After.jpg new file mode 100644 index 00000000..ae9a5f2a --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-NormalMap-After.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59145e990e3595447a085e6c4d9b992181104324d4582c32a5ed31b5e5a35d65 +size 130252 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-NormalMap-Before.jpg b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-NormalMap-Before.jpg new file mode 100644 index 00000000..9cb33507 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-NormalMap-Before.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac2979b4fa6e861d421d5b8b81f281a710af25b26b22dbef460314565fcc8a27 +size 96449 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-NormalMap.jpg b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-NormalMap.jpg new file mode 100644 index 00000000..d6274683 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-NormalMap.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd7c55dc2226dac2fc63bd84c6324b4af11105ee6df07558a830133904ae5dc6 +size 192303 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-RoughnessMap-After.jpg b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-RoughnessMap-After.jpg new file mode 100644 index 00000000..00cad5a9 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-RoughnessMap-After.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d70515e06642d973c77b2f96539f7e4fe15a1474c18604780e7311d2ea50fbf +size 92656 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-RoughnessMap-Before.jpg b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-RoughnessMap-Before.jpg new file mode 100644 index 00000000..398994b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-RoughnessMap-Before.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:730a35c5c7c27fac25e9117553be4026992c054321e5734d6532e7a1bcae1160 +size 77928 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-RoughnessMap.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-RoughnessMap.png new file mode 100644 index 00000000..1f8ca3c1 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/SurfaceAppearance-RoughnessMap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55dfab1d086d31cdc3a6e01d60a4bf792e81bbc2800fbe3e4bb56fd37fc75ed4 +size 77378 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Tinting-Green.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Tinting-Green.png new file mode 100644 index 00000000..43981994 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Tinting-Green.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7649f03aaf2d61f8afb331fc1b0e6d628aaef3d07a6ae2608db2a5c4f0d8755b +size 817708 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Tinting-None.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Tinting-None.png new file mode 100644 index 00000000..5d16dccc --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Tinting-None.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e85d1a946c7e2cbd7a2d06097b3dcde1ef78bb06d7a43ad2872ba5b5f7f33a48 +size 835730 diff --git a/.cursor/rules/roblox/assets/modeling/surface-appearance/Tinting-Red.png b/.cursor/rules/roblox/assets/modeling/surface-appearance/Tinting-Red.png new file mode 100644 index 00000000..2d033854 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/surface-appearance/Tinting-Red.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c784ba242f239fc4f633c687b5ed191afba50a7958c2466132861e2afc5bf6b +size 795521 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Custom-Colors-Fantasy.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Custom-Colors-Fantasy.jpg new file mode 100644 index 00000000..e2977179 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Custom-Colors-Fantasy.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37969f22affe60a3c2084c8e8f56e5ea679d313151f7c67c400178c6776b090a +size 186449 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Custom-Colors-Tundra.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Custom-Colors-Tundra.jpg new file mode 100644 index 00000000..0e369195 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Custom-Colors-Tundra.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:470ef682b0974e5a339a360fe5866f196009136f4801c53424a8d1f78802fa76 +size 239235 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Material-Air.png b/.cursor/rules/roblox/assets/modeling/terrain/Material-Air.png new file mode 100644 index 00000000..4ad79be8 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Material-Air.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b51a2e686eccc4523e64ef15af33908f3ea4ba32432dc560b5a923ccd29bca0 +size 6146 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Material-Asphalt.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Material-Asphalt.jpg new file mode 100644 index 00000000..6de2e988 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Material-Asphalt.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c939e9a26c030e8efa5c0d125d07bb9b3bcc5ea84f9b4664c5536b9d351a429d +size 111148 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Material-Basalt.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Material-Basalt.jpg new file mode 100644 index 00000000..e789d3f7 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Material-Basalt.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7f4893e93e8501a8186319490e1531c449a599916e04a306040b73c059e9eac +size 96903 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Material-Brick.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Material-Brick.jpg new file mode 100644 index 00000000..140c6799 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Material-Brick.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6d135f1362336610cbf84855d9135be2c0eedfa2fe77c2d8bdeeeef018ad5eb +size 98555 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Material-Cobblestone.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Material-Cobblestone.jpg new file mode 100644 index 00000000..c31d07d9 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Material-Cobblestone.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84e3268156de98f3e09b1b05b9c5ac3f4f281efaad3614fa91778d5be3144187 +size 107332 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Material-Concrete.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Material-Concrete.jpg new file mode 100644 index 00000000..4ebab083 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Material-Concrete.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:860884d88cf4c13b7c35806f8b76bf169e6c17c8610fe392364d74a229270582 +size 41404 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Material-Cracked-Lava.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Material-Cracked-Lava.jpg new file mode 100644 index 00000000..35e205f3 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Material-Cracked-Lava.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c354d06715db2ba616a5bdd2cf98c9ecf032a4f42b40579c43a3ecd45b1e1527 +size 103053 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Material-Glacier.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Material-Glacier.jpg new file mode 100644 index 00000000..d329660f --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Material-Glacier.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b173ad87a5ea536a290394ea4d065eacab61b555cd53485bcedd5f7877182c6 +size 59434 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Material-Grass.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Material-Grass.jpg new file mode 100644 index 00000000..2b0b179f --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Material-Grass.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65b81e766e9d14f7597febff3eb750ee55e0ea2ab4bb75b1b2d15ec1cc3f0ef9 +size 110022 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Material-Ground.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Material-Ground.jpg new file mode 100644 index 00000000..8e486c50 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Material-Ground.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8be92c3837b4c9acc77b88171c95d66ee9b952501152adb2754d4e5007e50951 +size 107997 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Material-Ice.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Material-Ice.jpg new file mode 100644 index 00000000..0ee3c6df --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Material-Ice.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f70b9f76f59929e63ce9d228d1efc8e743a9e90e258c4aa1d0d1a29a03dcb40 +size 54849 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Material-Leafy-Grass.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Material-Leafy-Grass.jpg new file mode 100644 index 00000000..111d760e --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Material-Leafy-Grass.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0af5c3bd5b01bd75be6e3f36c1b0373813bce5cabb958894a888caf23b5897a +size 115844 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Material-Limestone.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Material-Limestone.jpg new file mode 100644 index 00000000..e55e5268 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Material-Limestone.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c03dbe5c152b7589eec16acc1207e032752aff4449d61bb2198cabc0d6d84636 +size 64374 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Material-Mud.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Material-Mud.jpg new file mode 100644 index 00000000..a50f6356 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Material-Mud.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d4e043609cc8fd02171678c06c69b249fa73aea446dd3446fa8b01ae590ef58 +size 104154 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Material-Pavement.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Material-Pavement.jpg new file mode 100644 index 00000000..54140ac0 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Material-Pavement.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f439fe1ee055c0991bada6f2804f41f956a8b3c058c3b538b7fdbe49c7e6f069 +size 84098 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Material-Rock.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Material-Rock.jpg new file mode 100644 index 00000000..6fe56176 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Material-Rock.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a544a06b0a789ab5af007d35eaf82c72e2ed00ce450f40add8a60ac92a10d898 +size 104636 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Material-Salt.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Material-Salt.jpg new file mode 100644 index 00000000..0de5a0ff --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Material-Salt.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19313d41f3007beca7c2395410a15f95b5afc5b93358dd1b1313d891d4a09389 +size 65619 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Material-Sand.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Material-Sand.jpg new file mode 100644 index 00000000..8302f465 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Material-Sand.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ef26c70810af65108901432c2908be3a2c2d550dcb01ad8636e7cd56b94136e +size 52596 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Material-Sandstone.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Material-Sandstone.jpg new file mode 100644 index 00000000..a64c3749 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Material-Sandstone.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dbd1ec44897eb8e2e09dea999c29c62ab75e4a49e411ee9f5a8e393995c5b576 +size 80961 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Material-Slate.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Material-Slate.jpg new file mode 100644 index 00000000..87503602 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Material-Slate.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f99de4e795617d35daf9681ea821dcb78f6d5bbe9dc5277344ef4160d07869ab +size 57491 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Material-Snow.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Material-Snow.jpg new file mode 100644 index 00000000..de29b4cd --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Material-Snow.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9116c0ec4b069305584a17803cabcd2e9814f67569ead0749498cbc14a21552e +size 59630 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Material-Water.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Material-Water.jpg new file mode 100644 index 00000000..acd2f6dc --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Material-Water.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:215689f44668a959649a78b5ec861b760a565063038e482dc620c1cf4bc78d82 +size 36269 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Material-Wood-Planks.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Material-Wood-Planks.jpg new file mode 100644 index 00000000..5774f907 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Material-Wood-Planks.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3fde56985d6aebb6e1c38631211807f27052d8499901cb4dfe51aee13cca0e9e +size 80014 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/RobloxColorMapIndex.png b/.cursor/rules/roblox/assets/modeling/terrain/RobloxColorMapIndex.png new file mode 100644 index 00000000..180e708b --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/RobloxColorMapIndex.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:243eac51c6fdd7c5d712d1a3e5ca90df198e77d6098c67235fc52e5d1b9fabba +size 181791 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Showcase.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Showcase.jpg new file mode 100644 index 00000000..721071fa --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Showcase.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a431776f11e66740d7f8e09708b2b9b5807e63eaa76388527daae0966c4e1e1 +size 189127 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Terrain-Colormap-Result.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Terrain-Colormap-Result.jpg new file mode 100644 index 00000000..4a989224 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Terrain-Colormap-Result.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72005c0a36e04e6cc05d904cd366ab052869e76ecbd58e603996548ebf1db9bf +size 128440 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Terrain-Colormap.png b/.cursor/rules/roblox/assets/modeling/terrain/Terrain-Colormap.png new file mode 100644 index 00000000..4a597683 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Terrain-Colormap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:deb74dd56dbff04c5aacb565e8f6c6edef76d66967a63c95e467dc732c9b3e0f +size 17692 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Terrain-GrassLength.jpg b/.cursor/rules/roblox/assets/modeling/terrain/Terrain-GrassLength.jpg new file mode 100644 index 00000000..ce15f000 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Terrain-GrassLength.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39f79c123f5a3535aa165a6b2970bcfff504813fb3229075f40e0ea58a84dac5 +size 258171 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Terrain-Heightmap.png b/.cursor/rules/roblox/assets/modeling/terrain/Terrain-Heightmap.png new file mode 100644 index 00000000..4f7f20a4 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Terrain-Heightmap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d7af8249b0caaa8b97fb91a9a29db087ad938472b73951fe7dc207104f3b0cf +size 220362 diff --git a/.cursor/rules/roblox/assets/modeling/terrain/Water-Appearance.mp4 b/.cursor/rules/roblox/assets/modeling/terrain/Water-Appearance.mp4 new file mode 100644 index 00000000..fecaedcf --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/terrain/Water-Appearance.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e6d14f2e618cecf383fb0772008d4b4ee7a2332a7ce9405400b54b7a1c56eea +size 4597544 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Animated-Textures.mp4 b/.cursor/rules/roblox/assets/modeling/textures-decals/Animated-Textures.mp4 new file mode 100644 index 00000000..4ab451d4 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Animated-Textures.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eab3ec12e4764d55bc2ff3c3657e57ce87f108570f469d0423d7c771ffdae23f +size 2157448 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Blender-Add-Image-Texture.png b/.cursor/rules/roblox/assets/modeling/textures-decals/Blender-Add-Image-Texture.png new file mode 100644 index 00000000..633f24a4 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Blender-Add-Image-Texture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f668cd0d6708d2db5ceb0096755e3e66d01473e672fee900c1c800c98c81f08 +size 48011 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Blender-Add-Normal.png b/.cursor/rules/roblox/assets/modeling/textures-decals/Blender-Add-Normal.png new file mode 100644 index 00000000..e0cc49ce --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Blender-Add-Normal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32eee42921610a4d39ad53d5e70040cd6dc659393aa8ca247e8d8aa859adfbfb +size 27629 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Blender-Create-New-Material.png b/.cursor/rules/roblox/assets/modeling/textures-decals/Blender-Create-New-Material.png new file mode 100644 index 00000000..fa56d74c --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Blender-Create-New-Material.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac6fd51fe96f837e5176b58544fe4308e8b019ebbd98b5b03672398d215dad19 +size 18350 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Blender-Image-Texture-No-Assignment.png b/.cursor/rules/roblox/assets/modeling/textures-decals/Blender-Image-Texture-No-Assignment.png new file mode 100644 index 00000000..89f57158 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Blender-Image-Texture-No-Assignment.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df77e2d991c3857980cebe4ee992452eacb282aea94c3956b675273ad63ec85b +size 21809 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Blender-Material-Check.png b/.cursor/rules/roblox/assets/modeling/textures-decals/Blender-Material-Check.png new file mode 100644 index 00000000..7068f8d1 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Blender-Material-Check.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a52292886506117da9ff7bd8379b5f04a2d76824e124cfaa9563f81e7bdd76f2 +size 59043 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Blender-Shading-Tab.png b/.cursor/rules/roblox/assets/modeling/textures-decals/Blender-Shading-Tab.png new file mode 100644 index 00000000..24c62f24 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Blender-Shading-Tab.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a30fd9070e6b3416fba7f9f600637c55bd9ad57d7c234432b910a66f38b6812 +size 17910 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Decal-On-Surface.jpg b/.cursor/rules/roblox/assets/modeling/textures-decals/Decal-On-Surface.jpg new file mode 100644 index 00000000..fe00211d --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Decal-On-Surface.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a40d0e80d05b57216f28e669801f610eaaea177f73745629844c32ed2e83dc15 +size 158983 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Decal-Texture-Sample-1.png b/.cursor/rules/roblox/assets/modeling/textures-decals/Decal-Texture-Sample-1.png new file mode 100644 index 00000000..09ebacb8 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Decal-Texture-Sample-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ae60a616d894951c243e74209f548127b3ff2b8b1d5839f02fd1ebad398f247 +size 13187 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Decal-Texture-Sample-2.png b/.cursor/rules/roblox/assets/modeling/textures-decals/Decal-Texture-Sample-2.png new file mode 100644 index 00000000..aa814209 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Decal-Texture-Sample-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d1a80688ae61cd481947d0cd10a038e1e7efcae98d5872492d3269cd805d254 +size 12530 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Maya-Assign-Material.png b/.cursor/rules/roblox/assets/modeling/textures-decals/Maya-Assign-Material.png new file mode 100644 index 00000000..14160c86 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Maya-Assign-Material.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a590fdaa4aa1a18f784e936c63f389a4a3e0562d5aba6d30cb459911f3513182 +size 26497 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Maya-Bump-2D.png b/.cursor/rules/roblox/assets/modeling/textures-decals/Maya-Bump-2D.png new file mode 100644 index 00000000..117b525b --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Maya-Bump-2D.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:728f445820d156aef6f268e91dcd2e8203f538f6cbc3b18a327b88a64a192a6b +size 30220 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Maya-Connect-Nodes.png b/.cursor/rules/roblox/assets/modeling/textures-decals/Maya-Connect-Nodes.png new file mode 100644 index 00000000..d0018d3a --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Maya-Connect-Nodes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:589a8a8ff0a2210a4791c60c92f7bc24c3f4b3a5188cbbc003971898f6a3caa4 +size 320377 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Maya-Create-Surface.png b/.cursor/rules/roblox/assets/modeling/textures-decals/Maya-Create-Surface.png new file mode 100644 index 00000000..e2463c9c --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Maya-Create-Surface.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8ede27bebc1659dc9917654cad7769640e96d8766460c3e6c816980606436aa +size 47102 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Maya-Tangent-Space-Normals.png b/.cursor/rules/roblox/assets/modeling/textures-decals/Maya-Tangent-Space-Normals.png new file mode 100644 index 00000000..54345b74 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Maya-Tangent-Space-Normals.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:531b67e4ab7c1c95747e952bb0ce5174b36b26deddca5690b63740f2ba7f4285 +size 30955 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Orientation-Indicator.jpg b/.cursor/rules/roblox/assets/modeling/textures-decals/Orientation-Indicator.jpg new file mode 100644 index 00000000..8d628afa --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Orientation-Indicator.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d19280dccd063e866188eebca8f012b1e55add28618f212fea938d6fb5bf75c +size 194382 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Color3-255-0-100.jpg b/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Color3-255-0-100.jpg new file mode 100644 index 00000000..8c555e8d --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Color3-255-0-100.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31a00c42775736167237996e95cce35eb4cd70bb4fa564dd6c7cd7da304b710b +size 183932 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Example-Grafitti04.png b/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Example-Grafitti04.png new file mode 100644 index 00000000..c9133b2d --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Example-Grafitti04.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8e019026f69ffea29455628d3f3bf90a5088e3374917fa298fa83f98a363d8b +size 264889 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Face-Front.jpg b/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Face-Front.jpg new file mode 100644 index 00000000..a47d8d9c --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Face-Front.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f292d0c2c48db4f3b65fccb485920dd91e343cb3bec069a945a58bb3341029e5 +size 120291 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Face-Top.jpg b/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Face-Top.jpg new file mode 100644 index 00000000..7fb45a29 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Face-Top.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12b09521d6c1159cd05546246bdc03c1a7a1e4e61627c22586bcbd2b12f7b55b +size 118682 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-On-Surface.jpg b/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-On-Surface.jpg new file mode 100644 index 00000000..1825db54 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-On-Surface.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd484c65bdb210f89601a8a604d0b3b6f6d60cd8efb322554cf7d2b752f9cbd9 +size 202468 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Sample-Offset-1.png b/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Sample-Offset-1.png new file mode 100644 index 00000000..ef25c37c --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Sample-Offset-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02a2637d164f986ee7456163b2801e9dc17cee345f99271949f817a5646f836f +size 38477 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Sample-Offset-2.png b/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Sample-Offset-2.png new file mode 100644 index 00000000..ac5b2464 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Sample-Offset-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69b2f0ac9de107fdccd30572b3357451c92ed8adf128ed666b95e304298fba16 +size 40381 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Sample-Scale-1.png b/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Sample-Scale-1.png new file mode 100644 index 00000000..a9856ded --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Sample-Scale-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aea856d481825dbd0584477592db1f808f01c5c997bc2da9e3e2e0c1b999c9a2 +size 40334 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Sample-Scale-2.png b/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Sample-Scale-2.png new file mode 100644 index 00000000..a4cab209 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Sample-Scale-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad4a111581b450ea87d844bc1743d02bce525d3cf7ce220ec89f30e7cc75f234 +size 39435 diff --git a/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Transparency-0.4.jpg b/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Transparency-0.4.jpg new file mode 100644 index 00000000..0cf46263 --- /dev/null +++ b/.cursor/rules/roblox/assets/modeling/textures-decals/Texture-Transparency-0.4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:647df2b6cb6a81f5260e178e1c54156c4938b493b5db7bf2cf2e3e6451e98c75 +size 175553 diff --git a/.cursor/rules/roblox/assets/monetization/avatar-creation-tokens/Avatar-Creation-Token-Copy-ID.png b/.cursor/rules/roblox/assets/monetization/avatar-creation-tokens/Avatar-Creation-Token-Copy-ID.png new file mode 100644 index 00000000..6ed726d5 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/avatar-creation-tokens/Avatar-Creation-Token-Copy-ID.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b0f7245c7992961a06eca95272d6961fa5b5efa41ab534df5f969d4cf20d3ceb +size 51544 diff --git a/.cursor/rules/roblox/assets/monetization/avatar-creation-tokens/Avatar-Creation-Token-Prices.png b/.cursor/rules/roblox/assets/monetization/avatar-creation-tokens/Avatar-Creation-Token-Prices.png new file mode 100644 index 00000000..45e07245 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/avatar-creation-tokens/Avatar-Creation-Token-Prices.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79b6e8f09b0de8f3277ac9dddf5b57cfedb8d8c5873614bf8d3ff9a56b2e1d10 +size 71529 diff --git a/.cursor/rules/roblox/assets/monetization/avatar-items/Avatar-Items-Enable.png b/.cursor/rules/roblox/assets/monetization/avatar-items/Avatar-Items-Enable.png new file mode 100644 index 00000000..4f02f8fd --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/avatar-items/Avatar-Items-Enable.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d235db26e51341ad708f858a8da59dfa0c4d400801678f71e9a8a94f4a89381 +size 96903 diff --git a/.cursor/rules/roblox/assets/monetization/avatar-items/Linked-Avatar-Items-Example.png b/.cursor/rules/roblox/assets/monetization/avatar-items/Linked-Avatar-Items-Example.png new file mode 100644 index 00000000..c5bbdf8b --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/avatar-items/Linked-Avatar-Items-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5f390f8eb7b7118e799611230e2dfb7298c9e43f485f567726eef99f4270784 +size 226932 diff --git a/.cursor/rules/roblox/assets/monetization/avatar-items/avatar-item-analytics-3.png b/.cursor/rules/roblox/assets/monetization/avatar-items/avatar-item-analytics-3.png new file mode 100644 index 00000000..2ad432ce --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/avatar-items/avatar-item-analytics-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3fb7aa83dfbdde74bfc2e9f473fdbcc5e265a72596be90849ab3ca2967821c22 +size 379711 diff --git a/.cursor/rules/roblox/assets/monetization/avatar-items/avatar-items-analytics-2.png b/.cursor/rules/roblox/assets/monetization/avatar-items/avatar-items-analytics-2.png new file mode 100644 index 00000000..d7041679 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/avatar-items/avatar-items-analytics-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d130cc2374aad2dc25d4b840871d612df4b071a1fe3fec21a25ade7fe37f34ac +size 370948 diff --git a/.cursor/rules/roblox/assets/monetization/avatar-items/avatar-items-analytics.png b/.cursor/rules/roblox/assets/monetization/avatar-items/avatar-items-analytics.png new file mode 100644 index 00000000..0c429238 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/avatar-items/avatar-items-analytics.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2a4cf2454836f02f25fb914243f7e599a8e025c621181a7fcd701d30c5e0b44 +size 284162 diff --git a/.cursor/rules/roblox/assets/monetization/commerce-products/Commerce-Product-ID.png b/.cursor/rules/roblox/assets/monetization/commerce-products/Commerce-Product-ID.png new file mode 100644 index 00000000..81e1205f --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/commerce-products/Commerce-Product-ID.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6f00ce8275dbdce0958a540311072da9591f2e0b62afa94f06ffb4f7ae110fa +size 26016 diff --git a/.cursor/rules/roblox/assets/monetization/commerce-products/Commerce-Product-Metafield-Example.png b/.cursor/rules/roblox/assets/monetization/commerce-products/Commerce-Product-Metafield-Example.png new file mode 100644 index 00000000..2362bcb1 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/commerce-products/Commerce-Product-Metafield-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:deaccd107d0f19cf35cb768a08bbc025473956275af8dc8e60cc7eb2374c36b1 +size 56579 diff --git a/.cursor/rules/roblox/assets/monetization/commerce-products/Commerce-Product-PDP-Diagram.png b/.cursor/rules/roblox/assets/monetization/commerce-products/Commerce-Product-PDP-Diagram.png new file mode 100644 index 00000000..a2db417e --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/commerce-products/Commerce-Product-PDP-Diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5427a52b2ca82de002aadc14d19fc52abc60ee5779f1d83a4c4fd2a5ac0a352a +size 670659 diff --git a/.cursor/rules/roblox/assets/monetization/commerce-products/Commerce-Product-Put-On-Sale.png b/.cursor/rules/roblox/assets/monetization/commerce-products/Commerce-Product-Put-On-Sale.png new file mode 100644 index 00000000..eaf021ed --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/commerce-products/Commerce-Product-Put-On-Sale.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16f2f547ee59850fc4702cc811d50f5f942db6c14489d2418d32b814d9b2f4ea +size 12277 diff --git a/.cursor/rules/roblox/assets/monetization/commerce-products/Commerce-Product-Virtual-Benefits.png b/.cursor/rules/roblox/assets/monetization/commerce-products/Commerce-Product-Virtual-Benefits.png new file mode 100644 index 00000000..1509e94e --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/commerce-products/Commerce-Product-Virtual-Benefits.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6291a17b051d34f3fcb5d64f3bead392b98717fe3a85abae2ac6a80e5ce71d29 +size 109315 diff --git a/.cursor/rules/roblox/assets/monetization/creator-rewards/dashboard.png b/.cursor/rules/roblox/assets/monetization/creator-rewards/dashboard.png new file mode 100644 index 00000000..022258b2 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/creator-rewards/dashboard.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac5fba5f10f02a361315c41cdf866df6da24388f8515c810d0a93ac3e02f1f98 +size 149643 diff --git a/.cursor/rules/roblox/assets/monetization/creator-rewards/share-links.png b/.cursor/rules/roblox/assets/monetization/creator-rewards/share-links.png new file mode 100644 index 00000000..32bb7599 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/creator-rewards/share-links.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2b12b585375bcd586edf03feeab46429e5419535e7bd264f51a1efb57ed5e39 +size 75586 diff --git a/.cursor/rules/roblox/assets/monetization/developer-products/Buy-Product-Example.jpg b/.cursor/rules/roblox/assets/monetization/developer-products/Buy-Product-Example.jpg new file mode 100644 index 00000000..325efd3b --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/developer-products/Buy-Product-Example.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1fe7e3556c28e14f29b799b3d21984e6248c8ef6c2fbc8edf0510af446955a3 +size 221483 diff --git a/.cursor/rules/roblox/assets/monetization/developer-products/RankedItems.png b/.cursor/rules/roblox/assets/monetization/developer-products/RankedItems.png new file mode 100644 index 00000000..9766f3ad --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/developer-products/RankedItems.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9e6921ca73e3187f1994b8c02e51ff38ca622f471c7733f6d385cbfb22805a4 +size 2352629 diff --git a/.cursor/rules/roblox/assets/monetization/developer-products/StoreTopPicks.png b/.cursor/rules/roblox/assets/monetization/developer-products/StoreTopPicks.png new file mode 100644 index 00000000..ec36246b --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/developer-products/StoreTopPicks.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1aabf6ffdf73908733e843f7295a1ba006e6f33c388c462cfa18ec61476f53e2 +size 1371270 diff --git a/.cursor/rules/roblox/assets/monetization/developer-products/developer-products-analytics-2.png b/.cursor/rules/roblox/assets/monetization/developer-products/developer-products-analytics-2.png new file mode 100644 index 00000000..1d525995 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/developer-products/developer-products-analytics-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:301938dff26ec9b6bd6b7a4930135d1c449b0d1c6b7a63698a319e775a82f8ea +size 582971 diff --git a/.cursor/rules/roblox/assets/monetization/developer-products/developer-products-analytics.png b/.cursor/rules/roblox/assets/monetization/developer-products/developer-products-analytics.png new file mode 100644 index 00000000..4d24fb6f --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/developer-products/developer-products-analytics.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5e616b72d98afc2c0319338bd3839cd48c680795d541335486c2da2478af3bd +size 249640 diff --git a/.cursor/rules/roblox/assets/monetization/earning/Average-Cash-Payouts.png b/.cursor/rules/roblox/assets/monetization/earning/Average-Cash-Payouts.png new file mode 100644 index 00000000..64c3d80f --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/earning/Average-Cash-Payouts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:698f5e4de697bce91edcb149cc834c016fed5d1ab6aacc7164eef795c020171e +size 103406 diff --git a/.cursor/rules/roblox/assets/monetization/earning/Earning-Flowchart.png b/.cursor/rules/roblox/assets/monetization/earning/Earning-Flowchart.png new file mode 100644 index 00000000..0ab5e001 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/earning/Earning-Flowchart.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f79d3326d29ba24d43c66b86a28c1eb873095e492ee28fb18aba44ee84a64f78 +size 70605 diff --git a/.cursor/rules/roblox/assets/monetization/earning/Economy-Stats-Creator-Earnings.png b/.cursor/rules/roblox/assets/monetization/earning/Economy-Stats-Creator-Earnings.png new file mode 100644 index 00000000..685576de --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/earning/Economy-Stats-Creator-Earnings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01d39c1635a43af8927b9820f87e12136c4f97ea0f3503fbfd23381e615f59c2 +size 37075 diff --git a/.cursor/rules/roblox/assets/monetization/earning/Economy-Stats-DAU.png b/.cursor/rules/roblox/assets/monetization/earning/Economy-Stats-DAU.png new file mode 100644 index 00000000..51e9f639 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/earning/Economy-Stats-DAU.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:afa916bc7d5e115c6288c2622d117957acc2b4acf380d814a323b5841e90eca4 +size 36071 diff --git a/.cursor/rules/roblox/assets/monetization/earning/Monetization-Growth-CAGR.png b/.cursor/rules/roblox/assets/monetization/earning/Monetization-Growth-CAGR.png new file mode 100644 index 00000000..88869fd9 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/earning/Monetization-Growth-CAGR.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d88d8d80ce251427a6feb6c614350fc1ed5e8ee2c2a67c119d955b4ebdd4929 +size 45369 diff --git a/.cursor/rules/roblox/assets/monetization/earning/Percentages-Clothes-Accessories.png b/.cursor/rules/roblox/assets/monetization/earning/Percentages-Clothes-Accessories.png new file mode 100644 index 00000000..c818305e --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/earning/Percentages-Clothes-Accessories.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1eb2817b2a6265fefe11098818158bb750d2440131313848ab0631a59594a98d +size 29622 diff --git a/.cursor/rules/roblox/assets/monetization/earning/Percentages-Reselling-Limiteds.png b/.cursor/rules/roblox/assets/monetization/earning/Percentages-Reselling-Limiteds.png new file mode 100644 index 00000000..471748f7 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/earning/Percentages-Reselling-Limiteds.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61b1249264a7ad8a463e6035b76c5757940a0368e66c5395f84ce3c5a2400c94 +size 34308 diff --git a/.cursor/rules/roblox/assets/monetization/earning/Virtual-Items-Odds.png b/.cursor/rules/roblox/assets/monetization/earning/Virtual-Items-Odds.png new file mode 100644 index 00000000..db3f0804 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/earning/Virtual-Items-Odds.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f80ed4e81a146f92f7e1e27432f5564c999b803c59aa440286387f9c4764e367 +size 193221 diff --git a/.cursor/rules/roblox/assets/monetization/engagement-based-payouts/Modal-Example.jpg b/.cursor/rules/roblox/assets/monetization/engagement-based-payouts/Modal-Example.jpg new file mode 100644 index 00000000..8f127b78 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/engagement-based-payouts/Modal-Example.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:740740c94da4306e23bb21c6bd4845e410702a77074749ac6e42e425fcef099b +size 224908 diff --git a/.cursor/rules/roblox/assets/monetization/engagement-based-payouts/Premium-Banner.jpg b/.cursor/rules/roblox/assets/monetization/engagement-based-payouts/Premium-Banner.jpg new file mode 100644 index 00000000..345b13b6 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/engagement-based-payouts/Premium-Banner.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a40e770455701a965f42d89ad0b287a7d7482048039e8b78bcea26c7a2bf21bf +size 236707 diff --git a/.cursor/rules/roblox/assets/monetization/engagement-based-payouts/engagement-based-payouts-2.png b/.cursor/rules/roblox/assets/monetization/engagement-based-payouts/engagement-based-payouts-2.png new file mode 100644 index 00000000..f2307efd --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/engagement-based-payouts/engagement-based-payouts-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f334738c56a5c42f025c78b50e25e97a20891d237c4fa824089640f78cdc7e3 +size 551441 diff --git a/.cursor/rules/roblox/assets/monetization/immersive-ads/ImageAds-Active.jpg b/.cursor/rules/roblox/assets/monetization/immersive-ads/ImageAds-Active.jpg new file mode 100644 index 00000000..cb939935 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/immersive-ads/ImageAds-Active.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b17edef434f76fcb6d255ae71e3b750799c9e4a8666513c12b3b11316adc3dac +size 278747 diff --git a/.cursor/rules/roblox/assets/monetization/immersive-ads/ImageAds-Inactive.jpg b/.cursor/rules/roblox/assets/monetization/immersive-ads/ImageAds-Inactive.jpg new file mode 100644 index 00000000..579a556d --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/immersive-ads/ImageAds-Inactive.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e12445edf1b1734c1333317535cd390b296e27c97e1b54423ff3147b6e65f1ad +size 246479 diff --git a/.cursor/rules/roblox/assets/monetization/immersive-ads/ImageAds-Invalid.jpg b/.cursor/rules/roblox/assets/monetization/immersive-ads/ImageAds-Invalid.jpg new file mode 100644 index 00000000..2143ae35 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/immersive-ads/ImageAds-Invalid.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a833ccb72dcae93a3fc32367ec5f7cbe3f0f64dbac5f533b8c118680a87b8cc +size 248082 diff --git a/.cursor/rules/roblox/assets/monetization/immersive-ads/ImageAds-Sample.jpg b/.cursor/rules/roblox/assets/monetization/immersive-ads/ImageAds-Sample.jpg new file mode 100644 index 00000000..10c237fc --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/immersive-ads/ImageAds-Sample.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bdc1bf3afe29712b52a6e636713a1d8fa5f210eec2a25fb05868a67e575c0cf0 +size 347517 diff --git a/.cursor/rules/roblox/assets/monetization/immersive-ads/Inserting-ImageAd.jpg b/.cursor/rules/roblox/assets/monetization/immersive-ads/Inserting-ImageAd.jpg new file mode 100644 index 00000000..e465a5f2 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/immersive-ads/Inserting-ImageAd.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f24caa799ec7378f90e0ac24186a951b384973e767e78e648f40e66250046d65 +size 195785 diff --git a/.cursor/rules/roblox/assets/monetization/immersive-ads/Inserting-PortalAd.jpg b/.cursor/rules/roblox/assets/monetization/immersive-ads/Inserting-PortalAd.jpg new file mode 100644 index 00000000..56aa129b --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/immersive-ads/Inserting-PortalAd.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2bf5b80fb05fec36f0c136215e4f3b60d01f79c55e0ebc6676425e8bf8769ee8 +size 182182 diff --git a/.cursor/rules/roblox/assets/monetization/immersive-ads/Overview-ImageAd.jpg b/.cursor/rules/roblox/assets/monetization/immersive-ads/Overview-ImageAd.jpg new file mode 100644 index 00000000..71d3be10 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/immersive-ads/Overview-ImageAd.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66cb855e6e3e8bd78719a5f5854f325fe5b0d985a71ca0626b23ddbb8f0ddaed +size 211885 diff --git a/.cursor/rules/roblox/assets/monetization/immersive-ads/Overview-PortalAd.mp4 b/.cursor/rules/roblox/assets/monetization/immersive-ads/Overview-PortalAd.mp4 new file mode 100644 index 00000000..2f4f75a8 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/immersive-ads/Overview-PortalAd.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:baae64795a7f3e43a84b3432cd45243e756ee4f5d51be9048264cc54575419c6 +size 4614528 diff --git a/.cursor/rules/roblox/assets/monetization/immersive-ads/Overview-UserA.jpg b/.cursor/rules/roblox/assets/monetization/immersive-ads/Overview-UserA.jpg new file mode 100644 index 00000000..72c9efe6 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/immersive-ads/Overview-UserA.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2407b0ece5911cf1d719caab73af7e0e9dd9646ffd2fc340404a9e107de440ab +size 223330 diff --git a/.cursor/rules/roblox/assets/monetization/immersive-ads/Overview-UserB.jpg b/.cursor/rules/roblox/assets/monetization/immersive-ads/Overview-UserB.jpg new file mode 100644 index 00000000..1a19222c --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/immersive-ads/Overview-UserB.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cfecd604e819b7c305c049cdaeedf209e9911592bdf4e422659595782d0b698c +size 215386 diff --git a/.cursor/rules/roblox/assets/monetization/immersive-ads/Overview-UserC.jpg b/.cursor/rules/roblox/assets/monetization/immersive-ads/Overview-UserC.jpg new file mode 100644 index 00000000..dd532754 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/immersive-ads/Overview-UserC.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b12339fdef565091c0e498140765d27b19b3c90997fa2df95f66f27dd30eabfd +size 184335 diff --git a/.cursor/rules/roblox/assets/monetization/immersive-ads/Portal-Ads-BasePortal.png b/.cursor/rules/roblox/assets/monetization/immersive-ads/Portal-Ads-BasePortal.png new file mode 100644 index 00000000..3bc20c4f --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/immersive-ads/Portal-Ads-BasePortal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a404da51ab8d0e90aa028eeedbb61a31312d67ee295dc6a58003d738785fad3 +size 16319 diff --git a/.cursor/rules/roblox/assets/monetization/immersive-ads/Portal-Ads-Decorative.png b/.cursor/rules/roblox/assets/monetization/immersive-ads/Portal-Ads-Decorative.png new file mode 100644 index 00000000..d1aa25a6 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/immersive-ads/Portal-Ads-Decorative.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cc166ef0b8dbcea44b0655b84c24afd08443dce2f069785338aef4a51d22b99 +size 17617 diff --git a/.cursor/rules/roblox/assets/monetization/immersive-ads/PortalAds-Active.jpg b/.cursor/rules/roblox/assets/monetization/immersive-ads/PortalAds-Active.jpg new file mode 100644 index 00000000..7e48646e --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/immersive-ads/PortalAds-Active.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:504410214d5cf132e6ab03935730d22856c4b47e751462a58fcd18cad7297fc4 +size 240282 diff --git a/.cursor/rules/roblox/assets/monetization/immersive-ads/PortalAds-Inactive.png b/.cursor/rules/roblox/assets/monetization/immersive-ads/PortalAds-Inactive.png new file mode 100644 index 00000000..e44dbc59 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/immersive-ads/PortalAds-Inactive.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9eccd89a6fa55b50c25f8498bcf2b0accb3be9eea1ca7dc572ee54812bedffac +size 1311811 diff --git a/.cursor/rules/roblox/assets/monetization/immersive-ads/PortalAds-Invalid.png b/.cursor/rules/roblox/assets/monetization/immersive-ads/PortalAds-Invalid.png new file mode 100644 index 00000000..22f3338d --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/immersive-ads/PortalAds-Invalid.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7f8220544d279e504bb32f549bbec0f09448a509f0aa9456af37cd5e0ebb11a +size 1292786 diff --git a/.cursor/rules/roblox/assets/monetization/immersive-ads/PortalAds-Sample1.png b/.cursor/rules/roblox/assets/monetization/immersive-ads/PortalAds-Sample1.png new file mode 100644 index 00000000..bc0ec425 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/immersive-ads/PortalAds-Sample1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c462d64c5ccbe221c031162b1ef4ee301714dd233a186546c79d8616129324e5 +size 1213230 diff --git a/.cursor/rules/roblox/assets/monetization/immersive-ads/PortalAds-Sample2.jpg b/.cursor/rules/roblox/assets/monetization/immersive-ads/PortalAds-Sample2.jpg new file mode 100644 index 00000000..51acd3c5 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/immersive-ads/PortalAds-Sample2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa03b59faf00a7dd6eaeff9b1cd9240fd4588a438daf42afe1c67570802faf27 +size 222148 diff --git a/.cursor/rules/roblox/assets/monetization/immersive-ads/ViewingMetrics-Graph.png b/.cursor/rules/roblox/assets/monetization/immersive-ads/ViewingMetrics-Graph.png new file mode 100644 index 00000000..1029e7a3 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/immersive-ads/ViewingMetrics-Graph.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:195c6019eef09060bcf8eb91bf2063a73f880fe915e943c0439533a12aa09dfb +size 79517 diff --git a/.cursor/rules/roblox/assets/monetization/immersive-ads/immersive-ads-eligibility.png b/.cursor/rules/roblox/assets/monetization/immersive-ads/immersive-ads-eligibility.png new file mode 100644 index 00000000..7b187aa9 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/immersive-ads/immersive-ads-eligibility.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d01a3f1e23b537581679fdfade63d344bf2f1d80c77a442e3b1e8814cfce0b1 +size 320187 diff --git a/.cursor/rules/roblox/assets/monetization/paid-access/Buy-Access-Example.png b/.cursor/rules/roblox/assets/monetization/paid-access/Buy-Access-Example.png new file mode 100644 index 00000000..e3af3ea4 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/paid-access/Buy-Access-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e84daccb3aef2ae4abf2bf93da6131d98ea83653e3d8a6b6893bbde536e97a06 +size 129360 diff --git a/.cursor/rules/roblox/assets/monetization/passes/Circular-Trimming-Bad.png b/.cursor/rules/roblox/assets/monetization/passes/Circular-Trimming-Bad.png new file mode 100644 index 00000000..46642777 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/passes/Circular-Trimming-Bad.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e375b88373961af2c6713c1785518f7685bef045cc7aac3dcd1df5df167894b +size 202782 diff --git a/.cursor/rules/roblox/assets/monetization/passes/Circular-Trimming-Good.png b/.cursor/rules/roblox/assets/monetization/passes/Circular-Trimming-Good.png new file mode 100644 index 00000000..b5f691f6 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/passes/Circular-Trimming-Good.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:787a6b490067fbbc4251a88d3aaca53ce3e1422adccf6fc8b0287c5add70a44d +size 210711 diff --git a/.cursor/rules/roblox/assets/monetization/passes/Configure-For-Sale-Toggle.png b/.cursor/rules/roblox/assets/monetization/passes/Configure-For-Sale-Toggle.png new file mode 100644 index 00000000..67c69fed --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/passes/Configure-For-Sale-Toggle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e709d1c46a880b464c66bb81a9eaf7cc273615a7bfbbbdaad9b2ac5619101a5 +size 9216 diff --git a/.cursor/rules/roblox/assets/monetization/passes/Configure-Sales-Button.png b/.cursor/rules/roblox/assets/monetization/passes/Configure-Sales-Button.png new file mode 100644 index 00000000..0c4f8e7a --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/passes/Configure-Sales-Button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0bcc551fc15a10f088dc65bf9c5b31a78fa176bffc1c835c8ffabfe3c9194a15 +size 21195 diff --git a/.cursor/rules/roblox/assets/monetization/passes/Configure-Set-Price.png b/.cursor/rules/roblox/assets/monetization/passes/Configure-Set-Price.png new file mode 100644 index 00000000..8d1f36b7 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/passes/Configure-Set-Price.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55dee0b406f6ae081cfd7445b6de95612f1015e2f1e02fad56c7c97787a7b6fb +size 19670 diff --git a/.cursor/rules/roblox/assets/monetization/passes/Open-In-New-Tab.png b/.cursor/rules/roblox/assets/monetization/passes/Open-In-New-Tab.png new file mode 100644 index 00000000..3acbbb34 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/passes/Open-In-New-Tab.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00c1652520ea7e569fa041403a287680dc80e6c53a04d9e93d18fb39bbeb31e5 +size 28773 diff --git a/.cursor/rules/roblox/assets/monetization/passes/PromotedPass.png b/.cursor/rules/roblox/assets/monetization/passes/PromotedPass.png new file mode 100644 index 00000000..105b42c2 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/passes/PromotedPass.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed182db3be7d0df42e10f9c64b38b0720747ba41bc390bf5a5938de8152091ca +size 248508 diff --git a/.cursor/rules/roblox/assets/monetization/passes/PromotedPass2.png b/.cursor/rules/roblox/assets/monetization/passes/PromotedPass2.png new file mode 100644 index 00000000..a505bea2 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/passes/PromotedPass2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab038b08eaca894c0a1e23661797c3416778d5d1a6ee0fe29bd78bcd70880646 +size 391009 diff --git a/.cursor/rules/roblox/assets/monetization/passes/passes-analytics-2.png b/.cursor/rules/roblox/assets/monetization/passes/passes-analytics-2.png new file mode 100644 index 00000000..50fd71e9 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/passes/passes-analytics-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eba1875696f3e6d8a4505933817fad2ee95671271055ae62314678ec76300bf7 +size 363980 diff --git a/.cursor/rules/roblox/assets/monetization/passes/passes-analytics.png b/.cursor/rules/roblox/assets/monetization/passes/passes-analytics.png new file mode 100644 index 00000000..d562782f --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/passes/passes-analytics.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae2015a77625936c170215918fb9fa1599cdcb4556be6f00224edd4fc2453cf1 +size 436170 diff --git a/.cursor/rules/roblox/assets/monetization/passes/passes-sample.png b/.cursor/rules/roblox/assets/monetization/passes/passes-sample.png new file mode 100644 index 00000000..de337adc --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/passes/passes-sample.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aba8337ffd0681da924554b3f640b608e9f997b62d3f9db112dbf54b89a2d708 +size 326735 diff --git a/.cursor/rules/roblox/assets/monetization/price-optimization/Price-Optimization-Example.png b/.cursor/rules/roblox/assets/monetization/price-optimization/Price-Optimization-Example.png new file mode 100644 index 00000000..a1f79815 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/price-optimization/Price-Optimization-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46c62502317bfac6d3c7505cf64b4d88843ac1c4aa0262c7a2ad03a456010c11 +size 157343 diff --git a/.cursor/rules/roblox/assets/monetization/private-servers/Example-Purchase-Dialog.png b/.cursor/rules/roblox/assets/monetization/private-servers/Example-Purchase-Dialog.png new file mode 100644 index 00000000..66609b43 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/private-servers/Example-Purchase-Dialog.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61b3a2638aa4e6371ca33da40860d16d23c9f86b69bbd6ceca6bb0a3155a06c4 +size 135850 diff --git a/.cursor/rules/roblox/assets/monetization/rewarded-video-ads/LikelySpenders.png b/.cursor/rules/roblox/assets/monetization/rewarded-video-ads/LikelySpenders.png new file mode 100644 index 00000000..5a4d688d --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/rewarded-video-ads/LikelySpenders.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f8056991f5dd247e5168f8b2ca9fa1573ccc18b6435da386535df2a2da65aa6 +size 103948 diff --git a/.cursor/rules/roblox/assets/monetization/rewarded-video-ads/OpportunityCalculator.png b/.cursor/rules/roblox/assets/monetization/rewarded-video-ads/OpportunityCalculator.png new file mode 100644 index 00000000..629b78e6 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/rewarded-video-ads/OpportunityCalculator.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:324b9646b4534cd312f278b9c3221b2edf525dfcdff4e193ebf1c695a9b97a8f +size 175594 diff --git a/.cursor/rules/roblox/assets/monetization/rewarded-video-ads/Placements.png b/.cursor/rules/roblox/assets/monetization/rewarded-video-ads/Placements.png new file mode 100644 index 00000000..779e469a --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/rewarded-video-ads/Placements.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2c9cf26c52a6a1136a7edc8fb7fd784a95edb400e7e40a84cd49f8121614d1a +size 74253 diff --git a/.cursor/rules/roblox/assets/monetization/rewarded-video-ads/RVAAnalytics.png b/.cursor/rules/roblox/assets/monetization/rewarded-video-ads/RVAAnalytics.png new file mode 100644 index 00000000..36e48e59 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/rewarded-video-ads/RVAAnalytics.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d52719e6f607c5e05e2f1c8d4ae573ab24512fcbe808db493c2a86a572962767 +size 274306 diff --git a/.cursor/rules/roblox/assets/monetization/subscriptions/Example-Subscriptions.png b/.cursor/rules/roblox/assets/monetization/subscriptions/Example-Subscriptions.png new file mode 100644 index 00000000..12dffca8 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/subscriptions/Example-Subscriptions.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c02e27b61bcca9720bf7add62e4ca5fddd12906617fcdf2b170463c2f825992b +size 339930 diff --git a/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-1.png b/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-1.png new file mode 100644 index 00000000..4102fc76 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc5b6c59aeb6d5fb9907d47ae69e75bc093c82d416f2a4cb6277056d3e50fe5d +size 29971 diff --git a/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-2.png b/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-2.png new file mode 100644 index 00000000..2d32043f --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c29ec8e3dd288299699d9c098d6c9a17aaf2a7b9743c2ade8babe90aa30731c +size 40020 diff --git a/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-3.png b/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-3.png new file mode 100644 index 00000000..6ed13724 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6788591251d591a85967b05556b9a51455ded7fef0778b7fddbe9c800f7d1b21 +size 37756 diff --git a/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-4.png b/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-4.png new file mode 100644 index 00000000..9741b522 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89e77cea79d0da8e0c472c8acd5c393d0d627c39bf36325486130a2cf0bcb485 +size 274816 diff --git a/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-activate.png b/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-activate.png new file mode 100644 index 00000000..6e3b4a73 --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-activate.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dae366b0b56b02d4b9988db834a2a31ba1242dde4433a38eaa13bc498049db7a +size 169980 diff --git a/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-analytics-2.png b/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-analytics-2.png new file mode 100644 index 00000000..a15aafce --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-analytics-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b8ebf90bc8b51e854deaabb799394a4f7ac6a1d732128cbf45470234ce3e0bd +size 27581 diff --git a/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-analytics.png b/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-analytics.png new file mode 100644 index 00000000..e6081b5a --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-analytics.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93bd020c2968b22cbbab06dc7fb0ac6a9c298aec8589181ff61b043aeb02757c +size 334322 diff --git a/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-my-transaction.png b/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-my-transaction.png new file mode 100644 index 00000000..34c4955b --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-my-transaction.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a905d92a00d346753ac886d3716b268521c893d08e2c18fccb2eeaf2a01f554 +size 259670 diff --git a/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-pay-out.png b/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-pay-out.png new file mode 100644 index 00000000..91585c5c --- /dev/null +++ b/.cursor/rules/roblox/assets/monetization/subscriptions/subscriptions-pay-out.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5cbde9948739b80a6962cb768c163916ac55dda97a1086d817072893b96b0700 +size 128575 diff --git a/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Analytics-Itemized.png b/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Analytics-Itemized.png new file mode 100644 index 00000000..45cb7141 --- /dev/null +++ b/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Analytics-Itemized.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6483ebf6bd041b98fcbea05d9cda4fad7a168015698f60949700130cc630f3c1 +size 63917 diff --git a/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Analytics-Summary.png b/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Analytics-Summary.png new file mode 100644 index 00000000..c61c5730 --- /dev/null +++ b/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Analytics-Summary.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf5e94c1ec25c712621a9c0d530f8ca84d9beb8d2a18cbe2bdb6d3213d4b73bb +size 33563 diff --git a/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Example-Notification-A.png b/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Example-Notification-A.png new file mode 100644 index 00000000..3b08185b --- /dev/null +++ b/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Example-Notification-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8736ff503e49998b8da2fb67446fa2663477f456c7581612d0eadd11c86b7164 +size 40314 diff --git a/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Example-Notification-B.png b/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Example-Notification-B.png new file mode 100644 index 00000000..98257c46 --- /dev/null +++ b/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Example-Notification-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fecb656780c268784c8a7f0c433dc44db76dce6b2fb978e0f8ad2e8f3d58134 +size 33562 diff --git a/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Example-Notification-C.png b/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Example-Notification-C.png new file mode 100644 index 00000000..6419a91a --- /dev/null +++ b/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Example-Notification-C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf6ca5fb9e1f19d622aa995467bcc7aee7234acc13593d6fd2a09cff9e5f6e1a +size 41074 diff --git a/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Example-Notification-D.png b/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Example-Notification-D.png new file mode 100644 index 00000000..894f29e5 --- /dev/null +++ b/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Example-Notification-D.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79e8634ddbeb4189bb02ff11bef1dbcc48c2ae825b72b99f1c6f4143d9b51fc6 +size 35315 diff --git a/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Example-Notification-E.png b/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Example-Notification-E.png new file mode 100644 index 00000000..f2028064 --- /dev/null +++ b/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Example-Notification-E.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec067fb61c7ee3933bad8165e8584022371e80d86509e89b0b5c751621d8e8c6 +size 33969 diff --git a/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Example-Notification-F.png b/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Example-Notification-F.png new file mode 100644 index 00000000..eaa1ddd2 --- /dev/null +++ b/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Example-Notification-F.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e424eb831fb41fb5198b574bb662226143499c7bf8313528d08dfbd72c5f150 +size 44808 diff --git a/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Move-Package.png b/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Move-Package.png new file mode 100644 index 00000000..34c3d320 --- /dev/null +++ b/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Move-Package.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01f85dd9beec7eb1285dd0cf0e19464f1543b1ce0e6243a8aecba9a63051204c +size 36614 diff --git a/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Notification-Stream.png b/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Notification-Stream.png new file mode 100644 index 00000000..96722397 --- /dev/null +++ b/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Notification-Stream.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46002f62d298ea71382aeaa7f27f48a1092411835aed764db6e6e64b23e8268d +size 179439 diff --git a/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Toolbox-Package.png b/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Toolbox-Package.png new file mode 100644 index 00000000..99e9618a --- /dev/null +++ b/.cursor/rules/roblox/assets/open-cloud/experience-notifications/Toolbox-Package.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6bc9c919c4da3a10be21ab9174339f821f76cad66227068ac25677011a4e234f +size 7436 diff --git a/.cursor/rules/roblox/assets/open-cloud/guides/datastore-perms.png b/.cursor/rules/roblox/assets/open-cloud/guides/datastore-perms.png new file mode 100644 index 00000000..7c10e981 --- /dev/null +++ b/.cursor/rules/roblox/assets/open-cloud/guides/datastore-perms.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89199d4d4d183a003a31aeaca58503cee21fa64b946169cdc447aa3bb728cfe3 +size 93173 diff --git a/.cursor/rules/roblox/assets/open-cloud/instance-api-beta.png b/.cursor/rules/roblox/assets/open-cloud/instance-api-beta.png new file mode 100644 index 00000000..b8e6bffd --- /dev/null +++ b/.cursor/rules/roblox/assets/open-cloud/instance-api-beta.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:229c74a02dec31384bfeee64051b9ac46a9f2808f258b2b49ef65cb8c875308c +size 49446 diff --git a/.cursor/rules/roblox/assets/open-cloud/instance-api.png b/.cursor/rules/roblox/assets/open-cloud/instance-api.png new file mode 100644 index 00000000..0eee16ca --- /dev/null +++ b/.cursor/rules/roblox/assets/open-cloud/instance-api.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:954f9e3e66fd9b138f79fa54ba50dede3b647bb9b0dcaf0121b8b4bc61d4babc +size 150517 diff --git a/.cursor/rules/roblox/assets/open-cloud/open-cloud-nodejs-sample-oauth2-main.zip b/.cursor/rules/roblox/assets/open-cloud/open-cloud-nodejs-sample-oauth2-main.zip new file mode 100644 index 00000000..ba3cdc9e --- /dev/null +++ b/.cursor/rules/roblox/assets/open-cloud/open-cloud-nodejs-sample-oauth2-main.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57a348b357dc52e70b5f070ef0b5b056e03429e8e82c0b59d493154e274a5424 +size 12734 diff --git a/.cursor/rules/roblox/assets/open-cloud/open-cloud-potion-shop-demo.ods b/.cursor/rules/roblox/assets/open-cloud/open-cloud-potion-shop-demo.ods new file mode 100644 index 00000000..5676c80a --- /dev/null +++ b/.cursor/rules/roblox/assets/open-cloud/open-cloud-potion-shop-demo.ods @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd7381706dcde54e37a3294747a7552447b98b596dd5038ef86545174d5a2f44 +size 12407 diff --git a/.cursor/rules/roblox/assets/open-cloud/protocol-flow.png b/.cursor/rules/roblox/assets/open-cloud/protocol-flow.png new file mode 100644 index 00000000..cd694d41 --- /dev/null +++ b/.cursor/rules/roblox/assets/open-cloud/protocol-flow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b8a1dbf8556ca0abe4e1872252e1469e838172e14a1f71c3d7f03eef595c8f4 +size 67482 diff --git a/.cursor/rules/roblox/assets/optimization/Perf-Flow.drawio b/.cursor/rules/roblox/assets/optimization/Perf-Flow.drawio new file mode 100644 index 00000000..5ab54df1 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/Perf-Flow.drawio @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25d2ad6de4ca51c5be822e52cd87cf52cdb41a6b421d442723d75ca63747674e +size 185977 diff --git a/.cursor/rules/roblox/assets/optimization/Perf-Flow.png b/.cursor/rules/roblox/assets/optimization/Perf-Flow.png new file mode 100644 index 00000000..b15ed731 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/Perf-Flow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5551e6de6411710b8a5b9ffd3106d162ddcf0e280085d9b77d5f3763f87f24c +size 69303 diff --git a/.cursor/rules/roblox/assets/optimization/Perf-Flow.svg b/.cursor/rules/roblox/assets/optimization/Perf-Flow.svg new file mode 100644 index 00000000..3706a73b --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/Perf-Flow.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31303ed8e1b2efe9c04605b5e6f2ed74fe9d861044e4b6d00029258b58080d57 +size 50400 diff --git a/.cursor/rules/roblox/assets/optimization/chicken-rocket.jpg b/.cursor/rules/roblox/assets/optimization/chicken-rocket.jpg new file mode 100644 index 00000000..19f46ca4 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/chicken-rocket.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7e278fc5222eb4374f6ce7cec62d859ada82decd43dae67f80079e1786fcc0e +size 215388 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/RaycastSpam.rbxl b/.cursor/rules/roblox/assets/optimization/microprofiler/RaycastSpam.rbxl new file mode 100644 index 00000000..d5825391 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/RaycastSpam.rbxl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8bea29d1076f78235415588d90fa26e86a4aecce1b5fb4dcfc556b7eeed4a6a +size 841789 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/custom-profile.png b/.cursor/rules/roblox/assets/optimization/microprofiler/custom-profile.png new file mode 100644 index 00000000..13d77f5f --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/custom-profile.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:137981f645ad7782522f0a07c1091634b091257efe533f5dd5c8d3a4f36a7650 +size 154873 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-counter.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-counter.png new file mode 100644 index 00000000..cc18ef6e --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-counter.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97979726c8de1c03c8c594a276ea350fd1b3e0866d799284091049df9d3d8ee3 +size 31778 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-counters-mode.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-counters-mode.png new file mode 100644 index 00000000..0157d54c --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-counters-mode.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98eeb1cd8cbd35a797d3534d917324f4d1c2aa266675f905f5a4e8b4a7d9ceb4 +size 63291 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-detailed.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-detailed.png new file mode 100644 index 00000000..05b896f0 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-detailed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d85117b6e7ae8945ef1c940dd8f9b246a0dcc07c5106fc4d841907bab552543f +size 592386 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-flame-diff.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-flame-diff.png new file mode 100644 index 00000000..7258a6ed --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-flame-diff.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b2e85b52fe83a591feafccc6b1399ebe5717716f64f65b55dd1253877ffbcf2 +size 150955 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-flame-diff2.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-flame-diff2.png new file mode 100644 index 00000000..16344162 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-flame-diff2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8544c446e0acefd0ceddb8d664cf563db3984dc398b0e1050c31e902178ce819 +size 159885 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-flame.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-flame.png new file mode 100644 index 00000000..06309ea7 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-flame.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2177ecc82a3dd4a71fbb1a7cbab0beacfde687237c08f750aaa71c1c076f33d5 +size 116695 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-frame.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-frame.png new file mode 100644 index 00000000..973523ed --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-frame.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b05433bc9a46ecc7ba3f694534c2f0e4aae6592cac5b0f2e3e85e660c22f41c7 +size 59057 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-frames.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-frames.png new file mode 100644 index 00000000..f4db0d7f --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-frames.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64d92a1a04caa6b2ab23d0ebc2164ac7023a1ef383c44133067662c1b8fc7934 +size 58863 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-graph.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-graph.png new file mode 100644 index 00000000..46eda007 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-graph.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32d83d0f109aa6e9c3cfe0ea0c49e572c53f641b328051d2d9290600ff32828b +size 45827 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-group.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-group.png new file mode 100644 index 00000000..c0bf5ce1 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-group.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd3117d599035d30345103a977867507b980bb37f9275804416f3a287ae9e558 +size 420251 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-groups-mode.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-groups-mode.png new file mode 100644 index 00000000..d747b9e0 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-groups-mode.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6bae246971d2b49dfde7de16c4d949c512c0292c06fabb4bc461d7700c9a638c +size 156316 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-mobile.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-mobile.png new file mode 100644 index 00000000..ad55709a --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-mobile.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:987b4363b9b263fdf0837625153b287e31b215a7339174542321d444ca75ca07 +size 656448 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-network-asset.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-network-asset.png new file mode 100644 index 00000000..48af4547 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-network-asset.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:222ff55f46df64dba02c68011153da88a0e0d106cbf860a4dee338d0c038bcaf +size 61971 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-network-events.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-network-events.png new file mode 100644 index 00000000..a9447c73 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-network-events.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2017f32a7da50dd882223609a6c70212f618039c609ee0164ef87231ffef149a +size 84231 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-network-extra.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-network-extra.png new file mode 100644 index 00000000..7a5efed4 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-network-extra.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96b200aa178e71acf57ec22d1860d3163bcd1f0298fdd0185a7c9da740d9bb6a +size 62231 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-network.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-network.png new file mode 100644 index 00000000..e597a1f3 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-network.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8eaf5a8042a2b2cd2223fa43dbbccbe9d2881bf1d3106389bd80c7a7c9c3788b +size 67203 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-panning.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-panning.png new file mode 100644 index 00000000..0a4a1c15 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-panning.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6c35c1da043d99af8ed014c2023c42d2deba3cd9836bd17f47c7bfacb88ed6c +size 365848 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-save-to-file.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-save-to-file.png new file mode 100644 index 00000000..92edcfa5 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-save-to-file.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f545ec26ca51db099cb7653bc2d349e6a582cb578d596e4a18dd2619278581fa +size 96218 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-server.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-server.png new file mode 100644 index 00000000..72174745 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-server.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2406a9f008aae906506b38b6fcf4dfb22e2bceb97d1e21e1588ef79d351965e3 +size 139617 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-spike.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-spike.png new file mode 100644 index 00000000..1a30a384 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-spike.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73cf0d5fbeabdb3b976ea28d8e58d6131699a65d915596b80ebe6834a6d6dcfe +size 325173 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-studio-flame.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-studio-flame.png new file mode 100644 index 00000000..ca928054 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-studio-flame.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15bf4b9986334565cf08b9e187ddfafafebeea27a0a8e7e91e7cc0f3e2f4583e +size 369751 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-threads-mode.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-threads-mode.png new file mode 100644 index 00000000..15bc7dd9 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-threads-mode.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:804ef10d2caedb6fbf759364fdbec6f6b7009e0dcba3d42da775e9fcf5bde91c +size 102177 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-timeline.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-timeline.png new file mode 100644 index 00000000..ee62b9f6 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-timeline.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:feec7e8810f93c435e88540252c0e25d8d9a18726f9e161eb5d504502652d2d6 +size 247717 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-timers-mode.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-timers-mode.png new file mode 100644 index 00000000..e1f8c6ad --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-timers-mode.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8a0d6ae3fc517cd8c88cc7337671d26de054a185aa81facb89c041b74fc0cea +size 200795 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-bar-graph.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-bar-graph.png new file mode 100644 index 00000000..d425f6d3 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-bar-graph.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3cb6a9ac3d143c6f6c610e8b106748195dd926c9afa8955b0e7cfd97ae3f3b16 +size 260576 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-explorer-filter.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-explorer-filter.png new file mode 100644 index 00000000..441a7a3a --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-explorer-filter.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d319dbc17ab2e7d219332498742495694c4b1d3799ffd2cec6ea1f20c800e61b +size 26642 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-framerate.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-framerate.png new file mode 100644 index 00000000..425a9f6e --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-framerate.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c98ed381b3469e64856b57af559bd463e83f816d96bd7232bdbd1accd774ccb +size 876339 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-framerate2.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-framerate2.png new file mode 100644 index 00000000..c68c82d1 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-framerate2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6ff00011f5768803851724e70a41fc41f2ac203549e43d7fa4a35a3f2198213 +size 890380 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-localscript.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-localscript.png new file mode 100644 index 00000000..11668f9b --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-localscript.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:729e68a053580140a23056914ca42704eba0702ce042af7b48d77fa6719eb352 +size 500083 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-raycast-label.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-raycast-label.png new file mode 100644 index 00000000..8ccf8dca --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-raycast-label.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d323ad0c2535dc595f7c9f479b2e74b0f9f0e0261cd33125c10b7872d4f6dd0 +size 529135 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-spam.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-spam.png new file mode 100644 index 00000000..46de64c6 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-spam.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf458cf3488ab7e27fe599a30359a2c28f0ef3d8c85da1b6216be892cee50da1 +size 551014 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-stepped.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-stepped.png new file mode 100644 index 00000000..6128a6b8 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-tut-stepped.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87bca0715986ce83591cd18f6c5c05a8f23c8aad6de26d3615fe64cc58a8256c +size 640809 diff --git a/.cursor/rules/roblox/assets/optimization/microprofiler/micro-xray.png b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-xray.png new file mode 100644 index 00000000..5659e37d --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/microprofiler/micro-xray.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e0af7e29fc658aa919f9b53b1b031a033c5789c357cd403c6df77a843a6826e +size 88332 diff --git a/.cursor/rules/roblox/assets/optimization/perf-hud.png b/.cursor/rules/roblox/assets/optimization/perf-hud.png new file mode 100644 index 00000000..064b5751 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/perf-hud.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da94a2d7094fe5e4625912eb8d908495bf36138d7a8ed81c838aa3e0bebab01e +size 1937114 diff --git a/.cursor/rules/roblox/assets/optimization/streaming/Model-Stream-In-Default.svg b/.cursor/rules/roblox/assets/optimization/streaming/Model-Stream-In-Default.svg new file mode 100644 index 00000000..69645505 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/streaming/Model-Stream-In-Default.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8845d455603df72c61996b6ab17173647bfb2823e4cfda8b4a61c05a7bc57ec2 +size 87155 diff --git a/.cursor/rules/roblox/assets/optimization/streaming/Model-Stream-In-Improved-Character.svg b/.cursor/rules/roblox/assets/optimization/streaming/Model-Stream-In-Improved-Character.svg new file mode 100644 index 00000000..2b3a6feb --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/streaming/Model-Stream-In-Improved-Character.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a73e4ca881e4cfff4f35308c05c31cea5c9881b2f9df6194dba1556755fe7a77 +size 167244 diff --git a/.cursor/rules/roblox/assets/optimization/streaming/Model-Stream-In-Improved-Non-Spatial.svg b/.cursor/rules/roblox/assets/optimization/streaming/Model-Stream-In-Improved-Non-Spatial.svg new file mode 100644 index 00000000..bf787462 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/streaming/Model-Stream-In-Improved-Non-Spatial.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16e1b45a188afb4b48e2f5e7a2d91e3c7876f3b22c4daf95529754aae20f0606 +size 104975 diff --git a/.cursor/rules/roblox/assets/optimization/streaming/Model-Stream-In-Improved-Spatial.svg b/.cursor/rules/roblox/assets/optimization/streaming/Model-Stream-In-Improved-Spatial.svg new file mode 100644 index 00000000..903ab9a7 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/streaming/Model-Stream-In-Improved-Spatial.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a279052960cf35ff6088e684782db7bf26a6c40daeccbbdd4e2e8bf2fbc9153 +size 85470 diff --git a/.cursor/rules/roblox/assets/optimization/streaming/ModelStreamingMode-Atomic.svg b/.cursor/rules/roblox/assets/optimization/streaming/ModelStreamingMode-Atomic.svg new file mode 100644 index 00000000..52ae2470 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/streaming/ModelStreamingMode-Atomic.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca095ff07d5b7d7443a396e1ef811e14b93633c4aa715b3bd158dae00ac3a89c +size 144495 diff --git a/.cursor/rules/roblox/assets/optimization/streaming/ModelStreamingMode-Persistent.svg b/.cursor/rules/roblox/assets/optimization/streaming/ModelStreamingMode-Persistent.svg new file mode 100644 index 00000000..556055f4 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/streaming/ModelStreamingMode-Persistent.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a597b84edaad0fea784c5aa8c7ab0f4c2da8a7276e5d8df6f9994c34ea83a6d9 +size 195268 diff --git a/.cursor/rules/roblox/assets/optimization/streaming/Technical-Behavior.svg b/.cursor/rules/roblox/assets/optimization/streaming/Technical-Behavior.svg new file mode 100644 index 00000000..3975db49 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/streaming/Technical-Behavior.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35999d1b8869361adbeb745c87a20cf3b1ba4547669a610fade7b1cfa359b466 +size 168456 diff --git a/.cursor/rules/roblox/assets/optimization/task-scheduler/scheduler-priority.png b/.cursor/rules/roblox/assets/optimization/task-scheduler/scheduler-priority.png new file mode 100644 index 00000000..ba02979a --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/task-scheduler/scheduler-priority.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad22a4abca777ffc0ea3fdca1152440e7d82a6b78f73dde46faf52e29ba98043 +size 196277 diff --git a/.cursor/rules/roblox/assets/optimization/task-scheduler/task-scheduler.png b/.cursor/rules/roblox/assets/optimization/task-scheduler/task-scheduler.png new file mode 100644 index 00000000..68a4fc74 --- /dev/null +++ b/.cursor/rules/roblox/assets/optimization/task-scheduler/task-scheduler.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59618ee86b3b810386db42bb7887589f276a7b76727717aa2f56cc47ba5da86a +size 379290 diff --git a/.cursor/rules/roblox/assets/physics/adaptive-timestepping/Adaptive-Timestepping-Microprofiler-A.png b/.cursor/rules/roblox/assets/physics/adaptive-timestepping/Adaptive-Timestepping-Microprofiler-A.png new file mode 100644 index 00000000..9fd4e718 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/adaptive-timestepping/Adaptive-Timestepping-Microprofiler-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a306e07c4a1b1c33fb8dd0377cbe203c4ac85f637ef2c6c9e1a6b6da8d0d6fa +size 77954 diff --git a/.cursor/rules/roblox/assets/physics/adaptive-timestepping/Adaptive-Timestepping-Microprofiler-B.png b/.cursor/rules/roblox/assets/physics/adaptive-timestepping/Adaptive-Timestepping-Microprofiler-B.png new file mode 100644 index 00000000..e5bedfd8 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/adaptive-timestepping/Adaptive-Timestepping-Microprofiler-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bda70d3aae39506dfe8750002d9c7b1a534738363e151d0a15e950fff9416465 +size 70553 diff --git a/.cursor/rules/roblox/assets/physics/adaptive-timestepping/Adaptive-Timestepping.mp4 b/.cursor/rules/roblox/assets/physics/adaptive-timestepping/Adaptive-Timestepping.mp4 new file mode 100644 index 00000000..f6a90211 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/adaptive-timestepping/Adaptive-Timestepping.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18fedda8dbf8e188f4d93ad2d6c4b87d74ebbda3ebcd442fb7621b8a0f6c274c +size 5116510 diff --git a/.cursor/rules/roblox/assets/physics/adaptive-timestepping/Diagram-Labels.png b/.cursor/rules/roblox/assets/physics/adaptive-timestepping/Diagram-Labels.png new file mode 100644 index 00000000..47198dcf --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/adaptive-timestepping/Diagram-Labels.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc6fc9e160d4212e60406efd775f79601cdf4bb4fb6a238b9bc92f5bdd2a3110 +size 21534 diff --git a/.cursor/rules/roblox/assets/physics/adaptive-timestepping/PhysicsSteppingMethod-Adaptive.png b/.cursor/rules/roblox/assets/physics/adaptive-timestepping/PhysicsSteppingMethod-Adaptive.png new file mode 100644 index 00000000..77dc1221 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/adaptive-timestepping/PhysicsSteppingMethod-Adaptive.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6af96a1c9cfcbe2cc34b7369985bfb505ae4489b0edd002d3708d1920f7f7c7 +size 22927 diff --git a/.cursor/rules/roblox/assets/physics/adaptive-timestepping/Settings-Are-Timesteps-Shown.png b/.cursor/rules/roblox/assets/physics/adaptive-timestepping/Settings-Are-Timesteps-Shown.png new file mode 100644 index 00000000..31ce830a --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/adaptive-timestepping/Settings-Are-Timesteps-Shown.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:081342be2c468722eb5e422f958fa2eddfa36ee7caad87cd65d65d45d7f04e86 +size 13147 diff --git a/.cursor/rules/roblox/assets/physics/assemblies/Assembly-Anchor-Diagram-1.png b/.cursor/rules/roblox/assets/physics/assemblies/Assembly-Anchor-Diagram-1.png new file mode 100644 index 00000000..a345c7d8 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/assemblies/Assembly-Anchor-Diagram-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38bbe817499406b380cf40acd8099d9ea01370e9c6e4a38db92cc11108fb6939 +size 117542 diff --git a/.cursor/rules/roblox/assets/physics/assemblies/Assembly-Anchor-Diagram-2.png b/.cursor/rules/roblox/assets/physics/assemblies/Assembly-Anchor-Diagram-2.png new file mode 100644 index 00000000..2393e829 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/assemblies/Assembly-Anchor-Diagram-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec3b4187e52044ea55300b5afaef05d4fe2207eee620d5c16efb674205df3fb0 +size 126879 diff --git a/.cursor/rules/roblox/assets/physics/assemblies/Assembly-Anchor-Diagram-3.png b/.cursor/rules/roblox/assets/physics/assemblies/Assembly-Anchor-Diagram-3.png new file mode 100644 index 00000000..9153da00 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/assemblies/Assembly-Anchor-Diagram-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:716cccd23e470a517c37ecdb8675b8a22c56b9b627b75a3d8b90ffacba2c4a79 +size 130132 diff --git a/.cursor/rules/roblox/assets/physics/assemblies/Assembly-Example-Avatar.png b/.cursor/rules/roblox/assets/physics/assemblies/Assembly-Example-Avatar.png new file mode 100644 index 00000000..2573bcc5 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/assemblies/Assembly-Example-Avatar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ac6403994eda97ef4eb66fd02d1dcfd7cd85d7c436f11cfda8ef074fbc2b5e0 +size 101335 diff --git a/.cursor/rules/roblox/assets/physics/assemblies/Assembly-Example-Block.png b/.cursor/rules/roblox/assets/physics/assemblies/Assembly-Example-Block.png new file mode 100644 index 00000000..63949a56 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/assemblies/Assembly-Example-Block.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:443347047ab3dbfe00884027d92b96f587228dab4991af251bfa65a7ad58fc02 +size 139038 diff --git a/.cursor/rules/roblox/assets/physics/assemblies/Assembly-Example-Ship.png b/.cursor/rules/roblox/assets/physics/assemblies/Assembly-Example-Ship.png new file mode 100644 index 00000000..34abcc37 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/assemblies/Assembly-Example-Ship.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:469ab3367f5fa773b49672180b7b2c4e477cff83b71ff4715ad70bd25b14c316 +size 271328 diff --git a/.cursor/rules/roblox/assets/physics/assemblies/Sleep-Demo.mp4 b/.cursor/rules/roblox/assets/physics/assemblies/Sleep-Demo.mp4 new file mode 100644 index 00000000..39bcbe8b --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/assemblies/Sleep-Demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d820d7f971fc07be920aaf918b4e74b13efe14e3f48c6f41b5a563fc4d014af2 +size 1612028 diff --git a/.cursor/rules/roblox/assets/physics/character-controller/Explorer-ControllerManager.png b/.cursor/rules/roblox/assets/physics/character-controller/Explorer-ControllerManager.png new file mode 100644 index 00000000..9ac3ad9e --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/character-controller/Explorer-ControllerManager.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4779bb17752ac91bef8a5665364e434a70f08a3a1fedfcfa0112bf832ec1a3b7 +size 28314 diff --git a/.cursor/rules/roblox/assets/physics/character-controller/Explorer-Controllers.png b/.cursor/rules/roblox/assets/physics/character-controller/Explorer-Controllers.png new file mode 100644 index 00000000..a0108c09 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/character-controller/Explorer-Controllers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4aefd4da4bcf0e16c22c084cd0d5eca3c786caf541a771801c66d98dc318a49f +size 24639 diff --git a/.cursor/rules/roblox/assets/physics/character-controller/Explorer-Core-Setup.png b/.cursor/rules/roblox/assets/physics/character-controller/Explorer-Core-Setup.png new file mode 100644 index 00000000..f4807515 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/character-controller/Explorer-Core-Setup.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7503e8de93f1b8db8ed279d281ee6c4eafbdfd3c42c2288c1ae893d3867d172d +size 9524 diff --git a/.cursor/rules/roblox/assets/physics/character-controller/Explorer-RootPart-ClimbSensor.png b/.cursor/rules/roblox/assets/physics/character-controller/Explorer-RootPart-ClimbSensor.png new file mode 100644 index 00000000..22dec3b8 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/character-controller/Explorer-RootPart-ClimbSensor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc8ba7ae75f40aa1054b29ea3db7eaab7d8515e780d471e643e2f6293d2feb0a +size 16309 diff --git a/.cursor/rules/roblox/assets/physics/character-controller/Explorer-RootPart-GroundSensor.png b/.cursor/rules/roblox/assets/physics/character-controller/Explorer-RootPart-GroundSensor.png new file mode 100644 index 00000000..507a4efc --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/character-controller/Explorer-RootPart-GroundSensor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:049d269ca875b5e293ca64f40d88f5dc850de792a09c6faeb3c3c37c6998d0ba +size 16495 diff --git a/.cursor/rules/roblox/assets/physics/character-controller/Linking-References.png b/.cursor/rules/roblox/assets/physics/character-controller/Linking-References.png new file mode 100644 index 00000000..06c9c708 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/character-controller/Linking-References.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e82e47777653c567e1ba1fb2acaaf8a7341c22ab97c0034b6d03f8394d477e2 +size 105404 diff --git a/.cursor/rules/roblox/assets/physics/character-controller/Properties-ClimbSensor.png b/.cursor/rules/roblox/assets/physics/character-controller/Properties-ClimbSensor.png new file mode 100644 index 00000000..d4d1eed1 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/character-controller/Properties-ClimbSensor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f132a315380b019b0fefb25e0b4a6159796c7d17c479eebaafcd3cd0e5968c76 +size 20269 diff --git a/.cursor/rules/roblox/assets/physics/character-controller/Properties-GroundController.png b/.cursor/rules/roblox/assets/physics/character-controller/Properties-GroundController.png new file mode 100644 index 00000000..4d6346ce --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/character-controller/Properties-GroundController.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44c1f2500f18ea9f1bf14c146d63f903bf9b3723c133c2674737c765f66a6690 +size 55821 diff --git a/.cursor/rules/roblox/assets/physics/character-controller/Properties-GroundSensor.png b/.cursor/rules/roblox/assets/physics/character-controller/Properties-GroundSensor.png new file mode 100644 index 00000000..1bdeb64f --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/character-controller/Properties-GroundSensor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4aab0bb0738105a86c682d3f6106c78a820694510c220647045f6b59ac50ae83 +size 20926 diff --git a/.cursor/rules/roblox/assets/physics/character-controller/Properties-Testing-ControllerManager.png b/.cursor/rules/roblox/assets/physics/character-controller/Properties-Testing-ControllerManager.png new file mode 100644 index 00000000..e9dd3604 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/character-controller/Properties-Testing-ControllerManager.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7ef1b043a0881408223c472d1a8efc0c8f82dd722d6389865bfe6b04604a4f1 +size 40860 diff --git a/.cursor/rules/roblox/assets/physics/character-controller/Properties-Testing-GroundController.png b/.cursor/rules/roblox/assets/physics/character-controller/Properties-Testing-GroundController.png new file mode 100644 index 00000000..c73077e3 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/character-controller/Properties-Testing-GroundController.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:540fbba6cf9a8c39066615b9c2e5bcdb3617c560f9da7202acdd670a3d0b6821 +size 42677 diff --git a/.cursor/rules/roblox/assets/physics/character-controller/Testing-Labeled.jpg b/.cursor/rules/roblox/assets/physics/character-controller/Testing-Labeled.jpg new file mode 100644 index 00000000..a19268b3 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/character-controller/Testing-Labeled.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:419a0c6f408a1a45fd7a4dce70ec056fe6d50b9dcf126c0211a3850c63f23b6e +size 161207 diff --git a/.cursor/rules/roblox/assets/physics/collisions/BasePart-CollisionGroup.png b/.cursor/rules/roblox/assets/physics/collisions/BasePart-CollisionGroup.png new file mode 100644 index 00000000..38f2580d --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/collisions/BasePart-CollisionGroup.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a148914eaffb9cc495e82503692129c710d6b629c11f5101d6ee9c56037a6de +size 10898 diff --git a/.cursor/rules/roblox/assets/physics/collisions/Collision-Fidelity-Box.jpg b/.cursor/rules/roblox/assets/physics/collisions/Collision-Fidelity-Box.jpg new file mode 100644 index 00000000..4887dd28 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/collisions/Collision-Fidelity-Box.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9573eb781dcc9dacd0988cac13566212584c3d43e7e9f480df585bff54c3459d +size 82627 diff --git a/.cursor/rules/roblox/assets/physics/collisions/Collision-Fidelity-Default.jpg b/.cursor/rules/roblox/assets/physics/collisions/Collision-Fidelity-Default.jpg new file mode 100644 index 00000000..4ea82a15 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/collisions/Collision-Fidelity-Default.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:638dd2b78ba42f47ac0882de570f5719a72665bd62dc8263d682628a0d49d20e +size 88757 diff --git a/.cursor/rules/roblox/assets/physics/collisions/Collision-Fidelity-Hull.jpg b/.cursor/rules/roblox/assets/physics/collisions/Collision-Fidelity-Hull.jpg new file mode 100644 index 00000000..0b0fb2dd --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/collisions/Collision-Fidelity-Hull.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2545b25e686ad9d606c328d5d3a48324d14768e0248e42d95c8c6f9125067824 +size 62400 diff --git a/.cursor/rules/roblox/assets/physics/collisions/Collision-Fidelity-MeshPart.jpg b/.cursor/rules/roblox/assets/physics/collisions/Collision-Fidelity-MeshPart.jpg new file mode 100644 index 00000000..f0b6386d --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/collisions/Collision-Fidelity-MeshPart.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:798ab8a1d1218a23aa3c4946887032d7c8a763147d041285be42a76822253778 +size 91007 diff --git a/.cursor/rules/roblox/assets/physics/collisions/Collision-Fidelity-Precise.jpg b/.cursor/rules/roblox/assets/physics/collisions/Collision-Fidelity-Precise.jpg new file mode 100644 index 00000000..7e41083b --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/collisions/Collision-Fidelity-Precise.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:662ac56ffd72bc4f51cdf8832b27a8645cb6c93de8abfce1d1be0cc37ddaa89a +size 117341 diff --git a/.cursor/rules/roblox/assets/physics/collisions/Collision-Groups.mp4 b/.cursor/rules/roblox/assets/physics/collisions/Collision-Groups.mp4 new file mode 100644 index 00000000..88f690b5 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/collisions/Collision-Groups.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b109d7961cce0c5e1546a6d0bb3823a19a2ee6fa86fcce0712e801b97afa762 +size 5744042 diff --git a/.cursor/rules/roblox/assets/physics/constraints/AlignOrientation-AlignType-AllAxes.mp4 b/.cursor/rules/roblox/assets/physics/constraints/AlignOrientation-AlignType-AllAxes.mp4 new file mode 100644 index 00000000..1ff11435 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/AlignOrientation-AlignType-AllAxes.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b18ede5dcd31e8940590903ea63d41eb9a488bf7dfd25c019a706c5856e5db6 +size 3107410 diff --git a/.cursor/rules/roblox/assets/physics/constraints/AlignOrientation-AlignType-PrimaryAxisParallel.mp4 b/.cursor/rules/roblox/assets/physics/constraints/AlignOrientation-AlignType-PrimaryAxisParallel.mp4 new file mode 100644 index 00000000..b3ba1b3e --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/AlignOrientation-AlignType-PrimaryAxisParallel.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:817a09c90efeb87129dd7ef5f244bf0af24cb60c9fa7d080f515e9906009fc6e +size 3164377 diff --git a/.cursor/rules/roblox/assets/physics/constraints/AlignOrientation-Demo.mp4 b/.cursor/rules/roblox/assets/physics/constraints/AlignOrientation-Demo.mp4 new file mode 100644 index 00000000..385530b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/AlignOrientation-Demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb424364a43fe2221737def0da9f369563a83721b6dd87a2514f5208246d0e5c +size 2207883 diff --git a/.cursor/rules/roblox/assets/physics/constraints/AlignOrientation-ReactionTorqueEnabled-False.mp4 b/.cursor/rules/roblox/assets/physics/constraints/AlignOrientation-ReactionTorqueEnabled-False.mp4 new file mode 100644 index 00000000..b04bb9db --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/AlignOrientation-ReactionTorqueEnabled-False.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab84f5f35233337f7197e4880b8f27248144dbe202c7dde0f3ea1cfbb7dbb21c +size 1787417 diff --git a/.cursor/rules/roblox/assets/physics/constraints/AlignOrientation-ReactionTorqueEnabled-True.mp4 b/.cursor/rules/roblox/assets/physics/constraints/AlignOrientation-ReactionTorqueEnabled-True.mp4 new file mode 100644 index 00000000..4b6e30df --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/AlignOrientation-ReactionTorqueEnabled-True.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce8d7cdaba541e2184176e4fec21313a8a81f58a0656c1785e2a2c15acfcbe7f +size 1808094 diff --git a/.cursor/rules/roblox/assets/physics/constraints/AlignPosition-ApplyAtCenterOfMass-False.mp4 b/.cursor/rules/roblox/assets/physics/constraints/AlignPosition-ApplyAtCenterOfMass-False.mp4 new file mode 100644 index 00000000..de349c5f --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/AlignPosition-ApplyAtCenterOfMass-False.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e03d8b657e4b522e87abd70286de2b8b55708425b34bcacc9d47646b9df5b187 +size 2576298 diff --git a/.cursor/rules/roblox/assets/physics/constraints/AlignPosition-ApplyAtCenterOfMass-True.mp4 b/.cursor/rules/roblox/assets/physics/constraints/AlignPosition-ApplyAtCenterOfMass-True.mp4 new file mode 100644 index 00000000..827489a1 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/AlignPosition-ApplyAtCenterOfMass-True.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ae52275fa02a9f488a570a9e67e4639e60087288d09ce93d49cd9e00550f12c +size 2375207 diff --git a/.cursor/rules/roblox/assets/physics/constraints/AlignPosition-Demo.mp4 b/.cursor/rules/roblox/assets/physics/constraints/AlignPosition-Demo.mp4 new file mode 100644 index 00000000..9dc0096f --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/AlignPosition-Demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:211fac7fb009995450a0a4b619face50489d13221349ab329b93d6220c4dc54e +size 2162434 diff --git a/.cursor/rules/roblox/assets/physics/constraints/AlignPosition-ReactionForceEnabled-False.mp4 b/.cursor/rules/roblox/assets/physics/constraints/AlignPosition-ReactionForceEnabled-False.mp4 new file mode 100644 index 00000000..9ac2d79e --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/AlignPosition-ReactionForceEnabled-False.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:825e29647b74e80d23d72932a2f487369b5545f2cd1fdd1e4f4a595c4e53666c +size 1986224 diff --git a/.cursor/rules/roblox/assets/physics/constraints/AlignPosition-ReactionForceEnabled-True.mp4 b/.cursor/rules/roblox/assets/physics/constraints/AlignPosition-ReactionForceEnabled-True.mp4 new file mode 100644 index 00000000..8c96a834 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/AlignPosition-ReactionForceEnabled-True.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:667504455207cf83b81bfd20fe3185b0bb819f27a74a73c2b10385820bf6a716 +size 2023964 diff --git a/.cursor/rules/roblox/assets/physics/constraints/AngularVelocity-Demo.mp4 b/.cursor/rules/roblox/assets/physics/constraints/AngularVelocity-Demo.mp4 new file mode 100644 index 00000000..ea83986f --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/AngularVelocity-Demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fd6c28be84b97f40ce3c3534a4cd0c49f9d0e96b3b2e1c5aabb6341226ceb1b +size 2400482 diff --git a/.cursor/rules/roblox/assets/physics/constraints/AngularVelocity-RelativeTo-Attachment1.mp4 b/.cursor/rules/roblox/assets/physics/constraints/AngularVelocity-RelativeTo-Attachment1.mp4 new file mode 100644 index 00000000..ccda1c3d --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/AngularVelocity-RelativeTo-Attachment1.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f76667f0ebb79b789ad202ace1d1613a8593cb679baff997f022df884b37a4e +size 4380563 diff --git a/.cursor/rules/roblox/assets/physics/constraints/AngularVelocity-RelativeTo-World.mp4 b/.cursor/rules/roblox/assets/physics/constraints/AngularVelocity-RelativeTo-World.mp4 new file mode 100644 index 00000000..cceac630 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/AngularVelocity-RelativeTo-World.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15ea7571f995205d3c3f0e6cc3c746259d49ef8bc3332bb2cd602638e6654ad3 +size 4721715 diff --git a/.cursor/rules/roblox/assets/physics/constraints/BallInSocket-Demo.mp4 b/.cursor/rules/roblox/assets/physics/constraints/BallInSocket-Demo.mp4 new file mode 100644 index 00000000..0397de89 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/BallInSocket-Demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3439a9b306fe3baba52e6271f657273a7faaaf7b32d98a6a8f369a78ddc13bb6 +size 2993628 diff --git a/.cursor/rules/roblox/assets/physics/constraints/BallInSocket-Limits-Tilt.mp4 b/.cursor/rules/roblox/assets/physics/constraints/BallInSocket-Limits-Tilt.mp4 new file mode 100644 index 00000000..3d5399e6 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/BallInSocket-Limits-Tilt.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d49c29ad0f6685e8f34591928ecf0681fb4664d5b483a6f74d3addcbd552c9d7 +size 2344763 diff --git a/.cursor/rules/roblox/assets/physics/constraints/BallInSocket-Limits-Twist.mp4 b/.cursor/rules/roblox/assets/physics/constraints/BallInSocket-Limits-Twist.mp4 new file mode 100644 index 00000000..3ef1d9af --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/BallInSocket-Limits-Twist.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b466865f8b9e39310fe413f721cef3df389f650a5aa404dca734c2a59e48deb3 +size 1384988 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Constraint-AlignPosition-Labeled.jpg b/.cursor/rules/roblox/assets/physics/constraints/Constraint-AlignPosition-Labeled.jpg new file mode 100644 index 00000000..602d7485 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Constraint-AlignPosition-Labeled.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93aa10473f970155b07c1047017093030bade20481f500c85fae1ad5b87a1ec3 +size 138701 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Constraint-AngularVelocity-Labeled.jpg b/.cursor/rules/roblox/assets/physics/constraints/Constraint-AngularVelocity-Labeled.jpg new file mode 100644 index 00000000..76d32743 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Constraint-AngularVelocity-Labeled.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73b7a2bb4a065d1532be01f43350bdbc5d26da8f078992b76399d4a1dfcefc3b +size 138499 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Creation-Diagram.jpg b/.cursor/rules/roblox/assets/physics/constraints/Creation-Diagram.jpg new file mode 100644 index 00000000..ab77bbdd --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Creation-Diagram.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c54ca3942815107a5af77868afca11f76298aea7a5bcf05fb7dd5a82ef3094f +size 167580 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Cylindrical-Demo.mp4 b/.cursor/rules/roblox/assets/physics/constraints/Cylindrical-Demo.mp4 new file mode 100644 index 00000000..b543bada --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Cylindrical-Demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37bb6cc440a58aabaa24ca5139e387d0d36cf86e3136533db1a8aab760ec8c6f +size 3012280 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Cylindrical-InclinationAngle-30.mp4 b/.cursor/rules/roblox/assets/physics/constraints/Cylindrical-InclinationAngle-30.mp4 new file mode 100644 index 00000000..33672556 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Cylindrical-InclinationAngle-30.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:684cbec658b4bfa4debf85b88ae404d24ddd65c91d9f28ea9bcbed773aedecfe +size 1174765 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Cylindrical-InclinationAngle-90.mp4 b/.cursor/rules/roblox/assets/physics/constraints/Cylindrical-InclinationAngle-90.mp4 new file mode 100644 index 00000000..f4e7c61c --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Cylindrical-InclinationAngle-90.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75d98697f83c8d56df9c5350c2e8a3f5bbbd2a0fb23a162c1070e7ca6394040b +size 1124009 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Cylindrical-Limits-Angular.mp4 b/.cursor/rules/roblox/assets/physics/constraints/Cylindrical-Limits-Angular.mp4 new file mode 100644 index 00000000..cdf792a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Cylindrical-Limits-Angular.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bb8154d347dcaa14949910eb52a3782dce49deb60b0006ceeeb28a5c808b781 +size 1808058 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Cylindrical-Limits-Linear.mp4 b/.cursor/rules/roblox/assets/physics/constraints/Cylindrical-Limits-Linear.mp4 new file mode 100644 index 00000000..a674e60a --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Cylindrical-Limits-Linear.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42bef04ad49c1d54852eba85644c357217ade6567f1148548768e5d05c9d35ee +size 1553130 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Hinge-ActuatorType-Motor.mp4 b/.cursor/rules/roblox/assets/physics/constraints/Hinge-ActuatorType-Motor.mp4 new file mode 100644 index 00000000..d61cce46 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Hinge-ActuatorType-Motor.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a333f36b5ff9ea1af045c84f411ebb7c20802cb92ab54e65895e9f6be0291a0 +size 1625941 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Hinge-ActuatorType-Servo.mp4 b/.cursor/rules/roblox/assets/physics/constraints/Hinge-ActuatorType-Servo.mp4 new file mode 100644 index 00000000..8653bed7 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Hinge-ActuatorType-Servo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0610b66a87a403a44768209283b1a5b48b627855746600ae0588584ee9ee1c77 +size 1199247 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Hinge-Demo.mp4 b/.cursor/rules/roblox/assets/physics/constraints/Hinge-Demo.mp4 new file mode 100644 index 00000000..d58a0db5 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Hinge-Demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c974095662d3c788adac1835b6e1d4a61f6b917a88561d4dbbd2815520478143 +size 1788514 diff --git a/.cursor/rules/roblox/assets/physics/constraints/LineForce-ApplyAtCenterOfMass-False.mp4 b/.cursor/rules/roblox/assets/physics/constraints/LineForce-ApplyAtCenterOfMass-False.mp4 new file mode 100644 index 00000000..35937444 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/LineForce-ApplyAtCenterOfMass-False.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9eac14de77c186b1f7563a324cebe692a254a248114228b4fe86f4effd7add5 +size 3513711 diff --git a/.cursor/rules/roblox/assets/physics/constraints/LineForce-ApplyAtCenterOfMass-True.mp4 b/.cursor/rules/roblox/assets/physics/constraints/LineForce-ApplyAtCenterOfMass-True.mp4 new file mode 100644 index 00000000..9658d564 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/LineForce-ApplyAtCenterOfMass-True.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2e737161b7dc061c350cc4f78b92689e64809f6467dd87d460998fe6bb9ad6a +size 3296113 diff --git a/.cursor/rules/roblox/assets/physics/constraints/LineForce-Demo.mp4 b/.cursor/rules/roblox/assets/physics/constraints/LineForce-Demo.mp4 new file mode 100644 index 00000000..e37098ef --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/LineForce-Demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2591442ef3b138b461de4f34c9c2648773aedd650e911d2857fa2c6877f5dec +size 2556526 diff --git a/.cursor/rules/roblox/assets/physics/constraints/LineForce-InverseSquareLaw-False.mp4 b/.cursor/rules/roblox/assets/physics/constraints/LineForce-InverseSquareLaw-False.mp4 new file mode 100644 index 00000000..8d898df9 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/LineForce-InverseSquareLaw-False.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:948c2c4e103c84fea2542f851ca0eb1acd41a920310d54262a628c2c890d0cd7 +size 3988955 diff --git a/.cursor/rules/roblox/assets/physics/constraints/LineForce-InverseSquareLaw-True.mp4 b/.cursor/rules/roblox/assets/physics/constraints/LineForce-InverseSquareLaw-True.mp4 new file mode 100644 index 00000000..fdef0bca --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/LineForce-InverseSquareLaw-True.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:730cc96ccbc7dc44a244e2594b861d7b41dec4e503fa44c2b27e0128714b177f +size 3232201 diff --git a/.cursor/rules/roblox/assets/physics/constraints/LineForce-ReactionForceEnabled-False.mp4 b/.cursor/rules/roblox/assets/physics/constraints/LineForce-ReactionForceEnabled-False.mp4 new file mode 100644 index 00000000..639d26be --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/LineForce-ReactionForceEnabled-False.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b083d47c5bad93fe0c7a2d6f9a4b4c475cb958990a546c78ad7d2ae97811455d +size 2068585 diff --git a/.cursor/rules/roblox/assets/physics/constraints/LineForce-ReactionForceEnabled-True.mp4 b/.cursor/rules/roblox/assets/physics/constraints/LineForce-ReactionForceEnabled-True.mp4 new file mode 100644 index 00000000..f2b6eaec --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/LineForce-ReactionForceEnabled-True.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12a1ea654e8ffa96f3a17abf7908a04df1bf277bb66be69b86317bcf95d89e6b +size 4755008 diff --git a/.cursor/rules/roblox/assets/physics/constraints/LinearVelocity-Demo.mp4 b/.cursor/rules/roblox/assets/physics/constraints/LinearVelocity-Demo.mp4 new file mode 100644 index 00000000..7e7bad73 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/LinearVelocity-Demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f45be7d35d5f08a04db2a185a936feecb48f56590bb502c39aaa3ca03b37e893 +size 2276163 diff --git a/.cursor/rules/roblox/assets/physics/constraints/LinearVelocity-Link-Attachment0-1.png b/.cursor/rules/roblox/assets/physics/constraints/LinearVelocity-Link-Attachment0-1.png new file mode 100644 index 00000000..646d5dbc --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/LinearVelocity-Link-Attachment0-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47e7214ec0272a0c3643c7228c2c698d96caa78eeb8306f766407cb6ff6f5556 +size 32194 diff --git a/.cursor/rules/roblox/assets/physics/constraints/LinearVelocity-Link-Attachment0-2.png b/.cursor/rules/roblox/assets/physics/constraints/LinearVelocity-Link-Attachment0-2.png new file mode 100644 index 00000000..168ecb9e --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/LinearVelocity-Link-Attachment0-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80fe1fac7b99a57e8fd14f2d8ee78fc0ed17560a9019dd5a9342e387f29bc6ba +size 27910 diff --git a/.cursor/rules/roblox/assets/physics/constraints/LinearVelocity-RelativeTo-Attachment0.mp4 b/.cursor/rules/roblox/assets/physics/constraints/LinearVelocity-RelativeTo-Attachment0.mp4 new file mode 100644 index 00000000..2344acdb --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/LinearVelocity-RelativeTo-Attachment0.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:742a99f57d979bb4d1c2dcee5e549467f1729fb262804285aac5fc3d02451dd8 +size 1382356 diff --git a/.cursor/rules/roblox/assets/physics/constraints/LinearVelocity-RelativeTo-World.mp4 b/.cursor/rules/roblox/assets/physics/constraints/LinearVelocity-RelativeTo-World.mp4 new file mode 100644 index 00000000..3f2497a7 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/LinearVelocity-RelativeTo-World.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdb7b5f36dc189cf81d504e7361983744b780037422ba503494c97563b6131b3 +size 910007 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Plane-Attachment0-1.jpg b/.cursor/rules/roblox/assets/physics/constraints/Plane-Attachment0-1.jpg new file mode 100644 index 00000000..7431f87f --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Plane-Attachment0-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18d980c16a2a1221e2e4ef228d6562a742adf564ccdf01124e59c1ccc0797a16 +size 143455 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Plane-Attachment0-2.jpg b/.cursor/rules/roblox/assets/physics/constraints/Plane-Attachment0-2.jpg new file mode 100644 index 00000000..95ef5d28 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Plane-Attachment0-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:192017c587301ffe84f822a083b84fd5076310422ed53363f6cafc5d098c2301 +size 163299 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Plane-Demo.mp4 b/.cursor/rules/roblox/assets/physics/constraints/Plane-Demo.mp4 new file mode 100644 index 00000000..4bcaa2fc --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Plane-Demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3eaf88f0d7af102106aef8bb855485b16eb9ad8adb8d8edc60ecc124cd8e2a36 +size 5130835 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Prismatic-ActuatorType-Motor.mp4 b/.cursor/rules/roblox/assets/physics/constraints/Prismatic-ActuatorType-Motor.mp4 new file mode 100644 index 00000000..3ca5578b --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Prismatic-ActuatorType-Motor.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d50d3b4778458876148177d9a2a049e7b727d5a79e99bec443f6d8f81467f30 +size 1304421 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Prismatic-ActuatorType-Servo.mp4 b/.cursor/rules/roblox/assets/physics/constraints/Prismatic-ActuatorType-Servo.mp4 new file mode 100644 index 00000000..cd169e90 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Prismatic-ActuatorType-Servo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a23412dc599b41b0190be7d301aeac2282ac41ec43d6c0663edef80e26c1826e +size 1189077 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Prismatic-Demo.mp4 b/.cursor/rules/roblox/assets/physics/constraints/Prismatic-Demo.mp4 new file mode 100644 index 00000000..78bc7be8 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Prismatic-Demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bae9028599d0e1882877a93406af667a4a5dbd4bebef428161fba50f60089c3 +size 2575010 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Rod-Demo.mp4 b/.cursor/rules/roblox/assets/physics/constraints/Rod-Demo.mp4 new file mode 100644 index 00000000..9d4bf654 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Rod-Demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0a00abef76f76699e1a2e728b77659ea0fe4f3ff6f1a794d184813f2f892416 +size 2360374 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Rope-Demo.mp4 b/.cursor/rules/roblox/assets/physics/constraints/Rope-Demo.mp4 new file mode 100644 index 00000000..b354df75 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Rope-Demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aba6a83e126d63c4ddedad8cfd035f348482cc8d4213782208132b73b553beb7 +size 2658253 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Spring-Demo.mp4 b/.cursor/rules/roblox/assets/physics/constraints/Spring-Demo.mp4 new file mode 100644 index 00000000..af9504a3 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Spring-Demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:243c4be203e5529a47c86124b51472b34aadea356ce2520cdbec76d141a237cf +size 2496040 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Spring-Stiffness-25.mp4 b/.cursor/rules/roblox/assets/physics/constraints/Spring-Stiffness-25.mp4 new file mode 100644 index 00000000..936e219f --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Spring-Stiffness-25.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45ced019d742b8da9066b181fd82f75193905cdf604f462505167834df09adc5 +size 1415545 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Spring-Stiffness-500.mp4 b/.cursor/rules/roblox/assets/physics/constraints/Spring-Stiffness-500.mp4 new file mode 100644 index 00000000..13942c5e --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Spring-Stiffness-500.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0780fada9aaf6231ea7f80076076329c06eb0abb0b758acc48b68a571d519b39 +size 1804859 diff --git a/.cursor/rules/roblox/assets/physics/constraints/SpringConstraint-Link-Attachment0-1.png b/.cursor/rules/roblox/assets/physics/constraints/SpringConstraint-Link-Attachment0-1.png new file mode 100644 index 00000000..adb411f9 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/SpringConstraint-Link-Attachment0-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20893ef2061b7d3557d83e4befac78e294cc195210c77f528855a80fc551c44b +size 32375 diff --git a/.cursor/rules/roblox/assets/physics/constraints/SpringConstraint-Link-Attachment0-2.png b/.cursor/rules/roblox/assets/physics/constraints/SpringConstraint-Link-Attachment0-2.png new file mode 100644 index 00000000..71f78817 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/SpringConstraint-Link-Attachment0-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71b95db08fb839e730b53e4fc7d2aac06843181b5e3aa26f9fdfde7ec0d1a6c7 +size 34769 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Torque-Demo.mp4 b/.cursor/rules/roblox/assets/physics/constraints/Torque-Demo.mp4 new file mode 100644 index 00000000..16a664c9 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Torque-Demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a021c9919218981a08257e55d0e257679176df871326e9c30a66d80d6a1f764 +size 2278213 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Torque-RelativeTo-Attachment0.mp4 b/.cursor/rules/roblox/assets/physics/constraints/Torque-RelativeTo-Attachment0.mp4 new file mode 100644 index 00000000..26813bd3 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Torque-RelativeTo-Attachment0.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7a087a645fe7b08f15cabefe254ec2f470559e23637592ced6ad270e86eadc5 +size 7752685 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Torque-RelativeTo-World.mp4 b/.cursor/rules/roblox/assets/physics/constraints/Torque-RelativeTo-World.mp4 new file mode 100644 index 00000000..bf4197e7 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Torque-RelativeTo-World.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:913bd1d2c72c662e365f39e710b608b4aed6db9d0fdee20944b051fad38c6ed1 +size 7251701 diff --git a/.cursor/rules/roblox/assets/physics/constraints/TorsionSpring-Damping-0.mp4 b/.cursor/rules/roblox/assets/physics/constraints/TorsionSpring-Damping-0.mp4 new file mode 100644 index 00000000..9481d7e6 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/TorsionSpring-Damping-0.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca46d96facfa138ca6cfbe933f9bda52d6c7f51c4abbf9b92de7105122c749b9 +size 1699882 diff --git a/.cursor/rules/roblox/assets/physics/constraints/TorsionSpring-Damping-50.mp4 b/.cursor/rules/roblox/assets/physics/constraints/TorsionSpring-Damping-50.mp4 new file mode 100644 index 00000000..b1afb4be --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/TorsionSpring-Damping-50.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8b2d5da680b9aade93898a7f29bc38712294b473bd47072c9d9dc6ad55d6666 +size 904687 diff --git a/.cursor/rules/roblox/assets/physics/constraints/TorsionSpring-Demo.mp4 b/.cursor/rules/roblox/assets/physics/constraints/TorsionSpring-Demo.mp4 new file mode 100644 index 00000000..5ce6ae84 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/TorsionSpring-Demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da24437669c157c21309fe3020ead53ba09f28880b785a2afbdc1f873686d46c +size 2269335 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Universal-Attachments-Correct.jpg b/.cursor/rules/roblox/assets/physics/constraints/Universal-Attachments-Correct.jpg new file mode 100644 index 00000000..5c3ffb2a --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Universal-Attachments-Correct.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa7ed07c6ca680bfdb6d7704a95bbc12588040ea4f9014c87048bf0d889f8a5b +size 84357 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Universal-Attachments-Incorrect.jpg b/.cursor/rules/roblox/assets/physics/constraints/Universal-Attachments-Incorrect.jpg new file mode 100644 index 00000000..c78a5f63 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Universal-Attachments-Incorrect.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb38fff65b321cb4f4a8b1173974b20953436515b561fc0cac75415253777913 +size 79489 diff --git a/.cursor/rules/roblox/assets/physics/constraints/Universal-Demo.mp4 b/.cursor/rules/roblox/assets/physics/constraints/Universal-Demo.mp4 new file mode 100644 index 00000000..e89d5660 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/Universal-Demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b73fbfad4bdaab2c6ab7240a1f2c3e5fee3cfb420ddae93d80d1d8d9a9c77a23 +size 3524616 diff --git a/.cursor/rules/roblox/assets/physics/constraints/VectorForce-ApplyAtCenterOfMass-False.mp4 b/.cursor/rules/roblox/assets/physics/constraints/VectorForce-ApplyAtCenterOfMass-False.mp4 new file mode 100644 index 00000000..b445e4cd --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/VectorForce-ApplyAtCenterOfMass-False.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f85776d3ebd8f72a6185d41fd041c4b6da988856ea3cdf022698325dabb09e52 +size 2982322 diff --git a/.cursor/rules/roblox/assets/physics/constraints/VectorForce-ApplyAtCenterOfMass-True.mp4 b/.cursor/rules/roblox/assets/physics/constraints/VectorForce-ApplyAtCenterOfMass-True.mp4 new file mode 100644 index 00000000..14a8cfac --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/VectorForce-ApplyAtCenterOfMass-True.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:178963813cdeed619076af92db5ff4ade8b8189d46eeb74f6496a712be22bb44 +size 2498941 diff --git a/.cursor/rules/roblox/assets/physics/constraints/VectorForce-Demo.mp4 b/.cursor/rules/roblox/assets/physics/constraints/VectorForce-Demo.mp4 new file mode 100644 index 00000000..b69c7dc0 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/VectorForce-Demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de5d71722c2e9924621d36d697190205c033d3cec1feea4690be9fba5b49e773 +size 1357586 diff --git a/.cursor/rules/roblox/assets/physics/constraints/VectorForce-RelativeTo-Attachment0.mp4 b/.cursor/rules/roblox/assets/physics/constraints/VectorForce-RelativeTo-Attachment0.mp4 new file mode 100644 index 00000000..de55a2ff --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/VectorForce-RelativeTo-Attachment0.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a221617fb53a7c892b7d7b88a6a6452388af879b098733f15f1eb97d488a858 +size 3580640 diff --git a/.cursor/rules/roblox/assets/physics/constraints/VectorForce-RelativeTo-World.mp4 b/.cursor/rules/roblox/assets/physics/constraints/VectorForce-RelativeTo-World.mp4 new file mode 100644 index 00000000..b0dca33a --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/constraints/VectorForce-RelativeTo-World.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa31a143dba41705fe24b706ca64420358671295194d03892f97e1fb3c363fb9 +size 3253229 diff --git a/.cursor/rules/roblox/assets/physics/network-ownership/Visualization-Demo.mp4 b/.cursor/rules/roblox/assets/physics/network-ownership/Visualization-Demo.mp4 new file mode 100644 index 00000000..0711f298 --- /dev/null +++ b/.cursor/rules/roblox/assets/physics/network-ownership/Visualization-Demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7a7ce085253861c5ab818ed8274d0d8599cfe4fae0e4d61431ad32a88468aab +size 5010189 diff --git a/.cursor/rules/roblox/assets/players/in-experience-text-chat/Advanced-Bubble.png b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Advanced-Bubble.png new file mode 100644 index 00000000..05e41cb6 --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Advanced-Bubble.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a036d05dfa5717252985742577acdec9278f310806cb57156ca837204bc2c4df +size 10514 diff --git a/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-NPC.jpg b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-NPC.jpg new file mode 100644 index 00000000..c92e89f3 --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-NPC.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97a0ee9901d73ebc5890b7e7cea17c1be01e648dc9838cdcc62c468d12fef17c +size 285009 diff --git a/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-Rich-Text.png b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-Rich-Text.png new file mode 100644 index 00000000..5e74fd13 --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-Rich-Text.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57a899321bbe61f7e81efa814bd380154d6a5e8780e4c99776b9cf0bef76e67e +size 187275 diff --git a/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-System.jpg b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-System.jpg new file mode 100644 index 00000000..e14b9f57 --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-System.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa6e1299c4b1381e859cf78ff41acefde78cba62742f510c2a936db1e755624e +size 262960 diff --git a/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-Tag-VIP.png b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-Tag-VIP.png new file mode 100644 index 00000000..d02d48e8 --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-Tag-VIP.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9cdf514224b6f0ee22385041acee91810b814092e79b001aa207f0102e3cbdc5 +size 187139 diff --git a/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-User-Name-Colored.png b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-User-Name-Colored.png new file mode 100644 index 00000000..5f989cb9 --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-User-Name-Colored.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c1d57aaa7efa102d6b27f0b4043c15f4723a75612d63d2ab05a3d1daa8bc368 +size 184356 diff --git a/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-User-Name-Gradient.png b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-User-Name-Gradient.png new file mode 100644 index 00000000..44fd42bb --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-User-Name-Gradient.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f24fd111a63ee454a3dea9b90a9a21a57f0393f26e490b0717a7cc813bb1f26 +size 187308 diff --git a/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-Window-Components.jpg b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-Window-Components.jpg new file mode 100644 index 00000000..c4603ea1 --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-Window-Components.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27f64f466f61cc700b23ca8e72f3dde5d9da448452ff4431830f3746370d3f02 +size 306853 diff --git a/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-Workflow.png b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-Workflow.png new file mode 100644 index 00000000..2ccd57a4 --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Chat-Workflow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d8710636ab31c6d37af1dc02a8820d70ba7affb7a06150f2d025ccd9b3ca0f3 +size 478200 diff --git a/.cursor/rules/roblox/assets/players/in-experience-text-chat/Low-Health-Bubble.mp4 b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Low-Health-Bubble.mp4 new file mode 100644 index 00000000..ea87d722 --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Low-Health-Bubble.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8bea09b665fc353d947203caa4445b6eea2b8d84140c7f457a25c6a6bc8b3ff +size 846273 diff --git a/.cursor/rules/roblox/assets/players/in-experience-text-chat/Player-Conversation-Bubbles.mp4 b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Player-Conversation-Bubbles.mp4 new file mode 100644 index 00000000..82dee5aa --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Player-Conversation-Bubbles.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30030794163cbab339b2a812797c7981d2d08ec57cd93ec4e0a2cd64be78c8b9 +size 7581166 diff --git a/.cursor/rules/roblox/assets/players/in-experience-text-chat/Text-Custom-Command.mp4 b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Text-Custom-Command.mp4 new file mode 100644 index 00000000..fb9527b6 --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-text-chat/Text-Custom-Command.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6faa303624dd33286ab611dfd66e2f70b2f434e425738a4541fe0b6fca1ae0a9 +size 7853155 diff --git a/.cursor/rules/roblox/assets/players/in-experience-text-chat/TextChat-Group-Tag.png b/.cursor/rules/roblox/assets/players/in-experience-text-chat/TextChat-Group-Tag.png new file mode 100644 index 00000000..d69c1b64 --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-text-chat/TextChat-Group-Tag.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de5cf441ab540a4b0404c524e6990bcb745bbf008a90e15d3e292c20fb857719 +size 80687 diff --git a/.cursor/rules/roblox/assets/players/in-experience-text-chat/TextChatCommand-Aliases.png b/.cursor/rules/roblox/assets/players/in-experience-text-chat/TextChatCommand-Aliases.png new file mode 100644 index 00000000..f8f02d20 --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-text-chat/TextChatCommand-Aliases.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9cc6d8f1bb2ebb900204d433c0585296b663a6ed623a212fda324d481ce2f84 +size 52271 diff --git a/.cursor/rules/roblox/assets/players/in-experience-text-chat/TextChatService-BubbleChatConfiguration-Enabled.png b/.cursor/rules/roblox/assets/players/in-experience-text-chat/TextChatService-BubbleChatConfiguration-Enabled.png new file mode 100644 index 00000000..c26eda87 --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-text-chat/TextChatService-BubbleChatConfiguration-Enabled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e548efaeadc48b8e8c63d3ef6ea4ef52f8fa3210d4c068cc658cc430647e8d41 +size 53906 diff --git a/.cursor/rules/roblox/assets/players/in-experience-text-chat/TextChatService-BubbleChatConfiguration.png b/.cursor/rules/roblox/assets/players/in-experience-text-chat/TextChatService-BubbleChatConfiguration.png new file mode 100644 index 00000000..40360a80 --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-text-chat/TextChatService-BubbleChatConfiguration.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a66225e5860ea6427058aa56d2f3f4121c8dbce849a832ab5e444898de3404ee +size 41260 diff --git a/.cursor/rules/roblox/assets/players/in-experience-text-chat/TextChatService-Callbacks.png b/.cursor/rules/roblox/assets/players/in-experience-text-chat/TextChatService-Callbacks.png new file mode 100644 index 00000000..83d7b953 --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-text-chat/TextChatService-Callbacks.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a05e039ca36fbf279ab2976a5aac945ed9e9dd3e5244849b8ba460db00690ef +size 121062 diff --git a/.cursor/rules/roblox/assets/players/in-experience-text-chat/TextChatService-Configuration-Objects.png b/.cursor/rules/roblox/assets/players/in-experience-text-chat/TextChatService-Configuration-Objects.png new file mode 100644 index 00000000..d4cadeed --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-text-chat/TextChatService-Configuration-Objects.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b103928a9fe7845896c48acb98f33f114d23cea8da7ab151c2d90308ca2da90d +size 223174 diff --git a/.cursor/rules/roblox/assets/players/in-experience-text-chat/VIP-Bubble.mp4 b/.cursor/rules/roblox/assets/players/in-experience-text-chat/VIP-Bubble.mp4 new file mode 100644 index 00000000..cf95c8f1 --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-text-chat/VIP-Bubble.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:975a52e04793a73d53f9ff2c1e658567a318d4ad3871985281b82bf565128fb0 +size 1100854 diff --git a/.cursor/rules/roblox/assets/players/in-experience-tools/Tool-Grip-Correct.jpg b/.cursor/rules/roblox/assets/players/in-experience-tools/Tool-Grip-Correct.jpg new file mode 100644 index 00000000..27b0fe12 --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-tools/Tool-Grip-Correct.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c65c368503eb58c827fcf333cb22cc5c874d55e77f75b444bf5394651d1f5053 +size 139426 diff --git a/.cursor/rules/roblox/assets/players/in-experience-tools/Tool-Grip-Incorrect.jpg b/.cursor/rules/roblox/assets/players/in-experience-tools/Tool-Grip-Incorrect.jpg new file mode 100644 index 00000000..57bb71c9 --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-tools/Tool-Grip-Incorrect.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40a54096140c6cb62fb4aa00796ed6fe06b1b99bf724359675d6e4bfa9341a01 +size 139610 diff --git a/.cursor/rules/roblox/assets/players/in-experience-tools/Tool-Handle-Example.jpg b/.cursor/rules/roblox/assets/players/in-experience-tools/Tool-Handle-Example.jpg new file mode 100644 index 00000000..4bd9c3be --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-tools/Tool-Handle-Example.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d92ab0e630ec95defdf1a71c2b942cb004fd7e4f4900e73bb2e175ded13b283c +size 173633 diff --git a/.cursor/rules/roblox/assets/players/in-experience-tools/Tool-Inventory-Non-Physical.jpg b/.cursor/rules/roblox/assets/players/in-experience-tools/Tool-Inventory-Non-Physical.jpg new file mode 100644 index 00000000..0d500c9e --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-tools/Tool-Inventory-Non-Physical.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a0efb29229fbedda375ad4d6474b52a0eb5d6377311c45dc3e59a02c6d135da +size 354891 diff --git a/.cursor/rules/roblox/assets/players/in-experience-tools/Tool-Inventory.jpg b/.cursor/rules/roblox/assets/players/in-experience-tools/Tool-Inventory.jpg new file mode 100644 index 00000000..5b89fff3 --- /dev/null +++ b/.cursor/rules/roblox/assets/players/in-experience-tools/Tool-Inventory.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df659ed27854a4e4e09f09e354653da4836a932585b10d096e5de23ddde90a47 +size 252369 diff --git a/.cursor/rules/roblox/assets/players/leaderboard/Leaderboard-On-Screen.jpg b/.cursor/rules/roblox/assets/players/leaderboard/Leaderboard-On-Screen.jpg new file mode 100644 index 00000000..c1ac2220 --- /dev/null +++ b/.cursor/rules/roblox/assets/players/leaderboard/Leaderboard-On-Screen.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81f8b0976bd97e29a06fb2aa252fab87121650609e2c0303dbfdfac710f4cab5 +size 371816 diff --git a/.cursor/rules/roblox/assets/players/leaderboard/Leaderboard-Stat-Name.png b/.cursor/rules/roblox/assets/players/leaderboard/Leaderboard-Stat-Name.png new file mode 100644 index 00000000..fa416229 --- /dev/null +++ b/.cursor/rules/roblox/assets/players/leaderboard/Leaderboard-Stat-Name.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a70326cc89ddc9741d8d3a67853caeedd75e3ce7e4eae20f79e152f02e556d7c +size 128214 diff --git a/.cursor/rules/roblox/assets/players/leaderboard/Leaderboards-Insert-Script.png b/.cursor/rules/roblox/assets/players/leaderboard/Leaderboards-Insert-Script.png new file mode 100644 index 00000000..0f7190dc --- /dev/null +++ b/.cursor/rules/roblox/assets/players/leaderboard/Leaderboards-Insert-Script.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:abc0d2bd7d27c36a77d70b9952ca5b2dd2552d9cd2eb376d99d83ce438b18a78 +size 18965 diff --git a/.cursor/rules/roblox/assets/players/leaderboard/Leaderboards-Multiple-Players.png b/.cursor/rules/roblox/assets/players/leaderboard/Leaderboards-Multiple-Players.png new file mode 100644 index 00000000..63bf1673 --- /dev/null +++ b/.cursor/rules/roblox/assets/players/leaderboard/Leaderboards-Multiple-Players.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cdbed209fd993ff7f531872f9bb7b15a4e2681f625c81a9350c5131ee0a5355 +size 119479 diff --git a/.cursor/rules/roblox/assets/players/voice-chat/In-Experience-Example.jpg b/.cursor/rules/roblox/assets/players/voice-chat/In-Experience-Example.jpg new file mode 100644 index 00000000..9a7aa205 --- /dev/null +++ b/.cursor/rules/roblox/assets/players/voice-chat/In-Experience-Example.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52eaea4b1dc237cd998f184c6095743fade75e570866d9b18300c1734056a653 +size 256729 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Ad-Credits.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Ad-Credits.png new file mode 100644 index 00000000..dbf5a57e --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Ad-Credits.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ebd7ee49e4665f2c2f96d99f875441b1c6c577144874215b2d436e7c8a9eac3b +size 75202 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Ad-Placement.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Ad-Placement.png new file mode 100644 index 00000000..38eb2dbf --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Ad-Placement.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7a41b8eb63160cbaf9d911f5ff3b88d0067b723c8bec0108df9d1d51a8e311d +size 118324 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Ad-Set-Bidding.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Ad-Set-Bidding.png new file mode 100644 index 00000000..e83ee480 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Ad-Set-Bidding.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:211702fe1121946800c8ec8c99a64f4e4fd1bb4ec32111c9d40648fccc048dba +size 123327 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Ad-Set-Gender-Ages-Devices.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Ad-Set-Gender-Ages-Devices.png new file mode 100644 index 00000000..0e8bf4aa --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Ad-Set-Gender-Ages-Devices.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73b93365570614c50a5a5d2867a0f75abdd8ed56a9d1396d9c24fe7908014b4e +size 53895 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Ad-Set-Locations.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Ad-Set-Locations.png new file mode 100644 index 00000000..cf03dd6f --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Ad-Set-Locations.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9b16ef0f5695970ba7d0d8e9b6e925e95a9d2b196ddfc2386dc380a1008d081 +size 11632 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Ad-Set-Name-Next.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Ad-Set-Name-Next.png new file mode 100644 index 00000000..91da1c8b --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Ad-Set-Name-Next.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48045947004717229f682f0620c2a71069357400ec18dea4cdd745a7dfb1c69b +size 23136 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Ad-Upload-Widget.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Ad-Upload-Widget.png new file mode 100644 index 00000000..d32f2644 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Ad-Upload-Widget.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d165f41c1b7e2bdd5746e50ce4e759a179f046998e50b4c2838a2ad048f2e798 +size 16162 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Brand-Suitability.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Brand-Suitability.png new file mode 100644 index 00000000..70283317 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Brand-Suitability.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95a4ab3cfa7b501906771e0ea85b627dc7e7fd46d3fb1f331bf10708e644377c +size 222754 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Campaign-Budget-Schedule.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Campaign-Budget-Schedule.png new file mode 100644 index 00000000..1b487b65 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Campaign-Budget-Schedule.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6227ef4f9b607fbe80265eb1c122c2cc25bbb0602dc5ec7bfc57be2031bf8732 +size 17744 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Campaign-Create.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Campaign-Create.png new file mode 100644 index 00000000..d1fc21b3 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Campaign-Create.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a6fd91bd1dd1fcc416f1913f065cc9e4b34a0d464c44eaf579ba94efba3b243 +size 54259 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Campaign-Name-Next.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Campaign-Name-Next.png new file mode 100644 index 00000000..b48d9cce --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Campaign-Name-Next.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14215c1814af0fbc285a4dd44ac220a243eec5b4e4a7882bb8941a8708abc004 +size 21410 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Campaign-Objective.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Campaign-Objective.png new file mode 100644 index 00000000..11248cd8 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Campaign-Objective.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25fb53b0859de58781cec8678247f4bfb3d85d129103b80926b9d0f2928da1e8 +size 85745 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Campaign-Set-End-Date.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Campaign-Set-End-Date.png new file mode 100644 index 00000000..1855789f --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Campaign-Set-End-Date.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f5920463070be5d9110a247e34a1813dcd8b84e911cab9b2e3477ba0e901425 +size 12246 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Create-Ad-Account.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Create-Ad-Account.png new file mode 100644 index 00000000..34e34d7d --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Create-Ad-Account.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cab70b3f63c66285e4b69f24a894aa7ca0ebb90239e22ab17ac0d89221e8e7f7 +size 21663 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/EnableRewardedVideoAdsToggle.png b/.cursor/rules/roblox/assets/promotion/ads-manager/EnableRewardedVideoAdsToggle.png new file mode 100644 index 00000000..f41b8b1d --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/EnableRewardedVideoAdsToggle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e66bad5ec8963646686da6ab431fa56fc5cb0d0b3d4a13c4955bb66ae1b39b6b +size 182217 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Image-Ad-Preview.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Image-Ad-Preview.png new file mode 100644 index 00000000..901d5d85 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Image-Ad-Preview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4b75f549f4e0a9f214c2159977f89e69587f52313da985d31120fb16b5ab0e1 +size 3760663 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Live-Preview-Experience.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Live-Preview-Experience.png new file mode 100644 index 00000000..517de232 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Live-Preview-Experience.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24940f12be72fb23ce76c9fedb91644535320824a0ba637def45a6f6251e13b2 +size 8865227 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Menu-Payment-Settings.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Menu-Payment-Settings.png new file mode 100644 index 00000000..2897f6f4 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Menu-Payment-Settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1de35658471aac603a7f8042a190daff4a497216d46f1b422d1be69958a4ec3 +size 22229 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Payment-Activity-1.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Payment-Activity-1.png new file mode 100644 index 00000000..f90bffad --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Payment-Activity-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a89184f7e4b95564b0ada1ac3ffb58fe9fc1bb260b5f89021b32978e9d2ac00 +size 91679 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Portal Ad Preview.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Portal Ad Preview.png new file mode 100644 index 00000000..ac268109 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Portal Ad Preview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15944fd29f276da9e69d9ae8c8c2debe7bedfa800c06d9062c83968f17ed2743 +size 3065502 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Portal-Ad-Destination-Experience.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Portal-Ad-Destination-Experience.png new file mode 100644 index 00000000..918ba9b6 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Portal-Ad-Destination-Experience.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9a03727056c4e663d1574da4183867d9ea514fbf60331954c8b0a7fafadd099 +size 5303 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Reports-Ad-Sets.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Reports-Ad-Sets.png new file mode 100644 index 00000000..c180966c --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Reports-Ad-Sets.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d38e631ece4a635e6ac270ea33e018c917faefcc09b2108b681be3b93df5efad +size 39716 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Reports-Ads.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Reports-Ads.png new file mode 100644 index 00000000..2b143981 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Reports-Ads.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0dda6c9f82d3fc13c6d6dc6592c3f6a344ff4358cf9c452f5ed027f73ac32fd4 +size 37552 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Reports-Campaigns.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Reports-Campaigns.png new file mode 100644 index 00000000..02d3bd1b --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Reports-Campaigns.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:217450d70f11f3e4fc6840644cd96906c85a300ccca1b8b2f7f996a8b8b9d316 +size 39497 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Review-Campaign-Ad-Set.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Review-Campaign-Ad-Set.png new file mode 100644 index 00000000..488c8fed --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Review-Campaign-Ad-Set.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9b32bca4b44430fcdb23719edf1fe66b975da23171722e807fa6c0bed6f9952 +size 47457 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Review-Campaign-Ad.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Review-Campaign-Ad.png new file mode 100644 index 00000000..22378598 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Review-Campaign-Ad.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e3c6cd4a81bf4206c2c1028ad595b0f80a4ed5f1a9f271c83f0720a0ae3f701 +size 233314 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Review-Campaign.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Review-Campaign.png new file mode 100644 index 00000000..69e3be54 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Review-Campaign.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5d75aad16aa6a649f26074c2098a21e13f06166a054360814f443c173813ce5 +size 30540 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/Sponsored-Experience.png b/.cursor/rules/roblox/assets/promotion/ads-manager/Sponsored-Experience.png new file mode 100644 index 00000000..05f125a2 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/Sponsored-Experience.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d020e561c517111c682b9459100de9ce484e1f55d302d36a32c1eae5e3a42e27 +size 1666755 diff --git a/.cursor/rules/roblox/assets/promotion/ads-manager/campaign-payment-method.png b/.cursor/rules/roblox/assets/promotion/ads-manager/campaign-payment-method.png new file mode 100644 index 00000000..15dd5db5 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/ads-manager/campaign-payment-method.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb2ace0737d665396e9eec5bb2657660418fba27d84493011259254b58a81a8e +size 17532 diff --git a/.cursor/rules/roblox/assets/promotion/experience-events/Dedicated-Event-Page-Copy-URL.png b/.cursor/rules/roblox/assets/promotion/experience-events/Dedicated-Event-Page-Copy-URL.png new file mode 100644 index 00000000..dc2ee663 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/experience-events/Dedicated-Event-Page-Copy-URL.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:091cd9fb923e863b15a616ee78e13b212b905fe07b2fd9987c18cf2789f24179 +size 119069 diff --git a/.cursor/rules/roblox/assets/promotion/experience-events/Dedicated-Event-Page-Live.jpg b/.cursor/rules/roblox/assets/promotion/experience-events/Dedicated-Event-Page-Live.jpg new file mode 100644 index 00000000..523e743d --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/experience-events/Dedicated-Event-Page-Live.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:92cd6552fe928a3058f2bf81ee4fd49105e9d661c3d99040c113e7b173411bcd +size 349645 diff --git a/.cursor/rules/roblox/assets/promotion/experience-events/Experience-Page-Promotion.png b/.cursor/rules/roblox/assets/promotion/experience-events/Experience-Page-Promotion.png new file mode 100644 index 00000000..42f405bc --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/experience-events/Experience-Page-Promotion.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b54ece5b5eb282d8266b388ff382215f70d3fa8e468b8c7184d24dbc52aff435 +size 184573 diff --git a/.cursor/rules/roblox/assets/promotion/experience-events/Group-Page-About-Tab.jpg b/.cursor/rules/roblox/assets/promotion/experience-events/Group-Page-About-Tab.jpg new file mode 100644 index 00000000..65208dac --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/experience-events/Group-Page-About-Tab.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4706801e1aac3178e2a80f6b1d5f72651df9d3fe6f9012da3921b8177ce8e17 +size 307856 diff --git a/.cursor/rules/roblox/assets/promotion/experience-events/Group-Page-Events-Tab.jpg b/.cursor/rules/roblox/assets/promotion/experience-events/Group-Page-Events-Tab.jpg new file mode 100644 index 00000000..b856dd13 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/experience-events/Group-Page-Events-Tab.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41e5484b5e0a7025484e40b40df7ed74ad0bd56de4696033551957b2dcd50e71 +size 255644 diff --git a/.cursor/rules/roblox/assets/promotion/experience-events/Group-Page-Feature-Event.jpg b/.cursor/rules/roblox/assets/promotion/experience-events/Group-Page-Feature-Event.jpg new file mode 100644 index 00000000..7c22bd88 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/experience-events/Group-Page-Feature-Event.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a70ef1bbad3d48dd8c000ebc4a8c59111118c24ce0686ea9acf5e6f25fd0cb4 +size 216167 diff --git a/.cursor/rules/roblox/assets/promotion/experience-events/Notification-Lock-Screen.jpg b/.cursor/rules/roblox/assets/promotion/experience-events/Notification-Lock-Screen.jpg new file mode 100644 index 00000000..9e5f00f2 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/experience-events/Notification-Lock-Screen.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:256bd3ae1e696176b4f67247158233b8c1993ac74896b5a345ccdf7fb3fc4f20 +size 210230 diff --git a/.cursor/rules/roblox/assets/promotion/experience-events/Notification-Roblox-App.png b/.cursor/rules/roblox/assets/promotion/experience-events/Notification-Roblox-App.png new file mode 100644 index 00000000..97e3f425 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/experience-events/Notification-Roblox-App.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fe36cb1243448643d82418f438ddb2e765a557529db12e1bfa3c3d494069988 +size 40876 diff --git a/.cursor/rules/roblox/assets/promotion/experience-events/Notification-Update.png b/.cursor/rules/roblox/assets/promotion/experience-events/Notification-Update.png new file mode 100644 index 00000000..b7390aa1 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/experience-events/Notification-Update.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6d4d1d1a393c89d8a3e1f42d4068a249243f58f2de46978f426b37bf817932b +size 69379 diff --git a/.cursor/rules/roblox/assets/promotion/experience-events/off-platform-featuring.png b/.cursor/rules/roblox/assets/promotion/experience-events/off-platform-featuring.png new file mode 100644 index 00000000..082b22d9 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/experience-events/off-platform-featuring.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c96ac425d0af811776d6878412cd9e36a6ea76b5b5597bbc1ab6ed0daa102b17 +size 1040646 diff --git a/.cursor/rules/roblox/assets/promotion/experience-events/submit-for-featuring.png b/.cursor/rules/roblox/assets/promotion/experience-events/submit-for-featuring.png new file mode 100644 index 00000000..f5f19384 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/experience-events/submit-for-featuring.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6745a6970321c1f29b7f4baaf60589f17a4de6ac8243b581464caefcfabe25a +size 91480 diff --git a/.cursor/rules/roblox/assets/promotion/invite-prompts/Invite-App-Notification-Stream.png b/.cursor/rules/roblox/assets/promotion/invite-prompts/Invite-App-Notification-Stream.png new file mode 100644 index 00000000..6b54c21f --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/invite-prompts/Invite-App-Notification-Stream.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:227b9381bfffa7a21efc9442ad6330684900673d6ed8c8c12b7d156c1b5b9b50 +size 40035 diff --git a/.cursor/rules/roblox/assets/promotion/invite-prompts/Invite-From-Experience.png b/.cursor/rules/roblox/assets/promotion/invite-prompts/Invite-From-Experience.png new file mode 100644 index 00000000..9a23e763 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/invite-prompts/Invite-From-Experience.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:517f85fe1919f2a4dce4e41ab7a69c215ef3bce253efd6a2c8c1b82494d76df4 +size 103714 diff --git a/.cursor/rules/roblox/assets/promotion/invite-prompts/Invite-Phone-Lock-Screen.png b/.cursor/rules/roblox/assets/promotion/invite-prompts/Invite-Phone-Lock-Screen.png new file mode 100644 index 00000000..85869c32 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/invite-prompts/Invite-Phone-Lock-Screen.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:efbd9a19f1fa5840ebf82b6d39430251574b213d0a849d60e7feee0a15fc38b4 +size 105778 diff --git a/.cursor/rules/roblox/assets/promotion/misc/BadContent.jpg b/.cursor/rules/roblox/assets/promotion/misc/BadContent.jpg new file mode 100644 index 00000000..86be5a32 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/misc/BadContent.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:faf582c70eb8d7c505cabf429ded9413256eab6c36f3f0d48e8550855161c1dc +size 453778 diff --git a/.cursor/rules/roblox/assets/promotion/misc/BadDisclosure.jpg b/.cursor/rules/roblox/assets/promotion/misc/BadDisclosure.jpg new file mode 100644 index 00000000..4641328f --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/misc/BadDisclosure.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f767e39a292ec83e6e8266b870e073136a7de18769dd74cef53ecd46b26be99 +size 449927 diff --git a/.cursor/rules/roblox/assets/promotion/misc/Banner-Ad-Example.png b/.cursor/rules/roblox/assets/promotion/misc/Banner-Ad-Example.png new file mode 100644 index 00000000..0dbe9341 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/misc/Banner-Ad-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bfbbddc3afe1180d0d186340ce2fa13593f8cb3e155ba691536f9a72e3eaa37b +size 451318 diff --git a/.cursor/rules/roblox/assets/promotion/misc/Experience-Guidelines-Example.png b/.cursor/rules/roblox/assets/promotion/misc/Experience-Guidelines-Example.png new file mode 100644 index 00000000..f3f2c200 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/misc/Experience-Guidelines-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97ae32e339572f605a25e99b6090580fc64f5c51097ce558f959ec8dc0d0b67e +size 541691 diff --git a/.cursor/rules/roblox/assets/promotion/misc/Experience-Mobile-Enable-Notifications.png b/.cursor/rules/roblox/assets/promotion/misc/Experience-Mobile-Enable-Notifications.png new file mode 100644 index 00000000..780f2684 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/misc/Experience-Mobile-Enable-Notifications.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dee2703b06f033faeb3ba384d9b44fa03f7234e95391415b09518317d0c8ca12 +size 220970 diff --git a/.cursor/rules/roblox/assets/promotion/misc/Experience-Mobile-Share.png b/.cursor/rules/roblox/assets/promotion/misc/Experience-Mobile-Share.png new file mode 100644 index 00000000..afc0d522 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/misc/Experience-Mobile-Share.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:423fbb9c3709be5d1cc4920fb6b9a3da8f9689d6bf1e729104bce561aa917b97 +size 172689 diff --git a/.cursor/rules/roblox/assets/promotion/misc/Experience-Page-Enable-Notifications.png b/.cursor/rules/roblox/assets/promotion/misc/Experience-Page-Enable-Notifications.png new file mode 100644 index 00000000..c5a168ce --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/misc/Experience-Page-Enable-Notifications.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5dc890eec0e021820658920305c8c545ca9ad092ccb5dcaa09ac6bbda5657fc3 +size 142592 diff --git a/.cursor/rules/roblox/assets/promotion/misc/Experiences-Sorted-View.png b/.cursor/rules/roblox/assets/promotion/misc/Experiences-Sorted-View.png new file mode 100644 index 00000000..99041407 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/misc/Experiences-Sorted-View.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c9e015694c685ea69272b329015c62021d2274bebeae766f2315053922850db +size 182361 diff --git a/.cursor/rules/roblox/assets/promotion/misc/GoodContent.jpg b/.cursor/rules/roblox/assets/promotion/misc/GoodContent.jpg new file mode 100644 index 00000000..9c274f59 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/misc/GoodContent.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5aba190fe76be11219372e71756965d35d507c621c9e8dae32c9e3783791acd +size 451191 diff --git a/.cursor/rules/roblox/assets/promotion/misc/GoodDisclosure.jpg b/.cursor/rules/roblox/assets/promotion/misc/GoodDisclosure.jpg new file mode 100644 index 00000000..d32cddcc --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/misc/GoodDisclosure.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f3a6c790718a49ea48c437220f7e28a601d76ef232fa513fa9ff48d777a0757 +size 453561 diff --git a/.cursor/rules/roblox/assets/promotion/misc/In-Experience-Enable-Notifications.png b/.cursor/rules/roblox/assets/promotion/misc/In-Experience-Enable-Notifications.png new file mode 100644 index 00000000..1646fff3 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/misc/In-Experience-Enable-Notifications.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7d128949c6fc157aaaa422286e88b02493de85536352c0b7f4fc46b0650ca35 +size 329720 diff --git a/.cursor/rules/roblox/assets/promotion/misc/Model-Tab-Material-Manager.png b/.cursor/rules/roblox/assets/promotion/misc/Model-Tab-Material-Manager.png new file mode 100644 index 00000000..bf93fb14 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/misc/Model-Tab-Material-Manager.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe1f65da7fc8a41340827fc17d8f6f54db78c2849bf37f494348d26cbb9e9381 +size 25248 diff --git a/.cursor/rules/roblox/assets/promotion/misc/ModerateFear-Blocky.png b/.cursor/rules/roblox/assets/promotion/misc/ModerateFear-Blocky.png new file mode 100644 index 00000000..8cc72757 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/misc/ModerateFear-Blocky.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74e74ffc6fff41569a11f79454cb356895986d91d99dd8f10daa66eb2549c7e6 +size 1644403 diff --git a/.cursor/rules/roblox/assets/promotion/misc/ModerateFear-BloodyEyes.png b/.cursor/rules/roblox/assets/promotion/misc/ModerateFear-BloodyEyes.png new file mode 100644 index 00000000..6d66fa75 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/misc/ModerateFear-BloodyEyes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c7078c07b1cb618b0a04d9cfbed6adf8792072667676f40a00c9843a410abf9 +size 1072182 diff --git a/.cursor/rules/roblox/assets/promotion/misc/ModerateFear-NoFlesh.png b/.cursor/rules/roblox/assets/promotion/misc/ModerateFear-NoFlesh.png new file mode 100644 index 00000000..09e87447 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/misc/ModerateFear-NoFlesh.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25f1d3ac439fd608a14db1db5829d160b91044f66061cbe10579a0075beb78cf +size 849471 diff --git a/.cursor/rules/roblox/assets/promotion/misc/Social-Links-Example.png b/.cursor/rules/roblox/assets/promotion/misc/Social-Links-Example.png new file mode 100644 index 00000000..4a63bc15 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/misc/Social-Links-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6976c1789dc5e25313c8c04703314fc5ddd65ea1d86b11fe89cc25312139bb55 +size 225283 diff --git a/.cursor/rules/roblox/assets/promotion/misc/Sponsored-Items.png b/.cursor/rules/roblox/assets/promotion/misc/Sponsored-Items.png new file mode 100644 index 00000000..9cb0fe1d --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/misc/Sponsored-Items.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d76dd512cb47dfe1de6c64d0dadf47e5a348768e80c345107cf3e7f5f3723ae +size 186216 diff --git a/.cursor/rules/roblox/assets/promotion/misc/Updates-Listing.png b/.cursor/rules/roblox/assets/promotion/misc/Updates-Listing.png new file mode 100644 index 00000000..c8730e03 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/misc/Updates-Listing.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc2189a2215402ce49e25904adc2c43acce5aeb04bc1dda61131391c265fb8e6 +size 35173 diff --git a/.cursor/rules/roblox/assets/promotion/misc/User-Ad-Templates.png b/.cursor/rules/roblox/assets/promotion/misc/User-Ad-Templates.png new file mode 100644 index 00000000..85668038 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/misc/User-Ad-Templates.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff0a4f677549003735b03a16e4593a716d3151dd3f87342440731311a8a86f54 +size 33024 diff --git a/.cursor/rules/roblox/assets/promotion/misc/User-Safety-O13.jpg b/.cursor/rules/roblox/assets/promotion/misc/User-Safety-O13.jpg new file mode 100644 index 00000000..c1d147d7 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/misc/User-Safety-O13.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8cf44d580eb2bd7497fd537d1bbb8478bf79050d57d584eb15727039b93271e9 +size 387394 diff --git a/.cursor/rules/roblox/assets/promotion/misc/User-Safety-U13.jpg b/.cursor/rules/roblox/assets/promotion/misc/User-Safety-U13.jpg new file mode 100644 index 00000000..1dd7299b --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/misc/User-Safety-U13.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c3c7a804085ff9cd40e171276a64ff5a2acab1bc3baf082a7d6d4d22a3c93bb +size 369654 diff --git a/.cursor/rules/roblox/assets/promotion/referral-system/Invite-Flow-Referral-System.mp4 b/.cursor/rules/roblox/assets/promotion/referral-system/Invite-Flow-Referral-System.mp4 new file mode 100644 index 00000000..36e586d2 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/referral-system/Invite-Flow-Referral-System.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee6ab9ab04b6d799010cdfd7cefbcb04c0a45c09078a72175452ae03b574e873 +size 2674030 diff --git a/.cursor/rules/roblox/assets/promotion/referral-system/Invite-Flow.gif b/.cursor/rules/roblox/assets/promotion/referral-system/Invite-Flow.gif new file mode 100644 index 00000000..f05445dc --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/referral-system/Invite-Flow.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7729e88fbad81ddc16ee81e557b39a24f6b3bead988d34dcf58c1ffc20ccff14 +size 23523837 diff --git a/.cursor/rules/roblox/assets/promotion/referral-system/Invite-Friends.png b/.cursor/rules/roblox/assets/promotion/referral-system/Invite-Friends.png new file mode 100644 index 00000000..872dcb87 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/referral-system/Invite-Friends.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12bd76996600c73d5ad12b40c506a3eec8e3bc0d68245f00da4ef6fc67d7099b +size 1118838 diff --git a/.cursor/rules/roblox/assets/promotion/referral-system/Invitee-Flow-Referral-System.mp4 b/.cursor/rules/roblox/assets/promotion/referral-system/Invitee-Flow-Referral-System.mp4 new file mode 100644 index 00000000..a72932f6 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/referral-system/Invitee-Flow-Referral-System.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9b4a262a6c992942280f348f433cb6f0435ea887cfda4478daaf5c627a04ec5 +size 1369957 diff --git a/.cursor/rules/roblox/assets/promotion/referral-system/Reward-Details.gif b/.cursor/rules/roblox/assets/promotion/referral-system/Reward-Details.gif new file mode 100644 index 00000000..b3981f9c --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/referral-system/Reward-Details.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e22604376d46741b18fefbe89dc28f09a18f4ddc08b8b721a11aefda0eb2d3e +size 10292527 diff --git a/.cursor/rules/roblox/assets/promotion/referral-system/Reward-Details.mp4 b/.cursor/rules/roblox/assets/promotion/referral-system/Reward-Details.mp4 new file mode 100644 index 00000000..b357378a --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/referral-system/Reward-Details.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef45cfd37c402603ae77ace5a32cf07b9a23f9b091e9e903d23ded848791940a +size 1212742 diff --git a/.cursor/rules/roblox/assets/promotion/search-ads/Ad-Set-Search.png b/.cursor/rules/roblox/assets/promotion/search-ads/Ad-Set-Search.png new file mode 100644 index 00000000..5c728ec2 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/search-ads/Ad-Set-Search.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a62c89ba30445498f9a5644fe7664bc2b101746f5093d78dbca3714eea57835a +size 216279 diff --git a/.cursor/rules/roblox/assets/promotion/search-ads/Edit-Ad-Creative.png b/.cursor/rules/roblox/assets/promotion/search-ads/Edit-Ad-Creative.png new file mode 100644 index 00000000..7fdd7b34 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/search-ads/Edit-Ad-Creative.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb47650890bde395498973eefaf6e7a00702881cb161c92d69c5c54e4f1ef411 +size 53448 diff --git a/.cursor/rules/roblox/assets/promotion/search-ads/Edit-Ad-Name.png b/.cursor/rules/roblox/assets/promotion/search-ads/Edit-Ad-Name.png new file mode 100644 index 00000000..f59f54f2 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/search-ads/Edit-Ad-Name.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4b755395879863ee29604f38aa0a6f016848cf9007817b6178045c2f866e5ba +size 356735 diff --git a/.cursor/rules/roblox/assets/promotion/search-ads/Keyword-Bidding.png b/.cursor/rules/roblox/assets/promotion/search-ads/Keyword-Bidding.png new file mode 100644 index 00000000..c380619f --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/search-ads/Keyword-Bidding.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c1641f1857730a895c513d2e958458b96ea50d366a035a20d954bb828a7556d +size 68207 diff --git a/.cursor/rules/roblox/assets/promotion/search-ads/Search-Example-1.png b/.cursor/rules/roblox/assets/promotion/search-ads/Search-Example-1.png new file mode 100644 index 00000000..13fad06c --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/search-ads/Search-Example-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f02479018fb0f58c1af1f7b6156fd0718498afce10e1b29b1d26ffe3e6681ee +size 482213 diff --git a/.cursor/rules/roblox/assets/promotion/search-ads/Search-Example-2.png b/.cursor/rules/roblox/assets/promotion/search-ads/Search-Example-2.png new file mode 100644 index 00000000..08158002 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/search-ads/Search-Example-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a029bd87657de5865979f17b39fdfc72918c75459c5380f0879c6c8369d50a14 +size 963485 diff --git a/.cursor/rules/roblox/assets/promotion/search-ads/Search-Example-3.png b/.cursor/rules/roblox/assets/promotion/search-ads/Search-Example-3.png new file mode 100644 index 00000000..67d737e2 --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/search-ads/Search-Example-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de29bcec3a4e3d2820167cb2c2c2cbd1c2671ff300fff6544c90af2a044838bb +size 803365 diff --git a/.cursor/rules/roblox/assets/promotion/search-ads/Select-Keywords.png b/.cursor/rules/roblox/assets/promotion/search-ads/Select-Keywords.png new file mode 100644 index 00000000..39283bfb --- /dev/null +++ b/.cursor/rules/roblox/assets/promotion/search-ads/Select-Keywords.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18f1ad5d185fb3b1df87f0f4953c331299d9b11873d4de443c36539624f80855 +size 41183 diff --git a/.cursor/rules/roblox/assets/publishing/accessibility/Audio-Volume.mp4 b/.cursor/rules/roblox/assets/publishing/accessibility/Audio-Volume.mp4 new file mode 100644 index 00000000..6f1fc9f0 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/accessibility/Audio-Volume.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53e49a4c767ea76b214eeb8901b64a91ddbf22b4a08d28bb6a06e960a674d57f +size 11261523 diff --git a/.cursor/rules/roblox/assets/publishing/accessibility/Color-Contrast-High.png b/.cursor/rules/roblox/assets/publishing/accessibility/Color-Contrast-High.png new file mode 100644 index 00000000..06887d8c --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/accessibility/Color-Contrast-High.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6520164dd99d6da07ba660fe58be96171bf225cecae026baf3cc39e34275442f +size 188814 diff --git a/.cursor/rules/roblox/assets/publishing/accessibility/Color-Contrast-Low.png b/.cursor/rules/roblox/assets/publishing/accessibility/Color-Contrast-Low.png new file mode 100644 index 00000000..5a4af14e --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/accessibility/Color-Contrast-Low.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f95601ba710de11f2b125c17facbb41eda0d6a9e8fad589a45fe95f68ed1ef2 +size 187089 diff --git a/.cursor/rules/roblox/assets/publishing/accessibility/Color-Grayscale.jpg b/.cursor/rules/roblox/assets/publishing/accessibility/Color-Grayscale.jpg new file mode 100644 index 00000000..28db4073 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/accessibility/Color-Grayscale.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fc989a4d5d83d194b13a84aac5460cd24b850675c71239ea047a9e5b6f94f60 +size 64146 diff --git a/.cursor/rules/roblox/assets/publishing/accessibility/Color-Normal.jpg b/.cursor/rules/roblox/assets/publishing/accessibility/Color-Normal.jpg new file mode 100644 index 00000000..0419ab3c --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/accessibility/Color-Normal.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00f4a34a1c168203249cc56601918c9a651cb8d5948ec3425844061a782e4cfc +size 80583 diff --git a/.cursor/rules/roblox/assets/publishing/accessibility/Color-Symbols-Grayscale.jpg b/.cursor/rules/roblox/assets/publishing/accessibility/Color-Symbols-Grayscale.jpg new file mode 100644 index 00000000..b02eefb2 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/accessibility/Color-Symbols-Grayscale.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f97fa27c50a17cd2ce456881f0f24846033c3a2f3e76d4219e9546d526d3680 +size 80056 diff --git a/.cursor/rules/roblox/assets/publishing/accessibility/Color-Symbols-Normal.jpg b/.cursor/rules/roblox/assets/publishing/accessibility/Color-Symbols-Normal.jpg new file mode 100644 index 00000000..6c46e83e --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/accessibility/Color-Symbols-Normal.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e308794b814e728a480accc5fedbba39c15950d86d36fa48ffc606c7e5c1b6b5 +size 112365 diff --git a/.cursor/rules/roblox/assets/publishing/accessibility/Preferred-Transparency-Default.png b/.cursor/rules/roblox/assets/publishing/accessibility/Preferred-Transparency-Default.png new file mode 100644 index 00000000..2240d82c --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/accessibility/Preferred-Transparency-Default.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35eeb67e16b5c482e9e2250377985df0a5eff5f3c89b05f298e9a804495dce2d +size 121598 diff --git a/.cursor/rules/roblox/assets/publishing/accessibility/Preferred-Transparency-Full.png b/.cursor/rules/roblox/assets/publishing/accessibility/Preferred-Transparency-Full.png new file mode 100644 index 00000000..f4cb0d74 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/accessibility/Preferred-Transparency-Full.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35ca181e53b99201b6f4c35360e4cdc9c6735576feba5683655ec49b911066f5 +size 105026 diff --git a/.cursor/rules/roblox/assets/publishing/accessibility/Preferred-Transparency-Half.png b/.cursor/rules/roblox/assets/publishing/accessibility/Preferred-Transparency-Half.png new file mode 100644 index 00000000..88c07b0f --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/accessibility/Preferred-Transparency-Half.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6aef630da3e9a3e0d09175a65e5653dcd4115178db94ba2dee9c259af708ddcd +size 114835 diff --git a/.cursor/rules/roblox/assets/publishing/accessibility/Preferred-Transparency-Labels.png b/.cursor/rules/roblox/assets/publishing/accessibility/Preferred-Transparency-Labels.png new file mode 100644 index 00000000..0dc94426 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/accessibility/Preferred-Transparency-Labels.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:507ea96ce985f64eb9ce2593a476c4be3b94436a3b33755c0e4dc7988eef0626 +size 144036 diff --git a/.cursor/rules/roblox/assets/publishing/accessibility/Sound-Reliance.mp4 b/.cursor/rules/roblox/assets/publishing/accessibility/Sound-Reliance.mp4 new file mode 100644 index 00000000..6f19fc7f --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/accessibility/Sound-Reliance.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9ea32dae55bb1a17b184ac48dfd814cfb1a0d77b6c51b84d134ebdeb6d5845d +size 4784559 diff --git a/.cursor/rules/roblox/assets/publishing/accessibility/Text-Size-LG-Blur.jpg b/.cursor/rules/roblox/assets/publishing/accessibility/Text-Size-LG-Blur.jpg new file mode 100644 index 00000000..7eea4e94 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/accessibility/Text-Size-LG-Blur.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd1a7714b6c7f95a680836fd2b6a1547413cd227433462aefcc42234b5c0fc6e +size 176805 diff --git a/.cursor/rules/roblox/assets/publishing/accessibility/Text-Size-LG.jpg b/.cursor/rules/roblox/assets/publishing/accessibility/Text-Size-LG.jpg new file mode 100644 index 00000000..1bb9f085 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/accessibility/Text-Size-LG.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e0f0398e55cd539993796dab439f6ee5593dd2e71345fd68cca35de9e34a073 +size 261194 diff --git a/.cursor/rules/roblox/assets/publishing/accessibility/Text-Size-SM-Blur.jpg b/.cursor/rules/roblox/assets/publishing/accessibility/Text-Size-SM-Blur.jpg new file mode 100644 index 00000000..7e0c350e --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/accessibility/Text-Size-SM-Blur.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cb05f85f8e7e34a77866c2f2bacc3722f0a20b0b158f55c7f9d04a93f8f9364 +size 115953 diff --git a/.cursor/rules/roblox/assets/publishing/accessibility/Text-Size-SM.jpg b/.cursor/rules/roblox/assets/publishing/accessibility/Text-Size-SM.jpg new file mode 100644 index 00000000..f4fe1c25 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/accessibility/Text-Size-SM.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:775c022bcdaae02b9de77e8b55acadb635e71cbca6ca5723cfc9b5a6d249ff89 +size 264661 diff --git a/.cursor/rules/roblox/assets/publishing/account-verification/Account-Settings.png b/.cursor/rules/roblox/assets/publishing/account-verification/Account-Settings.png new file mode 100644 index 00000000..ba898898 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/account-verification/Account-Settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee4f1bba237c09ac867335e65321fb1591905bb9c28621413670c144fd1927b9 +size 38522 diff --git a/.cursor/rules/roblox/assets/publishing/account-verification/Add-Phone.png b/.cursor/rules/roblox/assets/publishing/account-verification/Add-Phone.png new file mode 100644 index 00000000..bd08584d --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/account-verification/Add-Phone.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0d5c7a2b7936bd590e7dca07c51849a7b640e34b8987907c8d405a7a382a1ab +size 37042 diff --git a/.cursor/rules/roblox/assets/publishing/account-verification/Phone-Verified.png b/.cursor/rules/roblox/assets/publishing/account-verification/Phone-Verified.png new file mode 100644 index 00000000..d2b49260 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/account-verification/Phone-Verified.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e95bde8f7641eeb1e7f3e15232f69476af9836a0a2326491a65f40d9be5572e8 +size 33510 diff --git a/.cursor/rules/roblox/assets/publishing/account-verification/Verify-Birthday.png b/.cursor/rules/roblox/assets/publishing/account-verification/Verify-Birthday.png new file mode 100644 index 00000000..55a8a618 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/account-verification/Verify-Birthday.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9e218e6463fa8f517c823b76caf00c6f59302086463ab4ff628cd7a92779eb8 +size 64937 diff --git a/.cursor/rules/roblox/assets/publishing/account-verification/Verify-My-Age.png b/.cursor/rules/roblox/assets/publishing/account-verification/Verify-My-Age.png new file mode 100644 index 00000000..f29883c7 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/account-verification/Verify-My-Age.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d284adefbdbd5077106e90b81c194f2328daf59ab9642993c5f46c6fd4eda086 +size 25500 diff --git a/.cursor/rules/roblox/assets/publishing/account-verification/Verify-Phone-Dialog.png b/.cursor/rules/roblox/assets/publishing/account-verification/Verify-Phone-Dialog.png new file mode 100644 index 00000000..3c2d400e --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/account-verification/Verify-Phone-Dialog.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c403215e0e3f8cc07afd68f4f3c1d2fc90c6a4b4ba23114785b71d05911e2dd +size 45650 diff --git a/.cursor/rules/roblox/assets/publishing/account-verification/Verify-With-ID.png b/.cursor/rules/roblox/assets/publishing/account-verification/Verify-With-ID.png new file mode 100644 index 00000000..e3acef83 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/account-verification/Verify-With-ID.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ceaae4f9972b075ea0931416bdf621ce0c3d9ff1c2f7fc22a2504594cbc90061 +size 149189 diff --git a/.cursor/rules/roblox/assets/publishing/badges/Badge-Experience-Page.png b/.cursor/rules/roblox/assets/publishing/badges/Badge-Experience-Page.png new file mode 100644 index 00000000..121b6d7b --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/badges/Badge-Experience-Page.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8d70dda5ce21c9c890fe39fcc9999c82db1a091a7f9c546150ecd4c48986563 +size 115554 diff --git a/.cursor/rules/roblox/assets/publishing/badges/Badges-Inventory.png b/.cursor/rules/roblox/assets/publishing/badges/Badges-Inventory.png new file mode 100644 index 00000000..f8a48c73 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/badges/Badges-Inventory.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f997076345a93d0eb7ef1128f7f53b8f8c8b480de66b1b2a6f15333d55b70b5 +size 350363 diff --git a/.cursor/rules/roblox/assets/publishing/badges/Circular-Trimming-Bad.png b/.cursor/rules/roblox/assets/publishing/badges/Circular-Trimming-Bad.png new file mode 100644 index 00000000..025c4a8d --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/badges/Circular-Trimming-Bad.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:725fc5f26ce748abdb375f6c78651e6c79d67a1bfdc4e97a092d7b013b7e4bea +size 102688 diff --git a/.cursor/rules/roblox/assets/publishing/badges/Circular-Trimming-Good.png b/.cursor/rules/roblox/assets/publishing/badges/Circular-Trimming-Good.png new file mode 100644 index 00000000..52de74cf --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/badges/Circular-Trimming-Good.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41aee2612c0a8aa4d9b262d9f640861b2a88bc74ebde3409f521b2443311f1d0 +size 97495 diff --git a/.cursor/rules/roblox/assets/publishing/badges/Reorder-Button.png b/.cursor/rules/roblox/assets/publishing/badges/Reorder-Button.png new file mode 100644 index 00000000..853af7be --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/badges/Reorder-Button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a779f86ea158d4d6604420759ce951c158189b3b839f6a3bdea80b9be95bb185 +size 7561 diff --git a/.cursor/rules/roblox/assets/publishing/badges/Reordering.png b/.cursor/rules/roblox/assets/publishing/badges/Reordering.png new file mode 100644 index 00000000..a38205f1 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/badges/Reordering.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fef7297f465d2a55e907fd9aaaf0375e66de744b3b36da64a039da70ce98de93 +size 109176 diff --git a/.cursor/rules/roblox/assets/publishing/console/10ft-Experience.png b/.cursor/rules/roblox/assets/publishing/console/10ft-Experience.png new file mode 100644 index 00000000..d47c75a4 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/console/10ft-Experience.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65edb22524fcbaaecd2cf09a0b9d995467bb8a0d4b9188287eaa62d39ef89791 +size 73345 diff --git a/.cursor/rules/roblox/assets/publishing/console/Haptic-Feedback.png b/.cursor/rules/roblox/assets/publishing/console/Haptic-Feedback.png new file mode 100644 index 00000000..93f3d7c8 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/console/Haptic-Feedback.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a883a141380f90ce08dda98a4925b88d2b650f078a7eed32b3ef54f7ba204adb +size 188607 diff --git a/.cursor/rules/roblox/assets/publishing/console/Progressive-Disclosure.png b/.cursor/rules/roblox/assets/publishing/console/Progressive-Disclosure.png new file mode 100644 index 00000000..dd2fec02 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/console/Progressive-Disclosure.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:10ee2aab70eb048af1adc427ed3e782d8572cd56e782b5575e2524ae90241165 +size 132714 diff --git a/.cursor/rules/roblox/assets/publishing/console/TV-Safe-Area.png b/.cursor/rules/roblox/assets/publishing/console/TV-Safe-Area.png new file mode 100644 index 00000000..887c60ef --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/console/TV-Safe-Area.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48546ac09b71eb16847e2e7717340b02c5ea948bcb203afd6dfdc41daedca505 +size 24913 diff --git a/.cursor/rules/roblox/assets/publishing/console/UI-Navigation.png b/.cursor/rules/roblox/assets/publishing/console/UI-Navigation.png new file mode 100644 index 00000000..1b6cad30 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/console/UI-Navigation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84bd25638ece8f828fc537f13b15ea8a4c53efd5c5b1c4dffd4b61ae7602e311 +size 91742 diff --git a/.cursor/rules/roblox/assets/publishing/cross-platform/ButtonA-PS.png b/.cursor/rules/roblox/assets/publishing/cross-platform/ButtonA-PS.png new file mode 100644 index 00000000..885f65bf --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/cross-platform/ButtonA-PS.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db682dab96c7adc7d78a9ff711587fbe80ef27fc17f808ccc35b21592353dcea +size 3281 diff --git a/.cursor/rules/roblox/assets/publishing/cross-platform/ButtonA-Xbox.png b/.cursor/rules/roblox/assets/publishing/cross-platform/ButtonA-Xbox.png new file mode 100644 index 00000000..123c3e42 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/cross-platform/ButtonA-Xbox.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f26b70d81486a80d2f95ad6208a4178b80e4382a177fffc0fce450314e54778e +size 3345 diff --git a/.cursor/rules/roblox/assets/publishing/cross-platform/ButtonX-PS.png b/.cursor/rules/roblox/assets/publishing/cross-platform/ButtonX-PS.png new file mode 100644 index 00000000..17510498 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/cross-platform/ButtonX-PS.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:191dbf53a683a4041f6e0276579d0d4979a10be034a0d2d8c2c848ce245f0138 +size 2646 diff --git a/.cursor/rules/roblox/assets/publishing/cross-platform/ButtonX-Xbox.png b/.cursor/rules/roblox/assets/publishing/cross-platform/ButtonX-Xbox.png new file mode 100644 index 00000000..ae4bd1a2 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/cross-platform/ButtonX-Xbox.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7dfc069fe10cf7bba08bb730bbb0854cb8eea751bf10d08159afa43317b65707 +size 3401 diff --git a/.cursor/rules/roblox/assets/publishing/cross-platform/Dynamic-Sizing-Large.jpg b/.cursor/rules/roblox/assets/publishing/cross-platform/Dynamic-Sizing-Large.jpg new file mode 100644 index 00000000..10b03b8b --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/cross-platform/Dynamic-Sizing-Large.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:270e32bdba3c84ad5e7c8281d66958c77e07312b09503bab498b6610d906dcaf +size 299433 diff --git a/.cursor/rules/roblox/assets/publishing/cross-platform/Dynamic-Sizing-Medium.jpg b/.cursor/rules/roblox/assets/publishing/cross-platform/Dynamic-Sizing-Medium.jpg new file mode 100644 index 00000000..5f5769e6 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/cross-platform/Dynamic-Sizing-Medium.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e91c5c5aec12452461eea42e311677b0e81cc4630ba6ddf9c2401f120d9b609c +size 273963 diff --git a/.cursor/rules/roblox/assets/publishing/cross-platform/Dynamic-Sizing-Small.jpg b/.cursor/rules/roblox/assets/publishing/cross-platform/Dynamic-Sizing-Small.jpg new file mode 100644 index 00000000..3801f1b2 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/cross-platform/Dynamic-Sizing-Small.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:946610eb4642855259fcdad2dd4776720546f290efb892fffe2935418036e85c +size 228433 diff --git a/.cursor/rules/roblox/assets/publishing/cross-platform/Input-Actions-Jump.png b/.cursor/rules/roblox/assets/publishing/cross-platform/Input-Actions-Jump.png new file mode 100644 index 00000000..ea5eb8c1 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/cross-platform/Input-Actions-Jump.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c8ad721c45ea9ac8ed6030e4447ee28a99ba285364ad1e8efc8c00eb60a2318 +size 449380 diff --git a/.cursor/rules/roblox/assets/publishing/cross-platform/Inventory-Selection-Gamepad.jpg b/.cursor/rules/roblox/assets/publishing/cross-platform/Inventory-Selection-Gamepad.jpg new file mode 100644 index 00000000..8b44e936 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/cross-platform/Inventory-Selection-Gamepad.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8be711c75a50ae538c3d52376bbfad389095276253d2e85236d708f775f1e886 +size 335583 diff --git a/.cursor/rules/roblox/assets/publishing/cross-platform/Inventory-Selection-Keyboard.jpg b/.cursor/rules/roblox/assets/publishing/cross-platform/Inventory-Selection-Keyboard.jpg new file mode 100644 index 00000000..35f61164 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/cross-platform/Inventory-Selection-Keyboard.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3946048263be8549bab717bc28bc6eebe7203a6e04ee275336099a72fb633dda +size 336172 diff --git a/.cursor/rules/roblox/assets/publishing/cross-platform/Inventory-Selection-Touch.jpg b/.cursor/rules/roblox/assets/publishing/cross-platform/Inventory-Selection-Touch.jpg new file mode 100644 index 00000000..9d3b2626 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/cross-platform/Inventory-Selection-Touch.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7687d066bea8be92f190d7c9e8f64c70cc52a5b3a1334f60a589a806d79e711a +size 338201 diff --git a/.cursor/rules/roblox/assets/publishing/cross-platform/Position-Scale.jpg b/.cursor/rules/roblox/assets/publishing/cross-platform/Position-Scale.jpg new file mode 100644 index 00000000..20053ec8 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/cross-platform/Position-Scale.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b300c85248ac61ec566d41a92ea2df4eb8716e848134afa8fa0199e8e2ca71f +size 314878 diff --git a/.cursor/rules/roblox/assets/publishing/cross-platform/Responsive-Layout-Landscape.jpg b/.cursor/rules/roblox/assets/publishing/cross-platform/Responsive-Layout-Landscape.jpg new file mode 100644 index 00000000..449fd32e --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/cross-platform/Responsive-Layout-Landscape.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a75ef9b710f33128ff363d876fd76d5cbfa398a19a96657bbb8035ab61f7f21e +size 297585 diff --git a/.cursor/rules/roblox/assets/publishing/cross-platform/Responsive-Layout-Portrait.jpg b/.cursor/rules/roblox/assets/publishing/cross-platform/Responsive-Layout-Portrait.jpg new file mode 100644 index 00000000..575850a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/cross-platform/Responsive-Layout-Portrait.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b4ab4fabe82e1df3d72b59f72d39a3323df7bc054d28f64803ca8be78fc794e +size 156162 diff --git a/.cursor/rules/roblox/assets/publishing/cross-platform/Screen-Size-Themes.png b/.cursor/rules/roblox/assets/publishing/cross-platform/Screen-Size-Themes.png new file mode 100644 index 00000000..16a08d90 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/cross-platform/Screen-Size-Themes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d45d398a342775fa92f9c65f6ea6f3e4aa7059a5eeb995a1ad185b8594eb35d7 +size 136575 diff --git a/.cursor/rules/roblox/assets/publishing/experience-metadata/Genre-Example.png b/.cursor/rules/roblox/assets/publishing/experience-metadata/Genre-Example.png new file mode 100644 index 00000000..49a28a17 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experience-metadata/Genre-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:778b3135121be3254976e95f783d902d904e15d7da20f5be4ebb151386ea7287 +size 25451 diff --git a/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Action.jpg b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Action.jpg new file mode 100644 index 00000000..03ce627f --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Action.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3f28bba47d83fa324c6dd3de98aa105bd15dc2f4f71f20623f1d3cde8d66eb7 +size 145074 diff --git a/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Camping.jpg b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Camping.jpg new file mode 100644 index 00000000..6a0598ba --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Camping.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fa1f546344d93c42b43a594a6af416c1a3cb15e1f12ce088129e00a343ef2e0 +size 43752 diff --git a/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Colorization-A.jpg b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Colorization-A.jpg new file mode 100644 index 00000000..d2696abf --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Colorization-A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cfc2c4ed55e528bdec1e05fedd487a5328ea4e13db7908b178170ea93be9f977 +size 76748 diff --git a/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Colorization-B.jpg b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Colorization-B.jpg new file mode 100644 index 00000000..adeb6b84 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Colorization-B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:495716649c3cf1d8b3548f80c4d201936e530cc55224ae26d679421948f096bc +size 58478 diff --git a/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Colorization-C.jpg b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Colorization-C.jpg new file mode 100644 index 00000000..5c3db148 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Colorization-C.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9736c3bb96bc633eec157421a72ba0ca3043ac9f39f833f86feb2cbef390792 +size 72843 diff --git a/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Default.jpg b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Default.jpg new file mode 100644 index 00000000..e57014c8 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Default.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99c2228275e136e16b636dffd769600a7f8672ac1aaa74faba3eb59f92ddb6a8 +size 124841 diff --git a/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-High-Res.jpg b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-High-Res.jpg new file mode 100644 index 00000000..147980e2 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-High-Res.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:534cec35d6eeea350e2c81a0683bf4b0d4d4d990b500c29511d08a64eaa6c0a7 +size 1698271 diff --git a/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Low-Res.jpg b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Low-Res.jpg new file mode 100644 index 00000000..ddd1c0a3 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Low-Res.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a691d5f5be632dfd73dbeb06c7b893b5beff539f7ad05426eb9ea655f258869 +size 102594 diff --git a/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Not-Square.jpg b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Not-Square.jpg new file mode 100644 index 00000000..c36770ee --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Not-Square.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c61e157ad402107000f05681e1fe75bc31cc2f9ee49bb988190cc0faa81679d +size 103306 diff --git a/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Ocean.jpg b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Ocean.jpg new file mode 100644 index 00000000..5f3dde4d --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Ocean.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f23488ac32aabc5fb95540c2193c0afa88d5d1a68adc46f60af41efdbdfeea8c +size 68964 diff --git a/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Theme-Park-Symbol.jpg b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Theme-Park-Symbol.jpg new file mode 100644 index 00000000..34dd6599 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Theme-Park-Symbol.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d4a4830a0ff654098e78236eef7083de8d018488010cb68a823827a7e2f51a4 +size 149622 diff --git a/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Theme-Park.jpg b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Theme-Park.jpg new file mode 100644 index 00000000..fd5ff7cd --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experience-metadata/Icon-Theme-Park.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01d9b161c2f71f0d6af8b1cabfc8c43df10e671c81b144b1477ce597bbc69dc5 +size 71358 diff --git a/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-High-Res.jpg b/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-High-Res.jpg new file mode 100644 index 00000000..aa0374db --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-High-Res.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7fb17af82e54c2a19f92c6eb25473b666bc805b662ccdccf83263f1d7b1b5ab3 +size 284548 diff --git a/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Home-Page-Tab.png b/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Home-Page-Tab.png new file mode 100644 index 00000000..642e2d28 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Home-Page-Tab.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:607ad3d62b63e24c12fe3b7851e5dea0f7ffc013b4e895951756e23e25e4c967 +size 129173 diff --git a/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Impressions-Graph.png b/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Impressions-Graph.png new file mode 100644 index 00000000..b69613dc --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Impressions-Graph.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15ba33a966a7ca3b486d4fabc4a07a9c4e7c9c40999183a7d3ecd63f2a609a3f +size 51965 diff --git a/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Not-16-9.jpg b/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Not-16-9.jpg new file mode 100644 index 00000000..4844c7aa --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Not-16-9.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85bb391a2e378443d9844ac1701ea08156e8019f6cc23e0b3b2ac237146eae0d +size 292234 diff --git a/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Theme-Comical.jpg b/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Theme-Comical.jpg new file mode 100644 index 00000000..14bcd59e --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Theme-Comical.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de19d9e3bdd0f477110be96e77a8afca2b9e2141c71ef6796a1136b889afb794 +size 239750 diff --git a/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Theme-Horror.jpg b/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Theme-Horror.jpg new file mode 100644 index 00000000..b318bbea --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Theme-Horror.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74aa6555f90355ce4d5927ac6827894b1a0cae8823f864719c4c867369cc3ebf +size 256578 diff --git a/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Unclear.jpg b/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Unclear.jpg new file mode 100644 index 00000000..8635fdbc --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Unclear.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c31280b20eefc10eecd6d66936f731c5a7cca338c46fe66e51fd71f9b3a777af +size 220526 diff --git a/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Urban-Rush.jpg b/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Urban-Rush.jpg new file mode 100644 index 00000000..10f506cf --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Urban-Rush.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b04b0fd600c36edb4435b50ac246da7339cbc6bd908ccdd2e98407bcd91f471 +size 258781 diff --git a/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Video-Accurate.mp4 b/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Video-Accurate.mp4 new file mode 100644 index 00000000..53bb4144 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Video-Accurate.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3916af20ec855f99b9ac0d26310f4618ec0e5d3d76420a61308f904d03ff8654 +size 13968615 diff --git a/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Video-Inaccurate.mp4 b/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Video-Inaccurate.mp4 new file mode 100644 index 00000000..5853b43d --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experience-metadata/Thumbnail-Video-Inaccurate.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71846be8b93f5a3a76965e826859399d42f1fc0d2464c8903af5958f4293065a +size 9198626 diff --git a/.cursor/rules/roblox/assets/publishing/experiences-places-assets/Edit-Place-In-Studio.jpg b/.cursor/rules/roblox/assets/publishing/experiences-places-assets/Edit-Place-In-Studio.jpg new file mode 100644 index 00000000..6c30bc8f --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experiences-places-assets/Edit-Place-In-Studio.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3bfffe0cb2231e2eb00f9dcd62c3d90da888ce2f467e9d426336ba65b5baf7bf +size 241732 diff --git a/.cursor/rules/roblox/assets/publishing/experiences-places-assets/Experience-Hierarchy.png b/.cursor/rules/roblox/assets/publishing/experiences-places-assets/Experience-Hierarchy.png new file mode 100644 index 00000000..a2d7a54c --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experiences-places-assets/Experience-Hierarchy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82db875e1c1820d384037a7c10f8aa90fc53751322031de667aa7ce9401e1b1f +size 483296 diff --git a/.cursor/rules/roblox/assets/publishing/experiences-places-assets/Experience-Page-Example.jpg b/.cursor/rules/roblox/assets/publishing/experiences-places-assets/Experience-Page-Example.jpg new file mode 100644 index 00000000..c59579e5 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experiences-places-assets/Experience-Page-Example.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4af6299ebcdb689b1d7f4d270dc62b6ef4ab5c5c10165bdca64fc77681992637 +size 406601 diff --git a/.cursor/rules/roblox/assets/publishing/experiences-places-assets/Maturity-Label-Strong-Language.jpg b/.cursor/rules/roblox/assets/publishing/experiences-places-assets/Maturity-Label-Strong-Language.jpg new file mode 100644 index 00000000..08e5a4c0 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experiences-places-assets/Maturity-Label-Strong-Language.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ddc222e4e6ba9b3b3fc70e57be3f829f4762db991cd0a0f0f319bdd697835349 +size 247656 diff --git a/.cursor/rules/roblox/assets/publishing/experiences-places-assets/Publish-Window-Select-Start-Place.png b/.cursor/rules/roblox/assets/publishing/experiences-places-assets/Publish-Window-Select-Start-Place.png new file mode 100644 index 00000000..12df2b44 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/experiences-places-assets/Publish-Window-Select-Start-Place.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f1f953e641a5d4f74a1c5f9aeec0983682cf30114dd249eb9a38d43f53fb19d +size 96888 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/Asset-Configure-Dropdown.png b/.cursor/rules/roblox/assets/publishing/marketplace/Asset-Configure-Dropdown.png new file mode 100644 index 00000000..47d4d10a --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/Asset-Configure-Dropdown.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3d47d4486ac6ed01f8fd090b2a0aedbb3b6463a9590556a1e1bc970f97bdc19 +size 34464 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/Asset-Configure-Page-Limited.png b/.cursor/rules/roblox/assets/publishing/marketplace/Asset-Configure-Page-Limited.png new file mode 100644 index 00000000..42913083 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/Asset-Configure-Page-Limited.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:364c4dd76b96862e6fb2cfa048b312ff6beea98a0b7eededd65f4f2e2dd84491 +size 171707 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/Asset-Configure-Page-Sale.png b/.cursor/rules/roblox/assets/publishing/marketplace/Asset-Configure-Page-Sale.png new file mode 100644 index 00000000..dc65bb8c --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/Asset-Configure-Page-Sale.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7075df1ce238b517fa5c929c16502825602b6c5e5c6224edd943d8fa39bd06a1 +size 164742 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/Asset-Configure-Page.png b/.cursor/rules/roblox/assets/publishing/marketplace/Asset-Configure-Page.png new file mode 100644 index 00000000..2e0d1f07 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/Asset-Configure-Page.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48b176a23df1809204e87eceb8975007b05e3395cfc95e559bef605ed08b7988 +size 191151 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/Catalog-Example.png b/.cursor/rules/roblox/assets/publishing/marketplace/Catalog-Example.png new file mode 100644 index 00000000..59e41e63 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/Catalog-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5af95bdfa6ff48a337aa9a277ffd6192b08a58d9e09a6c074765631aadb3244 +size 249824 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/Creation-Page.png b/.cursor/rules/roblox/assets/publishing/marketplace/Creation-Page.png new file mode 100644 index 00000000..375cb11a --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/Creation-Page.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ad495c1a30ced2e2a185fde989ed16acc1ccf638b19c29d9b476d33f15845a1 +size 112826 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/Enable-Third-Party-Sales.png b/.cursor/rules/roblox/assets/publishing/marketplace/Enable-Third-Party-Sales.png new file mode 100644 index 00000000..08791449 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/Enable-Third-Party-Sales.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0183c0f02ad733523c19bf6f8cdab84fdd41c472ed579a7cedfdcfd5234857d0 +size 22541 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/Error-Example.png b/.cursor/rules/roblox/assets/publishing/marketplace/Error-Example.png new file mode 100644 index 00000000..407f1f97 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/Error-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0199a3b7fa78ec15cfc009176ca3c3fb85dca6976b9eadda44224338638c3eed +size 11866 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/Item-Attributes.png b/.cursor/rules/roblox/assets/publishing/marketplace/Item-Attributes.png new file mode 100644 index 00000000..c87008f2 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/Item-Attributes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b7a6a01155d773477c3ec3577bbf7463ed1ff52782bb212ceb1898df2bcd326 +size 45774 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/Manage-Item-Page.png b/.cursor/rules/roblox/assets/publishing/marketplace/Manage-Item-Page.png new file mode 100644 index 00000000..0eeeebbb --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/Manage-Item-Page.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70fdd1fc264ba6105a625fcac1244a1f826e8fe3d2aaaa7a151e0bb769013079 +size 65930 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/Mannequin-Example.png b/.cursor/rules/roblox/assets/publishing/marketplace/Mannequin-Example.png new file mode 100644 index 00000000..fbf2d608 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/Mannequin-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31286a610bc7501b6d93db624feb1cfc782807fa69de9988878b51b5033ac0bf +size 198460 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/Mannequin-Explorer.png b/.cursor/rules/roblox/assets/publishing/marketplace/Mannequin-Explorer.png new file mode 100644 index 00000000..7f0d01cd --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/Mannequin-Explorer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5c88a869c1fc2c246131992862a6c979854ef4c92df7f032189096d7dd4faa5 +size 34435 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/Pricing-Settings.png b/.cursor/rules/roblox/assets/publishing/marketplace/Pricing-Settings.png new file mode 100644 index 00000000..3c11cfc3 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/Pricing-Settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9fd441cb0d701390cbc448a69107918bc9101a9a9893965f717daff5ec2b3a39 +size 61679 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/Publishing-Body.png b/.cursor/rules/roblox/assets/publishing/marketplace/Publishing-Body.png new file mode 100644 index 00000000..8c4aee02 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/Publishing-Body.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0605c03f83a1bf1c660362cf5400f6e217fdc99bf4d8a691abe61757511873dc +size 131063 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/Publishing-Clothes.png b/.cursor/rules/roblox/assets/publishing/marketplace/Publishing-Clothes.png new file mode 100644 index 00000000..af394048 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/Publishing-Clothes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e58fafee1877e74337fee7d0ff9c0fe31d8583e6972b51be65f03c2455cac99c +size 65667 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/Publishing-Item.png b/.cursor/rules/roblox/assets/publishing/marketplace/Publishing-Item.png new file mode 100644 index 00000000..4c35464d --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/Publishing-Item.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:279124fab213e25893cef162e6663587a135acb70ea2bd06b11098bc9dea5aab +size 17209 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/ReplicatedStorage-Settings.png b/.cursor/rules/roblox/assets/publishing/marketplace/ReplicatedStorage-Settings.png new file mode 100644 index 00000000..dbb11534 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/ReplicatedStorage-Settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26f3bd79a118e166926cdbd0b387b8c83accc53090491d31787d8c07dc288e31 +size 10909 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/Sale-Location.png b/.cursor/rules/roblox/assets/publishing/marketplace/Sale-Location.png new file mode 100644 index 00000000..f09cd737 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/Sale-Location.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e6936cf5ed70f50b79e9325b31ade7f563f95305b5517a4bada0c70846c5111 +size 13980 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/Sale-Toggle.png b/.cursor/rules/roblox/assets/publishing/marketplace/Sale-Toggle.png new file mode 100644 index 00000000..f9bff2f4 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/Sale-Toggle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2f332dad22d89c7acea0da84a4f77c79d92c30c34fbae8c15276b7e0996f696 +size 60906 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/ServerScriptStorage-Readme.png b/.cursor/rules/roblox/assets/publishing/marketplace/ServerScriptStorage-Readme.png new file mode 100644 index 00000000..cf22f235 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/ServerScriptStorage-Readme.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6700e9e9bae4408d78ba7eea91b6d43e26448ae40d813aaca894b2c9fbdfa5b1 +size 8574 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/Thumbnail-Configuration-Example.png b/.cursor/rules/roblox/assets/publishing/marketplace/Thumbnail-Configuration-Example.png new file mode 100644 index 00000000..f91b85a2 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/Thumbnail-Configuration-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:218d60385a4d9a263fd680573260d76f90cf8d9292df6a3b80e255883c73ce16 +size 16410 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/Thumbnail-Example-A.png b/.cursor/rules/roblox/assets/publishing/marketplace/Thumbnail-Example-A.png new file mode 100644 index 00000000..bfec6dce --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/Thumbnail-Example-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c59c3ead2bc3d967af30e020a4dfd541d77ef42b8a21c5163916507e474dcbdc +size 24855 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/Thumbnail-Example-B.png b/.cursor/rules/roblox/assets/publishing/marketplace/Thumbnail-Example-B.png new file mode 100644 index 00000000..4cde2c61 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/Thumbnail-Example-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b57ae14a99f8a3d7bb11ece058efb0f8a054203fb32e6aa457f7442870db3b7b +size 11449 diff --git a/.cursor/rules/roblox/assets/publishing/marketplace/Transaction-Report.png b/.cursor/rules/roblox/assets/publishing/marketplace/Transaction-Report.png new file mode 100644 index 00000000..8921f000 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/marketplace/Transaction-Report.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8da8d1ea8854aac6a58c7127659411978d14fdaea63f6cb39e79836e66f0efe8 +size 118296 diff --git a/.cursor/rules/roblox/assets/publishing/safety/Abuse-Reports-Per-Category.png b/.cursor/rules/roblox/assets/publishing/safety/Abuse-Reports-Per-Category.png new file mode 100644 index 00000000..f351363b --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/safety/Abuse-Reports-Per-Category.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2050e879c8c3bb0c5916396aa7a57a82df5f96a81ac157db7962cf6f80e2f996 +size 96611 diff --git a/.cursor/rules/roblox/assets/publishing/safety/Automated-Insights.png b/.cursor/rules/roblox/assets/publishing/safety/Automated-Insights.png new file mode 100644 index 00000000..ec69ffda --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/safety/Automated-Insights.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2bfb1aa444ca3054b47d2c16e782d09d516556e1b48ff982864698707dcf521f +size 14764 diff --git a/.cursor/rules/roblox/assets/publishing/safety/Filter-by-channel.png b/.cursor/rules/roblox/assets/publishing/safety/Filter-by-channel.png new file mode 100644 index 00000000..b2f45684 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/safety/Filter-by-channel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bed9a36fd9c935d6c20a162060cd893c864d26807c3213709755da26466da5d2 +size 18088 diff --git a/.cursor/rules/roblox/assets/publishing/safety/Submitters-Per-Hours.png b/.cursor/rules/roblox/assets/publishing/safety/Submitters-Per-Hours.png new file mode 100644 index 00000000..467e97d4 --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/safety/Submitters-Per-Hours.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17cf3868db60fc2c255dfd5d67a4a987c2be762c2f2e79b69923591985180db4 +size 42189 diff --git a/.cursor/rules/roblox/assets/publishing/vr/Auto-Quality-Mode.png b/.cursor/rules/roblox/assets/publishing/vr/Auto-Quality-Mode.png new file mode 100644 index 00000000..bb70568a --- /dev/null +++ b/.cursor/rules/roblox/assets/publishing/vr/Auto-Quality-Mode.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67c1b913c7c624e821187d7ad2ea04f43e3dc539f56cab5a414fa0dce1d7a38f +size 25534 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/building-system/Battle-Royale-Building-View.jpeg b/.cursor/rules/roblox/assets/resources/battle-royale/building-system/Battle-Royale-Building-View.jpeg new file mode 100644 index 00000000..9392c468 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/building-system/Battle-Royale-Building-View.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5df8dd10ac8990e1f043db2496cf9be2db87f1ad3c9259d5cc2d968e4d199f45 +size 226543 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/building-system/Battle-Royale-New-Tile-1.png b/.cursor/rules/roblox/assets/resources/battle-royale/building-system/Battle-Royale-New-Tile-1.png new file mode 100644 index 00000000..50118f40 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/building-system/Battle-Royale-New-Tile-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1840a0e1bb98f3befc75a6e0411f3fba4f22780767b850229c12ddaaf79a165 +size 60684 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/building-system/Battle-Royale-New-Tile-2.png b/.cursor/rules/roblox/assets/resources/battle-royale/building-system/Battle-Royale-New-Tile-2.png new file mode 100644 index 00000000..fc4241d4 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/building-system/Battle-Royale-New-Tile-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d76ce7cbebfced3f3a701506c3878d642c6885967c4f8f134c53c4c36028e73 +size 69097 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/building-system/Octant-Cube.png b/.cursor/rules/roblox/assets/resources/battle-royale/building-system/Octant-Cube.png new file mode 100644 index 00000000..6c1f78c7 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/building-system/Octant-Cube.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eecf852ccdf6c94730944b12cc9ebd4692389ad069d34722026daeccd6f292c4 +size 109853 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-AM-Select-Places-1.png b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-AM-Select-Places-1.png new file mode 100644 index 00000000..ffde5efd --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-AM-Select-Places-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:955f0139ea9f401ae81ae6e748408a562c6e7da0b7f2b48ff7665bba4c2a0a1a +size 25564 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Edit-Place.png b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Edit-Place.png new file mode 100644 index 00000000..9fc01ae4 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Edit-Place.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1184936ecf6a29eede5dcff90075b17e21258a57b032c27bf8571504f13b42e7 +size 33548 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Gameplay-Close.png b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Gameplay-Close.png new file mode 100644 index 00000000..e901e6db --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Gameplay-Close.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78511fb10daf6d540533b205934242d234646123604d808dac3f4aba5c035718 +size 119761 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Lobby-Close.png b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Lobby-Close.png new file mode 100644 index 00000000..3de66697 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Lobby-Close.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:167098c00b43850c20984f3c9cb9bd8a986f906cb2134b3496a1aab3e499f5bd +size 111737 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Lobby-Copy-ID.png b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Lobby-Copy-ID.png new file mode 100644 index 00000000..2a801630 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Lobby-Copy-ID.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4773947a74cc71400ad5df89e4f67c64d031b3dc5372f9949cf8166ec49183c +size 44804 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Lobby-Set-Name.png b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Lobby-Set-Name.png new file mode 100644 index 00000000..e50a20b1 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Lobby-Set-Name.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab59acbab937f5cfaad7ae3004a1e9dac4108c1c52855cb51f2385efd492f8d4 +size 8546 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Lobby-View.jpeg b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Lobby-View.jpeg new file mode 100644 index 00000000..5b304f15 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Lobby-View.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe25a13639af2ceb930825325607bbf999dfeea2ed79c5a3f3f6bd0d65582ea0 +size 230078 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Place-MainConfiguration.png b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Place-MainConfiguration.png new file mode 100644 index 00000000..e699144e --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Place-MainConfiguration.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a43251dc5d8288bd12798dfc1c65281e7e5dcef71c12fa781ca3e2e91e059ce +size 46390 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Place-Names.png b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Place-Names.png new file mode 100644 index 00000000..b2254abb --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Place-Names.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08fcb4178f457b1c3c661dbc54d894e3645665946bd10fc960d2d67d1b1ae9d8 +size 34558 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Place-Overwrite.png b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Place-Overwrite.png new file mode 100644 index 00000000..80bc427d --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Battle-Royale-Place-Overwrite.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db36ce6f834a3c0bd1eb014883213d61889785755b698a3fa42ff92246dd37ce +size 83031 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Place-Server-Fill-Maximum.png b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Place-Server-Fill-Maximum.png new file mode 100644 index 00000000..1b4967cf --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Place-Server-Fill-Maximum.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e5b793fc8f4b2b164547111dd54158166944a13d088cd09042daba90a6654c3 +size 17982 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Publish-Update-Existing.png b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Publish-Update-Existing.png new file mode 100644 index 00000000..baf48ad8 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Publish-Update-Existing.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75d822e5dec5d214ef13f99961d668a1baa04ef876152b19d2a53fa36274aab3 +size 12051 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Publish-Window-Create-New-Game.png b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Publish-Window-Create-New-Game.png new file mode 100644 index 00000000..356961bd --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/Publish-Window-Create-New-Game.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e19f57068bc09964a1c9e9f91f671dc8168004836e02966e1e6bcd550237633 +size 12545 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/RobloxBattleRoyale.zip b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/RobloxBattleRoyale.zip new file mode 100644 index 00000000..ef5ecc50 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/installation-and-setup/RobloxBattleRoyale.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1d4569e25aeaf330f6762cb7943a8711654c88c5364d48166977e535c2c1a59 +size 15364674 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/introduction/Battle-Royale-Slide-B.jpeg b/.cursor/rules/roblox/assets/resources/battle-royale/introduction/Battle-Royale-Slide-B.jpeg new file mode 100644 index 00000000..9bd07f9e --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/introduction/Battle-Royale-Slide-B.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46347a8d06f20e590898d10305e590c82cc72bcc552e1b896e136caabd199c54 +size 104491 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/minimap-system/Battle-Royale-Minimap-Objects.png b/.cursor/rules/roblox/assets/resources/battle-royale/minimap-system/Battle-Royale-Minimap-Objects.png new file mode 100644 index 00000000..b552b948 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/minimap-system/Battle-Royale-Minimap-Objects.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f3f67446ba7c0f68d8404c4f48e9898d1802ac7786c7602a0f6e1c3fe90170fd +size 54328 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/minimap-system/Battle-Royale-Minimap.jpeg b/.cursor/rules/roblox/assets/resources/battle-royale/minimap-system/Battle-Royale-Minimap.jpeg new file mode 100644 index 00000000..2e042901 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/minimap-system/Battle-Royale-Minimap.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05753a272c559127a5cac65a417d4791132403ff37e7c13d1b9520b6943f107b +size 212254 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Item-Common.png b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Item-Common.png new file mode 100644 index 00000000..65f9f062 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Item-Common.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b878f490f7f32775e439929be0391d77fcb602275d389b9b0ab43af803350600 +size 26646 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Item-Epic.png b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Item-Epic.png new file mode 100644 index 00000000..daafff07 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Item-Epic.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4dfec6d1583cd32e7e003bfc2b9b0241c5398037069a4740f20927e1c8cd278d +size 23117 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Item-Legendary.png b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Item-Legendary.png new file mode 100644 index 00000000..5ebc9cd7 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Item-Legendary.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cfe54150b061cc638a4058d458b597818e596acd383aad2318e44c029d6f9176 +size 23689 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Item-Rare.png b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Item-Rare.png new file mode 100644 index 00000000..de8b9998 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Item-Rare.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c3e74e60c6da9cda45ac05eda3181d307cc69bc6d32b7d36d40d602e089e121 +size 26217 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Item-Special.png b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Item-Special.png new file mode 100644 index 00000000..bf207ffa --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Item-Special.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b191eb2a5e901f135b0ee05e85b9c242c39680c81563a97e0330a90c759f6ea5 +size 23217 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Item-Uncommon.png b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Item-Uncommon.png new file mode 100644 index 00000000..4cb0e97a --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Item-Uncommon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ded4c1b432d3bbcb416e0a370b3f8f1721003f32851a671da97028f3ac7303ee +size 23286 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-New-Pickup.png b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-New-Pickup.png new file mode 100644 index 00000000..58f32bfd --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-New-Pickup.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d3207294f89c17ec4e808df30baa71ca4d49dd41fd991ccba01071bd4b49553 +size 13948 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-New-Weapon.png b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-New-Weapon.png new file mode 100644 index 00000000..0935b57d --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-New-Weapon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9027aeef40d69a8a61db55c02d8a8f48b2c5dd7a7b5b69036e27952d8de6f92d +size 12626 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-PickupSpawners.png b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-PickupSpawners.png new file mode 100644 index 00000000..9d676a01 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-PickupSpawners.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:656d104189edc27022d9222889a30adf842c46970e67fdb55eb473bcdd7c555b +size 16614 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Pickups.png b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Pickups.png new file mode 100644 index 00000000..e571d796 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Pickups.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5cff97777d337d320ee579c6a20f553b0f33c69652f8106da0edfefbf3f4f665 +size 12861 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Weapon-Pickup.jpg b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Weapon-Pickup.jpg new file mode 100644 index 00000000..f9350e11 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Weapon-Pickup.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26480551cd48c5a895be6266a0b0d4c699105f1c4d7a935508d88204509d0030 +size 142761 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Weapons.png b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Weapons.png new file mode 100644 index 00000000..a90dcb60 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/pickup-system/Battle-Royale-Weapons.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f51ee544fc978c823aa02c1f3b8a0d719ed98e897b3a73f83e0198b7d4a976f3 +size 12160 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/running-the-game/Battle-Royale-Lobby-Open-Place-1.png b/.cursor/rules/roblox/assets/resources/battle-royale/running-the-game/Battle-Royale-Lobby-Open-Place-1.png new file mode 100644 index 00000000..163c10c9 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/running-the-game/Battle-Royale-Lobby-Open-Place-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f53331509f6c47eb0dc4b792bda9af92405dc85a3180fbf3c68688745e85e853 +size 173910 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/running-the-game/Battle-Royale-Lobby-Open-Place-2.png b/.cursor/rules/roblox/assets/resources/battle-royale/running-the-game/Battle-Royale-Lobby-Open-Place-2.png new file mode 100644 index 00000000..95c6a671 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/running-the-game/Battle-Royale-Lobby-Open-Place-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20a6fd27fcd5e74525597fa7f9ff264a7e964921b5fc404b110365c5946fc282 +size 75871 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/running-the-game/Studio-Recent-Games.png b/.cursor/rules/roblox/assets/resources/battle-royale/running-the-game/Studio-Recent-Games.png new file mode 100644 index 00000000..fc069938 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/running-the-game/Studio-Recent-Games.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:868c20bfb4b0739d46a06ecbef39df8e30c1d04d75e8d775d896c494b609fbae +size 10323 diff --git a/.cursor/rules/roblox/assets/resources/battle-royale/the-storm/Battle-Royale-Storm.jpeg b/.cursor/rules/roblox/assets/resources/battle-royale/the-storm/Battle-Royale-Storm.jpeg new file mode 100644 index 00000000..689c2bbc --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/battle-royale/the-storm/Battle-Royale-Storm.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de86f6b20c584b26482e17ec28aa7a3b9839ec7ea9c30d62ed87d83f75643a73 +size 193600 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/btd-banner.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/btd-banner.png new file mode 100644 index 00000000..2368abae --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/btd-banner.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e9bfcd2016ead29e731bb4702c1d489978816303f745213326c9f79f3c35388 +size 810839 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture-Overview.jpeg b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture-Overview.jpeg new file mode 100644 index 00000000..67a3c981 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture-Overview.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ced290917ad01bd5da549902d33af4094a92501ab13096dc48f27463fe533a64 +size 325524 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_1.jpeg b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_1.jpeg new file mode 100644 index 00000000..016c1941 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_1.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2262d7ff0a8f9e063b4b10c9c27d7e88022f983db893b4da25a5b23e189319e2 +size 115646 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_2.jpeg b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_2.jpeg new file mode 100644 index 00000000..7dde72b5 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_2.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7ac8528c653125d3509a0b63ff67ae21ee52abc37a110c99109270f3a7a4ffd +size 119323 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_3.jpeg b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_3.jpeg new file mode 100644 index 00000000..a249f0fe --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_3.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc1b0344e3e8b554745527329feb797715544398efa4a6be554150dc3b6f9611 +size 166473 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_4.jpeg b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_4.jpeg new file mode 100644 index 00000000..50f8e152 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_4.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:704900dbcc47191d6a7b4bed5780a12dbb01713b63c54231af6204e4e590dd28 +size 214094 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_5.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_5.png new file mode 100644 index 00000000..fa95a7b9 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c5b2f5a4de5d3ccb97a39a659daa12030fed43cc9f826a06e93476ea99ea411 +size 736438 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_6.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_6.png new file mode 100644 index 00000000..d4977dd2 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_6.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8db33c654409e9b5d715ebc3686a73cb18009715fc09ac70b4fe8f1a16d72751 +size 1837442 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_7.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_7.png new file mode 100644 index 00000000..65cf059e --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_7.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6b3326699e46d53f13af4a78422499b420684a7967bafd04a8b7dd0943df775 +size 1833147 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_8.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_8.png new file mode 100644 index 00000000..50e03e81 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Architecture_Example_8.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:841f210b11389465cf8b6e5aefdfbd07b4c191f3dd9d3001e952db84c77656fb +size 981046 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Modular_Trim_Sheet.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Modular_Trim_Sheet.png new file mode 100644 index 00000000..ab951494 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Modular_Trim_Sheet.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f9066c48d7c6bddfecdb3f2c48d0e784a36689461f35425ce094739dc01dd57 +size 904001 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/PBR_Example_1.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/PBR_Example_1.png new file mode 100644 index 00000000..54544641 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/PBR_Example_1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dea1e0d933945ccba8fa6cef10f1abfd5499cafea2fd4e35e78032073b0cac65 +size 147878 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/PBR_Example_2.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/PBR_Example_2.png new file mode 100644 index 00000000..3a1255b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/PBR_Example_2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82289c8cf6b0512f42cd223969bbaa993220f0aedf4c9b40d6eb29d204228761 +size 29608 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/PBR_Example_3.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/PBR_Example_3.png new file mode 100644 index 00000000..328a910f --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/PBR_Example_3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9450fea84abb7116dcff5217da030e81c918a7a3fee778a11a9e482788f18901 +size 116241 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/PBR_Example_4.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/PBR_Example_4.png new file mode 100644 index 00000000..7d7f5530 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/PBR_Example_4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:851576847a1ab40fd4bfa5f2f7380a77d7b8ab7cddb1d1f9c44b3a847abfd565 +size 31754 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Packages_Example_1.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Packages_Example_1.png new file mode 100644 index 00000000..70b2e859 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Packages_Example_1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b97ce60ea4b581d9f86aa67236e7c3031eb5585630a5a26dac7827b572a356a +size 59800 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Packages_Example_2.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Packages_Example_2.png new file mode 100644 index 00000000..1c034e5d --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Packages_Example_2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15a5741d8836d2b22e045b391075b32931c7a49370d5a2cd47e5926b62235399 +size 792060 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Surface_Appearance_Example_1.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Surface_Appearance_Example_1.png new file mode 100644 index 00000000..cf25257a --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Surface_Appearance_Example_1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5fd4e264bb2df5eb0a70901e2e8068fa8d691e9923bc87e422a486304205d056 +size 1682206 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Surface_Appearance_Example_2.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Surface_Appearance_Example_2.png new file mode 100644 index 00000000..fb4ea45b --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Surface_Appearance_Example_2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ba7d18cfa45344360c97bd26f36512a5fef8fdafc018c02bb8ab8bb7ec8d063 +size 107140 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Trim_Sheet_Example.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Trim_Sheet_Example.png new file mode 100644 index 00000000..44db3d05 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Trim_Sheet_Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae334ab4dbbd94edf7d60a2f01b1d6ec482c5c7337f21386a94e2000f8acf0f0 +size 40428 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Trim_Sheet_Example_2.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Trim_Sheet_Example_2.png new file mode 100644 index 00000000..e43028d8 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Trim_Sheet_Example_2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f02309f86a0f39fc2d40e1d39dfb7543b21fe00dc7d94998e67b2fd537b368ef +size 606221 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Trim_Sheet_Final_1.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Trim_Sheet_Final_1.png new file mode 100644 index 00000000..736aa257 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Trim_Sheet_Final_1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0fa4bfcf30929d2a862f921992f43a121e6dc098fe5ebf24412302a75dd4bec +size 317701 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Trim_Sheet_Final_2.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Trim_Sheet_Final_2.png new file mode 100644 index 00000000..5532b13e --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/building-architecture/Trim_Sheet_Final_2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e180edda842eab775fc16c4a324851ef6058d631e42ca67e47f3c1e47e799b92 +size 825784 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Animation-Example.gif b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Animation-Example.gif new file mode 100644 index 00000000..7859dc6c --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Animation-Example.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a0168458b091b11f32a2ca669e9a1e098e1bfbbdedc4f470402e299825468fc +size 3042616 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Animation-Import-2.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Animation-Import-2.png new file mode 100644 index 00000000..5182bace --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Animation-Import-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b725594ecc478d8b95132a7309a22792a098ca37def6b66cfa5e7c7d1d255a1a +size 342912 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Bad_Skinning_Example.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Bad_Skinning_Example.png new file mode 100644 index 00000000..53f35021 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Bad_Skinning_Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:791aabf79a1d95619bf0cf4e86de441f63861d29c04e4a0153f3383e2590fd05 +size 54267 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Creature-Eyes.jpeg b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Creature-Eyes.jpeg new file mode 100644 index 00000000..f104f9e1 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Creature-Eyes.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ccdb38c6d5bd3acb690fb841aedbd119081bf2c296293a4e7fc9f911c2d13e7 +size 228918 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Creature-In-Maya.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Creature-In-Maya.png new file mode 100644 index 00000000..d380cbeb --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Creature-In-Maya.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7c8d590ba391e21fc9f241d5d216f3be0c7072f99a744426099e841d034ad58 +size 212314 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Creature_Banner.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Creature_Banner.png new file mode 100644 index 00000000..dee128bd --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Creature_Banner.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0610fffdd34abbbcf496b92106ed4e070d8dd95b95555832d7d2a59539c8f1f +size 733730 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Creature_Front.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Creature_Front.png new file mode 100644 index 00000000..9c866188 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Creature_Front.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78eb8c3ef685cdc329a4945cdf36d6bc4e30379af9aa28e2df3cc5dd82a449ca +size 76326 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Custom-Import-2.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Custom-Import-2.png new file mode 100644 index 00000000..2634599a --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Custom-Import-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d771d694d2e07a5e16bf6e8e7c6bd01d5afe9e95703d7397780766bcd6e19a98 +size 484774 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Final-Result.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Final-Result.png new file mode 100644 index 00000000..786c8841 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Final-Result.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70291ff3fedee52c30f89cc3851a4424693d852c24f49287398c60fcd69779ff +size 1053938 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Glowing-Creature.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Glowing-Creature.png new file mode 100644 index 00000000..b4bedca6 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Glowing-Creature.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d46d0d7ff0763ef1a50d66f8453ef67ad8cbc66f6ac884a12f193a0b341b99d +size 264177 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/In-Studio-VFX.jpeg b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/In-Studio-VFX.jpeg new file mode 100644 index 00000000..ad575404 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/In-Studio-VFX.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2aa704825d9a1cf831b768651f26405353ddf61b930f696db6aa2dcf67fa0386 +size 187875 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Light-Emission.jpeg b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Light-Emission.jpeg new file mode 100644 index 00000000..efa06c47 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Light-Emission.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a177a226c4394db5c3ef2d4a621cf246d69ae5dee88e83e7de455ac40db81da0 +size 248815 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Particle-Emitter.jpeg b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Particle-Emitter.jpeg new file mode 100644 index 00000000..c223aa35 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Particle-Emitter.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:594eebc6cae66e0d38a710fac8b3067b61e13f9368edb85de85ab48429f4c9cd +size 193145 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Rigging_Neutral_1.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Rigging_Neutral_1.png new file mode 100644 index 00000000..42520a91 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Rigging_Neutral_1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:093bddce15277f4a33ed2f2a28071bf97cc790b391194408165883774127a14f +size 70481 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Rigging_Neutral_2.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Rigging_Neutral_2.png new file mode 100644 index 00000000..381693d6 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Rigging_Neutral_2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5aa6c0205a41eafd55c91757b9a679ac050acbe9af7076aa88b2757968c80586 +size 145011 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Script-Example.jpeg b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Script-Example.jpeg new file mode 100644 index 00000000..3c3405e4 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Script-Example.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c41bb91980e9b77813942f4564c88aeefd3dac03e662f9f3191d1addb331273 +size 138542 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Smooth_Skinning_Example.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Smooth_Skinning_Example.png new file mode 100644 index 00000000..244de54f --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Smooth_Skinning_Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20eb2a0c0d521b0fb2f09af9ef2ad9fb4d6e1077f9fb387dcb4a014bda280a01 +size 52857 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Spotlights.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Spotlights.png new file mode 100644 index 00000000..8c56bf07 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Spotlights.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ab0c887c1be50276a2dfaccef44d86af7ccc2f59059396df78b613144d7eca5 +size 887382 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Surface-Appearance-Transparency.jpeg b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Surface-Appearance-Transparency.jpeg new file mode 100644 index 00000000..cdaca289 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Surface-Appearance-Transparency.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5dbc7046f0b87920531815b430d92a64ec7db6a28a53a3fabe143fcc3a040771 +size 178623 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Surface-Appearance.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Surface-Appearance.png new file mode 100644 index 00000000..77b9783a --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Surface-Appearance.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af67c90c2cad413a45085e988183a953ef6e3870b299395275629e0c7a760f0a +size 528966 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Texture-Map-1.jpeg b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Texture-Map-1.jpeg new file mode 100644 index 00000000..16c347d4 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Texture-Map-1.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6d19058e61ded7916f03073a26805bc286c5ec0a9942309d955688c6d711bab +size 241792 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Texture-Map-2.jpeg b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Texture-Map-2.jpeg new file mode 100644 index 00000000..e1109790 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Texture-Map-2.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72bfbcc76a2e9394be15d49a0f3737adf6b401118cc89d2f0085b902b0bc0ad8 +size 390643 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Texture-Map-3.jpeg b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Texture-Map-3.jpeg new file mode 100644 index 00000000..d6b061f5 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Texture-Map-3.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:435254935f9655da41a7f7592b21b8221d973863aa8205b12d6722a859ac7f84 +size 271697 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Texture-Map-4.jpeg b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Texture-Map-4.jpeg new file mode 100644 index 00000000..15ad817f --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/custom-characters/Texture-Map-4.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ced50ea8a0ff93ac7df6529012c908b593511be458dcc01664dc3b21bd2af6e9 +size 328205 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Accessories-In-Explorer.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Accessories-In-Explorer.png new file mode 100644 index 00000000..cca888ab --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Accessories-In-Explorer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fca1268aa7b0e45331082ceb07ab2b8fae9cbaf0e1d39ea88dea5957297f72c +size 50824 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Accessory-Fitting-Tool-Adjustments-2.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Accessory-Fitting-Tool-Adjustments-2.png new file mode 100644 index 00000000..808e3eb4 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Accessory-Fitting-Tool-Adjustments-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:172759461686483d09366ed57ac054c62faff911638ae5250daf232cb31cbc62 +size 595805 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Accessory-Fitting-Tool-Adjustments-3.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Accessory-Fitting-Tool-Adjustments-3.png new file mode 100644 index 00000000..084e2ebd --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Accessory-Fitting-Tool-Adjustments-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c18314877988773f5366398edde842e33691b963c42408223035b16b3309b021 +size 674604 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Accessory-Fitting-Tool-Adjustments.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Accessory-Fitting-Tool-Adjustments.png new file mode 100644 index 00000000..46436c5d --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Accessory-Fitting-Tool-Adjustments.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39d549ca0f4e1962d8d912bafef287997f459afc3e3f44ec8719242f358add27 +size 664945 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Accessory-Tool-Mannequin.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Accessory-Tool-Mannequin.png new file mode 100644 index 00000000..19c86559 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Accessory-Tool-Mannequin.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f1747ea236ed4ed1604a80e536c68a121ab8cc17a7ff0a6dbeddb50392f3c90 +size 578224 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Adding-Surface-Appearance-2.jpeg b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Adding-Surface-Appearance-2.jpeg new file mode 100644 index 00000000..42033c0e --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Adding-Surface-Appearance-2.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18d3777148a33067464a620d4690deeaa1099fce985f622b5d46697bc7df9afc +size 175985 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Adding-Surface-Appearance.jpeg b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Adding-Surface-Appearance.jpeg new file mode 100644 index 00000000..9ded3281 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Adding-Surface-Appearance.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:afc2b5ee831e5a5034eabcb6236b187243b5a75bb94c313effc4072d9e29f04c +size 205925 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Body-Cage-Example-1.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Body-Cage-Example-1.png new file mode 100644 index 00000000..a51500d2 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Body-Cage-Example-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d688290cdec3c704207d5553fc1c78fd5416e400f84838627c5459b6bfbb662 +size 61654 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Body-Cage-Example-2.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Body-Cage-Example-2.png new file mode 100644 index 00000000..26d055bc --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Body-Cage-Example-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89e357b935bf2b673c012812e74722909404f65bc09f6707a1f94f0d0311be44 +size 20051 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Body-Cage-Example-3.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Body-Cage-Example-3.png new file mode 100644 index 00000000..4ecaeaba --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Body-Cage-Example-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fca93fe25f287a13f6d8ab411dcbebea61a95a470addc09db7d67cdd10ce1147 +size 59877 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Body-Cage-Example-4.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Body-Cage-Example-4.png new file mode 100644 index 00000000..4a45a55f --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Body-Cage-Example-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd8996914a7067b45b9f96e26f68eb2405b98de0c96fcd973c01485269573e96 +size 33212 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Body-Cage-Example-5.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Body-Cage-Example-5.png new file mode 100644 index 00000000..89ccb3ab --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Body-Cage-Example-5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04f739e8b07f937abdaecee4825bce8f049c55a763bdb1bf0cb8f7b59a9994de +size 27384 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Body-Cage-Example-6.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Body-Cage-Example-6.png new file mode 100644 index 00000000..19ba5b43 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Body-Cage-Example-6.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:563a62e9cbd9d90bfa3eca0f2169bbcbde8c59e983f2259ef913875a86901484 +size 29978 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Caging-With-Gloves.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Caging-With-Gloves.png new file mode 100644 index 00000000..c861fa80 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Caging-With-Gloves.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0bf47deaeb362bc5ccaa1150f96e851d3a0a685f6cdbd6de6529ffe872221bd8 +size 46794 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Character-And-Suit-Overview.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Character-And-Suit-Overview.png new file mode 100644 index 00000000..12603e36 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Character-And-Suit-Overview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dbe4ce9724946eb5df2639e88ac887b9545a843c9d3984c1f527c9bb66ad483c +size 497954 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Character-Model-Exploded.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Character-Model-Exploded.png new file mode 100644 index 00000000..b6697692 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Character-Model-Exploded.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:141f7f7964ebe1ac778b56ff7e0ca6106237d5cf9a269e4559ba976acf3f1cba +size 24071 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Character-Model.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Character-Model.png new file mode 100644 index 00000000..99520a45 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Character-Model.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0311e48d6b9f68b873a8a219351de526e1e68aa34d95f9c60553c9f23bb550bc +size 28607 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Clothing-Design-Example-1.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Clothing-Design-Example-1.png new file mode 100644 index 00000000..389078e9 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Clothing-Design-Example-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b82aac031b5aaf246b97dfa5a3d642dcdbecf2e399e6624772bf68c6af1a345d +size 71610 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Clothing-Design-Example-2.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Clothing-Design-Example-2.png new file mode 100644 index 00000000..57764723 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Clothing-Design-Example-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d763d53e51e0452f46826b6224b4c048fc1b41f01167b8d1ee852459a05b0595 +size 189700 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Clothing-Outer-Cage.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Clothing-Outer-Cage.png new file mode 100644 index 00000000..6e3e84f3 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Clothing-Outer-Cage.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1de212acf4b20f3c6c94d70d9a2eb40d0923266b0ea8b2b016d1074c4615e62 +size 155334 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Clothing-Posing.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Clothing-Posing.png new file mode 100644 index 00000000..2e303cea --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Clothing-Posing.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f25239cba94c33b7f98fb76784019e7dffb622612e6858ae4a65a368305ed220 +size 30179 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Custom-Character-Example.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Custom-Character-Example.png new file mode 100644 index 00000000..b64cb149 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Custom-Character-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0e825b8844aab40b6eb529c6ac980f031200d474f5420e9bcbb913be01eb650 +size 975917 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Glass-Surface-Example.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Glass-Surface-Example.png new file mode 100644 index 00000000..810cf739 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Glass-Surface-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5122cc8176bc4f6e30fe0154a00cc67d7aa62c37ce7b63fe5d3f2300da24d6a7 +size 802328 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Helmet-Attachments.jpeg b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Helmet-Attachments.jpeg new file mode 100644 index 00000000..5a651a43 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Helmet-Attachments.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2fe8a22f3ec9e59fed2b525f8238b7db12db58c93e4141ba771bc2eff895c10 +size 169374 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Helmet-Equipped-Final.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Helmet-Equipped-Final.png new file mode 100644 index 00000000..53108016 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Helmet-Equipped-Final.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0285e954d6e421007342442cec07062b089a31f78f458e7854ba1cd2fda01a6a +size 981961 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Helmet-Silhouette.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Helmet-Silhouette.png new file mode 100644 index 00000000..450ab35d --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Helmet-Silhouette.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45995c306ddebf7c5f1214989532f57c02cf058c93e5524473be53906b26a2d0 +size 305696 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Helmet-Texture-Map.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Helmet-Texture-Map.png new file mode 100644 index 00000000..49718f52 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Helmet-Texture-Map.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3428e7287baccfa5bf20629fb608fe6d72fc16b08552cd6632091569b3a24882 +size 111519 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Importing-Helmet-Mesh.jpeg b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Importing-Helmet-Mesh.jpeg new file mode 100644 index 00000000..d7702481 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Importing-Helmet-Mesh.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2119957855f4ab7a04cdcf35af8994d0ba26385629b504f2741bad88d6da1975 +size 166147 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Layerable-Suit-Comparison.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Layerable-Suit-Comparison.png new file mode 100644 index 00000000..8b70bee0 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Layerable-Suit-Comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8780a57c8616eba342a784c93b495903cb207ce3d80b255b94344a51d905a9d +size 547371 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Motion-Test.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Motion-Test.png new file mode 100644 index 00000000..0038dac7 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Motion-Test.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2e37da4864ecba37f3887e3aefba658292e85969d64f64543085c26c87144d8 +size 5607 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Replacing-Hands-And-Feet.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Replacing-Hands-And-Feet.png new file mode 100644 index 00000000..482f11e9 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Replacing-Hands-And-Feet.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e5f74ca91e7bdf13940eda9203ab334e76b397abab83d6b3741d9f4751d4773 +size 292504 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Seams-Example-1.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Seams-Example-1.png new file mode 100644 index 00000000..7ca75598 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Seams-Example-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:613a463f2fb00a7e1fe69a5cdeafe5c7ce08cc8827082303cc24f4ab14f8290e +size 42261 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Seams-Example-2.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Seams-Example-2.png new file mode 100644 index 00000000..609e2e9a --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Seams-Example-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d99a626c7cc124a51afa9fc11f3e91b77925db285a9cab9a432f05bd5eacd387 +size 31257 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Shoulder-Seams-Example-1.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Shoulder-Seams-Example-1.png new file mode 100644 index 00000000..dadff347 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Shoulder-Seams-Example-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33152bc34bb075c1b73d8527992d2f184fd1be99f36dee45ed889b7f096c0c50 +size 41059 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Shoulder-Seams-Example-2.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Shoulder-Seams-Example-2.png new file mode 100644 index 00000000..e0632da2 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Shoulder-Seams-Example-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ecf8508020a3aef6983b3e3d5828adb7a34533294c4843b93f454d48618d02ee +size 41173 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Silhouette-1.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Silhouette-1.png new file mode 100644 index 00000000..4b9e8765 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Silhouette-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a25ad307174e95db2809bbab8896ff1a753c33e9612ee1746060fca8d978f2f +size 1623 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Silhouette-2.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Silhouette-2.png new file mode 100644 index 00000000..ca202e6f --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Silhouette-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dcc1af0a7f8903073db8fbdcd9a4fd0c5c9a0c04f14daf3187c04fbd58f29f49 +size 33174 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skin-Tone-Maps-1.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skin-Tone-Maps-1.png new file mode 100644 index 00000000..1efe8432 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skin-Tone-Maps-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b24a07291703a40f0ecb9e359285b26f2c4f66a9b065a4043d1e6ff0e94920b6 +size 2744709 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skin-Tone-Maps-2.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skin-Tone-Maps-2.png new file mode 100644 index 00000000..9bf65b15 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skin-Tone-Maps-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f6749450a53853127e4d144688ed4ba9a781e9950acdd1bd7fece108b7121c9 +size 2680020 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skin-Tone-Maps-3.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skin-Tone-Maps-3.png new file mode 100644 index 00000000..d5c23593 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skin-Tone-Maps-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0359a784d6f2b5d19791dccd503c737becdfe4e6ec6ae7af9421597b793be9e6 +size 2831574 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skinning-Influence-Example-1.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skinning-Influence-Example-1.png new file mode 100644 index 00000000..6c6880fa --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skinning-Influence-Example-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f29c2821322308b98d1bb27be5cb2670fd3e89a20f4a6c7b03e5d766fc08b47e +size 73798 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skinning-Influence-Example-2.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skinning-Influence-Example-2.png new file mode 100644 index 00000000..cf01769c --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skinning-Influence-Example-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ce5eed775aa4433141c8d91e83d2235de10b3ca5f3a100a1c9758fb6a66836f +size 87407 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skinning-Influence-Example-3.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skinning-Influence-Example-3.png new file mode 100644 index 00000000..cd9821cb --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skinning-Influence-Example-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1dd4cc09d6a546b4bf0827f18a890a73234b888c9f994b78ab3ae081f4dff959 +size 103131 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skinning-Influence-Example-4.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skinning-Influence-Example-4.png new file mode 100644 index 00000000..1d58b2f2 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skinning-Influence-Example-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7e6ba936b70447e97040ff6d8c779948e1b2597322f710262bc9f9ce4e77a3a +size 100919 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skinning-Movement.gif b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skinning-Movement.gif new file mode 100644 index 00000000..b275e93c --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Skinning-Movement.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6a7b0775c735e1aefa1ad38db84691c7853ea29392f9092697f2ab7af99b8fb +size 6583536 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Suit-Lighting-Test-2.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Suit-Lighting-Test-2.png new file mode 100644 index 00000000..a2f7eb5d --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Suit-Lighting-Test-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d6efd34eb4df1e5d5f0e67675689be9feee3a049e0c753722ed3c85201dfef3 +size 173748 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Suit-Lighting-Test.gif b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Suit-Lighting-Test.gif new file mode 100644 index 00000000..643ca75c --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Suit-Lighting-Test.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:259e0415a5104705ceb0431caf3f4af548f757ebdacabae3bd9859b696a56fac +size 7772966 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Suit-Texturing-Example-1.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Suit-Texturing-Example-1.png new file mode 100644 index 00000000..1601dede --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Suit-Texturing-Example-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:edca20b4db9246e405ee266bc70e0b494134ff6afb7a84b16d9175a902db0eeb +size 262717 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Suit-Texturing-Example-2.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Suit-Texturing-Example-2.png new file mode 100644 index 00000000..75aac861 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Suit-Texturing-Example-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ba6933799b13071ae5fb3cdf162e483b335d1ff74393956f691e9d1af61c676 +size 10665 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Suit-Texturing-Example-3.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Suit-Texturing-Example-3.png new file mode 100644 index 00000000..131ebc8c --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Suit-Texturing-Example-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8f89be6cdbc2eee081cdf006e79d0bd3ce534a85f75f8b4ae3e15ef38298f29 +size 92609 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Suit-Texturing-Example-4.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Suit-Texturing-Example-4.png new file mode 100644 index 00000000..91ee4207 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Suit-Texturing-Example-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:547fee2415f36fa1e31abe1acd4603821c2f7c15ff47d384bccc754ad6328257 +size 514661 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Texture-Comparisons.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Texture-Comparisons.png new file mode 100644 index 00000000..3f9d7476 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Texture-Comparisons.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96f21c4a7c6e528f118bdcc0f17b28626c56c246e9df212d14e43e91f96b8c73 +size 408845 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Texturing-Showcase.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Texturing-Showcase.png new file mode 100644 index 00000000..716b9602 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Texturing-Showcase.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab8f769594a70eea1c30bd2ab3bacacc57b5ca8b289ea5eb4ab9b4646c0d41bb +size 670818 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Trim-Map-Texture-1.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Trim-Map-Texture-1.png new file mode 100644 index 00000000..54544641 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Trim-Map-Texture-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dea1e0d933945ccba8fa6cef10f1abfd5499cafea2fd4e35e78032073b0cac65 +size 147878 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Trim-Map-Texture-2.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Trim-Map-Texture-2.png new file mode 100644 index 00000000..3a1255b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Trim-Map-Texture-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82289c8cf6b0512f42cd223969bbaa993220f0aedf4c9b40d6eb29d204228761 +size 29608 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Trim-Map-Texture-3.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Trim-Map-Texture-3.png new file mode 100644 index 00000000..328a910f --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Trim-Map-Texture-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9450fea84abb7116dcff5217da030e81c918a7a3fee778a11a9e482788f18901 +size 116241 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Trim-Map-Texture-4.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Trim-Map-Texture-4.png new file mode 100644 index 00000000..7d7f5530 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Trim-Map-Texture-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:851576847a1ab40fd4bfa5f2f7380a77d7b8ab7cddb1d1f9c44b3a847abfd565 +size 31754 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/UV-Diagram.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/UV-Diagram.png new file mode 100644 index 00000000..2cdd923e --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/UV-Diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:407706431444029f8164b32fcbc1660c28178e2673dededa478df124fab941c1 +size 258830 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/UV-Maps-1.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/UV-Maps-1.png new file mode 100644 index 00000000..c51a2e50 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/UV-Maps-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8b9c3c167bf89922c8c485d11571186d467f821fc1d12539396e468abdf0281 +size 3930874 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/UV-Maps-2.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/UV-Maps-2.png new file mode 100644 index 00000000..f73c4335 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/UV-Maps-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74e83fd82f43991a7ebb12a3b8690969c739c5ab680d45a499ce58166c21d1b3 +size 24026 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/UV-Maps-3.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/UV-Maps-3.png new file mode 100644 index 00000000..5625c9e3 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/UV-Maps-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7b238c78ef6c9c7433007b96b1c7d18aea86c276a17d93869d8970e384aefc1 +size 584048 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/UV-Maps-4.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/UV-Maps-4.png new file mode 100644 index 00000000..605d5e47 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/UV-Maps-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ea387d273acc7ded579b25885261fc53cba66673fe0a00756279f70a27b94a9 +size 1252803 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Unique-Characters.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Unique-Characters.png new file mode 100644 index 00000000..97197c75 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Unique-Characters.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44bef3b5c84b338f3231cc1ea98c184bae09789c7e1f38f83cf623daf4e2b6e3 +size 448083 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Vertex-Influence-Example-1.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Vertex-Influence-Example-1.png new file mode 100644 index 00000000..af67a264 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Vertex-Influence-Example-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52ba1c4a74d02e0ac2a6cbb7c48d399bd4d253fd448bac42cbf93b1dc1ef3c56 +size 74354 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Vertex-Influence-Example-2.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Vertex-Influence-Example-2.png new file mode 100644 index 00000000..8b402a33 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/layered-clothing/Vertex-Influence-Example-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de0d6f54146a6fe1be78e313ad7afb52aaef9a58a28eb40bcc14d67a3e8fab98 +size 18409 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/sound-design/In-Explorer-Sound.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/sound-design/In-Explorer-Sound.png new file mode 100644 index 00000000..9f1c11f2 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/sound-design/In-Explorer-Sound.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29c5552eccae5c2d7370932bae72845ab20e75f5d480995fbe18a375461e0227 +size 34446 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/sound-design/In-Studio-Sound.jpeg b/.cursor/rules/roblox/assets/resources/beyond-the-dark/sound-design/In-Studio-Sound.jpeg new file mode 100644 index 00000000..9681f8f5 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/sound-design/In-Studio-Sound.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9adbcf44919634014ff8b35ddd574a5dd9fa1f41c065435fb6a7d1ce857ae938 +size 150732 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/sound-design/Sound-Banner.jpeg b/.cursor/rules/roblox/assets/resources/beyond-the-dark/sound-design/Sound-Banner.jpeg new file mode 100644 index 00000000..3d349051 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/sound-design/Sound-Banner.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf15bc11186c8e67a610f1534d8f573945b26ef7fe7340768e5f7cbc1c3f9937 +size 389694 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/sound-design/Sound-Properties.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/sound-design/Sound-Properties.png new file mode 100644 index 00000000..89b1fd65 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/sound-design/Sound-Properties.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:975c597b95cae882b750a8063a7d1067ea753ce731ebed43b570d85df010f1bd +size 15833 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/sound-design/Sound-Structure-Properties.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/sound-design/Sound-Structure-Properties.png new file mode 100644 index 00000000..952b9e2a --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/sound-design/Sound-Structure-Properties.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b0d75194a71f5ee5264ccc03efd6f529668319e1a8922e553e7c996414e3191 +size 64124 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/sound-design/Sound-Structure.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/sound-design/Sound-Structure.png new file mode 100644 index 00000000..1b8e089c --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/sound-design/Sound-Structure.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e08b0e2f6a9cd4e1ed5c25df10dfc34eb7749fec6aab46e16a0d79c8582d9407 +size 65887 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/Final-UI.mp4 b/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/Final-UI.mp4 new file mode 100644 index 00000000..9154b523 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/Final-UI.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef9040051fbab06da7ea63ea5973a7bebd237b6eaed865c375d4fe226d256418 +size 4948722 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/Light-Properties.mp4 b/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/Light-Properties.mp4 new file mode 100644 index 00000000..96ea1bc9 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/Light-Properties.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70bf667119fc6322d0a9da89a0315553e7189f43e19a651fc8552905b87983f8 +size 2406495 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/Parallax-Example.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/Parallax-Example.png new file mode 100644 index 00000000..2cd57950 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/Parallax-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5215828ab0b4ebe4ab14bd5a231e6d1a11ff73a415ea662e7bc42a4a20e440ef +size 2017828 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/Proximity-Prompt.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/Proximity-Prompt.png new file mode 100644 index 00000000..8388df50 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/Proximity-Prompt.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d61f114fe00487b6a33a346334798d5069803f15d0d80490c380e830fe1f3054 +size 28152 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/StarterGui-Adornee.mp4 b/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/StarterGui-Adornee.mp4 new file mode 100644 index 00000000..e9c1be8d --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/StarterGui-Adornee.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23900ce9a51a01b32048879af70b1009a7e38a3b2f64df7649029e9fd7aed971 +size 806175 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/UI-Export.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/UI-Export.png new file mode 100644 index 00000000..486cf6fc --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/UI-Export.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45bda9de9094746ea90dd02fbb4678bb2c619c0c6f9eab553e9f1056c3af3e7e +size 424555 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/UI-Mock.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/UI-Mock.png new file mode 100644 index 00000000..415d4d9a --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/UI-Mock.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9abafd7b8fe6e91c3a45848aceb54c8c4b5c6df5e86989bec0707efd653b82fc +size 2375044 diff --git a/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/UITweenModule.png b/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/UITweenModule.png new file mode 100644 index 00000000..603ff218 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/beyond-the-dark/user-interface/UITweenModule.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c97f749057ed11775bf9cc3065076d000e35bb8416df45f551b1030503eed99 +size 8557 diff --git a/.cursor/rules/roblox/assets/resources/city-people-cars/CPC-Slide-D.jpeg b/.cursor/rules/roblox/assets/resources/city-people-cars/CPC-Slide-D.jpeg new file mode 100644 index 00000000..8096176f --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/city-people-cars/CPC-Slide-D.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:279fdb77fcc810460ce06c3112cc6df5ce3fda0ba833d3b0ad3d539d52c5916d +size 147889 diff --git a/.cursor/rules/roblox/assets/resources/city-people-cars/CityPeopleCars.rbxl b/.cursor/rules/roblox/assets/resources/city-people-cars/CityPeopleCars.rbxl new file mode 100644 index 00000000..e2386205 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/city-people-cars/CityPeopleCars.rbxl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0b22678948c24d65250ed6b9b725b06415fd83235b97083029235982db10aa3 +size 36873933 diff --git a/.cursor/rules/roblox/assets/resources/feature-packages/Bundles/Bundles-Intro copy.png b/.cursor/rules/roblox/assets/resources/feature-packages/Bundles/Bundles-Intro copy.png new file mode 100644 index 00000000..3cec5ee5 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/feature-packages/Bundles/Bundles-Intro copy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9764e9c7d39f08b405f57b75846a746fa666487dda842396b97bc8b75e74c0e9 +size 461438 diff --git a/.cursor/rules/roblox/assets/resources/feature-packages/Bundles/Bundles-Intro.png b/.cursor/rules/roblox/assets/resources/feature-packages/Bundles/Bundles-Intro.png new file mode 100644 index 00000000..835f8c41 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/feature-packages/Bundles/Bundles-Intro.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93137960ab112b88d89412a9886148a06c80ba4d7fbb4388c9e5991a7d9086e3 +size 459936 diff --git a/.cursor/rules/roblox/assets/resources/feature-packages/Bundles/Bundles-Small.png b/.cursor/rules/roblox/assets/resources/feature-packages/Bundles/Bundles-Small.png new file mode 100644 index 00000000..3cec5ee5 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/feature-packages/Bundles/Bundles-Small.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9764e9c7d39f08b405f57b75846a746fa666487dda842396b97bc8b75e74c0e9 +size 461438 diff --git a/.cursor/rules/roblox/assets/resources/feature-packages/Missions/Missions-Condensed.png b/.cursor/rules/roblox/assets/resources/feature-packages/Missions/Missions-Condensed.png new file mode 100644 index 00000000..c2a23efd --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/feature-packages/Missions/Missions-Condensed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:701323c87721760f8127a9b8d10e21196017f477bfc24630520581f47c171b44 +size 152789 diff --git a/.cursor/rules/roblox/assets/resources/feature-packages/Missions/Missions-Intro.png b/.cursor/rules/roblox/assets/resources/feature-packages/Missions/Missions-Intro.png new file mode 100644 index 00000000..4ba37421 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/feature-packages/Missions/Missions-Intro.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9310861cd5250de4a235b9181003cd8ad566f519f68cf86aaac3a1d16b20beca +size 718482 diff --git a/.cursor/rules/roblox/assets/resources/feature-packages/Season-Passes/Season-Passes-Intro.png b/.cursor/rules/roblox/assets/resources/feature-packages/Season-Passes/Season-Passes-Intro.png new file mode 100644 index 00000000..1a9b41df --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/feature-packages/Season-Passes/Season-Passes-Intro.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50b1bf1d29865aaa20f807e116a4a18ae186e618b7c33366122df7389df54b69 +size 275791 diff --git a/.cursor/rules/roblox/assets/resources/feature-packages/engagement/rewards-annotated.png b/.cursor/rules/roblox/assets/resources/feature-packages/engagement/rewards-annotated.png new file mode 100644 index 00000000..2ccdc5fa --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/feature-packages/engagement/rewards-annotated.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4eed76b523728e21f65825eac87fe4c0a66d9945463b153f5e6084b8e432cf7b +size 714480 diff --git a/.cursor/rules/roblox/assets/resources/feature-packages/engagement/rewards.jpg b/.cursor/rules/roblox/assets/resources/feature-packages/engagement/rewards.jpg new file mode 100644 index 00000000..8550ce5e --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/feature-packages/engagement/rewards.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68e9281d3440232e16bddc3085227f5a774532d14967f3f4acc3316dcd2d4c3b +size 117038 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/armillary-asset.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/armillary-asset.png new file mode 100644 index 00000000..23239f88 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/armillary-asset.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3088dfe75a4ace91cd755ef01fd2e8d02ff366df8eaa9ca7849a5dbed78f97b +size 978847 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/armillary-model-package.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/armillary-model-package.png new file mode 100644 index 00000000..f0b528bb --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/armillary-model-package.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0c27bc95040b5d073fadf7ba47135901eeb73dc55808cdf317567d9b04c1a29 +size 86399 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/asset-storage-place.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/asset-storage-place.png new file mode 100644 index 00000000..43099b0d --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/asset-storage-place.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e4f237077aad61e7ed837655308f0bd752f0a6c31e82d8d12c55089c195df27 +size 1074360 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/assigning-textures-crow.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/assigning-textures-crow.png new file mode 100644 index 00000000..2d946e91 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/assigning-textures-crow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:690ef622d6c4e9f123cc776ffd48f75fb82092f147114cd70bd4ad69cbe97017 +size 1651745 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/blueprint-attic.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/blueprint-attic.png new file mode 100644 index 00000000..9e88608f --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/blueprint-attic.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbf23190f96207aa9a1798cfaa50ce5ce6b72ab4c2c3b2c312ae4b505bcc917f +size 48326 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/blueprint-dining.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/blueprint-dining.png new file mode 100644 index 00000000..203f66ce --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/blueprint-dining.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:62105a7d0e236c83a290ee241b72b6223e52926d1b7261a6d874c46e17a5a42d +size 74715 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/blueprint-foyer.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/blueprint-foyer.png new file mode 100644 index 00000000..cdfcaf91 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/blueprint-foyer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19d41dfc8f80f24046ef3fdac91212916cf8314b2d7a357b11c1aa419a1e9a35 +size 61132 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/blueprint-second-floor.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/blueprint-second-floor.png new file mode 100644 index 00000000..b7156fde --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/blueprint-second-floor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0a33662c7c0faf03db55eb6ef97bd3e75f809b3555d1699d40533068f96bb4b +size 74434 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/blueprint-whole-house.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/blueprint-whole-house.png new file mode 100644 index 00000000..8a99dc35 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/blueprint-whole-house.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11a7b960af257c7e8746ef1763b9b3e66ab0a9392ef9745db37c2ea2b964d547 +size 123485 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/convert-to-package-dialog.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/convert-to-package-dialog.png new file mode 100644 index 00000000..f8dcf77c --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/convert-to-package-dialog.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1dc26eb50fe49843054ec2c2d7876cd71c0218788d9922e78838f70301b3d04 +size 36479 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/crow-cleaned-up.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/crow-cleaned-up.png new file mode 100644 index 00000000..1b116d99 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/crow-cleaned-up.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d53b93344a7ee395bc6141483e68a6d6eab7fdf9ac9ca5f6920a4f45e9302839 +size 746884 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/crow-notes.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/crow-notes.png new file mode 100644 index 00000000..c417b93a --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/crow-notes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d136e3acfcbba6e08aa71a1cd2e1cb4c9638c0d86aff0741c4546f0fabb152b +size 1065000 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/decimation-crow.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/decimation-crow.png new file mode 100644 index 00000000..c86e134c --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/decimation-crow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:069f53910ab75c242a81433b4c5268faf45784704b88a21e0a7cafd498141e58 +size 356529 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/decimation-settings.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/decimation-settings.png new file mode 100644 index 00000000..9a683767 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/decimation-settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b19c69d79818d5a8e2a05d2401719e3ef1c4a44398ea2d19cc2f28ea9763840c +size 22607 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/earliest-version-toolbox-house.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/earliest-version-toolbox-house.png new file mode 100644 index 00000000..4da24109 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/earliest-version-toolbox-house.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f73a59f3cc26125f14a6460b143c7863dc18ce37edbd21907a3810c71c96830 +size 969897 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/early-concept-approach-house.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/early-concept-approach-house.png new file mode 100644 index 00000000..a245b4c3 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/early-concept-approach-house.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40a0453184dad278cdf67d8419ae8055a01ef1bdc147bfd29d5836a24b317607 +size 434923 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/early-draft-playable-area.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/early-draft-playable-area.png new file mode 100644 index 00000000..149794f9 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/early-draft-playable-area.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:783bdb236d001098e46240bb397f136cee136d9f334b772847dae459ba9a8842 +size 1200412 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/early-shot-driveway-approach.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/early-shot-driveway-approach.png new file mode 100644 index 00000000..ade9de80 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/early-shot-driveway-approach.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bff0fb5b8f8d194a5dee7f7c737332dac4575bd0cd8eee417f55bc210e7a12ec +size 1356916 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/final-candle-asset.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/final-candle-asset.png new file mode 100644 index 00000000..04bed0e2 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/final-candle-asset.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9dc648b153caaa1d8456146ce163b0267b8cd040065d89c308c1c6219d3e449f +size 1482786 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/final-content-versions.jpeg b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/final-content-versions.jpeg new file mode 100644 index 00000000..82f8b1df --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/final-content-versions.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e94c4d517d48d81909ab03f63f07e7e80ff147d064dec676ff61a7d28a445d7 +size 241488 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/final-crow-asset.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/final-crow-asset.png new file mode 100644 index 00000000..7c5ca418 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/final-crow-asset.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:953396bd8802ae9201132f28e70aa578ff32d9dd8e02d796cfb80572750185ca +size 1278841 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/final-foyer.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/final-foyer.png new file mode 100644 index 00000000..7e54af56 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/final-foyer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e02708d3a3816681d4caa516b3011fbba0bdd06146ebcdfe8795e1fc8a0b50b7 +size 1090436 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/freeform-settings.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/freeform-settings.png new file mode 100644 index 00000000..6eab2ed1 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/freeform-settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:579efce00c893353f5cdf95fed3ae53d75c8d93a4d5c18bb63274537e0064fb3 +size 20943 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/furniture-spreadsheet.jpeg b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/furniture-spreadsheet.jpeg new file mode 100644 index 00000000..7d4d8aba --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/furniture-spreadsheet.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb03647c5d2ab87cf5fa48d787b91869ffe9919daa370e72a8869973f275fa6b +size 294934 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/gray-boxed-versions.jpeg b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/gray-boxed-versions.jpeg new file mode 100644 index 00000000..b5af3104 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/gray-boxed-versions.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6a405885c96154fcce506d9cbfbabaf2a74b580c505728743875df5b89c0ef8 +size 145413 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/gray-mesh-front.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/gray-mesh-front.png new file mode 100644 index 00000000..a5b972f1 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/gray-mesh-front.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7fa76bc0764e9cac474fa791c7aa53572c3b4a535228a48965256a574c44b8fc +size 22412 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/gray-mesh-side.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/gray-mesh-side.png new file mode 100644 index 00000000..54439b4e --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/gray-mesh-side.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6406537a26eab7e770d2ba1241e2b6dd1264beb9b609c1632a1d8d9f4fe7068d +size 63112 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/gray-mesh-top-down.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/gray-mesh-top-down.png new file mode 100644 index 00000000..41e85dbf --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/gray-mesh-top-down.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d216e06587b08ad8b59189587cdaac2f5946cb37f537e836cd3575cfeb2e76af +size 16692 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/hand-draw-crow.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/hand-draw-crow.png new file mode 100644 index 00000000..b3e6211f --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/hand-draw-crow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a16d68998207068a1a3824f95a30669c6acaeae8b5320c0a33b4657e60652ac3 +size 597732 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/metal-surface-appearance-package.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/metal-surface-appearance-package.png new file mode 100644 index 00000000..ca551821 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/metal-surface-appearance-package.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1a80236c9c4a21a5216f896373cac3db5ef6e342470cb441afe0db934db4667 +size 92653 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/original-scan-automated-uvs.jpeg b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/original-scan-automated-uvs.jpeg new file mode 100644 index 00000000..d1acd256 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/original-scan-automated-uvs.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3df0c5cec402c56defcab5b75a2481ba227bfc9c2d2177c04dfecabaa8467ad +size 356978 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/original-scan-candle.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/original-scan-candle.png new file mode 100644 index 00000000..2bd7a460 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/original-scan-candle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bbd297e1f7a379787ad735d74804fe4eaa621dae43a4c7d43caf15d0f8f7b767 +size 2057584 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/original-scan-crow.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/original-scan-crow.png new file mode 100644 index 00000000..6218bc90 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/original-scan-crow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6c5f00feea525234d83b666d3fc6da5d9e6f1b38fe4fd7ab108f644860e9c73 +size 2029394 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/overlapping-crow.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/overlapping-crow.png new file mode 100644 index 00000000..28a7aeec --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/overlapping-crow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48b790c83be00d1bb9cb93b02d6d9ad16d6baf252b05bf727106d053cad3af41 +size 445827 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/overview.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/overview.png new file mode 100644 index 00000000..bb78b8a1 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/overview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2d97289b8d063bf9cce9e13ac271e166e4a38138010d9c83825df21fe858299 +size 1289220 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/package-corrupt-state.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/package-corrupt-state.png new file mode 100644 index 00000000..13ca1832 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/package-corrupt-state.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ee4297f954c3b4a398b16635da2d7bf2f4c84220153ab85da07f5985dd6e77b +size 1548358 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/package-entire-bedroom.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/package-entire-bedroom.png new file mode 100644 index 00000000..d3356616 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/package-entire-bedroom.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3214b6866bc4570951b1159f798ba2223e3e589a9e645ac631114d527fbc92b +size 804719 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/package-normal-state.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/package-normal-state.png new file mode 100644 index 00000000..7b024fd0 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/package-normal-state.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5fb6092d7fd490f3ebb6b31d2bae65fbcf521a7e046cfb37e0be67019957e283 +size 1268856 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/pbr-textures-1.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/pbr-textures-1.png new file mode 100644 index 00000000..45552f3d --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/pbr-textures-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4920c1524e289734214833e6d2793b2fda2233026a8457ade6ca1a53f262bf32 +size 731512 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/pbr-textures-2.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/pbr-textures-2.png new file mode 100644 index 00000000..5ba001b5 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/pbr-textures-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f475532a070ebadada949e6d71e6fe44fb8e47debad3da66c73e0dc955113529 +size 935101 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/retopologized-candle.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/retopologized-candle.png new file mode 100644 index 00000000..af3a2a66 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/retopologized-candle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3b558bd4281eea2b93fc0009043d8c5bb0f1bc67927ad5165f2f17d2b511fb8 +size 1676507 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/retopologized-crow.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/retopologized-crow.png new file mode 100644 index 00000000..3dd43a41 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/retopologized-crow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96164cdcfbefd317318bc9f1cce99ced6237527b165d6ec234112957f4ec83f5 +size 1699429 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/scale-final.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/scale-final.png new file mode 100644 index 00000000..83ee8168 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/scale-final.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dbc19cf8a18084d9dbd2c2014e3435e7415794dc92235b6f69a51167e503a079 +size 332920 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/scale-inside.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/scale-inside.png new file mode 100644 index 00000000..f2769f62 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/scale-inside.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd3f39f33e3171c84516f70d1848dce1605a603d8283a8d6c1aec8637bf6481a +size 287133 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/scale-outside.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/scale-outside.png new file mode 100644 index 00000000..2fcc1a0d --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/scale-outside.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8c6cf95b3bbe411c24003b92fe2e84bf61809461f0cb3941c7167f5b535b265 +size 253687 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/scan-data-candle-final.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/scan-data-candle-final.png new file mode 100644 index 00000000..2bd7a460 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/scan-data-candle-final.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bbd297e1f7a379787ad735d74804fe4eaa621dae43a4c7d43caf15d0f8f7b767 +size 2057584 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/scan-data-crow-final.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/scan-data-crow-final.png new file mode 100644 index 00000000..6218bc90 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/scan-data-crow-final.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6c5f00feea525234d83b666d3fc6da5d9e6f1b38fe4fd7ab108f644860e9c73 +size 2029394 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/scan-data-texture-1.jpeg b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/scan-data-texture-1.jpeg new file mode 100644 index 00000000..70b42843 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/scan-data-texture-1.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6752764901f4571a8dcaf96c0755684719e7197dc8585d2066b6d18bffa02f5 +size 537303 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/scan-data-texture-2.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/scan-data-texture-2.png new file mode 100644 index 00000000..14f5ff32 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/scan-data-texture-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1d4162edfcd5308f4120caaeabcd736ca55b7313e395cb89f9c46a89926662d +size 2728833 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/texture-1.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/texture-1.png new file mode 100644 index 00000000..90355c47 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/texture-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90cbb16f2bdd302f0c9b3f106448dbf89cf6f81e12c44bfa23c103610f67715e +size 1247950 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/texture-2.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/texture-2.png new file mode 100644 index 00000000..b09e6cc0 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/texture-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47199dada7e4258189062316316c41e7813b4fb5eace87e074968ad26721f553 +size 150104 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/texture-3.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/texture-3.png new file mode 100644 index 00000000..339ef02f --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/texture-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4796ea395dcefbb0ff2f908e1e497d2083fb4c175362a420e1d3da480babbb6 +size 577305 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/texture-4.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/texture-4.png new file mode 100644 index 00000000..f5c44315 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/texture-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e90b698587123aadc6047250f678f67fb4b6c1a5c39c43a9840dfade0e943ffb +size 478562 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/zremesher-crow.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/zremesher-crow.png new file mode 100644 index 00000000..793d8543 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/zremesher-crow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53eca7e6aa6c4ea6cd8327af9e3c0b72a022dc5b8e0081273401b4a836065b37 +size 357492 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/zremesher-settings.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/zremesher-settings.png new file mode 100644 index 00000000..6ecb2176 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/constructing-the-house/zremesher-settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb7418124b09289fefcff0e039aa572ffce61d12af8bce9646ad2a7c9c16bbab +size 18456 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/audio-volume.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/audio-volume.png new file mode 100644 index 00000000..3f4ecad8 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/audio-volume.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:737ab4f83a41cee35069f500c3100ad1b0d31e428fe1473f2463f9d5fff28dc4 +size 1085698 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/car-part-volume.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/car-part-volume.png new file mode 100644 index 00000000..d7d63fff --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/car-part-volume.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1730e84d317c5094506bfdbbba102739c65e44987bd1f03007f705c61f9ead6 +size 790111 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/compressorsoundeffect-properties.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/compressorsoundeffect-properties.png new file mode 100644 index 00000000..54330deb --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/compressorsoundeffect-properties.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3bc53c8d800c1c04f698fc79b3a5097cea074acb2c658b007805ecd22c3a04a +size 6129 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/exterior-audio-hierarchy.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/exterior-audio-hierarchy.png new file mode 100644 index 00000000..a86d1ee8 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/exterior-audio-hierarchy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c84e75cb7f57269ede255b8deded05668907616f99bc67447d0633d0d00f2a4 +size 25178 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/main-audio-mixer.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/main-audio-mixer.png new file mode 100644 index 00000000..ebf09ffa --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/main-audio-mixer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1efb353d84cc57128a2b9c90f116113877def11b481345d7315722ed75db1f9e +size 61854 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/overview.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/overview.png new file mode 100644 index 00000000..1e2cb9c5 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/overview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce7de795ef6696fe4fc25ca72df1f3bd653f8e2a6daa444b39d6ef954742a6e6 +size 1871769 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/sound-emitters-hierarchy.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/sound-emitters-hierarchy.png new file mode 100644 index 00000000..e9c260fa --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/sound-emitters-hierarchy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c1ec1b093c0f1fae30161b088502ccd16fc14320394c56ea08ae77a4bd4b15c +size 16536 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/volumetric-audio-emitter-greenhouse.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/volumetric-audio-emitter-greenhouse.png new file mode 100644 index 00000000..8e2c8a5c --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/volumetric-audio-emitter-greenhouse.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e6ac2ad5d80e5b93d8c5c5852b372e24fae8550a40febebe0332e9730e4e8f7 +size 802921 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/volumetric-audio-immersive.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/volumetric-audio-immersive.png new file mode 100644 index 00000000..d494fa7a --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/designing-dark-soundscapes/volumetric-audio-immersive.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb238f16b8ec0fccccae250b4f4d9b7b27cbf2e31cb79a8f2d0a071467bf0bda +size 1154510 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/animated-trees.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/animated-trees.png new file mode 100644 index 00000000..55567670 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/animated-trees.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3513f445a9ef4ea87f7e33b56a2c0d1d1997820f5d6e45b517e2efb9a0dbc2b +size 2039695 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/base-piece.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/base-piece.png new file mode 100644 index 00000000..cd499f56 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/base-piece.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:568ffc637010382769d2efde6e51e8fdf3ae0c2804e8e33cf2c656a1846d7def +size 402639 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/beechwood-joint-animation.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/beechwood-joint-animation.png new file mode 100644 index 00000000..a691d919 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/beechwood-joint-animation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d88b706fb360394f7dd9e2e96ffdb941f4d98995cf3f325196e8f3b41a3e3c44 +size 260610 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/cloud-billboard.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/cloud-billboard.png new file mode 100644 index 00000000..5d0be727 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/cloud-billboard.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45c94177fcf4f1f004fd9a4a2d8ad6a4a4d3e8b1c0464b971ec2d3650435e5f3 +size 163858 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/cloud-shading.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/cloud-shading.png new file mode 100644 index 00000000..56807dbc --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/cloud-shading.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e38eb1bbec74ad434470563570d2d6c69b59b8edb077351c717d11501b87c3c +size 1211044 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/cloud-texture-on-parts.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/cloud-texture-on-parts.png new file mode 100644 index 00000000..04342073 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/cloud-texture-on-parts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:377786e15d6e8b8c57c5e12bd9e500d5c1fbdfb0b77516bf22e184029a87a555 +size 1028279 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/collision-fidelity-treehouse.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/collision-fidelity-treehouse.png new file mode 100644 index 00000000..4ba03138 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/collision-fidelity-treehouse.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2962f1ac61f9a385384b55c6dbce105b4175d04288e7101e6f30af991d4eacea +size 1676640 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/debris-volumes.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/debris-volumes.png new file mode 100644 index 00000000..ef223a01 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/debris-volumes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c076c212ca149dfeeb67789e8b9dd3afa06ef3e2e7ee8feed930dc08207044b +size 1585847 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/eye-of-the-storm-1.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/eye-of-the-storm-1.png new file mode 100644 index 00000000..6d86c215 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/eye-of-the-storm-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df2047c67bae3bb84fa74862e0312a91f90c491c5361e6e7358b7ec1b8e8156e +size 714594 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/eye-of-the-storm-2.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/eye-of-the-storm-2.png new file mode 100644 index 00000000..c2dd1607 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/eye-of-the-storm-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:88f61a78381c64fae31d2a374d0118077866a16fa4b3e35bf3a0475b0c8983d0 +size 921495 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/false-wall.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/false-wall.png new file mode 100644 index 00000000..a064faea --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/false-wall.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6d22f75975fb48f7256035fb142670c3f93268dab8ac97e0da49af2db403378 +size 672577 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/fog-particle-volume.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/fog-particle-volume.png new file mode 100644 index 00000000..3300a332 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/fog-particle-volume.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22be56e3b1c5832a0e34f628de02a30907f67ffb476596084835bf8ea111ecdb +size 1581100 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/fog-particle.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/fog-particle.png new file mode 100644 index 00000000..3fe16fdc --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/fog-particle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa40a2df1fab8c20553c7672e54e84e3b29b19a30ec26fd17e03054d702fab40 +size 287146 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/forest-pack.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/forest-pack.png new file mode 100644 index 00000000..233741e4 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/forest-pack.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5bf955efc6b7e2d41786e206b8a8def42c5929cf5a58bcacbc14abba39b7c879 +size 1931515 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/friends-spinning.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/friends-spinning.png new file mode 100644 index 00000000..aff00747 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/friends-spinning.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:edcbf7f60059840c2ebb4c92d6e544b2969945c269a00c316be5f6a12dabf6ec +size 1729412 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/high-poly-sculpt.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/high-poly-sculpt.png new file mode 100644 index 00000000..b9046105 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/high-poly-sculpt.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e923d3c2d41a3dee20544d40abea5a73447490bbc769b3b37c63123ae83d88bc +size 406097 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/hingeconstraint-properties.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/hingeconstraint-properties.png new file mode 100644 index 00000000..d9795144 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/hingeconstraint-properties.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:928c8f9feef33f36bc02fc726f4ae6db0b77e27b1831ecbae59f76786e516c69 +size 67350 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/illusion-image.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/illusion-image.png new file mode 100644 index 00000000..96390d31 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/illusion-image.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e9d0d43eee6fc919533cb5c18f452baa188a945d27f4f2ed80a6b84c18ee6ed +size 999767 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/layered-cloud-meshes.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/layered-cloud-meshes.png new file mode 100644 index 00000000..a5e76fda --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/layered-cloud-meshes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30ee7d7a6fda000f6d21b83a46162636434e0d5c6d902cd3e53b4aa45271edd0 +size 615968 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/leaf-particle.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/leaf-particle.png new file mode 100644 index 00000000..68a26dea --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/leaf-particle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a4babeac6384fb21007d8f799de6650be31561d87486eba2b5e66b762f009aa +size 77111 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/lightning-bolt-photoshop-settings.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/lightning-bolt-photoshop-settings.png new file mode 100644 index 00000000..4401150c --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/lightning-bolt-photoshop-settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c99c140c3ba6e6521249cabfe93cfcbe66636f37cfb49b31bce0e0587844505 +size 3773 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/lightning-bolts.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/lightning-bolts.png new file mode 100644 index 00000000..1e1ae201 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/lightning-bolts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e995027c5dabdcd01a47d4addbe1d541b262fc77a111cdd38ed9f76e61d28791 +size 26186 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/low-poly-mesh-with-normal-info.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/low-poly-mesh-with-normal-info.png new file mode 100644 index 00000000..82e01ad9 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/low-poly-mesh-with-normal-info.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:903279248dd149f46cd3b8302cb811e07941f9e097a3b330288173c81a4682bb +size 499952 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/low-poly-mesh.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/low-poly-mesh.png new file mode 100644 index 00000000..34548902 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/low-poly-mesh.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:903dda380f5d2317a7c0e93bba42c3c27c45910cb5adb8efa9b81f1bdf8c2a85 +size 444839 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/main-vortex-settings.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/main-vortex-settings.png new file mode 100644 index 00000000..3894066d --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/main-vortex-settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24dd61ae072760882c8025adb75144f11a7bf377441797540e40b0500471b566 +size 3946 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/movement-example.mp4 b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/movement-example.mp4 new file mode 100644 index 00000000..021ecdb1 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/movement-example.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b04a8a3a0068e68231ddf652f5b62e33c3f5c09f19b5def05284825d6a2c7625 +size 9748940 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/obstacle-course.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/obstacle-course.png new file mode 100644 index 00000000..6c117f96 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/obstacle-course.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a56f2fcfc0e0649a14f08ad444eb04fbf6964f0457afc38d8af670fef92ac335 +size 2121797 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/pantry-corrupt-state.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/pantry-corrupt-state.png new file mode 100644 index 00000000..0185ad07 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/pantry-corrupt-state.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08db9eb7fd502419067a0a4a64a879b26004b3dce031def11b4cb8a7dea7d5b9 +size 1049966 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/pantry-movement.mp4 b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/pantry-movement.mp4 new file mode 100644 index 00000000..b0d6be3a --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/pantry-movement.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83d5d95d9c8ebd896584c3365001de58cffb6ebba338f368e237cabe2de24600 +size 11420768 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/part-volumes.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/part-volumes.png new file mode 100644 index 00000000..558ec166 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/part-volumes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:405d7934f0f3f552268209d1337e9f7cbcc85735a0bdde12aca622b96f730148 +size 1046427 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/particle-emitter-properties.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/particle-emitter-properties.png new file mode 100644 index 00000000..d908cbe5 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/particle-emitter-properties.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7d3e5ecac3e17d2db350a96d0cf6d50c49d0da8dd632449ffdd86cad2932ce2 +size 30378 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/particle-emitter-settings.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/particle-emitter-settings.png new file mode 100644 index 00000000..2fc6bd04 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/particle-emitter-settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20579045260e6f02a662eb669dceae782ca75a64b8cbcb220ef775d043c3f956 +size 27737 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/redwood-tree-animation.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/redwood-tree-animation.png new file mode 100644 index 00000000..587b7495 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/redwood-tree-animation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:661eac67cb3e0c639e7c00e89e2542a282f8036b67147b3ad4e86b6b3f504264 +size 1673949 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/show-decomposition-geometry-disabled.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/show-decomposition-geometry-disabled.png new file mode 100644 index 00000000..6ddce213 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/show-decomposition-geometry-disabled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7c22a647c1a0abc4abe3f5bad87fb970246c505eff0edee4fea3e69aa77383e +size 1918432 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/show-decomposition-geometry-enabled.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/show-decomposition-geometry-enabled.png new file mode 100644 index 00000000..93aacfbd --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/show-decomposition-geometry-enabled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3353362dfb49b719a63f20ec3b59f22581b25d3edb618f24826bd49a6167f96 +size 1282255 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/single-cloud-mesh.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/single-cloud-mesh.png new file mode 100644 index 00000000..4db3e605 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/single-cloud-mesh.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a35b175ca28956ae5af541a6aaffd99c7d6056188d70e9226d1afad90b160b26 +size 727847 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/son-puzzle.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/son-puzzle.png new file mode 100644 index 00000000..13ca1832 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/son-puzzle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ee4297f954c3b4a398b16635da2d7bf2f4c84220153ab85da07f5985dd6e77b +size 1548358 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/spinning-elements.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/spinning-elements.png new file mode 100644 index 00000000..ce177fc5 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/spinning-elements.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea3d87399e666b6c2c94dacb5ddb381289734a8abdd866097f3725d9b210220e +size 1822187 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/squash-20.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/squash-20.png new file mode 100644 index 00000000..85f0ef16 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/squash-20.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6e3e1aeecce0dc00952e567cceacae1b28feea5ed5fc9fdec4bdbe1522980b6 +size 539957 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/squash-3.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/squash-3.png new file mode 100644 index 00000000..90ded381 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/squash-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:597aff25b71f47f8ad4de926a0f8d1bf783a1a142424cbfe7b0f94bdb330385f +size 340011 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/storm-iteration-1.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/storm-iteration-1.png new file mode 100644 index 00000000..2f61a21c --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/storm-iteration-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:980f4397db8fd52a847bbfde306061aade39db0a42fc3dc7788f8d776ec5cbda +size 252298 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/storm-iteration-2.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/storm-iteration-2.png new file mode 100644 index 00000000..7640f550 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/storm-iteration-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:078534d45c0d7783a66e0c6e72f74a4aa429667101fd6fc05d4131758ab46851 +size 1259589 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/storm-iteration-3.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/storm-iteration-3.png new file mode 100644 index 00000000..4c5ef1fb --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/storm-iteration-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:494cd5dbfc9d61d3da7bcc7f5b6b5ee325b9213ee540f2cb9ee45d72f346600f +size 1506235 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/storm-iteration-4.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/storm-iteration-4.png new file mode 100644 index 00000000..295bf0f2 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/storm-iteration-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:920d0cd584162e2330e0e5dfec5f2567442fcbf4f6941076484e8b1b78b4d3d9 +size 2506970 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/target-closed.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/target-closed.png new file mode 100644 index 00000000..c98305ce --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/target-closed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f0b50b90bc937de2fa848c506572279516a2773f6c0cac123e262e23b9ff8d6 +size 1291735 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/tree-animation-import.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/tree-animation-import.png new file mode 100644 index 00000000..536ef86d --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/tree-animation-import.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9dcdce68c46cd298c0e248b2ce0109f4ebff20d7530416c725da97972d1665c +size 827937 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/tree-hierarchy.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/tree-hierarchy.png new file mode 100644 index 00000000..85fe80da --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/tree-hierarchy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff05a06651bf8085dbae2d560a9936b0832f1879032123a081594d9350fc8521 +size 1257461 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/tree-joints.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/tree-joints.png new file mode 100644 index 00000000..6b2a9e4d --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/tree-joints.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1eb32413bdcfd98179d43e3c86ec26d484dc9c5bc5bb89457b0c8a466c51ed1 +size 364075 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/treehouse-mesh.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/treehouse-mesh.png new file mode 100644 index 00000000..a986b162 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/treehouse-mesh.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d24d4f2206b738e96ef9cd7115e4baea9f0a62a5b0795045fb8fe52507d809bf +size 2655854 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/treehouse-texture.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/treehouse-texture.png new file mode 100644 index 00000000..e9efe14c --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/treehouse-texture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eca1cdf6dcb46780bfb95b773c0474e4e7d9663188f6302bf0c8ea6d26a1ba3a +size 1614334 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/unanchored-platform.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/unanchored-platform.png new file mode 100644 index 00000000..3cf3fb38 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/unanchored-platform.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:502f8afccce07fd7e084f485564cb47cc36a994afcec614209edeae807fc7ab6 +size 411853 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/vertex-painting.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/vertex-painting.png new file mode 100644 index 00000000..7583801d --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/vertex-painting.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dbaceada53d6911ac5dc5c0a1738c946d2529e4500a3db5621a7dec3590390e0 +size 79734 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/yellow-part-volume.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/yellow-part-volume.png new file mode 100644 index 00000000..d9f8ef3d --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/developing-a-moving-world/yellow-part-volume.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:631c0bfbbab790aa3931fe307b1fdfbb87ce54abd16dc7f2b8acc398922a0b06 +size 955913 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/announcements-interrupt.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/announcements-interrupt.png new file mode 100644 index 00000000..77f22b80 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/announcements-interrupt.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c72fa0f8daf4aa709e2e3e895a088123c34259540ecc26de26b33e1cdc46cff7 +size 1432995 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/announcements-purple.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/announcements-purple.png new file mode 100644 index 00000000..9b180c91 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/announcements-purple.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f93b42f27b71fc9539d27f34f1bb28157ce694aeb43ebe8d16ffa3e6da4824a +size 1226510 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/announcements-white.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/announcements-white.png new file mode 100644 index 00000000..72c39317 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/announcements-white.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:178f441d786b7116c692212ae2e2dcc67fe6bad5aa4398534afd401a42ffebc1 +size 1720165 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/announcements-yellow.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/announcements-yellow.png new file mode 100644 index 00000000..30f53b73 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/announcements-yellow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc272e6acd3778d4001a87dfa3205e7de612ac2afb55b5f1905d220ddaaf98a6 +size 1256109 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/barn-owl-thought-bubbles.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/barn-owl-thought-bubbles.png new file mode 100644 index 00000000..5099e847 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/barn-owl-thought-bubbles.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f15cb8cef37900fe66827e4de31f801f67d8a98e17a0eee32acc0cf1e9f423c +size 1004036 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/blank-textlabel.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/blank-textlabel.png new file mode 100644 index 00000000..aea7034b --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/blank-textlabel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc3b17a6c3bb976280e5a2b0bd0726643d26441999a091ce42cf750c619b201e +size 1241358 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/chalkboard.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/chalkboard.png new file mode 100644 index 00000000..d271e46b --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/chalkboard.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ae96012a1e74486d41dd1cbbbcab2299d75f2d8c2a1c03e6ff7ac5e137a416d +size 1024516 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/dog-statue-lore.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/dog-statue-lore.png new file mode 100644 index 00000000..2951e5c1 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/dog-statue-lore.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32a25abc7162a2cedade84650da5680f54189256ed3efc9c7dad5609169f573a +size 1170352 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/dog-statue.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/dog-statue.png new file mode 100644 index 00000000..d4e32f4a --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/dog-statue.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ad39c56d00e7c85d0c1c3d46a56885911419ce6f0703e79ed3705a5c401a9cc +size 1202343 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/example-script.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/example-script.png new file mode 100644 index 00000000..5b722a05 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/example-script.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bce440ccb5489b262d5008d0a56c370fad98ca35877eeaa364b9e8e962fd41e +size 26325 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/grandfather-room.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/grandfather-room.png new file mode 100644 index 00000000..a8acfb71 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/grandfather-room.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13d3a18fb2ac837614261e09f526dc9f03fb98915faa1f866d30306091406fee +size 930229 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/jacob-photo-album.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/jacob-photo-album.png new file mode 100644 index 00000000..e5332a87 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/jacob-photo-album.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b84191280f63d2858698cfe180f5fed9e23cd4e51bb7b248bfd66e1abbda795 +size 200454 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/lore-1.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/lore-1.png new file mode 100644 index 00000000..94629722 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/lore-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2db71614f593a42c03b5e82887bdac436de3661e24c282ebdf34bfba4cf48f4b +size 307586 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/lore-2.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/lore-2.png new file mode 100644 index 00000000..d6507bd3 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/lore-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61429432aef2a3e260e10d586cc1c46da9672f52aca0c69bad8a0271a76db245 +size 287172 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/lore-3.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/lore-3.png new file mode 100644 index 00000000..25aec369 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/lore-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:10d147ff3c9759ff38544214946d24919148add25b85fe9e7fa90a21fff44ff4 +size 334600 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/lore-4.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/lore-4.png new file mode 100644 index 00000000..371a14f2 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/lore-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5e31d20813e68d2b406048c3a58127672256693a8098771e47f654a9d102ae7 +size 327735 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/lore-template.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/lore-template.png new file mode 100644 index 00000000..2663bc5a --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/lore-template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7cb752040c7533165f3fae38fcf9975eb71963197eeb5f1f3bad0e6069a1dbd +size 693170 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/overlay-back-button.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/overlay-back-button.png new file mode 100644 index 00000000..5bbd32d9 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/overlay-back-button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6718f83b4c2a30f9168dd5874400181cb4947a6e5a13d82bc4f96c650554626b +size 31300 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/overview-announcement.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/overview-announcement.png new file mode 100644 index 00000000..9c1529ae --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/overview-announcement.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:382dc46e6f31013567ce7d9b2e684c76d07f1de752405f2be57db1b5292a2edf +size 1642927 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/overview-thought-bubble.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/overview-thought-bubble.png new file mode 100644 index 00000000..5099e847 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/overview-thought-bubble.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f15cb8cef37900fe66827e4de31f801f67d8a98e17a0eee32acc0cf1e9f423c +size 1004036 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/overview-visual-cues.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/overview-visual-cues.png new file mode 100644 index 00000000..3e0552bd --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/overview-visual-cues.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d68360098edd3fc1ad8b3e6c380822d312529461ef048c85b4337a80fca5024 +size 1156185 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/power-line.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/power-line.png new file mode 100644 index 00000000..ed226b92 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/power-line.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c81f271e18957819eafd5f4ec611c033eeb732701d7820e9734a86477a4e6433 +size 1591541 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/richtext-thought-bubble.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/richtext-thought-bubble.png new file mode 100644 index 00000000..522bbadb --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/richtext-thought-bubble.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0fe80b919f8168de430d2f24a13141c28927649c528fb10d4c2cf2db59fd6f55 +size 1419841 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/storynote-object.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/storynote-object.png new file mode 100644 index 00000000..1bce513c --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/immersive-narrative/storynote-object.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba9c8f593d945d20cd3ed6ddac05a77c41b642f8daebb073ab05c1418d4ae0b5 +size 1037365 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/1-1-texture.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/1-1-texture.png new file mode 100644 index 00000000..ae4e5b64 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/1-1-texture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ae917b56f3e5775b79b1b0ebbe2fa486b972fbcee77cc8bebeedaa3564824b8 +size 413830 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/after-override.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/after-override.png new file mode 100644 index 00000000..367afa75 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/after-override.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:325a434563f5e0b9acf92242e2c4f31e00eed5c354fec2067de75a1155cd96df +size 5108852 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/alpha-merge-substance-designer.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/alpha-merge-substance-designer.png new file mode 100644 index 00000000..af48d5f7 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/alpha-merge-substance-designer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1be2d6cb1e64e45c9e215022d6a8c2366e9f1ee55bb726ee1051037c97e192e6 +size 560567 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/backyard-terrain-materials.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/backyard-terrain-materials.png new file mode 100644 index 00000000..197924c1 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/backyard-terrain-materials.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3484b712fb5442fa5470d638df71113f4c2b34ba40532ecadd6fac44d8ca065 +size 1915320 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/backyard-wet-material-variants.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/backyard-wet-material-variants.png new file mode 100644 index 00000000..1cac1ebc --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/backyard-wet-material-variants.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35449ce07974cc655dd4edac1ed63efc7827040141b87681ff6fcd288eab380a +size 1478330 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/basecolor-rgb.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/basecolor-rgb.png new file mode 100644 index 00000000..5e851269 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/basecolor-rgb.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51c42bc5e55063189dc244f8139512acc21c864ad8f3b9487c2873fd2ea6f541 +size 1104440 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/before-override.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/before-override.png new file mode 100644 index 00000000..936bdd8d --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/before-override.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7bf410e3730554b4acd1dcf4dd79219e86e5996ebc63699043a98547bf98a68 +size 4675064 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/cleaner-texture.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/cleaner-texture.png new file mode 100644 index 00000000..5ed2a0fe --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/cleaner-texture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e819dc2a1b57d2df5a18bf9b6af8f29869abf496ea5982536659253138bed079 +size 1419342 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/couch-surface-appearance-set.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/couch-surface-appearance-set.png new file mode 100644 index 00000000..a5864467 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/couch-surface-appearance-set.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:797f23c3f8f84fa406d7eba359dbdc933657ce18e11a9b0b1675c13edf127d04 +size 1766924 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/craftsman-reference-images.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/craftsman-reference-images.png new file mode 100644 index 00000000..6bbc3cc4 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/craftsman-reference-images.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a6e9a06e481689895938e3ba78a56fbec6a1ebdb059142608dbd88c5d527fc7 +size 2271166 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/edit-variant-dialog.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/edit-variant-dialog.png new file mode 100644 index 00000000..2b914550 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/edit-variant-dialog.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14d7c8662c4b5f44006f5a7ed7e6c6f83acb1817ee2a78466947e3e837777df0 +size 1093577 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/final-alpha.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/final-alpha.png new file mode 100644 index 00000000..13669cb7 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/final-alpha.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:309de5078305d55a95f49ad3660fdfbcad5887f72e009d3407f4ad68b800730d +size 806776 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/final-surface-on-couch.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/final-surface-on-couch.png new file mode 100644 index 00000000..670e5e70 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/final-surface-on-couch.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81cdc1c678c82666b0fe0ef307b39f10047bb7823d9bc1789f43b658eb830db6 +size 1949084 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/furniture-set-stain.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/furniture-set-stain.png new file mode 100644 index 00000000..2d2f1782 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/furniture-set-stain.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:516a42cff874d04b3bbd1ff81adf98215ad67e71f73a8316b1a72df317414616 +size 1617844 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/height-map.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/height-map.png new file mode 100644 index 00000000..ed653a0b --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/height-map.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f049743b3c9f52816a00100de16289e56abaf8d867b3954b50fcc4c9e027d975 +size 777323 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/leather-couch-settings.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/leather-couch-settings.png new file mode 100644 index 00000000..9abe1e95 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/leather-couch-settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:950dc3044b75b2dd278db4139b8f409e96ae53dbe0fdae5ae83419d0aea576e2 +size 70509 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/leather-trim-texture-set.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/leather-trim-texture-set.png new file mode 100644 index 00000000..157e18ad --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/leather-trim-texture-set.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b0932596493edc44e89663bb066406a287d4dd60bcf3a283ace1825a876a5be +size 1088447 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/material-variant-overrides.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/material-variant-overrides.png new file mode 100644 index 00000000..689da99f --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/material-variant-overrides.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9862dfefb4c70f7b07b01a1d6576ff020d3849e79acb8434bc44b6a7890b6df8 +size 2351150 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/mesh-in-foreground.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/mesh-in-foreground.png new file mode 100644 index 00000000..76bdef43 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/mesh-in-foreground.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c816d22967d0b9c7ef51969acecaa8a165dacb58ebc013036066f443069b1e7 +size 2345780 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/only-colormap-and-mesh-color.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/only-colormap-and-mesh-color.png new file mode 100644 index 00000000..6ee43ba3 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/only-colormap-and-mesh-color.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:abc4e1d8798dd3a9e2268779342c1514875a604da21e55274b498d7907a8160e +size 819737 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/overview.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/overview.png new file mode 100644 index 00000000..bb78b8a1 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/overview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2d97289b8d063bf9cce9e13ac271e166e4a38138010d9c83825df21fe858299 +size 1289220 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/rgba-in-combination.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/rgba-in-combination.png new file mode 100644 index 00000000..94a1329e --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/rgba-in-combination.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ef8a54eaba91d0ce10c7b501d010c518c78c229bbb7fa7dba0b7335e0794e68 +size 981905 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/scratches-and-wear-mask.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/scratches-and-wear-mask.png new file mode 100644 index 00000000..04360a8f --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/scratches-and-wear-mask.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f37ce5c99eda473b41c96a74327fae5f747c3cb7827b5823d46a940cb89506e8 +size 1183275 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/set-override.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/set-override.png new file mode 100644 index 00000000..86050f8b --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/set-override.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:efb3798eaebe90564477ad69550bcb58c055a958cb6c663ad0c6d37c18f8163b +size 476770 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/tiling-texture.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/tiling-texture.png new file mode 100644 index 00000000..dfa9240f --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/tiling-texture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9fdacf9b0889ca1a5091bf27e81d913be3784473478ac5d8aeb78fc2b18e659c +size 1197721 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/too-much-detail-texture.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/too-much-detail-texture.png new file mode 100644 index 00000000..2daf62ef --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/too-much-detail-texture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3db7512199640114354a82d13dee1065d47a9d86d58d9024f5a524f94f0d3f6e +size 1574960 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/transform-2d-node.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/transform-2d-node.png new file mode 100644 index 00000000..d29f9adc --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/transform-2d-node.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81e4677f83ce485e03991969f142fe465ea24b32b7d1ca83a5cde3efbb5316d7 +size 616819 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/trim-texture.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/trim-texture.png new file mode 100644 index 00000000..90355c47 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/trim-texture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90cbb16f2bdd302f0c9b3f106448dbf89cf6f81e12c44bfa23c103610f67715e +size 1247950 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/wood-trim-asset-place.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/wood-trim-asset-place.png new file mode 100644 index 00000000..088da399 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/wood-trim-asset-place.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26f7ac353a18d39588e3647fdf080f334107d6d0f9808a97f097b3f9bbf96e27 +size 1977080 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/wood-trim-assets-in-place.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/wood-trim-assets-in-place.png new file mode 100644 index 00000000..97f1503e --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/wood-trim-assets-in-place.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b1fe61a813a8edb74c783ac3200acea267b69c85ddf327fda33a6fbbe80febe +size 1535467 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/wood-trim-texture-set.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/wood-trim-texture-set.png new file mode 100644 index 00000000..aeeb88a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/materializing-the-world/wood-trim-texture-set.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80c4f17a2b3e3d5717b52a4b084256d8408f53cd11e26bdd7a7120876605a151 +size 666775 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/overview/overview.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/overview/overview.png new file mode 100644 index 00000000..122e76ef --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/overview/overview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b7330a263e2717ff9084193d41148bdf84d3bf2451b686f6a9bb1ee75d584ad +size 1781189 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/streaming-in-immersion/1024-max-distance.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/streaming-in-immersion/1024-max-distance.png new file mode 100644 index 00000000..9793d768 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/streaming-in-immersion/1024-max-distance.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d28aa386ad2092528b0dff8a384bc493ab4a88c4691ca2750cbcee87d98d917 +size 1840754 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/streaming-in-immersion/64-max-distance.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/streaming-in-immersion/64-max-distance.png new file mode 100644 index 00000000..d987f753 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/streaming-in-immersion/64-max-distance.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:426dfdc5c630959d95f628fb977d649d6c041ea69c0b25011bb466c9b39ddfb9 +size 1539566 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/streaming-in-immersion/content-streaming.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/streaming-in-immersion/content-streaming.png new file mode 100644 index 00000000..d93ed862 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/streaming-in-immersion/content-streaming.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78216c4fb7463c17e2ff5eaf4a0987dc518d5b4685604f8113e18c301aa9908e +size 1458277 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/streaming-in-immersion/perspective-house.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/streaming-in-immersion/perspective-house.png new file mode 100644 index 00000000..122e76ef --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/streaming-in-immersion/perspective-house.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b7330a263e2717ff9084193d41148bdf84d3bf2451b686f6a9bb1ee75d584ad +size 1781189 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/streaming-in-immersion/perspective-treelines.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/streaming-in-immersion/perspective-treelines.png new file mode 100644 index 00000000..3c78caf1 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/streaming-in-immersion/perspective-treelines.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:198f240b53e2eb867dc38d81d41e5d3689b65ce9bb088e3db889b18fe2332ed5 +size 1491767 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/streaming-in-immersion/winding-path.png b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/streaming-in-immersion/winding-path.png new file mode 100644 index 00000000..947d09b7 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/streaming-in-immersion/winding-path.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc7321015b95fd85f1693d3ab37124f89a7161e52a687171add44531c1816842 +size 1316858 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/technical-overview/cutscene.mp4 b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/technical-overview/cutscene.mp4 new file mode 100644 index 00000000..44155459 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/technical-overview/cutscene.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bd3520700f6bcc3b0fa30c3786d24fbeaa2037c790db9ca1f460e96d30f5618 +size 15948931 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/technical-overview/interpolation.mp4 b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/technical-overview/interpolation.mp4 new file mode 100644 index 00000000..cdfa241a --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/technical-overview/interpolation.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4dca769116a271eacb6eb3175e720cbff9642d905311728fd9dfc05e20f578b9 +size 6939862 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/technical-overview/key-grabbing-system.jpg b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/technical-overview/key-grabbing-system.jpg new file mode 100644 index 00000000..da170482 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/technical-overview/key-grabbing-system.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:832a05a4bc93e20f4a658f82ffb43f1dde31e3ed28e21eba4d594eeca2e4055f +size 676761 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/technical-overview/respawning-players.mp4 b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/technical-overview/respawning-players.mp4 new file mode 100644 index 00000000..b288a88d --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/technical-overview/respawning-players.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65a1c01ae3b448f80c580064699eec00a6c341a4171dd60865bc3f25a153fff7 +size 8998718 diff --git a/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/technical-overview/simple-lobby.jpg b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/technical-overview/simple-lobby.jpg new file mode 100644 index 00000000..e5754bd2 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/mystery-of-duvall-drive/technical-overview/simple-lobby.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e77e307b3020c34ce9610d12fbb38505cbeac5340e98cfe65afaed605df39b87 +size 363140 diff --git a/.cursor/rules/roblox/assets/resources/npc-kit/Endorsed-NPC-NP-C-9000-Robots.jpeg b/.cursor/rules/roblox/assets/resources/npc-kit/Endorsed-NPC-NP-C-9000-Robots.jpeg new file mode 100644 index 00000000..fbad887b --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/npc-kit/Endorsed-NPC-NP-C-9000-Robots.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f22b904b7cc6aae01af82eeec7571e17e28f489153d51f2d651a2ba351a1aa6f +size 69728 diff --git a/.cursor/rules/roblox/assets/resources/npc-kit/Endorsed-NPC-RO-01-Robots.jpeg b/.cursor/rules/roblox/assets/resources/npc-kit/Endorsed-NPC-RO-01-Robots.jpeg new file mode 100644 index 00000000..bbe92f4f --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/npc-kit/Endorsed-NPC-RO-01-Robots.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c43ae39415fc98aab2e85f142abfacd7af9b623ccba6021325297d499bd4f187 +size 48324 diff --git a/.cursor/rules/roblox/assets/resources/npc-kit/Endorsed-NPC-Soldiers.jpeg b/.cursor/rules/roblox/assets/resources/npc-kit/Endorsed-NPC-Soldiers.jpeg new file mode 100644 index 00000000..3a327784 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/npc-kit/Endorsed-NPC-Soldiers.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f2d2a2484887e7f75cd8d8895f8986b35a3ed240790199c61edeebc4d27fbe9 +size 74031 diff --git a/.cursor/rules/roblox/assets/resources/npc-kit/Endorsed-NPC-Zombie.jpeg b/.cursor/rules/roblox/assets/resources/npc-kit/Endorsed-NPC-Zombie.jpeg new file mode 100644 index 00000000..50621b89 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/npc-kit/Endorsed-NPC-Zombie.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db70ac04e0b1c33e36f8d1057d0ebad00a195476a33d8b5327a21653c796b73a +size 44141 diff --git a/.cursor/rules/roblox/assets/resources/plant/Architecture-Systems.png b/.cursor/rules/roblox/assets/resources/plant/Architecture-Systems.png new file mode 100644 index 00000000..1d4b9e20 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/plant/Architecture-Systems.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dba158dbeb50b6df63e8cc9472bb8c349751bc0ab683bc9e4b44473125af6305 +size 31389 diff --git a/.cursor/rules/roblox/assets/resources/plant/Architecture-UI.png b/.cursor/rules/roblox/assets/resources/plant/Architecture-UI.png new file mode 100644 index 00000000..911b9d0c --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/plant/Architecture-UI.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3c320f4dc1d4fc20a2edab20cb6db4e0f8c8ca84f0614c6ea8a8463bb9531c2 +size 45900 diff --git a/.cursor/rules/roblox/assets/resources/plant/Project-Banner.jpg b/.cursor/rules/roblox/assets/resources/plant/Project-Banner.jpg new file mode 100644 index 00000000..42c304b7 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/plant/Project-Banner.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79fa7f5009d13345806fdb51d1cb2dd68e53e27e08f76863109d0e3c3623f501 +size 199824 diff --git a/.cursor/rules/roblox/assets/resources/roblox-connect/Camera-Mode-Cinematic.jpg b/.cursor/rules/roblox/assets/resources/roblox-connect/Camera-Mode-Cinematic.jpg new file mode 100644 index 00000000..8781a3d0 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/roblox-connect/Camera-Mode-Cinematic.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79bebc880d5f7789649947faad829324d10146bbde81e42cb91f0637451944eb +size 120379 diff --git a/.cursor/rules/roblox/assets/resources/roblox-connect/Camera-Mode-PiP.jpg b/.cursor/rules/roblox/assets/resources/roblox-connect/Camera-Mode-PiP.jpg new file mode 100644 index 00000000..2144b927 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/roblox-connect/Camera-Mode-PiP.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce9949eb1fb9220f8a64bc4396b0b3815991e667a4cd8def575257c1e05f2632 +size 113359 diff --git a/.cursor/rules/roblox/assets/resources/roblox-connect/Camera-Mode-Switcher.png b/.cursor/rules/roblox/assets/resources/roblox-connect/Camera-Mode-Switcher.png new file mode 100644 index 00000000..0047849e --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/roblox-connect/Camera-Mode-Switcher.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d9f8d83262a7602183bf8a758e055d35c809843d1c21a74b4b5ce81cb43958a +size 94043 diff --git a/.cursor/rules/roblox/assets/resources/roblox-connect/CanSendCallingInviteAsync.mp4 b/.cursor/rules/roblox/assets/resources/roblox-connect/CanSendCallingInviteAsync.mp4 new file mode 100644 index 00000000..9579796f --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/roblox-connect/CanSendCallingInviteAsync.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31c32319b1230419ff3e99fee17e2c848d0534006abd816dd16e205eb26489ff +size 460907 diff --git a/.cursor/rules/roblox/assets/resources/roblox-connect/Emote-Bar.jpg b/.cursor/rules/roblox/assets/resources/roblox-connect/Emote-Bar.jpg new file mode 100644 index 00000000..78f1bbd1 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/roblox-connect/Emote-Bar.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a423db9a721c13b3bbb0fe33cc9bc1f92cd99e75bbc6e35861dea1c3762e566 +size 116553 diff --git a/.cursor/rules/roblox/assets/resources/roblox-connect/Environment-Switcher.png b/.cursor/rules/roblox/assets/resources/roblox-connect/Environment-Switcher.png new file mode 100644 index 00000000..35c78efc --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/roblox-connect/Environment-Switcher.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb75cf5e6d9986e1cc80d0362e3fc7a23e477561be2b78be85eda7a2de29d50d +size 211436 diff --git a/.cursor/rules/roblox/assets/resources/roblox-connect/GetDeviceCameraCFrame.mp4 b/.cursor/rules/roblox/assets/resources/roblox-connect/GetDeviceCameraCFrame.mp4 new file mode 100644 index 00000000..1dbee54f --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/roblox-connect/GetDeviceCameraCFrame.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3007813205667144c7b2b64ef0ea6e8337aa3188599e3c01f222466929fadb7 +size 3973134 diff --git a/.cursor/rules/roblox/assets/resources/roblox-connect/PromptPhoneBook.mp4 b/.cursor/rules/roblox/assets/resources/roblox-connect/PromptPhoneBook.mp4 new file mode 100644 index 00000000..03680c5c --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/roblox-connect/PromptPhoneBook.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4e2c97e7414912936ead596e87ba7cf92916db9ba9a348b183f8877c417bcf7 +size 686829 diff --git a/.cursor/rules/roblox/assets/resources/roblox-connect/ShowHideSelfView.mp4 b/.cursor/rules/roblox/assets/resources/roblox-connect/ShowHideSelfView.mp4 new file mode 100644 index 00000000..17096792 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/roblox-connect/ShowHideSelfView.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b84bd733be421a438aebbd95290e4a9e04962ca50c0b3406825c130d70fd539a +size 5343203 diff --git a/.cursor/rules/roblox/assets/resources/templates/Baseplate-Template.png b/.cursor/rules/roblox/assets/resources/templates/Baseplate-Template.png new file mode 100644 index 00000000..3048e659 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/templates/Baseplate-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78bc016c9f608395c507299e1bf51ed34a09dc78cd266c47b341be6c28f2a9a0 +size 195645 diff --git a/.cursor/rules/roblox/assets/resources/templates/CTF-Template.png b/.cursor/rules/roblox/assets/resources/templates/CTF-Template.png new file mode 100644 index 00000000..92b71361 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/templates/CTF-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9f517984ad12b9b065608a91126cdbbcb1fcc5093211f2ac232018d3c04a8f7 +size 3930239 diff --git a/.cursor/rules/roblox/assets/resources/templates/Castle-Template.png b/.cursor/rules/roblox/assets/resources/templates/Castle-Template.png new file mode 100644 index 00000000..5ebe384d --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/templates/Castle-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:028557e008c29b22a737a3c271602af41cde8d38026ae1f2492f71f999c6983c +size 5253864 diff --git a/.cursor/rules/roblox/assets/resources/templates/Classic-Baseplate-Template.png b/.cursor/rules/roblox/assets/resources/templates/Classic-Baseplate-Template.png new file mode 100644 index 00000000..8db5a201 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/templates/Classic-Baseplate-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39d96b28d3c8d9f8ebc6414829169e03475ecea4626357992c084ddc84ab3ae9 +size 3492153 diff --git a/.cursor/rules/roblox/assets/resources/templates/Classic-Racing-Template.png b/.cursor/rules/roblox/assets/resources/templates/Classic-Racing-Template.png new file mode 100644 index 00000000..110fe99a --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/templates/Classic-Racing-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd73fbca2c0f7566309b17fe8ae9e1f3269c0b3820ada9bfa20ec42a5263fdad +size 3477681 diff --git a/.cursor/rules/roblox/assets/resources/templates/Combat-Template.png b/.cursor/rules/roblox/assets/resources/templates/Combat-Template.png new file mode 100644 index 00000000..6d80c972 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/templates/Combat-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d8812c3c857143ef08e36cda29342e300b0fec452d3059d4e81027620ff93fc +size 4999254 diff --git a/.cursor/rules/roblox/assets/resources/templates/Concert-Template.png b/.cursor/rules/roblox/assets/resources/templates/Concert-Template.png new file mode 100644 index 00000000..73a2faed --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/templates/Concert-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:309eca3927bb1aa796da4a54e19f56e1574b331773fe5f3b1eb695ccef8f969a +size 3662138 diff --git a/.cursor/rules/roblox/assets/resources/templates/FFA-Template.png b/.cursor/rules/roblox/assets/resources/templates/FFA-Template.png new file mode 100644 index 00000000..86736f24 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/templates/FFA-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef79bef9cdcb3164873a2f71eca1bd1ba3a47796d30e1d274234eed9087a368e +size 2940731 diff --git a/.cursor/rules/roblox/assets/resources/templates/FPS-System-Template.png b/.cursor/rules/roblox/assets/resources/templates/FPS-System-Template.png new file mode 100644 index 00000000..7738d05c --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/templates/FPS-System-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79a14111e469d7b5e7eee47ea76ab323efabd17223559beae5662059bfbc226e +size 18448 diff --git a/.cursor/rules/roblox/assets/resources/templates/Flat-Terrain-Template.png b/.cursor/rules/roblox/assets/resources/templates/Flat-Terrain-Template.png new file mode 100644 index 00000000..806771ea --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/templates/Flat-Terrain-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d67d2da9f55533ef740a6a5b609f8eafd716da1b96d9659bc3ec908f2d74695 +size 4758237 diff --git a/.cursor/rules/roblox/assets/resources/templates/Homestore-Template.png b/.cursor/rules/roblox/assets/resources/templates/Homestore-Template.png new file mode 100644 index 00000000..9e9ef36d --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/templates/Homestore-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bdc98c30e427fff307155f0503e3c7960fe2ec7c40c6c3f229e77b2cb7f3c9e +size 629527 diff --git a/.cursor/rules/roblox/assets/resources/templates/Laser-Tag-Template.png b/.cursor/rules/roblox/assets/resources/templates/Laser-Tag-Template.png new file mode 100644 index 00000000..d7f23b64 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/templates/Laser-Tag-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d47f5a7e5267f0323122ce70e89f54a8ccebe828369375b3e4016a7f24f08cf3 +size 90862 diff --git a/.cursor/rules/roblox/assets/resources/templates/Line-Runner-Template.png b/.cursor/rules/roblox/assets/resources/templates/Line-Runner-Template.png new file mode 100644 index 00000000..495b324e --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/templates/Line-Runner-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a4000ea4a2d55b55fc46826f1d02228c6f5cac2cb2c34992856bc9b59f0e1da +size 2841724 diff --git a/.cursor/rules/roblox/assets/resources/templates/MIS-Template.png b/.cursor/rules/roblox/assets/resources/templates/MIS-Template.png new file mode 100644 index 00000000..70361230 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/templates/MIS-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28836925ed02bc93a6c1a3721cefa437f9298b6dd8f4e99fcd39b6d38247b1b1 +size 3865838 diff --git a/.cursor/rules/roblox/assets/resources/templates/MOW-Template.png b/.cursor/rules/roblox/assets/resources/templates/MOW-Template.png new file mode 100644 index 00000000..20b515c4 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/templates/MOW-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e19e7d369963f4875a84fc3093f323522fa09bf35cf18dde371710f4163db8b7 +size 3738897 diff --git a/.cursor/rules/roblox/assets/resources/templates/Obby-Template.png b/.cursor/rules/roblox/assets/resources/templates/Obby-Template.png new file mode 100644 index 00000000..36bc020f --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/templates/Obby-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7fdbe903ef4fd83e9dba1e43bd1c205c2328a70eae7d401fc73bcf01f32e2feb +size 1703257 diff --git a/.cursor/rules/roblox/assets/resources/templates/Pirate-Island-Template.png b/.cursor/rules/roblox/assets/resources/templates/Pirate-Island-Template.png new file mode 100644 index 00000000..424e242a --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/templates/Pirate-Island-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:067bd2accc7f9c46b681dcd0547822373493bb2a4dfe86d4e4ec72dbe3f2aa98 +size 3710799 diff --git a/.cursor/rules/roblox/assets/resources/templates/Platformer-Template.png b/.cursor/rules/roblox/assets/resources/templates/Platformer-Template.png new file mode 100644 index 00000000..68ff26e6 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/templates/Platformer-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0f29e6f9713d01b32bd5613aac1d41aaf962fc777026d1f2dfab8a8236c3a1a +size 2611090 diff --git a/.cursor/rules/roblox/assets/resources/templates/Racing-Template-2.png b/.cursor/rules/roblox/assets/resources/templates/Racing-Template-2.png new file mode 100644 index 00000000..dd839f2b --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/templates/Racing-Template-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd7ec235ff294fb9b9304370a18fc8bacb2c4935716711237658195ef4aebb5c +size 223627 diff --git a/.cursor/rules/roblox/assets/resources/templates/Racing-Template.png b/.cursor/rules/roblox/assets/resources/templates/Racing-Template.png new file mode 100644 index 00000000..387f2e73 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/templates/Racing-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54463b99287483e3c62c85f2a71d38bb16f8cc83dc613f7e320adfce2f89db41 +size 95244 diff --git a/.cursor/rules/roblox/assets/resources/templates/Starting-Place-Template.png b/.cursor/rules/roblox/assets/resources/templates/Starting-Place-Template.png new file mode 100644 index 00000000..25358790 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/templates/Starting-Place-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:302e0d717557d737c0783931cb4757c6b57b8f8b21623ffc59dd8e93925e93a5 +size 4648264 diff --git a/.cursor/rules/roblox/assets/resources/templates/Suburban-Template.png b/.cursor/rules/roblox/assets/resources/templates/Suburban-Template.png new file mode 100644 index 00000000..bf7c06b5 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/templates/Suburban-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6023dd983293fe9587d611d8424e74697fa72c7a1f7d1b0237565f8510b79ed +size 4202451 diff --git a/.cursor/rules/roblox/assets/resources/templates/Village-Template.png b/.cursor/rules/roblox/assets/resources/templates/Village-Template.png new file mode 100644 index 00000000..dfffe012 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/templates/Village-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00d11ff8390039757e16f57546a14f7a2579d3f05ad2564678b4e9852eb8dfea +size 5206154 diff --git a/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-AR.jpeg b/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-AR.jpeg new file mode 100644 index 00000000..404d3737 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-AR.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1f10c72de471c372256e6796e4ec136025d49631fab0fb2b38500291b43c56e +size 41237 diff --git a/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Crossbow.jpeg b/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Crossbow.jpeg new file mode 100644 index 00000000..12e4d358 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Crossbow.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09f5bf8788d9f9f6bdfb9af31eedb26239ec20d7ed480c17460975bca041696c +size 49041 diff --git a/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Grenade-Launcher.jpeg b/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Grenade-Launcher.jpeg new file mode 100644 index 00000000..defa2ec5 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Grenade-Launcher.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33cc325a8a1bc0e0afb5e5fe91eb7be26b71eab5392215773a6a04d53c752ec0 +size 39854 diff --git a/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Pistol.jpeg b/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Pistol.jpeg new file mode 100644 index 00000000..340bc0d0 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Pistol.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a45e49776ef2a9b625ffe6b192901b9df1eacf08ac657512a9b700785834e50 +size 31530 diff --git a/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Railgun.jpeg b/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Railgun.jpeg new file mode 100644 index 00000000..1d5c9bd7 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Railgun.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43ba82111ce5e8de7dca8a773de0d653446d8fedb725ce496272f303262699fd +size 37972 diff --git a/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Rocket-Launcher.jpeg b/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Rocket-Launcher.jpeg new file mode 100644 index 00000000..44ccc9bb --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Rocket-Launcher.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd41dcbace430acc740623d70ca99a104a33408939992dce31bdb1efafbffd7c +size 36542 diff --git a/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Shotgun.jpeg b/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Shotgun.jpeg new file mode 100644 index 00000000..ba4b401e --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Shotgun.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d07bda2be18c3539e48bd3967eb58adebd04348ad9fef98c12d106224f854e04 +size 42745 diff --git a/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Sniper-Rifle.jpeg b/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Sniper-Rifle.jpeg new file mode 100644 index 00000000..c5405f60 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Sniper-Rifle.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c30934b0b69b22934ef018a346c390439fca3bd8815a21ec1614f2fa533b3132 +size 31934 diff --git a/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Submachine-Gun.jpeg b/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Submachine-Gun.jpeg new file mode 100644 index 00000000..03490886 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapon-Submachine-Gun.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a97c801d1eb74cb48d7e89ec6f01cdb997ec9da54c87ec888b951598dbdeff24 +size 40649 diff --git a/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapons-Banner.jpeg b/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapons-Banner.jpeg new file mode 100644 index 00000000..4c248214 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/weapons-kit/Endorsed-Weapons-Banner.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0bd877326e219b065a66615d086279971de8d7eea8ec2dfe3d154db28ed9022a +size 179158 diff --git a/.cursor/rules/roblox/assets/resources/weapons-kit/Move-WeaponsSystem-Folder.png b/.cursor/rules/roblox/assets/resources/weapons-kit/Move-WeaponsSystem-Folder.png new file mode 100644 index 00000000..e282020e --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/weapons-kit/Move-WeaponsSystem-Folder.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdcd54daab6f468920769ec3ac981308c131a2d718c350cf9a5e21cc8ea963c4 +size 53581 diff --git a/.cursor/rules/roblox/assets/resources/weapons-kit/Sprint-Zoom-Configurations.png b/.cursor/rules/roblox/assets/resources/weapons-kit/Sprint-Zoom-Configurations.png new file mode 100644 index 00000000..7190f37a --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/weapons-kit/Sprint-Zoom-Configurations.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a8702904981113244eace0d8b18241ee2198500361b1888f8995e4a712fa764 +size 26711 diff --git a/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-BulletHole.png b/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-BulletHole.png new file mode 100644 index 00000000..9ad88a4d --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-BulletHole.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:774c4c17d45e0c7e454d8170ae408f4224a7555d76a6c18c771cef497c98c1e1 +size 29870 diff --git a/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-Configuration-Children-Grenade-Launcher.png b/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-Configuration-Children-Grenade-Launcher.png new file mode 100644 index 00000000..44aa88b9 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-Configuration-Children-Grenade-Launcher.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a120387651b9772e3737ec85a225ab07d84a18d924bde33000ae4307a1bc412 +size 26756 diff --git a/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-Configuration-Children-Railgun.png b/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-Configuration-Children-Railgun.png new file mode 100644 index 00000000..5b23573e --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-Configuration-Children-Railgun.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d87e227f2ebdbfc608f51768eb4c93bdaaca96b945559a24db33e6146f194fdf +size 25202 diff --git a/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-Configuration-Children.png b/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-Configuration-Children.png new file mode 100644 index 00000000..53ba9446 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-Configuration-Children.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8d54213f782a3c963e05e74ed583d13a875c27fa026eea16d97e4b0291517d8 +size 24467 diff --git a/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-Model-BaseParts.png b/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-Model-BaseParts.png new file mode 100644 index 00000000..644c9afa --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-Model-BaseParts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d55a619fc355f4a683620ec2cd16a35b93a260a361faf4eccb1c4ddbb8210bf +size 21508 diff --git a/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-Model-Descendants-Crossbow.png b/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-Model-Descendants-Crossbow.png new file mode 100644 index 00000000..4e86f518 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-Model-Descendants-Crossbow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00abb9ff8630cb7a5ab7b5854e823545db158865abf3968c1052533b63e9a5dd +size 29554 diff --git a/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-Model-Descendants-Railgun.png b/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-Model-Descendants-Railgun.png new file mode 100644 index 00000000..9fb92316 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-Model-Descendants-Railgun.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b14294922f6eae91fb6f01f57af5d40d4ac889b8cda5e28b7bf6514d8839a338 +size 25571 diff --git a/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-Model-Descendants.png b/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-Model-Descendants.png new file mode 100644 index 00000000..2d1c5829 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-Model-Descendants.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99fc1cb78752645627b323ce01bbed397e830540144b9bf31e07691751bd2103 +size 21572 diff --git a/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-MuzzleParticles.png b/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-MuzzleParticles.png new file mode 100644 index 00000000..9f016755 --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/weapons-kit/Weapon-MuzzleParticles.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a952eb07074fb286a8fe1595b5efdbd576a9bc5ab4cd8835f90a7e2f4c168581 +size 29991 diff --git a/.cursor/rules/roblox/assets/resources/weapons-kit/WeaponsSystem-Structure.png b/.cursor/rules/roblox/assets/resources/weapons-kit/WeaponsSystem-Structure.png new file mode 100644 index 00000000..ff0c48aa --- /dev/null +++ b/.cursor/rules/roblox/assets/resources/weapons-kit/WeaponsSystem-Structure.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4d8f8bb4746ba249a8640542214566e216670da40b7801a44eb6de954c74fd6 +size 46955 diff --git a/.cursor/rules/roblox/assets/scripting/client-server/Client-Script-Containers.png b/.cursor/rules/roblox/assets/scripting/client-server/Client-Script-Containers.png new file mode 100644 index 00000000..151321d4 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/client-server/Client-Script-Containers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa630603921c15420e924bb51faf6d13de724da386ce30d924dc4dddd5124a98 +size 145649 diff --git a/.cursor/rules/roblox/assets/scripting/client-server/Client-Server-Model.png b/.cursor/rules/roblox/assets/scripting/client-server/Client-Server-Model.png new file mode 100644 index 00000000..a03da612 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/client-server/Client-Server-Model.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec20d1d3d898d0874e1f5669c824aee1ce8b833685157389f86b749a5759d8aa +size 320924 diff --git a/.cursor/rules/roblox/assets/scripting/client-server/Data-Model-Mapping.png b/.cursor/rules/roblox/assets/scripting/client-server/Data-Model-Mapping.png new file mode 100644 index 00000000..c3283cc4 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/client-server/Data-Model-Mapping.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ebe00b894128294823fe01c7183f49a8ea234fb3a25a7d3a9f90ca7d966a9ba0 +size 170156 diff --git a/.cursor/rules/roblox/assets/scripting/client-server/Remote-Flow-Client-Server-Client.png b/.cursor/rules/roblox/assets/scripting/client-server/Remote-Flow-Client-Server-Client.png new file mode 100644 index 00000000..b2da2816 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/client-server/Remote-Flow-Client-Server-Client.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae50557dc90bc7a66a2b3ee18c55132a5c0e510f4b2be8926a965d03a8e16ff5 +size 76679 diff --git a/.cursor/rules/roblox/assets/scripting/client-server/Remote-Flow-Client-Server.png b/.cursor/rules/roblox/assets/scripting/client-server/Remote-Flow-Client-Server.png new file mode 100644 index 00000000..a0803fc7 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/client-server/Remote-Flow-Client-Server.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13821188f21208542d0f3a04129aab1c3a7212ef60872d9daab1acc99c025267 +size 59784 diff --git a/.cursor/rules/roblox/assets/scripting/client-server/Remote-Flow-Server-All-Clients.png b/.cursor/rules/roblox/assets/scripting/client-server/Remote-Flow-Server-All-Clients.png new file mode 100644 index 00000000..3944ec71 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/client-server/Remote-Flow-Server-All-Clients.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89624e0cf5cd7b89fee176a53f4c26d1be67f2a60997e5884e17a38409e1b2a4 +size 98057 diff --git a/.cursor/rules/roblox/assets/scripting/client-server/Remote-Flow-Server-Client-Server.png b/.cursor/rules/roblox/assets/scripting/client-server/Remote-Flow-Server-Client-Server.png new file mode 100644 index 00000000..3f351357 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/client-server/Remote-Flow-Server-Client-Server.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68e8f50710e004dec95f77eda1ac288f912776aac48e0f621181a3c0afabc5ae +size 77201 diff --git a/.cursor/rules/roblox/assets/scripting/client-server/Remote-Flow-Server-Client.png b/.cursor/rules/roblox/assets/scripting/client-server/Remote-Flow-Server-Client.png new file mode 100644 index 00000000..21c32477 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/client-server/Remote-Flow-Server-Client.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e3d085e83e3ab122491d36bb1995c476620c552f11636e6028d5b96f7ea51da +size 60133 diff --git a/.cursor/rules/roblox/assets/scripting/controls/apostrophe.png b/.cursor/rules/roblox/assets/scripting/controls/apostrophe.png new file mode 100644 index 00000000..59ecb799 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/apostrophe.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79b6683e14bf3b68b3d67dbb2c56de34bf803306b1774d835a7b699fcb5b4c1c +size 1788 diff --git a/.cursor/rules/roblox/assets/scripting/controls/backspace.png b/.cursor/rules/roblox/assets/scripting/controls/backspace.png new file mode 100644 index 00000000..244c2517 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/backspace.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7faeb3f1ef88032bcac4e2b429b1f53be3689eb261c1db68934cc131420fc96 +size 1942 diff --git a/.cursor/rules/roblox/assets/scripting/controls/comma.png b/.cursor/rules/roblox/assets/scripting/controls/comma.png new file mode 100644 index 00000000..4d180f85 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/comma.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9deded824629239e38f1b50be931524b716baaf6b231976d53dd0ef934a4f06c +size 1787 diff --git a/.cursor/rules/roblox/assets/scripting/controls/dpadDown.png b/.cursor/rules/roblox/assets/scripting/controls/dpadDown.png new file mode 100644 index 00000000..1b0c4a33 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/dpadDown.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd4963c40505937491a28ed48f7b5340f0711af5615b179a0d409f9130ab5056 +size 5378 diff --git a/.cursor/rules/roblox/assets/scripting/controls/dpadLeft.png b/.cursor/rules/roblox/assets/scripting/controls/dpadLeft.png new file mode 100644 index 00000000..7a43d896 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/dpadLeft.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:864a165299092941b2901a42b86c4212aa0e1e94274577976d33f440c8c7a029 +size 5388 diff --git a/.cursor/rules/roblox/assets/scripting/controls/dpadRight.png b/.cursor/rules/roblox/assets/scripting/controls/dpadRight.png new file mode 100644 index 00000000..cf8c9efd --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/dpadRight.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ab7fff054aad32616a36e6475ebdbb1401833987c04adfc2bdc85766151003e +size 5385 diff --git a/.cursor/rules/roblox/assets/scripting/controls/dpadUp.png b/.cursor/rules/roblox/assets/scripting/controls/dpadUp.png new file mode 100644 index 00000000..e54b2129 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/dpadUp.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d20b1220b4ec834c790883be574af2708d0007eca769d6ec022a9e19b86aaa1a +size 2649 diff --git a/.cursor/rules/roblox/assets/scripting/controls/graveaccent.png b/.cursor/rules/roblox/assets/scripting/controls/graveaccent.png new file mode 100644 index 00000000..c6b074b5 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/graveaccent.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c9b67b7dd44659ac8df9d8ba07729fa03a4e0ca51f7b8e30a7fe02e5d0ec409 +size 1810 diff --git a/.cursor/rules/roblox/assets/scripting/controls/period.png b/.cursor/rules/roblox/assets/scripting/controls/period.png new file mode 100644 index 00000000..81de2520 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/period.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6404edfa0046d444e544d99eb198caa00f8a533c1d298e0dc0fdc54a74b4fa3 +size 1668 diff --git a/.cursor/rules/roblox/assets/scripting/controls/return.png b/.cursor/rules/roblox/assets/scripting/controls/return.png new file mode 100644 index 00000000..86ce1601 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/return.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:305aa80e349af6d922988514691772c9d39fe5806e0fae15f6b03730d4ab9d4e +size 1832 diff --git a/.cursor/rules/roblox/assets/scripting/controls/shift.png b/.cursor/rules/roblox/assets/scripting/controls/shift.png new file mode 100644 index 00000000..3b9a1bf6 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/shift.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45fe97885cb035bc1c852acbf0bb8294bdd286ad277f731cc77c45c07a05a05a +size 1832 diff --git a/.cursor/rules/roblox/assets/scripting/controls/spacebar.png b/.cursor/rules/roblox/assets/scripting/controls/spacebar.png new file mode 100644 index 00000000..d4a10aa1 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/spacebar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f3c73ec5ee8a3f1013f8061d2b13f45550753de91c81f6a7472b73d04a73226 +size 1688 diff --git a/.cursor/rules/roblox/assets/scripting/controls/tab.png b/.cursor/rules/roblox/assets/scripting/controls/tab.png new file mode 100644 index 00000000..78f34662 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/tab.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6d7fd49717c27c2d10948df61c42788685bf284f7a49f90c08c8754a37c3970 +size 1861 diff --git a/.cursor/rules/roblox/assets/scripting/controls/xboxA.png b/.cursor/rules/roblox/assets/scripting/controls/xboxA.png new file mode 100644 index 00000000..32ab44ec --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/xboxA.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0307c6e9ee4563e37fdda844df08c0037d92e3246af83a4f15db291b038a6e7f +size 2965 diff --git a/.cursor/rules/roblox/assets/scripting/controls/xboxB.png b/.cursor/rules/roblox/assets/scripting/controls/xboxB.png new file mode 100644 index 00000000..7279582b --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/xboxB.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:975a38ab797724c729a9a2ff4ebd981983ea56f5c8826bc0dfe38ddfd8344bc2 +size 2872 diff --git a/.cursor/rules/roblox/assets/scripting/controls/xboxLB.png b/.cursor/rules/roblox/assets/scripting/controls/xboxLB.png new file mode 100644 index 00000000..48a2d264 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/xboxLB.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a23c8a9d9bb8c784c6405040d1acef3107ff4f5e22a68d34749649009c49ea98 +size 2347 diff --git a/.cursor/rules/roblox/assets/scripting/controls/xboxLS.png b/.cursor/rules/roblox/assets/scripting/controls/xboxLS.png new file mode 100644 index 00000000..e37b90dc --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/xboxLS.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55830ad0a92d87f3de6aa03871acd7663d3a860ee1a72835b64035576f032697 +size 1994 diff --git a/.cursor/rules/roblox/assets/scripting/controls/xboxLSDirectional.png b/.cursor/rules/roblox/assets/scripting/controls/xboxLSDirectional.png new file mode 100644 index 00000000..4dde6a5c --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/xboxLSDirectional.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b20ec4ccaa2bfcf03a0ce9a40b3f5e9f0d3666996de76cd3a39d7c3714953072 +size 2583 diff --git a/.cursor/rules/roblox/assets/scripting/controls/xboxLT.png b/.cursor/rules/roblox/assets/scripting/controls/xboxLT.png new file mode 100644 index 00000000..569d2025 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/xboxLT.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c7babcddf3fd88e99098065e8da33418aaeefb270cb1d1f7539e4eafb82aca6 +size 2271 diff --git a/.cursor/rules/roblox/assets/scripting/controls/xboxRB.png b/.cursor/rules/roblox/assets/scripting/controls/xboxRB.png new file mode 100644 index 00000000..bcd88c04 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/xboxRB.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2caf2c4554dafdb46d7e080a292d60608c15943aae5df1b7cb2fc1b74c63c5c1 +size 2611 diff --git a/.cursor/rules/roblox/assets/scripting/controls/xboxRS.png b/.cursor/rules/roblox/assets/scripting/controls/xboxRS.png new file mode 100644 index 00000000..d4dd32a0 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/xboxRS.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf40d955484467ca41cdb05d22a8af90a7286b154ed6f44ddc6a629b9889beee +size 2367 diff --git a/.cursor/rules/roblox/assets/scripting/controls/xboxRSDirectional.png b/.cursor/rules/roblox/assets/scripting/controls/xboxRSDirectional.png new file mode 100644 index 00000000..772e391a --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/xboxRSDirectional.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfdb0655c705e998ba1f2ec145689ac900ec6723fba7f9a63983b5d9a24538bf +size 2778 diff --git a/.cursor/rules/roblox/assets/scripting/controls/xboxRT.png b/.cursor/rules/roblox/assets/scripting/controls/xboxRT.png new file mode 100644 index 00000000..c851656a --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/xboxRT.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7a060e6229d619b507cb3286e9db1d3bc733680aca25cb922bc3a7b0f53c023 +size 2528 diff --git a/.cursor/rules/roblox/assets/scripting/controls/xboxView.png b/.cursor/rules/roblox/assets/scripting/controls/xboxView.png new file mode 100644 index 00000000..651179b0 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/xboxView.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a41717bcb50ec1d56436d61661841aea9fe57dc8ef56f75e39523582a0d0f5e +size 2432 diff --git a/.cursor/rules/roblox/assets/scripting/controls/xboxX.png b/.cursor/rules/roblox/assets/scripting/controls/xboxX.png new file mode 100644 index 00000000..2a331ebf --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/xboxX.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:721b7f623526da74cab4787df059e47e9411bb4772d39b2189a73b7680e67328 +size 3108 diff --git a/.cursor/rules/roblox/assets/scripting/controls/xboxY.png b/.cursor/rules/roblox/assets/scripting/controls/xboxY.png new file mode 100644 index 00000000..56b5f702 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/xboxY.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:859b79d469b81dd0cdd4b6dc2ae5cb3b51c38d7849ab556c07c057c68ba96b42 +size 2988 diff --git a/.cursor/rules/roblox/assets/scripting/controls/xboxmenu.png b/.cursor/rules/roblox/assets/scripting/controls/xboxmenu.png new file mode 100644 index 00000000..b976723e --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/controls/xboxmenu.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79b065e19691d3294bbc0207f9327c4f5ea35b61804765de0aeb6801569594cc +size 2525 diff --git a/.cursor/rules/roblox/assets/scripting/external-tools/external-tools-rojo-plugin.png b/.cursor/rules/roblox/assets/scripting/external-tools/external-tools-rojo-plugin.png new file mode 100644 index 00000000..ff0e2ab1 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/external-tools/external-tools-rojo-plugin.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b832a28240768422bf37d16c93aaec4e771bd5132ae554c7afba5803087ed984 +size 46859 diff --git a/.cursor/rules/roblox/assets/scripting/external-tools/external-tools-rojo-sync.png b/.cursor/rules/roblox/assets/scripting/external-tools/external-tools-rojo-sync.png new file mode 100644 index 00000000..f9e646aa --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/external-tools/external-tools-rojo-sync.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a288982f6f5b71448f3d6d891da27cf1a9a0ae63ab58b1d8bf80edd4fa0f742 +size 35070 diff --git a/.cursor/rules/roblox/assets/scripting/external-tools/external-tools-vscode.png b/.cursor/rules/roblox/assets/scripting/external-tools/external-tools-vscode.png new file mode 100644 index 00000000..36a9907a --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/external-tools/external-tools-vscode.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dddf1eef8e0b429925348f22b55c0945339962773b1c94646e9264e54f6dcf2d +size 395146 diff --git a/.cursor/rules/roblox/assets/scripting/input/Gamepad-Inputs-PS.png b/.cursor/rules/roblox/assets/scripting/input/Gamepad-Inputs-PS.png new file mode 100644 index 00000000..f59bb872 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/input/Gamepad-Inputs-PS.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f907ba3f7eb7b0da3823855f6e396b3cb29eb8d65bb28a1099b9cdd321fca61 +size 475686 diff --git a/.cursor/rules/roblox/assets/scripting/input/Gamepad-Inputs-Xbox.png b/.cursor/rules/roblox/assets/scripting/input/Gamepad-Inputs-Xbox.png new file mode 100644 index 00000000..ad1836ca --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/input/Gamepad-Inputs-Xbox.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f7d27e158e4eb45e8c0ab56664e956ecb721a0d5a535dc533f9af904aba3af4 +size 373404 diff --git a/.cursor/rules/roblox/assets/scripting/scripts/Actor-Tree.png b/.cursor/rules/roblox/assets/scripting/scripts/Actor-Tree.png new file mode 100644 index 00000000..454d0a3a --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/scripts/Actor-Tree.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6dd0b1baf476f2084c77a851f8273950d7898d47223d2482be3dcdd63a56a7ed +size 14666 diff --git a/.cursor/rules/roblox/assets/scripting/scripts/FewerVsMoreActorsDark.png b/.cursor/rules/roblox/assets/scripting/scripts/FewerVsMoreActorsDark.png new file mode 100644 index 00000000..a506481c --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/scripts/FewerVsMoreActorsDark.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a870414cd6693c3377a562392cb1ef14267152998e2664bb60cdaa0baaee532f +size 27524 diff --git a/.cursor/rules/roblox/assets/scripting/scripts/ImmediateVsDeferredEvents.png b/.cursor/rules/roblox/assets/scripting/scripts/ImmediateVsDeferredEvents.png new file mode 100644 index 00000000..085bd17e --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/scripts/ImmediateVsDeferredEvents.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:519fe3d59ddbb5cfeea4b4368f23b8c7ddf03b999c567c2d9dc2a35129552233 +size 86743 diff --git a/.cursor/rules/roblox/assets/scripting/scripts/Parallel-Luau.mp4 b/.cursor/rules/roblox/assets/scripting/scripts/Parallel-Luau.mp4 new file mode 100644 index 00000000..4adaa23b --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/scripts/Parallel-Luau.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f1b53a971da00358a2eafbb2d3f7b0369d7b6a6c6dd8cdb3e01036e4110f639 +size 17618217 diff --git a/.cursor/rules/roblox/assets/scripting/scripts/ParallelExecutionDark.png b/.cursor/rules/roblox/assets/scripting/scripts/ParallelExecutionDark.png new file mode 100644 index 00000000..48a20c7e --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/scripts/ParallelExecutionDark.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0fc4cc1d15d04a4510dfcc7a463d4db6aa4c30aea54d5ab35f78dce1f525c24e +size 32838 diff --git a/.cursor/rules/roblox/assets/scripting/scripts/Scope-Diagram.png b/.cursor/rules/roblox/assets/scripting/scripts/Scope-Diagram.png new file mode 100644 index 00000000..501d9c3c --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/scripts/Scope-Diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40fd09c59b265de6dd60ed68fbc71c4159d01c33025059ca424dc0717ab31b86 +size 29821 diff --git a/.cursor/rules/roblox/assets/scripting/scripts/Touched-Event-No-Debounce.png b/.cursor/rules/roblox/assets/scripting/scripts/Touched-Event-No-Debounce.png new file mode 100644 index 00000000..181378d4 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/scripts/Touched-Event-No-Debounce.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70222aa3ed183a39812c56f285aaadb1c86bee09e4e07111d8a0b278628184ef +size 81983 diff --git a/.cursor/rules/roblox/assets/scripting/scripts/multi-thread.png b/.cursor/rules/roblox/assets/scripting/scripts/multi-thread.png new file mode 100644 index 00000000..92ed32d0 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/scripts/multi-thread.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9256c6f3e5ed4a2e49f7ca02bc1c84f45e1caa50c5e746455ccf8fe40f44f42e +size 23832 diff --git a/.cursor/rules/roblox/assets/scripting/scripts/single-thread.png b/.cursor/rules/roblox/assets/scripting/scripts/single-thread.png new file mode 100644 index 00000000..38de7761 --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/scripts/single-thread.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83077437c26dc6661abc364e42d2008d13ea7bdc6387e8e93fcc727feb5c19e5 +size 13908 diff --git a/.cursor/rules/roblox/assets/scripting/security/Movement-Validation-1.jpg b/.cursor/rules/roblox/assets/scripting/security/Movement-Validation-1.jpg new file mode 100644 index 00000000..cfe7822c --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/security/Movement-Validation-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02bc607a139ff0405aaf3b2407842585397e279c92e36aa4b9243108302ef7c1 +size 242997 diff --git a/.cursor/rules/roblox/assets/scripting/security/Movement-Validation-2.jpg b/.cursor/rules/roblox/assets/scripting/security/Movement-Validation-2.jpg new file mode 100644 index 00000000..73e3538d --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/security/Movement-Validation-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9191aace9c5c6281019c707ad84bcaca2c573def3fd2c5cbb5a9e3743fd866a4 +size 263331 diff --git a/.cursor/rules/roblox/assets/scripting/security/Remote-Purchase-Flow.png b/.cursor/rules/roblox/assets/scripting/security/Remote-Purchase-Flow.png new file mode 100644 index 00000000..ebdca23d --- /dev/null +++ b/.cursor/rules/roblox/assets/scripting/security/Remote-Purchase-Flow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e1d1b669ee57c7c1a459b2bf5406aa2865e7c3cc4aa03e13fed92168f9b87c5 +size 150497 diff --git a/.cursor/rules/roblox/assets/studio/align-tool/Align-In-Before.jpg b/.cursor/rules/roblox/assets/studio/align-tool/Align-In-Before.jpg new file mode 100644 index 00000000..972c9fcd --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/align-tool/Align-In-Before.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b893b08a4e87dddc7e01e7e75e448362aa5d358768c32cd916eafff6df918070 +size 150425 diff --git a/.cursor/rules/roblox/assets/studio/align-tool/Align-In-Local-Z.jpg b/.cursor/rules/roblox/assets/studio/align-tool/Align-In-Local-Z.jpg new file mode 100644 index 00000000..521a9d0a --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/align-tool/Align-In-Local-Z.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1321ef0567ce67313a167509bc6a7090e75e0fa6f671316466f060d8c465dcc0 +size 125455 diff --git a/.cursor/rules/roblox/assets/studio/align-tool/Align-In-World-Z.jpg b/.cursor/rules/roblox/assets/studio/align-tool/Align-In-World-Z.jpg new file mode 100644 index 00000000..eb0cfa53 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/align-tool/Align-In-World-Z.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e4afaf6985847665400763ef4536564147b80d6a6c00613e21f487a5dedca51 +size 144705 diff --git a/.cursor/rules/roblox/assets/studio/align-tool/Icon-Center.png b/.cursor/rules/roblox/assets/studio/align-tool/Icon-Center.png new file mode 100644 index 00000000..a8fa899c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/align-tool/Icon-Center.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7529cb2303be0e9b9f980d88fd3a5bd1792b76cbfb7100537758cbe96da5989 +size 1542 diff --git a/.cursor/rules/roblox/assets/studio/align-tool/Icon-Max.png b/.cursor/rules/roblox/assets/studio/align-tool/Icon-Max.png new file mode 100644 index 00000000..81f36e79 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/align-tool/Icon-Max.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89952586e5376d5083ba6bd36f10be1bdf5bd64baab074329a0408829fea8d3e +size 1487 diff --git a/.cursor/rules/roblox/assets/studio/align-tool/Icon-Min.png b/.cursor/rules/roblox/assets/studio/align-tool/Icon-Min.png new file mode 100644 index 00000000..f04a3949 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/align-tool/Icon-Min.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b32ad643e16d15377bb720f884183709ce930788ac6cd8503fa807fa4d22103 +size 1502 diff --git a/.cursor/rules/roblox/assets/studio/align-tool/Mode-Center.jpg b/.cursor/rules/roblox/assets/studio/align-tool/Mode-Center.jpg new file mode 100644 index 00000000..48acca24 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/align-tool/Mode-Center.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3511b5dae76693d666e159fdd6b6c98c7f60eff90915f920ba0f281f1554ec4b +size 147747 diff --git a/.cursor/rules/roblox/assets/studio/align-tool/Mode-Max.jpg b/.cursor/rules/roblox/assets/studio/align-tool/Mode-Max.jpg new file mode 100644 index 00000000..7ec07aba --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/align-tool/Mode-Max.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e75fb6fda0f9452d5b7d2b76bb82bf5c564c1aac74978a11b46e15352abf83e6 +size 151840 diff --git a/.cursor/rules/roblox/assets/studio/align-tool/Mode-Min.jpg b/.cursor/rules/roblox/assets/studio/align-tool/Mode-Min.jpg new file mode 100644 index 00000000..854a9ea8 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/align-tool/Mode-Min.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:498f0c72a9e9478499e458262b43053dbe448e67666cc5f23242e40ec45bdb2b +size 143728 diff --git a/.cursor/rules/roblox/assets/studio/align-tool/Relative-To-Active-Object-Before.jpg b/.cursor/rules/roblox/assets/studio/align-tool/Relative-To-Active-Object-Before.jpg new file mode 100644 index 00000000..9c6e5317 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/align-tool/Relative-To-Active-Object-Before.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a528c50e49d223869e0cdd66dac1db25a7693bf8267d3bce17103ba405164ac +size 181667 diff --git a/.cursor/rules/roblox/assets/studio/align-tool/Relative-To-Active-Object-Max-X.jpg b/.cursor/rules/roblox/assets/studio/align-tool/Relative-To-Active-Object-Max-X.jpg new file mode 100644 index 00000000..86d99c24 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/align-tool/Relative-To-Active-Object-Max-X.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:344b99241ef890ef5a588306035c46e444e307a5576387f703df22938a99e7b2 +size 149197 diff --git a/.cursor/rules/roblox/assets/studio/align-tool/Relative-To-Active-Object-Min-X.jpg b/.cursor/rules/roblox/assets/studio/align-tool/Relative-To-Active-Object-Min-X.jpg new file mode 100644 index 00000000..e2766f70 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/align-tool/Relative-To-Active-Object-Min-X.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11a3735e5304702bd9cb8c4073197e02f4d5ad189038d2559f857f6ca1f04a38 +size 149618 diff --git a/.cursor/rules/roblox/assets/studio/align-tool/Relative-To-Selection-Bounds-Before.jpg b/.cursor/rules/roblox/assets/studio/align-tool/Relative-To-Selection-Bounds-Before.jpg new file mode 100644 index 00000000..73e6e4cd --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/align-tool/Relative-To-Selection-Bounds-Before.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cf0435b484a51fd296c9930430d623357f7f44886a2f01d33f337f0f0b24155 +size 175812 diff --git a/.cursor/rules/roblox/assets/studio/align-tool/Relative-To-Selection-Bounds-Max-X.jpg b/.cursor/rules/roblox/assets/studio/align-tool/Relative-To-Selection-Bounds-Max-X.jpg new file mode 100644 index 00000000..a620b87c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/align-tool/Relative-To-Selection-Bounds-Max-X.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4822ebd5c60a57e4bc7ee86d04569c7120abf841111b3773846e7189e8c12ed +size 142819 diff --git a/.cursor/rules/roblox/assets/studio/align-tool/Relative-To-Selection-Bounds-Min-X.jpg b/.cursor/rules/roblox/assets/studio/align-tool/Relative-To-Selection-Bounds-Min-X.jpg new file mode 100644 index 00000000..678c2358 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/align-tool/Relative-To-Selection-Bounds-Min-X.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:926a10280aa1eda2e5aaeb5cdaa926d0121d0005b0ebe5adf1186964e31b7963 +size 136594 diff --git a/.cursor/rules/roblox/assets/studio/asset-manager/Asset-Inspect-Icon.png b/.cursor/rules/roblox/assets/studio/asset-manager/Asset-Inspect-Icon.png new file mode 100644 index 00000000..3e3f840d --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/asset-manager/Asset-Inspect-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:855a4135a224e26b2a0a55af46e15ddbfd1477e35c6a7134ce529dbbebfd8dcc +size 40329 diff --git a/.cursor/rules/roblox/assets/studio/asset-manager/Asset-Type-Filters.png b/.cursor/rules/roblox/assets/studio/asset-manager/Asset-Type-Filters.png new file mode 100644 index 00000000..3f4cdc73 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/asset-manager/Asset-Type-Filters.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfe20f0050c92eeed5f880deb556df6aca99547b7ce46b6fb69c4dd31146929a +size 32010 diff --git a/.cursor/rules/roblox/assets/studio/asset-manager/Display-Options.png b/.cursor/rules/roblox/assets/studio/asset-manager/Display-Options.png new file mode 100644 index 00000000..3cc020f2 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/asset-manager/Display-Options.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:277b0893f358854bcf2c05380acae491ddd05c02f59e3e9833a0a904903c0ec4 +size 32916 diff --git a/.cursor/rules/roblox/assets/studio/asset-manager/Grid-View-Ordering.png b/.cursor/rules/roblox/assets/studio/asset-manager/Grid-View-Ordering.png new file mode 100644 index 00000000..fe730fe3 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/asset-manager/Grid-View-Ordering.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:daea11300139c4375bbe048d881b1a00dd633be96476ba19f8d57c5e0a2eb7fb +size 23235 diff --git a/.cursor/rules/roblox/assets/studio/asset-manager/Grid-View.png b/.cursor/rules/roblox/assets/studio/asset-manager/Grid-View.png new file mode 100644 index 00000000..39b253b9 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/asset-manager/Grid-View.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65aa1f3cd620a22b759c3bdd8d33266a1a9c2e816130b1880e02f1ac1cb24148 +size 27538 diff --git a/.cursor/rules/roblox/assets/studio/asset-manager/Import-Button-V1.png b/.cursor/rules/roblox/assets/studio/asset-manager/Import-Button-V1.png new file mode 100644 index 00000000..7b73e29f --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/asset-manager/Import-Button-V1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:553e88b9ef4db5d802caaa7f50cab22f9c870aa2232bea91558c756a5111df90 +size 12805 diff --git a/.cursor/rules/roblox/assets/studio/asset-manager/Import-Button.png b/.cursor/rules/roblox/assets/studio/asset-manager/Import-Button.png new file mode 100644 index 00000000..e150807e --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/asset-manager/Import-Button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb2e48213659f385cf6f2b793389385d6206e5158a049e0021ab11b6ec6aaa4a +size 16806 diff --git a/.cursor/rules/roblox/assets/studio/asset-manager/Inventory-Sorts.png b/.cursor/rules/roblox/assets/studio/asset-manager/Inventory-Sorts.png new file mode 100644 index 00000000..7e996a83 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/asset-manager/Inventory-Sorts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1fea5e84550c8169c8639005256571784f1b96536065ad6d6d84ef4741bd6210 +size 52791 diff --git a/.cursor/rules/roblox/assets/studio/asset-manager/List-View-Ordering.png b/.cursor/rules/roblox/assets/studio/asset-manager/List-View-Ordering.png new file mode 100644 index 00000000..a93efe5f --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/asset-manager/List-View-Ordering.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82f32a9d4cd8ac021d23a4c2153cc7035ea613a0745d5d9fbc36c5182d0f4e3c +size 58756 diff --git a/.cursor/rules/roblox/assets/studio/asset-manager/View-Toggle.png b/.cursor/rules/roblox/assets/studio/asset-manager/View-Toggle.png new file mode 100644 index 00000000..aebf4570 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/asset-manager/View-Toggle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:317e54437597385ce5ff1a5b480c91145a9d7b390c763a8ba7235e343cc92bcc +size 33950 diff --git a/.cursor/rules/roblox/assets/studio/collaboration/Collaborative-Session.jpg b/.cursor/rules/roblox/assets/studio/collaboration/Collaborative-Session.jpg new file mode 100644 index 00000000..0d301834 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collaboration/Collaborative-Session.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7f17a015b426f6979f0cd5d76d3640404741da7fcd35f923b6a2274bfa2a4a2 +size 191587 diff --git a/.cursor/rules/roblox/assets/studio/collaboration/Collaborator-Search.png b/.cursor/rules/roblox/assets/studio/collaboration/Collaborator-Search.png new file mode 100644 index 00000000..cfef0987 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collaboration/Collaborator-Search.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:477e6184cf2d022d3f2a9d8da43ac586f8e27c29a00743694cd1510a596c3f37 +size 29164 diff --git a/.cursor/rules/roblox/assets/studio/collaboration/Comments-Cursor.jpg b/.cursor/rules/roblox/assets/studio/collaboration/Comments-Cursor.jpg new file mode 100644 index 00000000..399c45c9 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collaboration/Comments-Cursor.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6f365c1ed4f2ecaf72cdf3231956e3540541e073410196c878c5df01eba1bc0 +size 289953 diff --git a/.cursor/rules/roblox/assets/studio/collaboration/Comments-Window.png b/.cursor/rules/roblox/assets/studio/collaboration/Comments-Window.png new file mode 100644 index 00000000..cb7c3df2 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collaboration/Comments-Window.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29d202b3bd920d78f454fcdbecf8b558764836d929d1a7c51ce9162ae34d1187 +size 120235 diff --git a/.cursor/rules/roblox/assets/studio/collaboration/Drafts-Commit.png b/.cursor/rules/roblox/assets/studio/collaboration/Drafts-Commit.png new file mode 100644 index 00000000..229985a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collaboration/Drafts-Commit.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae4767b2119508b37cb72566099524f553d7f97d5255df288d7b783a7527ccd4 +size 21668 diff --git a/.cursor/rules/roblox/assets/studio/collaboration/Drafts-Compare.png b/.cursor/rules/roblox/assets/studio/collaboration/Drafts-Compare.png new file mode 100644 index 00000000..6cb31d7c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collaboration/Drafts-Compare.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3911804c4458e368af1bb7fbf4c249a8383fd01e73e3f61ec6bffa1c990387ce +size 39515 diff --git a/.cursor/rules/roblox/assets/studio/collaboration/Drafts-Diff-Result.png b/.cursor/rules/roblox/assets/studio/collaboration/Drafts-Diff-Result.png new file mode 100644 index 00000000..9a2d6a4d --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collaboration/Drafts-Diff-Result.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d61d3b661fbbf89b83bdf808e4c836e28ea90e2a98593c7d92e125a8a615a1f +size 82657 diff --git a/.cursor/rules/roblox/assets/studio/collaboration/Drafts-Merge.png b/.cursor/rules/roblox/assets/studio/collaboration/Drafts-Merge.png new file mode 100644 index 00000000..08ca56cc --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collaboration/Drafts-Merge.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:913fe8f1b159d00981346d80d50fabe15019d838bd922637cf3a5421714d9e27 +size 38909 diff --git a/.cursor/rules/roblox/assets/studio/collaboration/Drafts-Restore.png b/.cursor/rules/roblox/assets/studio/collaboration/Drafts-Restore.png new file mode 100644 index 00000000..6edb2e9f --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collaboration/Drafts-Restore.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59ab834d21d280a00e076ce0d3401747aae30ef70fbf2b6d7a887f95d89649b5 +size 40741 diff --git a/.cursor/rules/roblox/assets/studio/collaboration/Drafts-Window.png b/.cursor/rules/roblox/assets/studio/collaboration/Drafts-Window.png new file mode 100644 index 00000000..d28e0d1c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collaboration/Drafts-Window.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7eaaef3a609f5ac8ab8a386e7c225015fdcf6aa75c5a7501363b5c6f577eac21 +size 14596 diff --git a/.cursor/rules/roblox/assets/studio/collaboration/Edit-Permission-All-Group-Experiences.png b/.cursor/rules/roblox/assets/studio/collaboration/Edit-Permission-All-Group-Experiences.png new file mode 100644 index 00000000..65d6467e --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collaboration/Edit-Permission-All-Group-Experiences.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b4127d12cfc0eec3f8ccea0c8ee159292ad91b77e33446c21061d4adc023a84 +size 50111 diff --git a/.cursor/rules/roblox/assets/studio/collaboration/Edit-Permission-Per-Experience.png b/.cursor/rules/roblox/assets/studio/collaboration/Edit-Permission-Per-Experience.png new file mode 100644 index 00000000..aa6fab7b --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collaboration/Edit-Permission-Per-Experience.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dcfaab62aa2a5f93fda060b702dd12cdceb3600cc514704db0d6be673f7a970c +size 39964 diff --git a/.cursor/rules/roblox/assets/studio/collaboration/Live-Collaborators-Disable.png b/.cursor/rules/roblox/assets/studio/collaboration/Live-Collaborators-Disable.png new file mode 100644 index 00000000..5dcf6ccc --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collaboration/Live-Collaborators-Disable.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c26c2372ce37cd8810f2acc0cc79721919db9b845d18db8546cd7be9ddd70a8 +size 48271 diff --git a/.cursor/rules/roblox/assets/studio/collaboration/Live-Collaborators-Join.png b/.cursor/rules/roblox/assets/studio/collaboration/Live-Collaborators-Join.png new file mode 100644 index 00000000..83069ee8 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collaboration/Live-Collaborators-Join.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a444551ade4313cebe3cffbf6f19ff131858e6a59d12b408beeba66eee829aad +size 32989 diff --git a/.cursor/rules/roblox/assets/studio/collaboration/Live-Collaborators-Status.png b/.cursor/rules/roblox/assets/studio/collaboration/Live-Collaborators-Status.png new file mode 100644 index 00000000..c26cae99 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collaboration/Live-Collaborators-Status.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ffedd10421ca39c9ee39ab94e4105e77b91c2fe6a83564ba17e2dd79fb59aecc +size 38562 diff --git a/.cursor/rules/roblox/assets/studio/collaboration/Live-Collaborators-Toggle-Selections.png b/.cursor/rules/roblox/assets/studio/collaboration/Live-Collaborators-Toggle-Selections.png new file mode 100644 index 00000000..0b85ed9c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collaboration/Live-Collaborators-Toggle-Selections.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0f89d68b2ab994a8284b919954a398c18603f19c4b24282655e2c20aee9a94a +size 27484 diff --git a/.cursor/rules/roblox/assets/studio/collaboration/Live-Scripting-Cursors.png b/.cursor/rules/roblox/assets/studio/collaboration/Live-Scripting-Cursors.png new file mode 100644 index 00000000..4def885d --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collaboration/Live-Scripting-Cursors.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0803294dcd0d5531a6455bbba250dcf5b56705b010f50b236edf7815cc4067f +size 61534 diff --git a/.cursor/rules/roblox/assets/studio/collaboration/User-Color-Explorer.png b/.cursor/rules/roblox/assets/studio/collaboration/User-Color-Explorer.png new file mode 100644 index 00000000..4b68bcbc --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collaboration/User-Color-Explorer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3ab49fcc01be717426a1e5b7cd7ec56cd081639a26ffd79ab9ea6fcc98aa44b +size 22164 diff --git a/.cursor/rules/roblox/assets/studio/collaboration/User-Color-Parts.jpg b/.cursor/rules/roblox/assets/studio/collaboration/User-Color-Parts.jpg new file mode 100644 index 00000000..283c0120 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collaboration/User-Color-Parts.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f95772785fe0cf2e8439289f3fe7a0086d9998bf9602f8605b1c9ad5506ced5a +size 165455 diff --git a/.cursor/rules/roblox/assets/studio/collision-groups-editor/Add-To-Group.png b/.cursor/rules/roblox/assets/studio/collision-groups-editor/Add-To-Group.png new file mode 100644 index 00000000..3ef0d657 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collision-groups-editor/Add-To-Group.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0570864bc4a6ba3916e5799c3cf3312d8708028a04060447c880b2f8011ccc4e +size 30960 diff --git a/.cursor/rules/roblox/assets/studio/collision-groups-editor/Configure-Groups-List-View.png b/.cursor/rules/roblox/assets/studio/collision-groups-editor/Configure-Groups-List-View.png new file mode 100644 index 00000000..421762ce --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collision-groups-editor/Configure-Groups-List-View.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e392118ad1d0b594853e35585bba2f0eb3b0355c0f07e1dc16358960370f60c4 +size 34835 diff --git a/.cursor/rules/roblox/assets/studio/collision-groups-editor/Configure-Groups-Table-View.png b/.cursor/rules/roblox/assets/studio/collision-groups-editor/Configure-Groups-Table-View.png new file mode 100644 index 00000000..5c78e299 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collision-groups-editor/Configure-Groups-Table-View.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6bf0dd1d56e7d5aac7ae72d508543a22c67d4ac0ecad774639ad0d3bd0c5e16 +size 30843 diff --git a/.cursor/rules/roblox/assets/studio/collision-groups-editor/List-View.png b/.cursor/rules/roblox/assets/studio/collision-groups-editor/List-View.png new file mode 100644 index 00000000..e8b0b846 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collision-groups-editor/List-View.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e67366f57f279a77bfd2578b7f186b6eba2f5199fb40773fe9992c3003167180 +size 34861 diff --git a/.cursor/rules/roblox/assets/studio/collision-groups-editor/New-Group-List-View.png b/.cursor/rules/roblox/assets/studio/collision-groups-editor/New-Group-List-View.png new file mode 100644 index 00000000..6f9ea16a --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collision-groups-editor/New-Group-List-View.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90b538ad93009c839029add8af98bdc499f5ebce5a71f4a5993748424130539a +size 39183 diff --git a/.cursor/rules/roblox/assets/studio/collision-groups-editor/New-Group-Table-View.png b/.cursor/rules/roblox/assets/studio/collision-groups-editor/New-Group-Table-View.png new file mode 100644 index 00000000..49a4ab8b --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collision-groups-editor/New-Group-Table-View.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8da50a608b7177e170d71cb83fd0876b9f3bcbfb0412f8e6feacb1b6fcb14cff +size 32955 diff --git a/.cursor/rules/roblox/assets/studio/collision-groups-editor/Rename-Group.png b/.cursor/rules/roblox/assets/studio/collision-groups-editor/Rename-Group.png new file mode 100644 index 00000000..f4fd1500 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collision-groups-editor/Rename-Group.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1700e9126385256d0e71dbd769864f0acb5f08d7a1c64ff0ac166bd7d78f7ca5 +size 36535 diff --git a/.cursor/rules/roblox/assets/studio/collision-groups-editor/StudioSelectable-Off.png b/.cursor/rules/roblox/assets/studio/collision-groups-editor/StudioSelectable-Off.png new file mode 100644 index 00000000..db48e8ee --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collision-groups-editor/StudioSelectable-Off.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d742e4fd997f919669bb5f42d244299d7f2babe6cc60296482d7f7d3f9a9ed83 +size 31837 diff --git a/.cursor/rules/roblox/assets/studio/collision-groups-editor/Table-View.png b/.cursor/rules/roblox/assets/studio/collision-groups-editor/Table-View.png new file mode 100644 index 00000000..a479770b --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/collision-groups-editor/Table-View.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b89cc0c8be7f59fe7d5e48fa6fdc6cc295218169f96152595b9fddbfc9198a87 +size 28605 diff --git a/.cursor/rules/roblox/assets/studio/console/Callgraph.jpeg b/.cursor/rules/roblox/assets/studio/console/Callgraph.jpeg new file mode 100644 index 00000000..03a9efc9 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/console/Callgraph.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99aba23afeac1dfcef93e6cb7b3c4b324ad995e3b040f7438e3561ac765d65bd +size 72062 diff --git a/.cursor/rules/roblox/assets/studio/console/Client-Server-Dropdown.png b/.cursor/rules/roblox/assets/studio/console/Client-Server-Dropdown.png new file mode 100644 index 00000000..3a349da2 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/console/Client-Server-Dropdown.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7aaeeef7194ea8020608bf4e8cd07d2385f1862b02e9fca7c864e359d7f6a31f +size 29691 diff --git a/.cursor/rules/roblox/assets/studio/console/Console-Summary-Bar.png b/.cursor/rules/roblox/assets/studio/console/Console-Summary-Bar.png new file mode 100644 index 00000000..54e125f4 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/console/Console-Summary-Bar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2ba5b655a157504d5d655815eed5a7abc80d4e50faae320d968a6ead3f37dbd +size 13684 diff --git a/.cursor/rules/roblox/assets/studio/console/Export-Window.jpeg b/.cursor/rules/roblox/assets/studio/console/Export-Window.jpeg new file mode 100644 index 00000000..c1cca39c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/console/Export-Window.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24c3834a0e44704c32d56ecdafd872e161a62ced866e6e8e8a8ef640ab6a8889 +size 29534 diff --git a/.cursor/rules/roblox/assets/studio/console/Functions.jpeg b/.cursor/rules/roblox/assets/studio/console/Functions.jpeg new file mode 100644 index 00000000..49c881e8 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/console/Functions.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:348f9e2c2e018ad93f6ab61633d1271f9fbe3f8ae604bc9a3c1b91866f630ea6 +size 75970 diff --git a/.cursor/rules/roblox/assets/studio/console/Graph-View.jpeg b/.cursor/rules/roblox/assets/studio/console/Graph-View.jpeg new file mode 100644 index 00000000..08e99cb9 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/console/Graph-View.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:921c169ba84fd31d2f09807b2d3f66952b2d428a8b324795cb838eb6605ec76c +size 85082 diff --git a/.cursor/rules/roblox/assets/studio/console/Log-Sections.png b/.cursor/rules/roblox/assets/studio/console/Log-Sections.png new file mode 100644 index 00000000..a08f483d --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/console/Log-Sections.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:151df3742eef184a313f3412d4056f5427d878101a16514d03d1f302ffb9d1f5 +size 34853 diff --git a/.cursor/rules/roblox/assets/studio/console/LuauHeap-Native-Annotation.png b/.cursor/rules/roblox/assets/studio/console/LuauHeap-Native-Annotation.png new file mode 100644 index 00000000..9a81d5d8 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/console/LuauHeap-Native-Annotation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c00f5d3a463714d002fdf670885e2d97b32a938ad51969e9bb64de163fc0f36 +size 21536 diff --git a/.cursor/rules/roblox/assets/studio/console/LuauHeap-Open.png b/.cursor/rules/roblox/assets/studio/console/LuauHeap-Open.png new file mode 100644 index 00000000..0ad3ee12 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/console/LuauHeap-Open.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cfa03980083eec66293bb928ef1726dd34efcc0f926e4a48e7d73ddc363ac1de +size 36082 diff --git a/.cursor/rules/roblox/assets/studio/console/Memory-Open.png b/.cursor/rules/roblox/assets/studio/console/Memory-Open.png new file mode 100644 index 00000000..e96c032f --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/console/Memory-Open.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a7a86859300a5b19bf11cdfbc8aab3fe775d7cc95d1bb8ea0a1c2ebff8c543f +size 36400 diff --git a/.cursor/rules/roblox/assets/studio/console/ScriptProfiler-Expand-Root.png b/.cursor/rules/roblox/assets/studio/console/ScriptProfiler-Expand-Root.png new file mode 100644 index 00000000..587b53fa --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/console/ScriptProfiler-Expand-Root.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9699bdc0ea8e96b5633f052f293e83995a81f4daa2da1fcfa0f9ab67d81eb2d4 +size 17682 diff --git a/.cursor/rules/roblox/assets/studio/console/ScriptProfiler-Native-Annotation.png b/.cursor/rules/roblox/assets/studio/console/ScriptProfiler-Native-Annotation.png new file mode 100644 index 00000000..3c3d261f --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/console/ScriptProfiler-Native-Annotation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:197c6b52ab511e345ec9c236d8ad0a698d697b67568679d00ada35d80d0fb7b3 +size 23544 diff --git a/.cursor/rules/roblox/assets/studio/console/ScriptProfiler-Open.png b/.cursor/rules/roblox/assets/studio/console/ScriptProfiler-Open.png new file mode 100644 index 00000000..28d2f58e --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/console/ScriptProfiler-Open.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c88f92a76f085c7f7dc190eaeca3f49ce2fe114d8b9d74cfe10894ca9d77aa3d +size 35779 diff --git a/.cursor/rules/roblox/assets/studio/console/ScriptProfiler-Start.png b/.cursor/rules/roblox/assets/studio/console/ScriptProfiler-Start.png new file mode 100644 index 00000000..22a3df30 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/console/ScriptProfiler-Start.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:944298b178f5aa484a5f5521b74ca1e6cb9297827eed6dcfbaa52448245bb162 +size 16298 diff --git a/.cursor/rules/roblox/assets/studio/console/ScriptProfiler-Units.png b/.cursor/rules/roblox/assets/studio/console/ScriptProfiler-Units.png new file mode 100644 index 00000000..07737622 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/console/ScriptProfiler-Units.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:223a79ca609024b9a07b610041a34432387847fbda301f7b59ad8184e7843de7 +size 16505 diff --git a/.cursor/rules/roblox/assets/studio/console/Unique-Reference-View.jpeg b/.cursor/rules/roblox/assets/studio/console/Unique-Reference-View.jpeg new file mode 100644 index 00000000..1883ca6b --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/console/Unique-Reference-View.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b0ed30ee98d5f2b42ef3d702dc7e6369bc59348b65bfe6a1af387a2a9549f81 +size 92494 diff --git a/.cursor/rules/roblox/assets/studio/debugging/Breakpoints-Window-Contexts.png b/.cursor/rules/roblox/assets/studio/debugging/Breakpoints-Window-Contexts.png new file mode 100644 index 00000000..87949616 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/debugging/Breakpoints-Window-Contexts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:62af1ac99abef7cb40862b63b487f7c8cea5f7e1d9b2cb72177d187b642fc07c +size 75711 diff --git a/.cursor/rules/roblox/assets/studio/debugging/Breakpoints-Window.png b/.cursor/rules/roblox/assets/studio/debugging/Breakpoints-Window.png new file mode 100644 index 00000000..791603ca --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/debugging/Breakpoints-Window.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3dea00e24fafe9984b4688e00d14ff602e36de94b8f5d79d5c6c46999a85a25a +size 50361 diff --git a/.cursor/rules/roblox/assets/studio/debugging/Call-Stack-Flow-Script.png b/.cursor/rules/roblox/assets/studio/debugging/Call-Stack-Flow-Script.png new file mode 100644 index 00000000..a96b5a64 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/debugging/Call-Stack-Flow-Script.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b149a92fe25025b3705891cc5357143d4f9da6ca5c59aeaa6de6ff991664e51 +size 61007 diff --git a/.cursor/rules/roblox/assets/studio/debugging/Call-Stack-Flow-Window.png b/.cursor/rules/roblox/assets/studio/debugging/Call-Stack-Flow-Window.png new file mode 100644 index 00000000..800abec1 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/debugging/Call-Stack-Flow-Window.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8498fe621be3b8f7ad09144b7abb17d4540ca4b079637636dee8a6141ec52a8 +size 56994 diff --git a/.cursor/rules/roblox/assets/studio/debugging/Client-Server-Toggle-3D-Client.jpg b/.cursor/rules/roblox/assets/studio/debugging/Client-Server-Toggle-3D-Client.jpg new file mode 100644 index 00000000..4033dba0 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/debugging/Client-Server-Toggle-3D-Client.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c62ea4e663094ee8f3294f7fb4765641dd3f7efe7bf6d36e695de0f187342d07 +size 285133 diff --git a/.cursor/rules/roblox/assets/studio/debugging/Client-Server-Toggle-3D-Server.jpg b/.cursor/rules/roblox/assets/studio/debugging/Client-Server-Toggle-3D-Server.jpg new file mode 100644 index 00000000..8bd96041 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/debugging/Client-Server-Toggle-3D-Server.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4457f3434b63dfc2ca586239b8b759cd240fe12bcd211627f87cb8f1ecca82dd +size 276055 diff --git a/.cursor/rules/roblox/assets/studio/debugging/Client-Server-Toggle-Explorer-Client.png b/.cursor/rules/roblox/assets/studio/debugging/Client-Server-Toggle-Explorer-Client.png new file mode 100644 index 00000000..aa8f067e --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/debugging/Client-Server-Toggle-Explorer-Client.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa2a100d27169d3fa1cf024ea7fbd65e6b265be25f14d87f1d99dde60b9bfb04 +size 48650 diff --git a/.cursor/rules/roblox/assets/studio/debugging/Client-Server-Toggle-Explorer-Server.png b/.cursor/rules/roblox/assets/studio/debugging/Client-Server-Toggle-Explorer-Server.png new file mode 100644 index 00000000..ccca3874 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/debugging/Client-Server-Toggle-Explorer-Server.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6af9e9c12ca982be3dfbdabc90996e62c2348ba564f8ae81d17587c1a498fbcc +size 50317 diff --git a/.cursor/rules/roblox/assets/studio/debugging/Gutter-Breakpoint-Active.png b/.cursor/rules/roblox/assets/studio/debugging/Gutter-Breakpoint-Active.png new file mode 100644 index 00000000..e87d17f9 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/debugging/Gutter-Breakpoint-Active.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c44bb5c813df7894cf286dfa8e02322af9e369fb2d8f3f9c40f84388f2dc183 +size 22053 diff --git a/.cursor/rules/roblox/assets/studio/debugging/Gutter-Breakpoint-Conditional.png b/.cursor/rules/roblox/assets/studio/debugging/Gutter-Breakpoint-Conditional.png new file mode 100644 index 00000000..9af02368 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/debugging/Gutter-Breakpoint-Conditional.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:788323814a616ee590f695441f7d101a3510f87fbb1838d0725c8731df201203 +size 21733 diff --git a/.cursor/rules/roblox/assets/studio/debugging/Gutter-Breakpoint-Disabled.png b/.cursor/rules/roblox/assets/studio/debugging/Gutter-Breakpoint-Disabled.png new file mode 100644 index 00000000..7306b84d --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/debugging/Gutter-Breakpoint-Disabled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3e1c4af484ca706ae35852bf25048b889764bcb1110db4f0fa302c375403d4e +size 21745 diff --git a/.cursor/rules/roblox/assets/studio/debugging/Gutter-Breakpoint-Logpoint-Disabled.png b/.cursor/rules/roblox/assets/studio/debugging/Gutter-Breakpoint-Logpoint-Disabled.png new file mode 100644 index 00000000..900d34b9 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/debugging/Gutter-Breakpoint-Logpoint-Disabled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e57c46f4fddc93478500dd5e7c4f962378fe6fc4488089b19a1a74a75356939a +size 21694 diff --git a/.cursor/rules/roblox/assets/studio/debugging/Gutter-Breakpoint-Logpoint.png b/.cursor/rules/roblox/assets/studio/debugging/Gutter-Breakpoint-Logpoint.png new file mode 100644 index 00000000..e5c99044 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/debugging/Gutter-Breakpoint-Logpoint.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db28cd001c7cba2fb8c82fd405345490d7f8e08ab097b116f7607ca3f084263f +size 21335 diff --git a/.cursor/rules/roblox/assets/studio/debugging/Gutter-Breakpoint.png b/.cursor/rules/roblox/assets/studio/debugging/Gutter-Breakpoint.png new file mode 100644 index 00000000..da455e49 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/debugging/Gutter-Breakpoint.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23e907fe43b6d1d90a8721ff7190124109215c2261998180f19c0ca1aca60ea4 +size 21368 diff --git a/.cursor/rules/roblox/assets/studio/debugging/Native-Code-Size-Analysis.png b/.cursor/rules/roblox/assets/studio/debugging/Native-Code-Size-Analysis.png new file mode 100644 index 00000000..1d693eb9 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/debugging/Native-Code-Size-Analysis.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:851ff7d4061a85dc6d5bc408e02867e90ac1a99aee9f37736b393e71cffe04f7 +size 197245 diff --git a/.cursor/rules/roblox/assets/studio/debugging/Script-Editor-Mouseover-Table.png b/.cursor/rules/roblox/assets/studio/debugging/Script-Editor-Mouseover-Table.png new file mode 100644 index 00000000..464605f6 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/debugging/Script-Editor-Mouseover-Table.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b48beb64cfb3d9cef425b56ff10a3718f65e19f092a3d91eeb3919be988071a9 +size 103931 diff --git a/.cursor/rules/roblox/assets/studio/debugging/Server-Authority-Simulation-Radius.jpg b/.cursor/rules/roblox/assets/studio/debugging/Server-Authority-Simulation-Radius.jpg new file mode 100644 index 00000000..e381dd9b --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/debugging/Server-Authority-Simulation-Radius.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40096fe8239deb44f61e2d059db919302a9479098bf67edcf483f86bcef79ce8 +size 241388 diff --git a/.cursor/rules/roblox/assets/studio/debugging/Watch-Expressions-Script.png b/.cursor/rules/roblox/assets/studio/debugging/Watch-Expressions-Script.png new file mode 100644 index 00000000..adf8b07a --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/debugging/Watch-Expressions-Script.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69b3918edda781b63363744450c502b08755ad799d8e9f87b401ee47326e91f9 +size 158872 diff --git a/.cursor/rules/roblox/assets/studio/debugging/Watch-Expressions-Window.png b/.cursor/rules/roblox/assets/studio/debugging/Watch-Expressions-Window.png new file mode 100644 index 00000000..1984a1cd --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/debugging/Watch-Expressions-Window.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a709ddd595e163b8e766d0c778ebcb7aeb569d39f3fad22224531eff4b17242 +size 37211 diff --git a/.cursor/rules/roblox/assets/studio/debugging/Watch-Variables-Script.png b/.cursor/rules/roblox/assets/studio/debugging/Watch-Variables-Script.png new file mode 100644 index 00000000..6bd8d0e2 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/debugging/Watch-Variables-Script.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6cc52b58d7e4830bd0158f46ee3182b51856fb982065d89d5fb668e520e3cc9 +size 159156 diff --git a/.cursor/rules/roblox/assets/studio/debugging/Watch-Variables-Window.png b/.cursor/rules/roblox/assets/studio/debugging/Watch-Variables-Window.png new file mode 100644 index 00000000..b389525a --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/debugging/Watch-Variables-Window.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13e8e044f3dbecb65f74e4798dce5f786fa15b00d1232f4c61ce95e44810d1ff +size 63800 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Branch-Expanded.png b/.cursor/rules/roblox/assets/studio/explorer/Branch-Expanded.png new file mode 100644 index 00000000..e5520990 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Branch-Expanded.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a284d112b6238acef089d21fc3f330fe5ffc991c05336ee2cb2c0cf9140f8ef +size 129351 diff --git a/.cursor/rules/roblox/assets/studio/explorer/CSS-Test-Setup.png b/.cursor/rules/roblox/assets/studio/explorer/CSS-Test-Setup.png new file mode 100644 index 00000000..e797260a --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/CSS-Test-Setup.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90a361bb639752ded337bbf220de296c4618a16b049fa30e175f2eb6423a7c50 +size 52321 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Chat-Descendants.png b/.cursor/rules/roblox/assets/studio/explorer/Chat-Descendants.png new file mode 100644 index 00000000..c9192de1 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Chat-Descendants.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ceb877718b74e54a606228c8c78e221f21e3dfed80a2914707fa8e340888a93 +size 90937 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Context-Menu-Model.png b/.cursor/rules/roblox/assets/studio/explorer/Context-Menu-Model.png new file mode 100644 index 00000000..5a0cbf9f --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Context-Menu-Model.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b58c67d9dc86208b77d9e44f450a7e89eff001103aa6e0a8634eb98511efd8ce +size 173611 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Context-Menu-Service.png b/.cursor/rules/roblox/assets/studio/explorer/Context-Menu-Service.png new file mode 100644 index 00000000..a0c8d4cd --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Context-Menu-Service.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:494313f4ac4fcd09df4b1fef2c219eaae93246d7a4242baaedd974cb766203d0 +size 159669 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Drag-Select-Searched.png b/.cursor/rules/roblox/assets/studio/explorer/Drag-Select-Searched.png new file mode 100644 index 00000000..2d341335 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Drag-Select-Searched.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:073a118d1a0488c5fa9a9671c7ee9952d0bde04d26593d93dfad288949e1a78b +size 80337 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Example-Maps-In-Workspace-ServerStorage.png b/.cursor/rules/roblox/assets/studio/explorer/Example-Maps-In-Workspace-ServerStorage.png new file mode 100644 index 00000000..5d27d527 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Example-Maps-In-Workspace-ServerStorage.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf83098deb6836059583f742c0edef6f588605804c3026fc6f9c55b2e73436e2 +size 71510 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Example-Organized-Folders-In-Workspace.png b/.cursor/rules/roblox/assets/studio/explorer/Example-Organized-Folders-In-Workspace.png new file mode 100644 index 00000000..3afba29c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Example-Organized-Folders-In-Workspace.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:905decf756f3522f6d2044acf84131bb49cce142c0cd225023ffe4c3c6fa84d7 +size 68042 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Folder-Children.png b/.cursor/rules/roblox/assets/studio/explorer/Folder-Children.png new file mode 100644 index 00000000..e5901844 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Folder-Children.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d0e4627b2daada1aba70f2148c46270d6061119d9a007dc3542cc193e7a7339 +size 67882 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Insert-Object-Options.png b/.cursor/rules/roblox/assets/studio/explorer/Insert-Object-Options.png new file mode 100644 index 00000000..eb1af98c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Insert-Object-Options.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d96687b51326baae876ea904e8cb78c47b27d3575398acd605d661edac4e49a +size 25253 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Lighting-Atmosphere.png b/.cursor/rules/roblox/assets/studio/explorer/Lighting-Atmosphere.png new file mode 100644 index 00000000..64c8ccb9 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Lighting-Atmosphere.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c08ae6b8531b3590d19aa06b703f66592e842d79e24fec02420b4295611aa7e +size 20016 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Lighting-Sky.png b/.cursor/rules/roblox/assets/studio/explorer/Lighting-Sky.png new file mode 100644 index 00000000..996001c1 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Lighting-Sky.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f814ecced973fac11115bccfa422bc94a5e46ad69552caab376a9e07639c94a +size 14882 diff --git a/.cursor/rules/roblox/assets/studio/explorer/LinearVelocity.png b/.cursor/rules/roblox/assets/studio/explorer/LinearVelocity.png new file mode 100644 index 00000000..0b5eedd8 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/LinearVelocity.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:287a8f8778849ada9ebddf60837dd16ce10d2dc4dc8ae9eb957cb6699b9140c9 +size 19543 diff --git a/.cursor/rules/roblox/assets/studio/explorer/LocalScript-In-TextButton.png b/.cursor/rules/roblox/assets/studio/explorer/LocalScript-In-TextButton.png new file mode 100644 index 00000000..e9d6bf60 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/LocalScript-In-TextButton.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1704d9ff313daafbef6da18890464df251a4b4515fc6e5b2f6235c8ec3c1d3b0 +size 19161 diff --git a/.cursor/rules/roblox/assets/studio/explorer/MeshPart-ParticleEmitter.png b/.cursor/rules/roblox/assets/studio/explorer/MeshPart-ParticleEmitter.png new file mode 100644 index 00000000..45672fc0 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/MeshPart-ParticleEmitter.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77c65913a10d40901db61096152279a0e554de6e4996c2db299bb7a1e6e44979 +size 15916 diff --git a/.cursor/rules/roblox/assets/studio/explorer/MeshPart-SurfaceAppearance.png b/.cursor/rules/roblox/assets/studio/explorer/MeshPart-SurfaceAppearance.png new file mode 100644 index 00000000..38717203 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/MeshPart-SurfaceAppearance.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9cd0f32f141f900fda7c9a4b1b537a1e88ed235fe4585454af78735a9ce1a1b +size 17391 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Model-Beam-Setup.png b/.cursor/rules/roblox/assets/studio/explorer/Model-Beam-Setup.png new file mode 100644 index 00000000..98de0081 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Model-Beam-Setup.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:762fe67b19e00e160882fcf6cbf66f04e16566f8d3520bc4786cd6c67d71d313 +size 14576 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Model-DragDetector.png b/.cursor/rules/roblox/assets/studio/explorer/Model-DragDetector.png new file mode 100644 index 00000000..b597c7d1 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Model-DragDetector.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b61d68a40abe6781496bd58b04f9d8a54e38b00fa22fb6af880330d19c438394 +size 31108 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Parent-Child-Hierarchy.png b/.cursor/rules/roblox/assets/studio/explorer/Parent-Child-Hierarchy.png new file mode 100644 index 00000000..3a857241 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Parent-Child-Hierarchy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29d06462cfaf9c7a8b3bcbdc42cbc0c69372edfb30107f02f055bb14a574be1c +size 151287 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Part-Attachment-BillboardGui-ImageLabel.png b/.cursor/rules/roblox/assets/studio/explorer/Part-Attachment-BillboardGui-ImageLabel.png new file mode 100644 index 00000000..8d329d96 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Part-Attachment-BillboardGui-ImageLabel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bbd4356606194a3ff49987b2b37ba5533e99f6c504226db94f4ad361e89d4359 +size 39782 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Part-BillboardGui-ImageLabel.png b/.cursor/rules/roblox/assets/studio/explorer/Part-BillboardGui-ImageLabel.png new file mode 100644 index 00000000..3ec06a6e --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Part-BillboardGui-ImageLabel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97f294433b6fd4f49a4af2ca5fd01cb86797b9caa045af37d26755919ce66209 +size 38938 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Part-SurfaceGui-ImageLabel.png b/.cursor/rules/roblox/assets/studio/explorer/Part-SurfaceGui-ImageLabel.png new file mode 100644 index 00000000..2da521e8 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Part-SurfaceGui-ImageLabel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3aa19b63a5615d124b94b87c0ba88fdeb752e1467b7d94b0525be600d2b952f +size 28976 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Part-Trail-Setup.png b/.cursor/rules/roblox/assets/studio/explorer/Part-Trail-Setup.png new file mode 100644 index 00000000..fae89f99 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Part-Trail-Setup.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4255c7d28703531e99b020a62cf4b247c6d6349f48d4c2c8c27031451687605 +size 10568 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Plugin-Created.png b/.cursor/rules/roblox/assets/studio/explorer/Plugin-Created.png new file mode 100644 index 00000000..d89be9dc --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Plugin-Created.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25e78009e7df088d31376c4e8540c62c7c6fd72a10fa734657a8fe24137b7d71 +size 22762 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Plugin-Empty-Script-Adder.png b/.cursor/rules/roblox/assets/studio/explorer/Plugin-Empty-Script-Adder.png new file mode 100644 index 00000000..052afad3 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Plugin-Empty-Script-Adder.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:abbd63b82c0b85bda185785a1969d1e8820e0584517b2cf006d06c4838d5ab19 +size 18362 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Plugin-Inserted-Script.png b/.cursor/rules/roblox/assets/studio/explorer/Plugin-Inserted-Script.png new file mode 100644 index 00000000..bc4e0d15 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Plugin-Inserted-Script.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd54a1877da907e81de79950eaa51b280dcafecb6f0fb39675de4b42a1254c84 +size 22185 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Reparent-Object.png b/.cursor/rules/roblox/assets/studio/explorer/Reparent-Object.png new file mode 100644 index 00000000..047b4a45 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Reparent-Object.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbe7ae4b4d9a906159e87c88d1809fa64bfd67cd04abb1c2b28ae42ba88206b8 +size 47398 diff --git a/.cursor/rules/roblox/assets/studio/explorer/ReplicatedStorage-Model.png b/.cursor/rules/roblox/assets/studio/explorer/ReplicatedStorage-Model.png new file mode 100644 index 00000000..e0ff5b46 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/ReplicatedStorage-Model.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b9e3fbce36d848838545241bc35b4d5c7999426ca77a497ff08364db4e72843 +size 23710 diff --git a/.cursor/rules/roblox/assets/studio/explorer/ReplicatedStorage-Server-Authority.png b/.cursor/rules/roblox/assets/studio/explorer/ReplicatedStorage-Server-Authority.png new file mode 100644 index 00000000..2fca6ebb --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/ReplicatedStorage-Server-Authority.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f326aabf104eae8b7596352a1bdd2bd17f4c6d3337e22d20744acc1c1f97521 +size 14481 diff --git a/.cursor/rules/roblox/assets/studio/explorer/ReplicatedStorage-Tools.png b/.cursor/rules/roblox/assets/studio/explorer/ReplicatedStorage-Tools.png new file mode 100644 index 00000000..bcf581a7 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/ReplicatedStorage-Tools.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b7fbc0554aaa4fbbf7f41a4ecef2128c17d7c735d47a382415f879303898851 +size 32329 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Rig-Clothing.png b/.cursor/rules/roblox/assets/studio/explorer/Rig-Clothing.png new file mode 100644 index 00000000..2c078505 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Rig-Clothing.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce57f809efea58b136a29b774a0a32bc19519ad6b67c4dcd6e065db27ca49aa6 +size 13478 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Rig-Hierarchy.png b/.cursor/rules/roblox/assets/studio/explorer/Rig-Hierarchy.png new file mode 100644 index 00000000..c5e1fc64 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Rig-Hierarchy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1d47dca421e66aed097df1fb5d6fbcc8e3111a4908f3e4cceb00b5ca72f3f5a +size 98996 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Rig-Shirt-Graphic.png b/.cursor/rules/roblox/assets/studio/explorer/Rig-Shirt-Graphic.png new file mode 100644 index 00000000..984c5d78 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Rig-Shirt-Graphic.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6924b9ad869852762286b68573d9f5ab118d25aa0e85b41fc405a857380a0586 +size 14432 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Script-Parent-Model.png b/.cursor/rules/roblox/assets/studio/explorer/Script-Parent-Model.png new file mode 100644 index 00000000..bc10bea7 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Script-Parent-Model.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1879846fa7f01c76a3d49008449c24b163352ab0f777a1d64678bf19303f2800 +size 7977 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Script-Parent-ReplicatedStorage.png b/.cursor/rules/roblox/assets/studio/explorer/Script-Parent-ReplicatedStorage.png new file mode 100644 index 00000000..a58a0235 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Script-Parent-ReplicatedStorage.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ac9c1a3303aa5a1eaba7f24ce90dfa9d37560cc43ac8b25feb7f36e1b7ac7cd +size 12985 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Script-Sync.png b/.cursor/rules/roblox/assets/studio/explorer/Script-Sync.png new file mode 100644 index 00000000..b9e3a966 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Script-Sync.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a9e95c6c69af6494f7e998781dc8a84f675bf4d51173276bfed7d9d05e06e0e +size 233641 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Search-By-Name.png b/.cursor/rules/roblox/assets/studio/explorer/Search-By-Name.png new file mode 100644 index 00000000..4fc5baab --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Search-By-Name.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8e72b77b00482c4eb9f17307bffa3eb4503d2a82f187721bcd82aab2c16b58c +size 135818 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Search-Diagram.png b/.cursor/rules/roblox/assets/studio/explorer/Search-Diagram.png new file mode 100644 index 00000000..b6279972 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Search-Diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96b41852ed72a02c9d4dfe2696cfc61671d7600117333db4a75c0ce2c9319fd3 +size 102112 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Select-All-Searched.png b/.cursor/rules/roblox/assets/studio/explorer/Select-All-Searched.png new file mode 100644 index 00000000..c927d833 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Select-All-Searched.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cb6081a680997ec4d60f896c70131d5c9ba0161f4813c01afcb0d5f6a856791 +size 56163 diff --git a/.cursor/rules/roblox/assets/studio/explorer/ServerScriptService-Actor.png b/.cursor/rules/roblox/assets/studio/explorer/ServerScriptService-Actor.png new file mode 100644 index 00000000..c7746f8a --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/ServerScriptService-Actor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c1e4c145ae387c56d73444524f1b96b544fbc5818736dc080b6029553a8ff6f +size 22674 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Shift-Click-Non-Searched-A.png b/.cursor/rules/roblox/assets/studio/explorer/Shift-Click-Non-Searched-A.png new file mode 100644 index 00000000..cdf8ebeb --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Shift-Click-Non-Searched-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79ac911d2cd6dc891fb9978932c3b70075aa329a190f72519b7c0d9651e03e84 +size 110790 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Shift-Click-Non-Searched-B.png b/.cursor/rules/roblox/assets/studio/explorer/Shift-Click-Non-Searched-B.png new file mode 100644 index 00000000..636be86c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Shift-Click-Non-Searched-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85a66cd203df3ea97ad242e9554ae6ba1e12c105ec1d60d23c0122eb3f4476d8 +size 114156 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Shift-Click-Searched.png b/.cursor/rules/roblox/assets/studio/explorer/Shift-Click-Searched.png new file mode 100644 index 00000000..18d6875f --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Shift-Click-Searched.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1dacdd421f1f63b71ffe17afe88db3cac591d665ee5c46c7c60611f6026fdbe +size 84578 diff --git a/.cursor/rules/roblox/assets/studio/explorer/SoundService-SoundGroup-ReverbSoundEffect.png b/.cursor/rules/roblox/assets/studio/explorer/SoundService-SoundGroup-ReverbSoundEffect.png new file mode 100644 index 00000000..479a091c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/SoundService-SoundGroup-ReverbSoundEffect.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:185104534c83452e3b97dcdbd4784161ef277448fa593b55eb58c1f63617a623 +size 21012 diff --git a/.cursor/rules/roblox/assets/studio/explorer/SoundService-SoundGroup.png b/.cursor/rules/roblox/assets/studio/explorer/SoundService-SoundGroup.png new file mode 100644 index 00000000..0109ec09 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/SoundService-SoundGroup.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f8731bba68e2b095b2ab3fd58e7f5ac2fa032cef0b3e21fa387f3876d5dea61 +size 14866 diff --git a/.cursor/rules/roblox/assets/studio/explorer/SpringConstraint.png b/.cursor/rules/roblox/assets/studio/explorer/SpringConstraint.png new file mode 100644 index 00000000..33f22725 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/SpringConstraint.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06e49d8c8f384abf5dadb27a18efd0b80783ae2170c228f1a93e5b0dceee6f8f +size 26375 diff --git a/.cursor/rules/roblox/assets/studio/explorer/StarterGui-BindableEvent-ContextEvent.png b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-BindableEvent-ContextEvent.png new file mode 100644 index 00000000..d20873b1 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-BindableEvent-ContextEvent.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e3b0ee18e66f8733ebf1acb9b2235406ed394f7fd7562d8adeee82eaba4c6b3 +size 17267 diff --git a/.cursor/rules/roblox/assets/studio/explorer/StarterGui-InputContext-InputAction-InputBinding-All.png b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-InputContext-InputAction-InputBinding-All.png new file mode 100644 index 00000000..7fd440ed --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-InputContext-InputAction-InputBinding-All.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2cee6f213798cfe5130f8882ea17db5baa90deb473dee284ba3ff22018b6f69 +size 29150 diff --git a/.cursor/rules/roblox/assets/studio/explorer/StarterGui-InputContext-InputAction-InputBinding-GamepadBinding.png b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-InputContext-InputAction-InputBinding-GamepadBinding.png new file mode 100644 index 00000000..321ea0f3 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-InputContext-InputAction-InputBinding-GamepadBinding.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:742667c6b4ecbccb119889388d677e49ae32a339fa5ac88ab6ca9db5848d4d23 +size 29281 diff --git a/.cursor/rules/roblox/assets/studio/explorer/StarterGui-InputContext-InputAction-InputBinding-KeyboardBinding.png b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-InputContext-InputAction-InputBinding-KeyboardBinding.png new file mode 100644 index 00000000..403011f1 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-InputContext-InputAction-InputBinding-KeyboardBinding.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa1e6e60e2b2ce00e2869f6b8c2c3a3d755c82606bb86a623786fb596c5ffccb +size 27671 diff --git a/.cursor/rules/roblox/assets/studio/explorer/StarterGui-InputContext-InputAction-InputBinding-TouchBinding.png b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-InputContext-InputAction-InputBinding-TouchBinding.png new file mode 100644 index 00000000..50bc7382 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-InputContext-InputAction-InputBinding-TouchBinding.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a35fe95f28b95bebf390272802f5abf01d69723d7cd570bd4019a7529bebf86b +size 35242 diff --git a/.cursor/rules/roblox/assets/studio/explorer/StarterGui-InputContext-InputAction-LocalScript.png b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-InputContext-InputAction-LocalScript.png new file mode 100644 index 00000000..7169ef15 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-InputContext-InputAction-LocalScript.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9d4597a1841e146af249111d82957c8ae4f4638b84e7d299e2ff92c0d0bb1c2 +size 26264 diff --git a/.cursor/rules/roblox/assets/studio/explorer/StarterGui-InputContext-InputAction.png b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-InputContext-InputAction.png new file mode 100644 index 00000000..ef7f3126 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-InputContext-InputAction.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15ee75bfb7e7ee5116b2ef0b5c1020333f8b4aeb0a91d9d1cdaec696ffb59a17 +size 18901 diff --git a/.cursor/rules/roblox/assets/studio/explorer/StarterGui-InputContext.png b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-InputContext.png new file mode 100644 index 00000000..a66bc731 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-InputContext.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90cb613977dba8cd62afc833ad37ccf9f042fd83f745b5eb49a84610a66f6404 +size 21419 diff --git a/.cursor/rules/roblox/assets/studio/explorer/StarterGui-LocalScript-UpdateContext.png b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-LocalScript-UpdateContext.png new file mode 100644 index 00000000..3aefc02b --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-LocalScript-UpdateContext.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43951d43000b67bb910736d9248cd7a393bff883ab881f4764a9f8b4d0edab9d +size 21343 diff --git a/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui-HUDContainer.png b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui-HUDContainer.png new file mode 100644 index 00000000..1e167b20 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui-HUDContainer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd6de99a9fcb0cc696aa2a34a6096c2151d38fd808655a77040a7f58f340f904 +size 14071 diff --git a/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui-MenuFrame.png b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui-MenuFrame.png new file mode 100644 index 00000000..e0eb7625 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui-MenuFrame.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6374372be5d3a02841432d74e92165993a62d2967749aa3fc6ccc9a75c42472 +size 14008 diff --git a/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui-Path2D.png b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui-Path2D.png new file mode 100644 index 00000000..dcdd67b0 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui-Path2D.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28339fdec82c7744846fd8ee9a7858365ed5f550285d289025fdfce8ce4fcdfc +size 31086 diff --git a/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui-SprintButton.png b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui-SprintButton.png new file mode 100644 index 00000000..c6646b93 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui-SprintButton.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e1549cf67b7e179bef5c8deb8403e98d853b4515ba94f29d74259b0860b70bc +size 21713 diff --git a/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui-StyleLink.png b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui-StyleLink.png new file mode 100644 index 00000000..50a0a5c9 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui-StyleLink.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67c2ec0451f947ecebd34ae68948a45916eea7d779bd577bda0878f844101221 +size 19530 diff --git a/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui-TextButton.png b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui-TextButton.png new file mode 100644 index 00000000..dc384b56 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui-TextButton.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4adc508fc8b58cc8f8fb1d09072dc8d8757b3cbade9ff52b3010180369b45bf1 +size 16284 diff --git a/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui-VideoFrame.png b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui-VideoFrame.png new file mode 100644 index 00000000..968a69bb --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui-VideoFrame.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55d876e4b12759a93168342dada2057b03f8492e19cfcd981d69c5f26ccbbf1f +size 14640 diff --git a/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui.png b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui.png new file mode 100644 index 00000000..77e53e10 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-ScreenGui.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:62a9a722c189e54aec58e5d1962b41646b26ed233f72c3aae81739370ba1a435 +size 23856 diff --git a/.cursor/rules/roblox/assets/studio/explorer/StarterGui-SurfaceGui.png b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-SurfaceGui.png new file mode 100644 index 00000000..f92688a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-SurfaceGui.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6941a717e62081a191be602c4fce8db713e8dffba2c36d76bede9b88ed54bda8 +size 35983 diff --git a/.cursor/rules/roblox/assets/studio/explorer/StarterGui-UIDragDetector.png b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-UIDragDetector.png new file mode 100644 index 00000000..6619449a --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/StarterGui-UIDragDetector.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a5cdf6ecc225715adf9478bba480a30dfba7bbe3c44568643f06f30e689bad3 +size 37559 diff --git a/.cursor/rules/roblox/assets/studio/explorer/StarterGui.png b/.cursor/rules/roblox/assets/studio/explorer/StarterGui.png new file mode 100644 index 00000000..260f5f73 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/StarterGui.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6bbe0e04a94c18184d24bbcfe5eb9d7f87a61d36211536fbe126969fdc14d005 +size 28459 diff --git a/.cursor/rules/roblox/assets/studio/explorer/StarterPack-Tools.png b/.cursor/rules/roblox/assets/studio/explorer/StarterPack-Tools.png new file mode 100644 index 00000000..c3cc2b5a --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/StarterPack-Tools.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c7e17eca5eb3f1be45a422deb495f57a2334000d886e4e1dfe1d7509db2c114 +size 29517 diff --git a/.cursor/rules/roblox/assets/studio/explorer/StarterPlayer.png b/.cursor/rules/roblox/assets/studio/explorer/StarterPlayer.png new file mode 100644 index 00000000..bc4509d8 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/StarterPlayer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f48234e1886529c44658a8a2cfb4c7faf4a3ec5e08ec7950fed9abb9ff99a8ce +size 18292 diff --git a/.cursor/rules/roblox/assets/studio/explorer/StyleLink-Propagation.png b/.cursor/rules/roblox/assets/studio/explorer/StyleLink-Propagation.png new file mode 100644 index 00000000..f1a797bd --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/StyleLink-Propagation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cbc21bd9c34abca25a6dc15d1cc12a37073793da3a868fee88726bdb1cb34c9 +size 60288 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Styling-Hierarchy.png b/.cursor/rules/roblox/assets/studio/explorer/Styling-Hierarchy.png new file mode 100644 index 00000000..ed596bdf --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Styling-Hierarchy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:611ea29537edd53aa8a8aa385531190ec9d431234241646ea308085cecc37d52 +size 73073 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Teams-Team.png b/.cursor/rules/roblox/assets/studio/explorer/Teams-Team.png new file mode 100644 index 00000000..0306fb41 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Teams-Team.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ae087c5993246d2dcc6749a5d9731d8a4adc96a1eaa7fe8827adea019ee0d3c +size 16974 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Terrain-Clouds.png b/.cursor/rules/roblox/assets/studio/explorer/Terrain-Clouds.png new file mode 100644 index 00000000..2c28605c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Terrain-Clouds.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7684ba541fde239c08b36be7d9fec15f10c0b03bcaa35f85ea6d0154563a45e0 +size 15237 diff --git a/.cursor/rules/roblox/assets/studio/explorer/TextChatService-ChannelTabsConfiguration.png b/.cursor/rules/roblox/assets/studio/explorer/TextChatService-ChannelTabsConfiguration.png new file mode 100644 index 00000000..05ea4ee1 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/TextChatService-ChannelTabsConfiguration.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a73a317bdaf47e8a2616d9a43fbfdfb28cf74ad061b48cee081d3034350c6876 +size 35843 diff --git a/.cursor/rules/roblox/assets/studio/explorer/TextChatService-ChatInputBarConfiguration.png b/.cursor/rules/roblox/assets/studio/explorer/TextChatService-ChatInputBarConfiguration.png new file mode 100644 index 00000000..e1a078ae --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/TextChatService-ChatInputBarConfiguration.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a1278dc34e08cda716226918a3bae216a87fd73409f6eb51a2ee99642c2c986 +size 35898 diff --git a/.cursor/rules/roblox/assets/studio/explorer/TextChatService-ChatWindowConfiguration.png b/.cursor/rules/roblox/assets/studio/explorer/TextChatService-ChatWindowConfiguration.png new file mode 100644 index 00000000..ec0bb5d3 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/TextChatService-ChatWindowConfiguration.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab14946f6310a2ae3899a66e10542db98487ab789f3aa9239dfcfcc26e55bf73 +size 35360 diff --git a/.cursor/rules/roblox/assets/studio/explorer/TextChatService-TextChatCommand.png b/.cursor/rules/roblox/assets/studio/explorer/TextChatService-TextChatCommand.png new file mode 100644 index 00000000..55b2996c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/TextChatService-TextChatCommand.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24bd0b7c7e23b26020ae7e3177a009d96a1fc83ba140c84c4df35147b0b4e600 +size 39194 diff --git a/.cursor/rules/roblox/assets/studio/explorer/UIGradient.png b/.cursor/rules/roblox/assets/studio/explorer/UIGradient.png new file mode 100644 index 00000000..024af206 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/UIGradient.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d2eef8bfc7e4fb398ef96af24e792bf3a389684ffba0f7ae90803e7d2fd7a2b +size 30682 diff --git a/.cursor/rules/roblox/assets/studio/explorer/UIGridLayout.png b/.cursor/rules/roblox/assets/studio/explorer/UIGridLayout.png new file mode 100644 index 00000000..8630c098 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/UIGridLayout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b378af4af92baf9776283ae613b6e62946bcb896e6b6e7d52fa578c545efa15 +size 56247 diff --git a/.cursor/rules/roblox/assets/studio/explorer/UIPageLayout.png b/.cursor/rules/roblox/assets/studio/explorer/UIPageLayout.png new file mode 100644 index 00000000..226ccf01 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/UIPageLayout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63a7148495415b70590d46289861266ff9239baafeb878d1fb430f304552eeb8 +size 32420 diff --git a/.cursor/rules/roblox/assets/studio/explorer/UITableLayout.png b/.cursor/rules/roblox/assets/studio/explorer/UITableLayout.png new file mode 100644 index 00000000..fdda3b12 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/UITableLayout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53564ab0aed3587c84f6959e90a5f007dedbde2d323acc1edffc035db5786c30 +size 61591 diff --git a/.cursor/rules/roblox/assets/studio/explorer/VoiceChatService.png b/.cursor/rules/roblox/assets/studio/explorer/VoiceChatService.png new file mode 100644 index 00000000..c53f4d0c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/VoiceChatService.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1c756a609d7fc797443803f864d48cfff16caf6a25275e46f92c835d879cf73 +size 19345 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Workspace-Add-Object.png b/.cursor/rules/roblox/assets/studio/explorer/Workspace-Add-Object.png new file mode 100644 index 00000000..4848df42 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Workspace-Add-Object.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6645a0fd855fc8d3bcef08ed8e3e04eb5b7254380241ef84b622e51fb7ba742c +size 43325 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Workspace-Baseplate.png b/.cursor/rules/roblox/assets/studio/explorer/Workspace-Baseplate.png new file mode 100644 index 00000000..ae822189 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Workspace-Baseplate.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:219c0e89b96249c042966079bf24842f11a28bba3144a4ee9f9c8897b7335ff9 +size 33776 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Workspace-Terrain.png b/.cursor/rules/roblox/assets/studio/explorer/Workspace-Terrain.png new file mode 100644 index 00000000..03139892 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Workspace-Terrain.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7ceac4ed5f6d1e86043787207761e7b27ebaba1e61d867937cb53ecee72a0f0 +size 12157 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Workspace-Tool.png b/.cursor/rules/roblox/assets/studio/explorer/Workspace-Tool.png new file mode 100644 index 00000000..b7cf32f9 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Workspace-Tool.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:826b2e70f1bfe547fa19f4014209ab8b5992d0a26a9cde46ad3a21df50d9c5a5 +size 15202 diff --git a/.cursor/rules/roblox/assets/studio/explorer/Workspace.png b/.cursor/rules/roblox/assets/studio/explorer/Workspace.png new file mode 100644 index 00000000..2348ecff --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/explorer/Workspace.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd2a84424271ab22ac035e4672853ff82efdd14d1a6c861b11290e03b3a178de +size 14886 diff --git a/.cursor/rules/roblox/assets/studio/general/3D-Asset-Preview.mp4 b/.cursor/rules/roblox/assets/studio/general/3D-Asset-Preview.mp4 new file mode 100644 index 00000000..b5b6c718 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/3D-Asset-Preview.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:747b5814ae390374f7fef34805907301e39aaff0162842cb2175fc43df7a685f +size 641081 diff --git a/.cursor/rules/roblox/assets/studio/general/Activity-History.png b/.cursor/rules/roblox/assets/studio/general/Activity-History.png new file mode 100644 index 00000000..3695146c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Activity-History.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:913cb2e4cb35394c5eb96efbac7243808bee8188b48d40d83029d585b7061167 +size 83783 diff --git a/.cursor/rules/roblox/assets/studio/general/Boom-Impact.mp3 b/.cursor/rules/roblox/assets/studio/general/Boom-Impact.mp3 new file mode 100644 index 00000000..be9aec04 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Boom-Impact.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe12be3f0e1264fd085386df79dffc8a28fafba3d53e85ecb9c87b45c47d5c8c +size 73274 diff --git a/.cursor/rules/roblox/assets/studio/general/ColorSequence-Red-Cyan-Purple.png b/.cursor/rules/roblox/assets/studio/general/ColorSequence-Red-Cyan-Purple.png new file mode 100644 index 00000000..750bc9a1 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/ColorSequence-Red-Cyan-Purple.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d81a8b0e1f59cbe97fd5af833cfcf72daa89ba10bea2dc9afd14a9bd579bc5f +size 117975 diff --git a/.cursor/rules/roblox/assets/studio/general/ColorSequence-Red-Purple.png b/.cursor/rules/roblox/assets/studio/general/ColorSequence-Red-Purple.png new file mode 100644 index 00000000..cb36bf17 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/ColorSequence-Red-Purple.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ded5355afe8f66aae0d127df97bce6dd10fca7248c481a2ab562d089bb5b15e3 +size 118646 diff --git a/.cursor/rules/roblox/assets/studio/general/ColorSequence-Red-White.png b/.cursor/rules/roblox/assets/studio/general/ColorSequence-Red-White.png new file mode 100644 index 00000000..e673904b --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/ColorSequence-Red-White.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67e92d2c423a39c70232102417565f0ac23ea360488974701121a99ed028f022 +size 86090 diff --git a/.cursor/rules/roblox/assets/studio/general/ColorSequence-White-Keypoints-Labeled.png b/.cursor/rules/roblox/assets/studio/general/ColorSequence-White-Keypoints-Labeled.png new file mode 100644 index 00000000..502466de --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/ColorSequence-White-Keypoints-Labeled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fe5647a8ec6d4edfe03443495d8b57505824f7dd781f411caf7eac5fc96d89d +size 17515 diff --git a/.cursor/rules/roblox/assets/studio/general/ColorSequence-White.png b/.cursor/rules/roblox/assets/studio/general/ColorSequence-White.png new file mode 100644 index 00000000..aca171db --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/ColorSequence-White.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67470f2400eadd4801cf163b0fabbf2f5f0957739b7c825fd65aeb918161d654 +size 10816 diff --git a/.cursor/rules/roblox/assets/studio/general/Command-Bar.png b/.cursor/rules/roblox/assets/studio/general/Command-Bar.png new file mode 100644 index 00000000..9f89d78d --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Command-Bar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04d24123e1f7984b16c432b08b6967c6fd3b6dc642ce202a94f3cb3057ca44e6 +size 46082 diff --git a/.cursor/rules/roblox/assets/studio/general/Controller-Emulator-VR.png b/.cursor/rules/roblox/assets/studio/general/Controller-Emulator-VR.png new file mode 100644 index 00000000..584b89b2 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Controller-Emulator-VR.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:452d7d69546a87a05ee7dbb5f47f7994c9271b4f994636ad7757ef7b566f4b13 +size 155843 diff --git a/.cursor/rules/roblox/assets/studio/general/Controller-Emulator.png b/.cursor/rules/roblox/assets/studio/general/Controller-Emulator.png new file mode 100644 index 00000000..a61a67dc --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Controller-Emulator.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47bf484a60910ad13d0fe77ceb003b69a71236f8649970b786d38e5ac451278e +size 182931 diff --git a/.cursor/rules/roblox/assets/studio/general/Device-Emulator-Phone.png b/.cursor/rules/roblox/assets/studio/general/Device-Emulator-Phone.png new file mode 100644 index 00000000..3e717e3c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Device-Emulator-Phone.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:62813619b80fb277e48b0a963280ffe881d509bd591c54cb30d4d1d9525a5ef7 +size 74897 diff --git a/.cursor/rules/roblox/assets/studio/general/Device-Emulator-Tablet.png b/.cursor/rules/roblox/assets/studio/general/Device-Emulator-Tablet.png new file mode 100644 index 00000000..c57f4a1b --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Device-Emulator-Tablet.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b301b90da65b30752cd1a5b1dc0c8c30df6cd998844670c7e386a11b770fb1c +size 76367 diff --git a/.cursor/rules/roblox/assets/studio/general/Docking-Expand-Collapse.png b/.cursor/rules/roblox/assets/studio/general/Docking-Expand-Collapse.png new file mode 100644 index 00000000..d03015fe --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Docking-Expand-Collapse.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b0d73b2fa8a62dbf7efd18ac1e448df3634c34e8be4003886f299fd4d1d18c43 +size 36562 diff --git a/.cursor/rules/roblox/assets/studio/general/Docking-Grouped-Tabs.png b/.cursor/rules/roblox/assets/studio/general/Docking-Grouped-Tabs.png new file mode 100644 index 00000000..db879fad --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Docking-Grouped-Tabs.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a32b17f774a4b68504f9130b6070724f23a69a4c6c8e75f359b812a3bb9217d +size 66805 diff --git a/.cursor/rules/roblox/assets/studio/general/Docking-Pinned-Tabs.png b/.cursor/rules/roblox/assets/studio/general/Docking-Pinned-Tabs.png new file mode 100644 index 00000000..6dc4e77a --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Docking-Pinned-Tabs.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf7b7858c6567779af24ec08b3eeb75464ef5238d1f3fb3fd971a9a2c8732b53 +size 201752 diff --git a/.cursor/rules/roblox/assets/studio/general/Docking-Position-Selector-Empty.png b/.cursor/rules/roblox/assets/studio/general/Docking-Position-Selector-Empty.png new file mode 100644 index 00000000..2b0c6201 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Docking-Position-Selector-Empty.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad2389b44ce473f8e1497924287a9ad8c892a433421c6e950d36bb528fe0dc78 +size 266895 diff --git a/.cursor/rules/roblox/assets/studio/general/Docking-Position-Selector-Left.png b/.cursor/rules/roblox/assets/studio/general/Docking-Position-Selector-Left.png new file mode 100644 index 00000000..e586a3c7 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Docking-Position-Selector-Left.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36cb6e3412964607fdcc445ddfe2b52257534ced2dd5a74c2d9f92748ede4866 +size 216241 diff --git a/.cursor/rules/roblox/assets/studio/general/Docking-Position-Selector-Right.png b/.cursor/rules/roblox/assets/studio/general/Docking-Position-Selector-Right.png new file mode 100644 index 00000000..580d49ce --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Docking-Position-Selector-Right.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7eb1259c76983ff3185596bcde718d1f8031f9e40c1b6e40f9b9f5113c176428 +size 237628 diff --git a/.cursor/rules/roblox/assets/studio/general/Editor-Window-Emulation-Options.png b/.cursor/rules/roblox/assets/studio/general/Editor-Window-Emulation-Options.png new file mode 100644 index 00000000..f88b8dd3 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Editor-Window-Emulation-Options.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:922b51877f2856bf5b87239d376ab787a6dd72d71c45b0861d6814192d06f3d1 +size 101542 diff --git a/.cursor/rules/roblox/assets/studio/general/Editor-Window-Object-Selection.jpg b/.cursor/rules/roblox/assets/studio/general/Editor-Window-Object-Selection.jpg new file mode 100644 index 00000000..61ef7531 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Editor-Window-Object-Selection.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f038b747cd60bfc7dcafbda00930199c5a1004bfe70bd173b41dd76efc7836c +size 236473 diff --git a/.cursor/rules/roblox/assets/studio/general/Editor-Window.jpg b/.cursor/rules/roblox/assets/studio/general/Editor-Window.jpg new file mode 100644 index 00000000..3202b109 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Editor-Window.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7998267c1294875ff2203e6ee9973c2a543b50aeed1a040c793f27229f5f1a14 +size 210532 diff --git a/.cursor/rules/roblox/assets/studio/general/Emulator-Viewport-VR.jpg b/.cursor/rules/roblox/assets/studio/general/Emulator-Viewport-VR.jpg new file mode 100644 index 00000000..05d8486f --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Emulator-Viewport-VR.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:376ce192cf1bea80a4f3b3d4131ae756141c3a8bfb9ac7f3a54a988016cc6012 +size 188117 diff --git a/.cursor/rules/roblox/assets/studio/general/Manage-Tabs-Popup-Options.png b/.cursor/rules/roblox/assets/studio/general/Manage-Tabs-Popup-Options.png new file mode 100644 index 00000000..c475bb9b --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Manage-Tabs-Popup-Options.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2a66fa4113a49646dae5b86970817896a7dbf467c55e621c3856b73c3389685 +size 94866 diff --git a/.cursor/rules/roblox/assets/studio/general/Manage-Tabs-Popup.png b/.cursor/rules/roblox/assets/studio/general/Manage-Tabs-Popup.png new file mode 100644 index 00000000..2ee2ace1 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Manage-Tabs-Popup.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d00b6596ec65d26dadc991d2cdc19686f073ffd6b69609f877a836bfd0c9c44 +size 220826 diff --git a/.cursor/rules/roblox/assets/studio/general/Mezzanine-Debug-Resume-Scripts.png b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Debug-Resume-Scripts.png new file mode 100644 index 00000000..315220f9 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Debug-Resume-Scripts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4fb2016b8c13b7b507803e1b15a10e81ab778ef2e0b4208ea7d02ec8899ebee +size 78566 diff --git a/.cursor/rules/roblox/assets/studio/general/Mezzanine-Debug-Stop.png b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Debug-Stop.png new file mode 100644 index 00000000..b7cd0d48 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Debug-Stop.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eeb2abc30afc7f4f37fe3ba1bd922a36b42698b4421b67de804f91b1bc246279 +size 78542 diff --git a/.cursor/rules/roblox/assets/studio/general/Mezzanine-Debug-Tools.png b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Debug-Tools.png new file mode 100644 index 00000000..743afc7a --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Debug-Tools.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5717adfdcc655ea9059db40974c0f7003e9e52f21b741fb8e82db259a4c8994d +size 77802 diff --git a/.cursor/rules/roblox/assets/studio/general/Mezzanine-Default-Tabs.png b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Default-Tabs.png new file mode 100644 index 00000000..cfed3051 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Default-Tabs.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:256c272b54889c5d41baea8c0c4b635948aeb66d1544c5beaa3ef3d91b47fc8b +size 132435 diff --git a/.cursor/rules/roblox/assets/studio/general/Mezzanine-Right.png b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Right.png new file mode 100644 index 00000000..c647232d --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Right.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1835fd7a7c9c98d49ee4fcd392ab34c92d1f9955791c77a86593dc32b57731a +size 64406 diff --git a/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Client.png b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Client.png new file mode 100644 index 00000000..302f1e4e --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Client.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c74584214cab8762a528486dd4da97b42c2dbf5e1f2a1e9f215b549d5fc89620 +size 29808 diff --git a/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Controls.png b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Controls.png new file mode 100644 index 00000000..ad3ba7c3 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Controls.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b107a36fa0066cf541aab461af7b2bf0881599d6a97fd1570095b9acd285b1e4 +size 204997 diff --git a/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-End-Session.png b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-End-Session.png new file mode 100644 index 00000000..a506b350 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-End-Session.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e533bee80dcc511fb819f69cb2f7c955cd2e2ddd02811f671675a6aa8cfed104 +size 80736 diff --git a/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Mode-Run.png b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Mode-Run.png new file mode 100644 index 00000000..0a1a1537 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Mode-Run.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e42f38df35ec97998f5109900ccf90bdad13e6fe33a3c909cb708f66eced572 +size 75673 diff --git a/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Mode-Server-Clients.png b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Mode-Server-Clients.png new file mode 100644 index 00000000..1038799b --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Mode-Server-Clients.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ebb0cb46ab80febff160bca89c9f36b2966b7a453fd46f33be8f6f8ded7714f +size 78784 diff --git a/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Mode-Team-Test.png b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Mode-Team-Test.png new file mode 100644 index 00000000..934f06db --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Mode-Team-Test.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b27893c6a4c4a9713c8df56f794ad7bbe5c9f0b507d5e4f5373bff0e71dc852 +size 77494 diff --git a/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Mode-Test-Here.png b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Mode-Test-Here.png new file mode 100644 index 00000000..3ee25a46 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Mode-Test-Here.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03bbaf224a182f37054eb66b4e8d934baadbe44b3cebeb4c8b773b70a979031b +size 76866 diff --git a/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Mode-Test.png b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Mode-Test.png new file mode 100644 index 00000000..50cb3583 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Mode-Test.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65f5590da0735beb6ab74d74d021c35ad5ddeb61a116c2d10c30d6067eda33a8 +size 76142 diff --git a/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Options.png b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Options.png new file mode 100644 index 00000000..ecf0591b --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Options.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b49265c5eb41faef6bfe33b396174fa6c866ada51203b97c06a074e60b6e9bb7 +size 74808 diff --git a/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Pause.png b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Pause.png new file mode 100644 index 00000000..122431d5 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Pause.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66239daabdd763ca34797b20d684af6a110397b83ce7d4fce0fcad347b5ebde9 +size 76094 diff --git a/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Server.png b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Server.png new file mode 100644 index 00000000..f9e85218 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Server.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a6b0ae81dd4e4acc36e37e0c99809f536816fa7dc96e962dbbfff61dd86da30 +size 30067 diff --git a/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Step-Forward.png b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Step-Forward.png new file mode 100644 index 00000000..0a7bf32e --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Step-Forward.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa9ffc2e33ffede28fca52f2e25cabcc1eb6e7fe58bfd9e36d31de4def13e5a3 +size 76914 diff --git a/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Stop.png b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Stop.png new file mode 100644 index 00000000..f6085a1a --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Mezzanine-Testing-Stop.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8122d80e857475aa9e0b811a53f834452b069676be3459a79b6a0220bcce69b +size 76152 diff --git a/.cursor/rules/roblox/assets/studio/general/NumberSequence-0-1-0.png b/.cursor/rules/roblox/assets/studio/general/NumberSequence-0-1-0.png new file mode 100644 index 00000000..63b5aab7 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/NumberSequence-0-1-0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a95edbc0eac427246bd1a8b5f9cf2af7bb2cf1ddef7c1c30a3a2a5b0a9d0420 +size 16285 diff --git a/.cursor/rules/roblox/assets/studio/general/NumberSequence-0-1.png b/.cursor/rules/roblox/assets/studio/general/NumberSequence-0-1.png new file mode 100644 index 00000000..52f0160e --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/NumberSequence-0-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b895bacd0a5aedbb0f73592b0b76f17895a238875096e1e6d4669680519e6e8 +size 11610 diff --git a/.cursor/rules/roblox/assets/studio/general/NumberSequence-0.5-0.5-Keypoints-Labeled.png b/.cursor/rules/roblox/assets/studio/general/NumberSequence-0.5-0.5-Keypoints-Labeled.png new file mode 100644 index 00000000..a05ae807 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/NumberSequence-0.5-0.5-Keypoints-Labeled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36e059f23f67c4b79458697a3ae9893a81ae8fae9f0094751afe033ac585f010 +size 15932 diff --git a/.cursor/rules/roblox/assets/studio/general/NumberSequence-0.5-0.5.png b/.cursor/rules/roblox/assets/studio/general/NumberSequence-0.5-0.5.png new file mode 100644 index 00000000..fbb3528a --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/NumberSequence-0.5-0.5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91ccfc2c4c14c0ca851c13bb6e2f29caf6033d915f428f6037371bc398e9d65d +size 8755 diff --git a/.cursor/rules/roblox/assets/studio/general/NumberSequence-Envelope.png b/.cursor/rules/roblox/assets/studio/general/NumberSequence-Envelope.png new file mode 100644 index 00000000..845ab71b --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/NumberSequence-Envelope.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b90465bdd1be1119f02eadb06a4e143fad8e551f78e82a470dffae83c670eba +size 10891 diff --git a/.cursor/rules/roblox/assets/studio/general/Output-Window-Client-Server-Labels.png b/.cursor/rules/roblox/assets/studio/general/Output-Window-Client-Server-Labels.png new file mode 100644 index 00000000..795318f8 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Output-Window-Client-Server-Labels.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c003e268a92fe7e8fbf341bb0c9a69380524c9f8e422393ef21b1499db6a0d3c +size 41805 diff --git a/.cursor/rules/roblox/assets/studio/general/Output-Window-Diagram.png b/.cursor/rules/roblox/assets/studio/general/Output-Window-Diagram.png new file mode 100644 index 00000000..a8360733 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Output-Window-Diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db2b2b80b0b7e7f001367a7411718637a1cf8a81d1814d6cf27d88135d440094 +size 91032 diff --git a/.cursor/rules/roblox/assets/studio/general/Output-Window.png b/.cursor/rules/roblox/assets/studio/general/Output-Window.png new file mode 100644 index 00000000..d7641399 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Output-Window.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ddf7a2594f73fa993f42a966a2b0c6c251aeb62a67b7b20a6e3f7526a5c7a946 +size 71449 diff --git a/.cursor/rules/roblox/assets/studio/general/Party-Simulator.png b/.cursor/rules/roblox/assets/studio/general/Party-Simulator.png new file mode 100644 index 00000000..3d852b1d --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Party-Simulator.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d00401f2bf9baceadc19cd50310aa2b22f7d2c25cfbee00d6de92e9509d710b9 +size 136713 diff --git a/.cursor/rules/roblox/assets/studio/general/Preview-Panel-Hierarchy.png b/.cursor/rules/roblox/assets/studio/general/Preview-Panel-Hierarchy.png new file mode 100644 index 00000000..a2c2bfe2 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Preview-Panel-Hierarchy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83dc505376a13b176533857b9c59c92b098cae4479188647f09b5c230422a7a5 +size 85578 diff --git a/.cursor/rules/roblox/assets/studio/general/Selected-Object-Bounding-Box.jpg b/.cursor/rules/roblox/assets/studio/general/Selected-Object-Bounding-Box.jpg new file mode 100644 index 00000000..101c0eae --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Selected-Object-Bounding-Box.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b12b579004de0ef2d0f58c0821a93cbfa0b40ca94d4b2f2e248972a52bbba07f +size 231666 diff --git a/.cursor/rules/roblox/assets/studio/general/Selection-Cycling.mp4 b/.cursor/rules/roblox/assets/studio/general/Selection-Cycling.mp4 new file mode 100644 index 00000000..1eb307a6 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Selection-Cycling.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6effea3266ce09a0759f6147482811a4a6b676a019845c69c6b34fb87a51deb +size 3250101 diff --git a/.cursor/rules/roblox/assets/studio/general/Studio-Layout.png b/.cursor/rules/roblox/assets/studio/general/Studio-Layout.png new file mode 100644 index 00000000..6f51d17d --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Studio-Layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25d55764ab0c36b69e34f1e15af1e18d1da97cc0b2ab64120cb1189a92bf46eb +size 346912 diff --git a/.cursor/rules/roblox/assets/studio/general/Studio-Logo-Blue.png b/.cursor/rules/roblox/assets/studio/general/Studio-Logo-Blue.png new file mode 100644 index 00000000..3831a191 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Studio-Logo-Blue.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3fd5ced596aa4d3e846a0eaff46b845f86311fc58718cfe94562c32b1a89678e +size 38788 diff --git a/.cursor/rules/roblox/assets/studio/general/Studio-Splash.jpg b/.cursor/rules/roblox/assets/studio/general/Studio-Splash.jpg new file mode 100644 index 00000000..eb19b805 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Studio-Splash.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dcc9c4c52d5ae0e4fac0cc5eefc606759f9b67eccf1f5077b68bac305c209a0d +size 263474 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Add-Custom-Tab.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Add-Custom-Tab.png new file mode 100644 index 00000000..59725d05 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Add-Custom-Tab.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6f5298a3c46410e68af3d55408acdb4c4a476b8d0c94b59de9b96fbaf5bc31e +size 124248 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Align.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Align.png new file mode 100644 index 00000000..6b9e2761 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Align.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5af85aa43e74729f9b6b351341beac4504fba9ff905ccc5e98914a1a64229567 +size 210161 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Anchor.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Anchor.png new file mode 100644 index 00000000..6da367af --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Anchor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf9b3cc2124fbc37028765f94d90a09b294e6f075fa8de9a3d608752c7fe1d08 +size 200390 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Animation.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Animation.png new file mode 100644 index 00000000..f0b4539c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Animation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01ab953ccd4c00a86336d5aa1c480b6e0fd359478421c4c854bdcace1eba9c0d +size 205727 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Assistant.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Assistant.png new file mode 100644 index 00000000..50e2c45f --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Assistant.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c968515b92583b9f9ce52dcd9a595f0ebc27daf26db021fab7f04a9418aa67bf +size 68245 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Avatar-Settings.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Avatar-Settings.png new file mode 100644 index 00000000..fad7bce8 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Avatar-Settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:912c8fdd572538f08759b92dc4d6b68851f341bf2d1a0d52d46cf3888292010e +size 206318 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Avatar-Setup.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Avatar-Setup.png new file mode 100644 index 00000000..8b99406c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Avatar-Setup.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ae071b1ad01fc013687509e7d58c57c0f12ce073adfd528d0368b99c61799af +size 206486 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Character.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Character.png new file mode 100644 index 00000000..9308dc4b --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Character.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8e164831f212914d2c575f1bb30dffc61724fe3b7fbf98c887e7956a47ba40d +size 205886 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Collaborate.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Collaborate.png new file mode 100644 index 00000000..8e9981ba --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Collaborate.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95ae25766c2cd78cd6c01864b68a22cea526c4c35380d4b52aab103b47e408b3 +size 66968 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Color-Picker.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Color-Picker.png new file mode 100644 index 00000000..bcefb35c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Color-Picker.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7495098f909d20a9bd43c9e789843fa7d88aae162477d92d8d0d9243a49efac +size 395771 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Comments.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Comments.png new file mode 100644 index 00000000..81a2a654 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Comments.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1d28ad7ea3cbf437e8768061ef9d4ee30b4d30b2604a94fa12123224069d625 +size 68744 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Constraint-Pickers.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Constraint-Pickers.png new file mode 100644 index 00000000..33e8ab1a --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Constraint-Pickers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1661a8b40603cb39844136cc94e34eaca9702e27c0e778f1be5c6bcc8288341c +size 196305 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Current-Collaborators.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Current-Collaborators.png new file mode 100644 index 00000000..60ada287 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Current-Collaborators.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b09310316b65b7077e14f8b14eb4b32dcc369b70ea3f57968dd660492b9c216c +size 75882 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Custom-Plugin-Button.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Custom-Plugin-Button.png new file mode 100644 index 00000000..4a12c2bd --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Custom-Plugin-Button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84c829eae7f5d4c86a55d07c6c18b95f3b9108063816281da51cc8cd169887bb +size 171189 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Custom-Tab-Add-Tool.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Custom-Tab-Add-Tool.png new file mode 100644 index 00000000..c427fe76 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Custom-Tab-Add-Tool.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7544e154d9a433fb8cd728beff3305ebdeb21e4782811dba291d62f30dbdc3e2 +size 97245 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Custom-Tab-Filled.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Custom-Tab-Filled.png new file mode 100644 index 00000000..db20a89f --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Custom-Tab-Filled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9749937818db84533e15504c123fbdb134989d2bb2ed8125c9aefc84229ba175 +size 186839 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Debugging-Tools.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Debugging-Tools.png new file mode 100644 index 00000000..e6407434 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Debugging-Tools.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee011017622eefe4eedf6ed0b4a9c810e2ee1fc0aaccc5099bd03db6b4f34e9b +size 173309 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Explorer.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Explorer.png new file mode 100644 index 00000000..71117b77 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Explorer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e65bf84f9c0658c01464c5ea8d1b92ef74d1690b34b05e7c6bd8e61731d76389 +size 202295 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Group.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Group.png new file mode 100644 index 00000000..82c4f3e1 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Group.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a726b4133ca41ec530a603354c94c3c53dc0c9f730c7ad873290711eb67cc10 +size 200631 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Insert-Part-Widget.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Insert-Part-Widget.png new file mode 100644 index 00000000..b0c2cb14 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Insert-Part-Widget.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50a3577c3d788d427596255338d489bbeeceaa58d4d2e56519ca6cc047e1ec7b +size 145000 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Lock.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Lock.png new file mode 100644 index 00000000..1e56d572 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Lock.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1010f0afcfbc1069af2a50e1118fa6eb17286fe34b750250255bba8c2b3e108d +size 200572 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Manage-Collaborators.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Manage-Collaborators.png new file mode 100644 index 00000000..a646a8cc --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Manage-Collaborators.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9dc0f266170d4f673f394137c8a8b9be1f14255ff0a64ebc63a1a9053281dc90 +size 68696 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Material-Color.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Material-Color.png new file mode 100644 index 00000000..0ecef036 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Material-Color.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2332e31d83b649ce214c464c4cc746539d9a3f69c091d3153cd0afe98a66bd13 +size 196697 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Material-Picker.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Material-Picker.png new file mode 100644 index 00000000..6dfda85f --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Material-Picker.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5226e3a9fd24b2af9f47d2fa0b64f9870ee09f907d7533218e471c9d4ee014f8 +size 419795 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Mezzanine.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Mezzanine.png new file mode 100644 index 00000000..d7aa31e1 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Mezzanine.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7be75d2429ae1f2e431fb189ba444e054448b6b4787e0778acb01ec81a7c9096 +size 191515 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Mode-Physical.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Mode-Physical.png new file mode 100644 index 00000000..b0edba89 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Mode-Physical.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e00607aa990d0f8483d1de7c2da9ad10d3b8999f0adb516f5bebca3f7766b910 +size 208736 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Pivot-Reset.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Pivot-Reset.png new file mode 100644 index 00000000..8d2e9223 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Pivot-Reset.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0014ec5571fb4642b78d590ea1ffda2b03f783842f5033e2d41891149c399a0 +size 207211 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Pivot.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Pivot.png new file mode 100644 index 00000000..75a2e967 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Pivot.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1182d31b7e12809cfa6d83e0c4e18357e082e0cdf9365f3ce432cb5f8e0b4df +size 205094 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Properties.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Properties.png new file mode 100644 index 00000000..cd1989fe --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Properties.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d444b472a489111e611fb47b8217524ff5ea4fca801d4bb47ea3dc3fb563150a +size 202206 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Solid-Modeling.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Solid-Modeling.png new file mode 100644 index 00000000..56ead74e --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Solid-Modeling.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7635dfa196d6227304096418f5d920f624e030dd597db84911b8f76a10545a01 +size 209219 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Style-Editor.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Style-Editor.png new file mode 100644 index 00000000..44416db1 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Style-Editor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a77f1143813128b0d88a92f3d54d88f65e1fc17cd945b12621e084bc7082712 +size 168391 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Terrain-Editor.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Terrain-Editor.png new file mode 100644 index 00000000..7a1ae034 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Terrain-Editor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee8dbd3106f0183eb9c1c38d828b45c81ad66389b9c0c3428499e30987c1a2de +size 210965 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Toolbox.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Toolbox.png new file mode 100644 index 00000000..4c2f31bb --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Toolbox.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:426f597c6f1cb9dcd35bca974b472ec21002d29adb0690c568e752b9f7fd132a +size 206998 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Transform-Snapping.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Transform-Snapping.png new file mode 100644 index 00000000..1a32c69e --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Transform-Snapping.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:471a1912027bfa17174f8b92bdbc59a7c4a5963ce35d908b59ffc32b599fc4ec +size 209706 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Transform-Tools.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Transform-Tools.png new file mode 100644 index 00000000..92078e0a --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Transform-Tools.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4992d20c89142e5a369f14aac5ae2fa002cfeb51c8be62663fa91abdde6fe97 +size 208753 diff --git a/.cursor/rules/roblox/assets/studio/general/Toolbar-Update-Available.png b/.cursor/rules/roblox/assets/studio/general/Toolbar-Update-Available.png new file mode 100644 index 00000000..3a5b79a0 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Toolbar-Update-Available.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22f34cbeffce25796e84c1a1363c2a060bcb0f685138ba2ed28b54df2bc2962d +size 77614 diff --git a/.cursor/rules/roblox/assets/studio/general/Visualization-Options.png b/.cursor/rules/roblox/assets/studio/general/Visualization-Options.png new file mode 100644 index 00000000..35df92b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/general/Visualization-Options.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:103f82ce4efe27c07d2234a45e8777f36ad21891c71a6385aa1a2cb5e04c7dd9 +size 53963 diff --git a/.cursor/rules/roblox/assets/studio/material-manager/Apply-To-Selected-Parts.png b/.cursor/rules/roblox/assets/studio/material-manager/Apply-To-Selected-Parts.png new file mode 100644 index 00000000..22bf522b --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/material-manager/Apply-To-Selected-Parts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eaa7327c82d40848242d4f4d06a4338bde9006bc0809eed52120de776d2cef4e +size 92407 diff --git a/.cursor/rules/roblox/assets/studio/material-manager/Base-Material-Selected.png b/.cursor/rules/roblox/assets/studio/material-manager/Base-Material-Selected.png new file mode 100644 index 00000000..ed7cd864 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/material-manager/Base-Material-Selected.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b911efc131a52def6ca06bde3e4c0f90c1f882936cd3fc4ce6086e463c1733d +size 108558 diff --git a/.cursor/rules/roblox/assets/studio/material-manager/Create-Material-Variant.png b/.cursor/rules/roblox/assets/studio/material-manager/Create-Material-Variant.png new file mode 100644 index 00000000..69542ddd --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/material-manager/Create-Material-Variant.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:572895e96729ac6040e3f8a2072406632d10d0dcb864cb3ab437a32bd78ff013 +size 95234 diff --git a/.cursor/rules/roblox/assets/studio/material-manager/Custom-Material-Icon.png b/.cursor/rules/roblox/assets/studio/material-manager/Custom-Material-Icon.png new file mode 100644 index 00000000..75b460ab --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/material-manager/Custom-Material-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:429bc522cbc3f17345f566585023e553ebddb15cea9e0eadb214017655ff071f +size 76969 diff --git a/.cursor/rules/roblox/assets/studio/material-manager/Disable-Material-Override-Specific.png b/.cursor/rules/roblox/assets/studio/material-manager/Disable-Material-Override-Specific.png new file mode 100644 index 00000000..003877df --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/material-manager/Disable-Material-Override-Specific.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:493129cd1b118e465761ada51591cc1f82d5a82797ed52b992e3c9afc66cf3f8 +size 19160 diff --git a/.cursor/rules/roblox/assets/studio/material-manager/Paint-Parts-With-Selected-Material.png b/.cursor/rules/roblox/assets/studio/material-manager/Paint-Parts-With-Selected-Material.png new file mode 100644 index 00000000..3deeaf6e --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/material-manager/Paint-Parts-With-Selected-Material.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc1edc70d7d8abf6645ec6a21a059481f541f5411b9ede9c52398188cf6ee8bc +size 90497 diff --git a/.cursor/rules/roblox/assets/studio/material-manager/Physical-Properties.png b/.cursor/rules/roblox/assets/studio/material-manager/Physical-Properties.png new file mode 100644 index 00000000..abf72603 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/material-manager/Physical-Properties.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e98d860012b680e63e233cfcc04a7c3b78de17e4de6759a494b33c72e0f625c9 +size 20690 diff --git a/.cursor/rules/roblox/assets/studio/material-manager/Set-Override-Disabled.png b/.cursor/rules/roblox/assets/studio/material-manager/Set-Override-Disabled.png new file mode 100644 index 00000000..cae3cfb1 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/material-manager/Set-Override-Disabled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3b275e46f6cebce652c65a73f3b4f8aa617ebbad898e93c577b5965934ca5ba +size 8289 diff --git a/.cursor/rules/roblox/assets/studio/material-manager/Set-Override-Enabled.png b/.cursor/rules/roblox/assets/studio/material-manager/Set-Override-Enabled.png new file mode 100644 index 00000000..71b956a2 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/material-manager/Set-Override-Enabled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24955583cb89e096fd4f021bc5d666287e7ea7bbdeead4cf2f31a14f86cdbc82 +size 9541 diff --git a/.cursor/rules/roblox/assets/studio/material-manager/Terrain-Details-Create-Buttons.png b/.cursor/rules/roblox/assets/studio/material-manager/Terrain-Details-Create-Buttons.png new file mode 100644 index 00000000..a4738952 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/material-manager/Terrain-Details-Create-Buttons.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f30ddc72009f67973a6c2f44ea1162b0c74eba4ee2d0fdd67015bd7c75d569f1 +size 13798 diff --git a/.cursor/rules/roblox/assets/studio/material-manager/Terrain-Details-Edit.png b/.cursor/rules/roblox/assets/studio/material-manager/Terrain-Details-Edit.png new file mode 100644 index 00000000..af517721 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/material-manager/Terrain-Details-Edit.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0c9a8717996e60fe64f0612374f1013ae3e25ef16b1074c39e0318c6a4b4257 +size 60034 diff --git a/.cursor/rules/roblox/assets/studio/packages/Compare-Versions-Selector.png b/.cursor/rules/roblox/assets/studio/packages/Compare-Versions-Selector.png new file mode 100644 index 00000000..50b7d0a9 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/packages/Compare-Versions-Selector.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb36551cce80caad53259e551a83b26ae2c1a0cba5dfe8c031d753da30c24167 +size 94798 diff --git a/.cursor/rules/roblox/assets/studio/packages/Package-Configured-Attributes-Reset.png b/.cursor/rules/roblox/assets/studio/packages/Package-Configured-Attributes-Reset.png new file mode 100644 index 00000000..a685db12 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/packages/Package-Configured-Attributes-Reset.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:252929560447a21638b879ec8aedd8fd6d3bde1773a200573ff12f8206b0ff41 +size 27271 diff --git a/.cursor/rules/roblox/assets/studio/packages/Package-Configured-Attributes.png b/.cursor/rules/roblox/assets/studio/packages/Package-Configured-Attributes.png new file mode 100644 index 00000000..d8ffd88c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/packages/Package-Configured-Attributes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8c8c0cd319e79d2e6460d0a1968769cf3f8e8b9c028f08d5242b476272ee963 +size 25846 diff --git a/.cursor/rules/roblox/assets/studio/packages/Package-Modified.png b/.cursor/rules/roblox/assets/studio/packages/Package-Modified.png new file mode 100644 index 00000000..195e0806 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/packages/Package-Modified.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a1280e233306e574e06266c123bf98d4619c15b17f5527bb99b0c3f6d3f133b +size 22779 diff --git a/.cursor/rules/roblox/assets/studio/packages/Package-Structure-Explorer.png b/.cursor/rules/roblox/assets/studio/packages/Package-Structure-Explorer.png new file mode 100644 index 00000000..78f2f79f --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/packages/Package-Structure-Explorer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da1dec2e0d51f9eac89c4a5853a3e6e39d58cdb581806c28550f4e72100f9599 +size 23079 diff --git a/.cursor/rules/roblox/assets/studio/packages/Package-Update-Available.png b/.cursor/rules/roblox/assets/studio/packages/Package-Update-Available.png new file mode 100644 index 00000000..81fc783c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/packages/Package-Update-Available.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7dd6d8a7b8b1f05b6960c6345f3b8eb580056affdd1653573dbff6ab87ad222 +size 25687 diff --git a/.cursor/rules/roblox/assets/studio/packages/PackageLink-Explorer.png b/.cursor/rules/roblox/assets/studio/packages/PackageLink-Explorer.png new file mode 100644 index 00000000..52772cda --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/packages/PackageLink-Explorer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f30a1692e0d728d17e68ec54b26c852b68527cba694e10fe302b5519f1d8ef2 +size 12950 diff --git a/.cursor/rules/roblox/assets/studio/packages/Script-Unlock-Link.png b/.cursor/rules/roblox/assets/studio/packages/Script-Unlock-Link.png new file mode 100644 index 00000000..8f46e921 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/packages/Script-Unlock-Link.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e820f62ea70eb390e9d866ea3e6958296c0d24d9188143eb43770fb9973f0e7 +size 74128 diff --git a/.cursor/rules/roblox/assets/studio/pivot-tools/Edit-Pivot-Center-A.jpg b/.cursor/rules/roblox/assets/studio/pivot-tools/Edit-Pivot-Center-A.jpg new file mode 100644 index 00000000..9c22d9dc --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/pivot-tools/Edit-Pivot-Center-A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d373bf20691aa012cba24d7fab98dce804635b480325a8a82b39593c2bee13d5 +size 128060 diff --git a/.cursor/rules/roblox/assets/studio/pivot-tools/Edit-Pivot-Corner-A.jpg b/.cursor/rules/roblox/assets/studio/pivot-tools/Edit-Pivot-Corner-A.jpg new file mode 100644 index 00000000..7456205d --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/pivot-tools/Edit-Pivot-Corner-A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee8d556922b9bd7add0189288146256095a8c8aed711da7abe78444ab8995163 +size 127812 diff --git a/.cursor/rules/roblox/assets/studio/pivot-tools/Edit-Pivot-Model-A.jpg b/.cursor/rules/roblox/assets/studio/pivot-tools/Edit-Pivot-Model-A.jpg new file mode 100644 index 00000000..132d504c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/pivot-tools/Edit-Pivot-Model-A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71416aac5f72b64f752644fdc1060c96ee65416474450015892a72cab6f5f301 +size 189672 diff --git a/.cursor/rules/roblox/assets/studio/pivot-tools/Edit-Pivot-Model-B.jpg b/.cursor/rules/roblox/assets/studio/pivot-tools/Edit-Pivot-Model-B.jpg new file mode 100644 index 00000000..34449203 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/pivot-tools/Edit-Pivot-Model-B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79390221c34842938e0d5304a71cb66a5e3dc7706b80c8920dbdd99ca4f9b014 +size 183928 diff --git a/.cursor/rules/roblox/assets/studio/pivot-tools/Edit-Pivot-Model-C.jpg b/.cursor/rules/roblox/assets/studio/pivot-tools/Edit-Pivot-Model-C.jpg new file mode 100644 index 00000000..77c30585 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/pivot-tools/Edit-Pivot-Model-C.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a05e4df3a87d5901014eec50d6c21e81738cd33f19bcc55553c7f580fa0c4a8e +size 186473 diff --git a/.cursor/rules/roblox/assets/studio/pivot-tools/Edit-Pivot-Outside-A.jpg b/.cursor/rules/roblox/assets/studio/pivot-tools/Edit-Pivot-Outside-A.jpg new file mode 100644 index 00000000..bdcf4ede --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/pivot-tools/Edit-Pivot-Outside-A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8772848e3cf2c9596d2fb8778f5c8b677c35ff4582f55db180758ebad43703ae +size 127196 diff --git a/.cursor/rules/roblox/assets/studio/pivot-tools/Hotspots-Model.jpg b/.cursor/rules/roblox/assets/studio/pivot-tools/Hotspots-Model.jpg new file mode 100644 index 00000000..155c21af --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/pivot-tools/Hotspots-Model.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa774906b68f9eb91c14df0e1db6227b4ce8442e1be91f6a6488ca1ff8a0cde0 +size 135057 diff --git a/.cursor/rules/roblox/assets/studio/pivot-tools/Hotspots-Part.jpg b/.cursor/rules/roblox/assets/studio/pivot-tools/Hotspots-Part.jpg new file mode 100644 index 00000000..665d8ec4 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/pivot-tools/Hotspots-Part.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b38464055dcde44ca7a099bccd8ef7078fc79e497c0b5a7138d42211429bf3e +size 72623 diff --git a/.cursor/rules/roblox/assets/studio/pivot-tools/PrimaryPart-1.jpg b/.cursor/rules/roblox/assets/studio/pivot-tools/PrimaryPart-1.jpg new file mode 100644 index 00000000..6a6cff16 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/pivot-tools/PrimaryPart-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67a2c701ae16195c0060f9c901795f69632c07d6be32cd1d7c584c61a859f642 +size 160111 diff --git a/.cursor/rules/roblox/assets/studio/pivot-tools/PrimaryPart-2.jpg b/.cursor/rules/roblox/assets/studio/pivot-tools/PrimaryPart-2.jpg new file mode 100644 index 00000000..8757b39e --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/pivot-tools/PrimaryPart-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5be931f6b823e95b92d39c91a602fc4496a02f442271ef6d70a97decf5e4983e +size 118576 diff --git a/.cursor/rules/roblox/assets/studio/pivot-tools/PrimaryPart-3.jpg b/.cursor/rules/roblox/assets/studio/pivot-tools/PrimaryPart-3.jpg new file mode 100644 index 00000000..835be05e --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/pivot-tools/PrimaryPart-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:081824e247b5bc95745cfc329c499f4038c2012f7029b04595d2f82fdd4ff058 +size 124506 diff --git a/.cursor/rules/roblox/assets/studio/properties/Add-Attribute-Button.png b/.cursor/rules/roblox/assets/studio/properties/Add-Attribute-Button.png new file mode 100644 index 00000000..b0ff8d22 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Add-Attribute-Button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:647b53d11b871880ba3c1af0fb016cf8c50b35c59989f9dd5c5a019e1d6bb466 +size 11910 diff --git a/.cursor/rules/roblox/assets/studio/properties/Add-Tag-Button.png b/.cursor/rules/roblox/assets/studio/properties/Add-Tag-Button.png new file mode 100644 index 00000000..751dbe88 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Add-Tag-Button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:10924a4b351a4ca2d7ba5188f09c9517dc04e4643a055013d403348ba85f2ba7 +size 10444 diff --git a/.cursor/rules/roblox/assets/studio/properties/AnchorPoint-Default.png b/.cursor/rules/roblox/assets/studio/properties/AnchorPoint-Default.png new file mode 100644 index 00000000..353a3bb8 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/AnchorPoint-Default.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77d83fae613a835ffba0decb6720a3174677c52c6e372964759b4d7b707a7c1e +size 9521 diff --git a/.cursor/rules/roblox/assets/studio/properties/AnchorPoint-Overridden.png b/.cursor/rules/roblox/assets/studio/properties/AnchorPoint-Overridden.png new file mode 100644 index 00000000..5046fd3f --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/AnchorPoint-Overridden.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:829ac8ba41ec7eb0768dfc3ba0054fbff195b438d8d857e70653e8ba9c239925 +size 8876 diff --git a/.cursor/rules/roblox/assets/studio/properties/Appearance-Color3-Picker.png b/.cursor/rules/roblox/assets/studio/properties/Appearance-Color3-Picker.png new file mode 100644 index 00000000..0ae16fef --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Appearance-Color3-Picker.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdd004c0d83595c0ed3658b68701aef5fe8f679a8840f3819b1ac92aea52b3b4 +size 12676 diff --git a/.cursor/rules/roblox/assets/studio/properties/Appearance-Color3-RGB-Entry.png b/.cursor/rules/roblox/assets/studio/properties/Appearance-Color3-RGB-Entry.png new file mode 100644 index 00000000..a521a9cc --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Appearance-Color3-RGB-Entry.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:529abf11c2e1c41189b0a301ecf63e03725710d95460f4e9f8429bc8ea51116f +size 12822 diff --git a/.cursor/rules/roblox/assets/studio/properties/Attributes-Example.png b/.cursor/rules/roblox/assets/studio/properties/Attributes-Example.png new file mode 100644 index 00000000..51ceb7e7 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Attributes-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:139a3f0da8ce47093816750ab7e66a088ed94b1076b0cf62451c678aa0a0365c +size 26494 diff --git a/.cursor/rules/roblox/assets/studio/properties/Color-Input-Options.png b/.cursor/rules/roblox/assets/studio/properties/Color-Input-Options.png new file mode 100644 index 00000000..1a4954a0 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Color-Input-Options.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c717ea6f47f94b16f5972ee5912073f45136f1000e1ce6d34be14ca43bb1e8fa +size 23886 diff --git a/.cursor/rules/roblox/assets/studio/properties/Color-Open-Sequence.png b/.cursor/rules/roblox/assets/studio/properties/Color-Open-Sequence.png new file mode 100644 index 00000000..ff0fe88c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Color-Open-Sequence.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57f67110030126e6273c7bb37094f8b81294220c013d6afaaf64b06237e30bc5 +size 6235 diff --git a/.cursor/rules/roblox/assets/studio/properties/Color-Picker.png b/.cursor/rules/roblox/assets/studio/properties/Color-Picker.png new file mode 100644 index 00000000..83c8b251 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Color-Picker.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c39d6b9b4a9cc10c4799841e6dddc355cc1f56198ea8b825dce67eb7ad200017 +size 31209 diff --git a/.cursor/rules/roblox/assets/studio/properties/Color-RGB-Entry.png b/.cursor/rules/roblox/assets/studio/properties/Color-RGB-Entry.png new file mode 100644 index 00000000..377de4c8 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Color-RGB-Entry.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7a03cbe86c234775a4b03039b6fb4a7525137a0aaaa6f30fd42e4818e7af04c +size 26446 diff --git a/.cursor/rules/roblox/assets/studio/properties/Default-Properties-Toast.jpg b/.cursor/rules/roblox/assets/studio/properties/Default-Properties-Toast.jpg new file mode 100644 index 00000000..388fa74f --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Default-Properties-Toast.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fede6d6ae95526b6ffadea0f2c189d42d7821efbbf93182b4a296a42598ded9b +size 303241 diff --git a/.cursor/rules/roblox/assets/studio/properties/Enter-Private-Asset-ID.png b/.cursor/rules/roblox/assets/studio/properties/Enter-Private-Asset-ID.png new file mode 100644 index 00000000..6014c917 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Enter-Private-Asset-ID.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df1e3bdf391bed83a4f78c8ea66a2f0ed5ecf7b8ef37e3c39cdc60a7a955315d +size 32687 diff --git a/.cursor/rules/roblox/assets/studio/properties/Folder-Sandboxed.png b/.cursor/rules/roblox/assets/studio/properties/Folder-Sandboxed.png new file mode 100644 index 00000000..90325112 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Folder-Sandboxed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:867e75d39654a8d9ce199950166f073542fd9302a0ef8b6d29660626d2c4c860 +size 32593 diff --git a/.cursor/rules/roblox/assets/studio/properties/GuiObject-AnchorPoint.png b/.cursor/rules/roblox/assets/studio/properties/GuiObject-AnchorPoint.png new file mode 100644 index 00000000..5b08a923 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/GuiObject-AnchorPoint.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d65fe9543dc6caf3ddb32042ab015d55eb4d7e5880a1015837986cb2840ad6da +size 18283 diff --git a/.cursor/rules/roblox/assets/studio/properties/GuiObject-AutomaticSize.png b/.cursor/rules/roblox/assets/studio/properties/GuiObject-AutomaticSize.png new file mode 100644 index 00000000..2e192492 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/GuiObject-AutomaticSize.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99e2cf10a1bba5b6094c616d6a5e63d788d6add4beba14200b487c0b514fd805 +size 25594 diff --git a/.cursor/rules/roblox/assets/studio/properties/GuiObject-Position.png b/.cursor/rules/roblox/assets/studio/properties/GuiObject-Position.png new file mode 100644 index 00000000..9d5af34c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/GuiObject-Position.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66e48711a99a2fb470cda3b2e0920e46865923fc53bf8d5d862c2ea13363febd +size 30800 diff --git a/.cursor/rules/roblox/assets/studio/properties/GuiObject-Size.png b/.cursor/rules/roblox/assets/studio/properties/GuiObject-Size.png new file mode 100644 index 00000000..8b8c6943 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/GuiObject-Size.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5c49dc9ad531613ba51aa16859eea5c63465744564984c558080d9059b93523 +size 29667 diff --git a/.cursor/rules/roblox/assets/studio/properties/GuiObject-ZIndex.png b/.cursor/rules/roblox/assets/studio/properties/GuiObject-ZIndex.png new file mode 100644 index 00000000..28175ede --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/GuiObject-ZIndex.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03c437e910dfa09a72221104616313eba344e057e626e6adba27dcf39564a05a +size 16291 diff --git a/.cursor/rules/roblox/assets/studio/properties/Input-Combined.png b/.cursor/rules/roblox/assets/studio/properties/Input-Combined.png new file mode 100644 index 00000000..a1330ad7 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Input-Combined.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eead5e1bff5970cf0db92781d91cc24e24d3e6b12c6d26839ada0ef4479eaf9f +size 18854 diff --git a/.cursor/rules/roblox/assets/studio/properties/Input-Expanded.png b/.cursor/rules/roblox/assets/studio/properties/Input-Expanded.png new file mode 100644 index 00000000..f72ff1c4 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Input-Expanded.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ce4036c0e0fdf14d024ace153e082590653f8325b5c16f8259e34a16880ee4a +size 11209 diff --git a/.cursor/rules/roblox/assets/studio/properties/InputAction-Type-Bool.png b/.cursor/rules/roblox/assets/studio/properties/InputAction-Type-Bool.png new file mode 100644 index 00000000..bbff3a35 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/InputAction-Type-Bool.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e6ae41e47d9c2d69761cf0d460b5a09f739f56c78e01dd4758890cfc49fbb69 +size 19150 diff --git a/.cursor/rules/roblox/assets/studio/properties/InputBinding-KeyCode-ButtonY.png b/.cursor/rules/roblox/assets/studio/properties/InputBinding-KeyCode-ButtonY.png new file mode 100644 index 00000000..6936daa5 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/InputBinding-KeyCode-ButtonY.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73092df0382e89972c7ca22be649ece3915bcd1d973ef94f2dfccf947fb72964 +size 17727 diff --git a/.cursor/rules/roblox/assets/studio/properties/InputBinding-KeyCode-LeftShift.png b/.cursor/rules/roblox/assets/studio/properties/InputBinding-KeyCode-LeftShift.png new file mode 100644 index 00000000..3bad2108 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/InputBinding-KeyCode-LeftShift.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2059d8ffbb827e0be449f5f5fec984b853dc5837c2f9bc71a70bedfb2890ea68 +size 18138 diff --git a/.cursor/rules/roblox/assets/studio/properties/InputBinding-UIButton-SprintButton.png b/.cursor/rules/roblox/assets/studio/properties/InputBinding-UIButton-SprintButton.png new file mode 100644 index 00000000..4b56d88d --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/InputBinding-UIButton-SprintButton.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4be3d9bcc2bd5140d99b4dc994005c56e4bbebfe618467fbf14310a5e1af644 +size 18664 diff --git a/.cursor/rules/roblox/assets/studio/properties/Instance-Filtered.png b/.cursor/rules/roblox/assets/studio/properties/Instance-Filtered.png new file mode 100644 index 00000000..84079734 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Instance-Filtered.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:885aff7586e1d11337161e50ceac1bfec0bb11026cbf9a7f4f43801761950d1d +size 24145 diff --git a/.cursor/rules/roblox/assets/studio/properties/LinearVelocity-Attachment0-Unassigned.png b/.cursor/rules/roblox/assets/studio/properties/LinearVelocity-Attachment0-Unassigned.png new file mode 100644 index 00000000..efa6b976 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/LinearVelocity-Attachment0-Unassigned.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:92bbd8d3df73401a502400ecb543e570d27e793c83db96754999feecbe954969 +size 22412 diff --git a/.cursor/rules/roblox/assets/studio/properties/Model-LevelOfDetail.png b/.cursor/rules/roblox/assets/studio/properties/Model-LevelOfDetail.png new file mode 100644 index 00000000..b3833514 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Model-LevelOfDetail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:627e85defe80ecadefae296f241e7556a5ca70c749e7dc96334040863f57128d +size 15061 diff --git a/.cursor/rules/roblox/assets/studio/properties/Model-ModelStreamingMode.png b/.cursor/rules/roblox/assets/studio/properties/Model-ModelStreamingMode.png new file mode 100644 index 00000000..eedde26a --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Model-ModelStreamingMode.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f133d8aafbc83c544e94f019a7a53de8df520ebbbad6b6bea6894b077cb8b7a9 +size 30904 diff --git a/.cursor/rules/roblox/assets/studio/properties/ParticleEmitter-WindAffectsDrag.png b/.cursor/rules/roblox/assets/studio/properties/ParticleEmitter-WindAffectsDrag.png new file mode 100644 index 00000000..e5e31665 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/ParticleEmitter-WindAffectsDrag.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:301430c1317200c8a02353caaefba7dccbe836c74f0c5bd23226e2d7c3f3b9ac +size 20273 diff --git a/.cursor/rules/roblox/assets/studio/properties/Path2D-SelectedControlPointData-Expanded.png b/.cursor/rules/roblox/assets/studio/properties/Path2D-SelectedControlPointData-Expanded.png new file mode 100644 index 00000000..c6d62a18 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Path2D-SelectedControlPointData-Expanded.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7541d40c9ceaac36ed600fcebf6a695ffd422a2bff4dcfe1b06ed37a3561599a +size 51970 diff --git a/.cursor/rules/roblox/assets/studio/properties/Path2D-SelectedControlPointData.png b/.cursor/rules/roblox/assets/studio/properties/Path2D-SelectedControlPointData.png new file mode 100644 index 00000000..daadb39e --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Path2D-SelectedControlPointData.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7221a9a8c82a145fb7f4ca0a4988688a016070072c909a570fcb45722c5e0da +size 29015 diff --git a/.cursor/rules/roblox/assets/studio/properties/Remove-Tag-Button.png b/.cursor/rules/roblox/assets/studio/properties/Remove-Tag-Button.png new file mode 100644 index 00000000..7c5ef1f5 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Remove-Tag-Button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bde7495ea3a0e28e54816bf7d1e22badc98c31dc8e87ab1ce5f8e57ed6e83d62 +size 10663 diff --git a/.cursor/rules/roblox/assets/studio/properties/Rename-Delete-Attribute-Button.png b/.cursor/rules/roblox/assets/studio/properties/Rename-Delete-Attribute-Button.png new file mode 100644 index 00000000..7074f5cf --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Rename-Delete-Attribute-Button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d7adcdbfa96546f33567db79f5f9a667634f1abec8e069cfc520f1340905212 +size 11499 diff --git a/.cursor/rules/roblox/assets/studio/properties/ScreenGui-ScreenInsets-DeviceSafeInsets.png b/.cursor/rules/roblox/assets/studio/properties/ScreenGui-ScreenInsets-DeviceSafeInsets.png new file mode 100644 index 00000000..a1b79015 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/ScreenGui-ScreenInsets-DeviceSafeInsets.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ca8796f1b83b78591ceffae2d22b843603a0880cc9c8abacdf7001d7e56f9fc +size 35686 diff --git a/.cursor/rules/roblox/assets/studio/properties/Script-RunContext.png b/.cursor/rules/roblox/assets/studio/properties/Script-RunContext.png new file mode 100644 index 00000000..2de02627 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Script-RunContext.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21ccbadc8c2a0ec8040309fb6769187d5a91f02dd038daa76d1d544fe2c6eb22 +size 46719 diff --git a/.cursor/rules/roblox/assets/studio/properties/Sections-Example.png b/.cursor/rules/roblox/assets/studio/properties/Sections-Example.png new file mode 100644 index 00000000..403a652b --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Sections-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8add4bb75ebc637b9c4ce10afa2c59ff083b60bc5f820f27d5ef83f2757a2a9d +size 113358 diff --git a/.cursor/rules/roblox/assets/studio/properties/Set-Attribute.png b/.cursor/rules/roblox/assets/studio/properties/Set-Attribute.png new file mode 100644 index 00000000..d1d6a941 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Set-Attribute.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cffe4ff44e5c57515364d6c8e1edd30beb0b789341fd911e7dd9225a3715ef97 +size 7875 diff --git a/.cursor/rules/roblox/assets/studio/properties/Set-Tag.png b/.cursor/rules/roblox/assets/studio/properties/Set-Tag.png new file mode 100644 index 00000000..d7d6fbd3 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Set-Tag.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c44b840023b7d58d5bb32fa831a22f78a81188f00a64f6a3406037f91060c16 +size 4807 diff --git a/.cursor/rules/roblox/assets/studio/properties/Size-Open-Sequence.png b/.cursor/rules/roblox/assets/studio/properties/Size-Open-Sequence.png new file mode 100644 index 00000000..9f04a4dd --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Size-Open-Sequence.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:675e86f63af8e69aade70b45039638807489cf894400517e22cc77e677e217ce +size 4191 diff --git a/.cursor/rules/roblox/assets/studio/properties/Sound-SoundGroup.png b/.cursor/rules/roblox/assets/studio/properties/Sound-SoundGroup.png new file mode 100644 index 00000000..f52da2c1 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Sound-SoundGroup.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:472373d56e3b86e5290c306497600121c8c0d0faee157ca1c5edb4904a699039 +size 14485 diff --git a/.cursor/rules/roblox/assets/studio/properties/Sound-SoundId.png b/.cursor/rules/roblox/assets/studio/properties/Sound-SoundId.png new file mode 100644 index 00000000..2b79fdda --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Sound-SoundId.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:868454eee0bbfcbf7903b849d09da6bede1551339d115077ef35ffae8671a66d +size 15886 diff --git a/.cursor/rules/roblox/assets/studio/properties/SpawnLocation-TeamColor.png b/.cursor/rules/roblox/assets/studio/properties/SpawnLocation-TeamColor.png new file mode 100644 index 00000000..ab2c4f99 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/SpawnLocation-TeamColor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4daa67fadbf8c24a123bb03a26ec167a1559e01702e852f7d659c73f329a6f11 +size 11753 diff --git a/.cursor/rules/roblox/assets/studio/properties/SpringConstraint-Attachment0-Unassigned.png b/.cursor/rules/roblox/assets/studio/properties/SpringConstraint-Attachment0-Unassigned.png new file mode 100644 index 00000000..f72bfddf --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/SpringConstraint-Attachment0-Unassigned.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0a982926d372031009b3441aded8a9d301c26e0ab5ff2135843d0bfb3bfc0aa +size 22609 diff --git a/.cursor/rules/roblox/assets/studio/properties/StarterPlayer-Camera-Group.png b/.cursor/rules/roblox/assets/studio/properties/StarterPlayer-Camera-Group.png new file mode 100644 index 00000000..556d2966 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/StarterPlayer-Camera-Group.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69bc096395581ae0beeec94ca6efee1a99f20068dcda2a1fc923657937899b0b +size 59350 diff --git a/.cursor/rules/roblox/assets/studio/properties/StarterPlayer-EnableMouseLockOption-Off.png b/.cursor/rules/roblox/assets/studio/properties/StarterPlayer-EnableMouseLockOption-Off.png new file mode 100644 index 00000000..aabd59c2 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/StarterPlayer-EnableMouseLockOption-Off.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf3836d830ce5ca5519ce51db3699cc833c9aca379c0f7d736b3f45b24ca6466 +size 19088 diff --git a/.cursor/rules/roblox/assets/studio/properties/StyleLink-StyleSheet.png b/.cursor/rules/roblox/assets/studio/properties/StyleLink-StyleSheet.png new file mode 100644 index 00000000..516a5acb --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/StyleLink-StyleSheet.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0247e1e13c014c45089a23a6c73735056239709babe574a1adedcf6596d35757 +size 12934 diff --git a/.cursor/rules/roblox/assets/studio/properties/Styling-Modified-Property.png b/.cursor/rules/roblox/assets/studio/properties/Styling-Modified-Property.png new file mode 100644 index 00000000..3b133af2 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Styling-Modified-Property.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8af4f4a327c098a6f5d1309f8cfd74d900c01c261845f142ad1f808070cd6442 +size 23372 diff --git a/.cursor/rules/roblox/assets/studio/properties/SurfaceGui-Adornee-Face.png b/.cursor/rules/roblox/assets/studio/properties/SurfaceGui-Adornee-Face.png new file mode 100644 index 00000000..793d680a --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/SurfaceGui-Adornee-Face.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13e42463862fcbf9c3a6db661d17590be80dc56f57aef4bc248575735cfdc296 +size 39247 diff --git a/.cursor/rules/roblox/assets/studio/properties/SurfaceGui-Face-Top.png b/.cursor/rules/roblox/assets/studio/properties/SurfaceGui-Face-Top.png new file mode 100644 index 00000000..99a900b8 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/SurfaceGui-Face-Top.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ee64e2d6342d6ac87eacbbb7eab97a55a77c1665ed293d1e03020ed216aee11 +size 23760 diff --git a/.cursor/rules/roblox/assets/studio/properties/Team-AutoAssignable-Disabled.png b/.cursor/rules/roblox/assets/studio/properties/Team-AutoAssignable-Disabled.png new file mode 100644 index 00000000..0bd924a7 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Team-AutoAssignable-Disabled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17b8077fbc127eb8dbfe00a7e6f9ee0d206ddf6cd1920ca3a0b15bff613955f2 +size 18290 diff --git a/.cursor/rules/roblox/assets/studio/properties/Team-Name-TeamColor.png b/.cursor/rules/roblox/assets/studio/properties/Team-Name-TeamColor.png new file mode 100644 index 00000000..59196eb9 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Team-Name-TeamColor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77f3cb5ea146ee3a552589c77fdc5d64835637e06f7ce1e7dd33d2781d3200a3 +size 15463 diff --git a/.cursor/rules/roblox/assets/studio/properties/Terrain-Decoration.png b/.cursor/rules/roblox/assets/studio/properties/Terrain-Decoration.png new file mode 100644 index 00000000..10df6f60 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Terrain-Decoration.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:170a1d50cd508243eb522e6d370104156a3d2710323165167f34f37a64d942a8 +size 15228 diff --git a/.cursor/rules/roblox/assets/studio/properties/Terrain-GrassLength.png b/.cursor/rules/roblox/assets/studio/properties/Terrain-GrassLength.png new file mode 100644 index 00000000..8f104ec2 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Terrain-GrassLength.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5179d14cda30b50f0caab2b7bcb36cfa7d8c3c4ae9dcbec3dfb398d902a5c6cd +size 17442 diff --git a/.cursor/rules/roblox/assets/studio/properties/Terrain-MaterialColors-Expand.png b/.cursor/rules/roblox/assets/studio/properties/Terrain-MaterialColors-Expand.png new file mode 100644 index 00000000..f051ece2 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Terrain-MaterialColors-Expand.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69d270408e8d2704340909a447bbe5e0f4545d1b545c9f6275cf0d7adb6d0b31 +size 26876 diff --git a/.cursor/rules/roblox/assets/studio/properties/TextChatService-ChatVersion-LegacyChatService.png b/.cursor/rules/roblox/assets/studio/properties/TextChatService-ChatVersion-LegacyChatService.png new file mode 100644 index 00000000..4984846f --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/TextChatService-ChatVersion-LegacyChatService.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5baf46251871a6e06c5af9dec365785ed38467a17f4610490dbc025d6ba416f3 +size 34938 diff --git a/.cursor/rules/roblox/assets/studio/properties/TextChatService-ChatVersion-TextChatService.png b/.cursor/rules/roblox/assets/studio/properties/TextChatService-ChatVersion-TextChatService.png new file mode 100644 index 00000000..f5174e2a --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/TextChatService-ChatVersion-TextChatService.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb1cd8add8a9babf25a8c92c4f129712c56a0838c3be0a297124429cd49ab838 +size 34340 diff --git a/.cursor/rules/roblox/assets/studio/properties/Tool-Grip.png b/.cursor/rules/roblox/assets/studio/properties/Tool-Grip.png new file mode 100644 index 00000000..15ed394b --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Tool-Grip.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48319fbbf22511f06bf02f04e4195655673a9a9189ecb15f30409e27089c0227 +size 25577 diff --git a/.cursor/rules/roblox/assets/studio/properties/Tool-RequiresHandle.png b/.cursor/rules/roblox/assets/studio/properties/Tool-RequiresHandle.png new file mode 100644 index 00000000..8a947255 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Tool-RequiresHandle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:faa6af708681fee4defdb6fea8a6bfa449fc3cedb201fa1d584244d763c0cb8a +size 30994 diff --git a/.cursor/rules/roblox/assets/studio/properties/Transparency-Open-Sequence.png b/.cursor/rules/roblox/assets/studio/properties/Transparency-Open-Sequence.png new file mode 100644 index 00000000..3116cdff --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Transparency-Open-Sequence.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b682a489fd878ea8128060a3cf88e8775d1459d8191570653fb86bcf380ee2e +size 6422 diff --git a/.cursor/rules/roblox/assets/studio/properties/UICorner-CornerRadius.png b/.cursor/rules/roblox/assets/studio/properties/UICorner-CornerRadius.png new file mode 100644 index 00000000..ea7b65ad --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/UICorner-CornerRadius.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e49f27dba8630224116c720d0fe97ac5a376bfbd00d363c9e7c99d6c0c8c044 +size 11835 diff --git a/.cursor/rules/roblox/assets/studio/properties/UIGradient-Open-ColorSequence-Window.png b/.cursor/rules/roblox/assets/studio/properties/UIGradient-Open-ColorSequence-Window.png new file mode 100644 index 00000000..f6ecaa0a --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/UIGradient-Open-ColorSequence-Window.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b977d6d75cc8012c601119a07b500ed1b4edcf175f3c22b6a10905786259f15a +size 26536 diff --git a/.cursor/rules/roblox/assets/studio/properties/UIGradient-Open-NumberSequence-Window.png b/.cursor/rules/roblox/assets/studio/properties/UIGradient-Open-NumberSequence-Window.png new file mode 100644 index 00000000..f75a1e76 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/UIGradient-Open-NumberSequence-Window.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d1bb2c0e35ba2641c36c4122c76ecc295edc28f346d651ad16641a02b177ccf +size 26891 diff --git a/.cursor/rules/roblox/assets/studio/properties/VideoFrame-Looped-Playing.png b/.cursor/rules/roblox/assets/studio/properties/VideoFrame-Looped-Playing.png new file mode 100644 index 00000000..126ef5cb --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/VideoFrame-Looped-Playing.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9bc8cea12ba2501949a724aa4b63db00a10957eabe0ffa276102d7111a1ebe1 +size 8548 diff --git a/.cursor/rules/roblox/assets/studio/properties/Workspace-GlobalWind.png b/.cursor/rules/roblox/assets/studio/properties/Workspace-GlobalWind.png new file mode 100644 index 00000000..f1a87a8a --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Workspace-GlobalWind.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1de4e5ce0d91e88b4e323652c844a5fe33ec314a16e6f45843a057e91b6e0b08 +size 13199 diff --git a/.cursor/rules/roblox/assets/studio/properties/Workspace-ModelStreamingBehavior-Default.png b/.cursor/rules/roblox/assets/studio/properties/Workspace-ModelStreamingBehavior-Default.png new file mode 100644 index 00000000..ac9500e3 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Workspace-ModelStreamingBehavior-Default.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7aff9d9979ece855c439086daf57373a08d44ab057e0ed85ef3c387d318e3a0e +size 21215 diff --git a/.cursor/rules/roblox/assets/studio/properties/Workspace-ModelStreamingBehavior-Improved.png b/.cursor/rules/roblox/assets/studio/properties/Workspace-ModelStreamingBehavior-Improved.png new file mode 100644 index 00000000..9458f45f --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Workspace-ModelStreamingBehavior-Improved.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a8c868669795feb1bf02e049dd8cafb3975e29326b877c8e6e1038b56da5d0c +size 21812 diff --git a/.cursor/rules/roblox/assets/studio/properties/Workspace-Streaming-Properties.png b/.cursor/rules/roblox/assets/studio/properties/Workspace-Streaming-Properties.png new file mode 100644 index 00000000..0f796537 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Workspace-Streaming-Properties.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa1317500ed7bda81a1d96133136508800d88e8fb01563461d4e3ddfd254d07c +size 52628 diff --git a/.cursor/rules/roblox/assets/studio/properties/Workspace-StreamingEnabled.png b/.cursor/rules/roblox/assets/studio/properties/Workspace-StreamingEnabled.png new file mode 100644 index 00000000..35f044e5 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/properties/Workspace-StreamingEnabled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25d4bb2c90d9bdf8da2b222bfbe7a561b25aab24baf4a8a92572dc065b2fc56e +size 41070 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/AddAboveBelow.mp4 b/.cursor/rules/roblox/assets/studio/script-editor/AddAboveBelow.mp4 new file mode 100644 index 00000000..1110757e --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/AddAboveBelow.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b3dc9a9041cbc47581114d910cf5a264c6d8718fd49eaf7b5455e6acf0da1b8 +size 40062 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/AddToAllMatches.mp4 b/.cursor/rules/roblox/assets/studio/script-editor/AddToAllMatches.mp4 new file mode 100644 index 00000000..ab9d88f4 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/AddToAllMatches.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a845795e9457736008bb17ee7a5dece5d7105fb1ec8023258d671021e40d8510 +size 86200 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/AddToNextPrevMatch.mp4 b/.cursor/rules/roblox/assets/studio/script-editor/AddToNextPrevMatch.mp4 new file mode 100644 index 00000000..d3ece9b3 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/AddToNextPrevMatch.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9213300229d583461a05b75605602c250a78fc1ecbc5696de6142c25892ae1a8 +size 88835 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/AddWithClick.mp4 b/.cursor/rules/roblox/assets/studio/script-editor/AddWithClick.mp4 new file mode 100644 index 00000000..02c627e1 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/AddWithClick.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:419e44121e6963153a41a66ef8625bf6de3c35b0851487c7bb902941455a080c +size 85286 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/AddWithDrag.mp4 b/.cursor/rules/roblox/assets/studio/script-editor/AddWithDrag.mp4 new file mode 100644 index 00000000..1eccf09d --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/AddWithDrag.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8e112e0f29d4d7236f956954b1731dd069eaf6272acdbfdf4cf42244eb6aa84 +size 121183 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/Autocomplete-API.png b/.cursor/rules/roblox/assets/studio/script-editor/Autocomplete-API.png new file mode 100644 index 00000000..ae7471dd --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/Autocomplete-API.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c8523ecac27e9549a38a3a972bab06ed30564202b070576a6e6a7de9a2c401a +size 209552 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/Autocomplete-CustomDocs.png b/.cursor/rules/roblox/assets/studio/script-editor/Autocomplete-CustomDocs.png new file mode 100644 index 00000000..8f8b5069 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/Autocomplete-CustomDocs.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a91ca99afe23482d8758d99d6261a20dfe1a0fbcb6a7242cac33260468cd8b3d +size 74938 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/Autocomplete-Data-Model.png b/.cursor/rules/roblox/assets/studio/script-editor/Autocomplete-Data-Model.png new file mode 100644 index 00000000..8af9e868 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/Autocomplete-Data-Model.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6d9255d838ec11d5ff84b63464ea076822952171472dd80b50a30e5424809a7 +size 43219 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/Autocomplete-Diagnostics.png b/.cursor/rules/roblox/assets/studio/script-editor/Autocomplete-Diagnostics.png new file mode 100644 index 00000000..9a33972d --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/Autocomplete-Diagnostics.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b845311b14306ffdea6ed6747888d6378a1c012e6929b29c87a64fe746b1ad9a +size 39799 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/Autocomplete-Signature.png b/.cursor/rules/roblox/assets/studio/script-editor/Autocomplete-Signature.png new file mode 100644 index 00000000..300bd27a --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/Autocomplete-Signature.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78203bf2191c2ad436fca3937563e61d507eabebc0816240d74fe5fc5612fb58 +size 68229 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/Autocomplete-Suggestions.png b/.cursor/rules/roblox/assets/studio/script-editor/Autocomplete-Suggestions.png new file mode 100644 index 00000000..2fc5dfe5 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/Autocomplete-Suggestions.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a4e02db92d972cc427156380aa4757683aa0201e89c8f8f0b2f48b0c68e7dd9 +size 49924 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/Autocomplete-Variable.png b/.cursor/rules/roblox/assets/studio/script-editor/Autocomplete-Variable.png new file mode 100644 index 00000000..aae3d440 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/Autocomplete-Variable.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8627f0c2229f694e32078657b4e6aba66603592e16d654a3819599771465c6dc +size 40090 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/Code-Assist.mp4 b/.cursor/rules/roblox/assets/studio/script-editor/Code-Assist.mp4 new file mode 100644 index 00000000..9aedfd9c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/Code-Assist.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5de0852a2b6d09d9f5e096fb49bb7fbaa0c486ad772f96ba4ea31b6eeec57978 +size 2608245 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/ColumnBlockSelect.mp4 b/.cursor/rules/roblox/assets/studio/script-editor/ColumnBlockSelect.mp4 new file mode 100644 index 00000000..93cad5bc --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/ColumnBlockSelect.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c98d430662bd3623d9b4baaccbb47b453c6673764870006bc77a2e5e8aa3071 +size 127589 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/CopyPaste.mp4 b/.cursor/rules/roblox/assets/studio/script-editor/CopyPaste.mp4 new file mode 100644 index 00000000..93639004 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/CopyPaste.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f67e3029953f1c8e6d1ec4f84ff2654fbc55190ef1f67c97782911b63418131 +size 146415 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/Find-Match-Case-Whole-Word.png b/.cursor/rules/roblox/assets/studio/script-editor/Find-Match-Case-Whole-Word.png new file mode 100644 index 00000000..9b869017 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/Find-Match-Case-Whole-Word.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b93a0454802cfebfce2d12f52d8e3c602f6053fa1b1fa4d84bc6f5293c818e6 +size 20829 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/Find-Replace-Widget-Labeled.png b/.cursor/rules/roblox/assets/studio/script-editor/Find-Replace-Widget-Labeled.png new file mode 100644 index 00000000..02cf518f --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/Find-Replace-Widget-Labeled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02329638823ab529d85c980b082b561bb9304490b250a6b21dd736bc8107c962 +size 78422 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/Go-To-Declaration.png b/.cursor/rules/roblox/assets/studio/script-editor/Go-To-Declaration.png new file mode 100644 index 00000000..2fb749ea --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/Go-To-Declaration.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6222b907a42858db62c335b18f554bb411db959ffae4f00da8b0e70478ce6e1a +size 121621 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/MatchCaseWholeWord1.mp4 b/.cursor/rules/roblox/assets/studio/script-editor/MatchCaseWholeWord1.mp4 new file mode 100644 index 00000000..5582ca43 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/MatchCaseWholeWord1.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1eb6e12dab6d2a521e2a86f5c34f2e252f0634abe4f3fef4ae0e48eb41899a8 +size 16894 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/MatchCaseWholeWord2.mp4 b/.cursor/rules/roblox/assets/studio/script-editor/MatchCaseWholeWord2.mp4 new file mode 100644 index 00000000..ce671521 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/MatchCaseWholeWord2.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9df7efc93794e596d3c2f2360d88a1b0bdd9f2f340cd4a756c09482d52d072b3 +size 85190 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/OnTypeFormatting.mp4 b/.cursor/rules/roblox/assets/studio/script-editor/OnTypeFormatting.mp4 new file mode 100644 index 00000000..bfd9c4ed --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/OnTypeFormatting.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5d2d83a8c7acdec2cdde314959c4585b421800b9c6b0099185b4ac5cfb71341 +size 54248 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/RemoveWithClick.mp4 b/.cursor/rules/roblox/assets/studio/script-editor/RemoveWithClick.mp4 new file mode 100644 index 00000000..d416cf12 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/RemoveWithClick.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ed893efed417ae4c46d50e7ef163ac219562a8bb70dc416b34baa22f26c8b0d +size 27155 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/Script-Analysis-1.png b/.cursor/rules/roblox/assets/studio/script-editor/Script-Analysis-1.png new file mode 100644 index 00000000..6891ae69 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/Script-Analysis-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7600fd56c42477e893a19036cc839e60ba3a061048caf90dfdb8e27055d3d7b1 +size 57117 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/Script-Analysis-2.png b/.cursor/rules/roblox/assets/studio/script-editor/Script-Analysis-2.png new file mode 100644 index 00000000..27d35305 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/Script-Analysis-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e3270afa1bfe216ef20887a9b913ff17921cb6a91d7f1b5a988282908dac088 +size 39110 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/Script-Functions-Filter.png b/.cursor/rules/roblox/assets/studio/script-editor/Script-Functions-Filter.png new file mode 100644 index 00000000..d6168052 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/Script-Functions-Filter.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:709c28b1a0f109eb2093812a3b0b995f07256a40b540b3734ddb32f793dfc213 +size 210094 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/Shortcut-Edit-Select-Prev.png b/.cursor/rules/roblox/assets/studio/script-editor/Shortcut-Edit-Select-Prev.png new file mode 100644 index 00000000..564023b1 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/Shortcut-Edit-Select-Prev.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78d712a545e5e2e6c9b7fd3a91d3d7cd26a9be41350b63eb225974e8703dad56 +size 22227 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/SplitSelectionsIntoLines.mp4 b/.cursor/rules/roblox/assets/studio/script-editor/SplitSelectionsIntoLines.mp4 new file mode 100644 index 00000000..9b6af521 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/SplitSelectionsIntoLines.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:efc459804e99a37dfca733fc446e12ad071746e3f7e6f6f4d8e1cf44adb6cea1 +size 67544 diff --git a/.cursor/rules/roblox/assets/studio/script-editor/UndoRecentCursor.mp4 b/.cursor/rules/roblox/assets/studio/script-editor/UndoRecentCursor.mp4 new file mode 100644 index 00000000..3fad1067 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/script-editor/UndoRecentCursor.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:817d7a96cd0744c68849253b12f325b2b380a7ffea549ec4e15a1f70e0146a93 +size 17176 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Brush-Shape-Icons.png b/.cursor/rules/roblox/assets/studio/terrain-editor/Brush-Shape-Icons.png new file mode 100644 index 00000000..172bc492 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Brush-Shape-Icons.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:970fab96cd415c979695b03aa03e31f169f54092c55ca1e8c9730dbe4c0e7baf +size 3820 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Brush-Shape-Size.png b/.cursor/rules/roblox/assets/studio/terrain-editor/Brush-Shape-Size.png new file mode 100644 index 00000000..b038c9fe --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Brush-Shape-Size.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aee90679c8e920c12ba4dadfe7efe7e54d56e9a03a12154f746c7417a97e8996 +size 11151 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Create-Tab-Clear.png b/.cursor/rules/roblox/assets/studio/terrain-editor/Create-Tab-Clear.png new file mode 100644 index 00000000..51d75ecc --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Create-Tab-Clear.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21529c5a818f5247bd23b9c8430d7e7c2b04fffc1c1288fd96fd917797ac6694 +size 16332 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Create-Tab-Generate.png b/.cursor/rules/roblox/assets/studio/terrain-editor/Create-Tab-Generate.png new file mode 100644 index 00000000..6aa0c6d2 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Create-Tab-Generate.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a37741a626df453e28a4f623c8cb0f5027aefc77e1533513b1d7512476c635ce +size 17230 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Create-Tab-Import.png b/.cursor/rules/roblox/assets/studio/terrain-editor/Create-Tab-Import.png new file mode 100644 index 00000000..b714e8fc --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Create-Tab-Import.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ad5385fab3fe8b810bf86bda66db8ee26e5ce63066af22fe7d2c154f5376ffb +size 17546 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Draw-Tool.mp4 b/.cursor/rules/roblox/assets/studio/terrain-editor/Draw-Tool.mp4 new file mode 100644 index 00000000..840dcbc1 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Draw-Tool.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48cfa240341d76b502a489225f575be394bc7fbda94098f472397e1f577938e9 +size 5071073 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Detail-Tools.png b/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Detail-Tools.png new file mode 100644 index 00000000..d8442682 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Detail-Tools.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d713d928a06ae3b5ac5460696e23a9391930aa75d45bce39a2ec14a3b533785 +size 30083 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Draw.png b/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Draw.png new file mode 100644 index 00000000..9727fc84 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Draw.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6964e7ba7e1e620c4b521ed933c30a6fea17a30bf25137d7995ca295a9ec885 +size 30176 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Fill.png b/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Fill.png new file mode 100644 index 00000000..527bb2d4 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Fill.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99edbaef4a02b12bc3283df348ff52a9d0950494641d2b0b56f7398f4bdee449 +size 26555 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Flatten.png b/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Flatten.png new file mode 100644 index 00000000..0bf5f9d9 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Flatten.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8dc896b876107cc0b9fbcca10d240c62bd3831d8704559524848aac68881194 +size 29684 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Paint.png b/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Paint.png new file mode 100644 index 00000000..53bd5d4a --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Paint.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0fa08a0da5736493ba395feec4f411b7b21737418fa7d618a93e7e3d8da85c3 +size 29477 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Sculpt.png b/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Sculpt.png new file mode 100644 index 00000000..5eccd225 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Sculpt.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9676f970f49a2502b6afdbbce89030960a0e83eebf52da6855996e6d66ba8616 +size 31760 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Sea-Level.png b/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Sea-Level.png new file mode 100644 index 00000000..ed8e3b57 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Sea-Level.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32a1cc7183edf6429c397048f3fbf09e05f894714390e5a8ed9826cab2ddc398 +size 30278 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Select.png b/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Select.png new file mode 100644 index 00000000..7ef61d83 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Select.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ffe62c7311e7015cb845bfbf7f6a554910eccb3e0539c506af6c4ff98e76ee01 +size 30856 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Smooth.png b/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Smooth.png new file mode 100644 index 00000000..2d011085 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Smooth.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33b9f043e2f032be6101dd2ea54c19577719e908d6eee3c3a3d6485d18faf2f8 +size 29868 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Transform.png b/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Transform.png new file mode 100644 index 00000000..cf601e52 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Edit-Tab-Transform.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e2997c39f287d4119f6bf42dc3162d0c0661b5437f33469746772b29356896d +size 27793 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Fill-Region.jpg b/.cursor/rules/roblox/assets/studio/terrain-editor/Fill-Region.jpg new file mode 100644 index 00000000..4ab7108d --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Fill-Region.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:827cf55bc0b5ec97c348aa274978465768a4d3ef9da38cecaae12a9ce53d164c +size 187964 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Flatten-Mode-Icons.png b/.cursor/rules/roblox/assets/studio/terrain-editor/Flatten-Mode-Icons.png new file mode 100644 index 00000000..634e330a --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Flatten-Mode-Icons.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:179a912029da10a2b8f9b7e8c35417a8395463bbe886632d10aac8515c7ff1f9 +size 4008 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Flatten-Tool.mp4 b/.cursor/rules/roblox/assets/studio/terrain-editor/Flatten-Tool.mp4 new file mode 100644 index 00000000..af71b1fa --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Flatten-Tool.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b2522e9ada6fc1a23151318050409e0dd2a0f60bfa5cb7db956edb6f30f70b0 +size 4841829 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Generate-Tool.mp4 b/.cursor/rules/roblox/assets/studio/terrain-editor/Generate-Tool.mp4 new file mode 100644 index 00000000..a8fafb7d --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Generate-Tool.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:723fcba45c00d85416f3f1b1e0fcdb51fa0793967f5fbce149c2b6eb790c0688 +size 1194891 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Import-Tool.mp4 b/.cursor/rules/roblox/assets/studio/terrain-editor/Import-Tool.mp4 new file mode 100644 index 00000000..8e14ae7c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Import-Tool.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed81bee35e1f2cd811ef1fe819a84f014c93626f39cf97215e09cd49296f3ea6 +size 602585 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Paint-Tool.mp4 b/.cursor/rules/roblox/assets/studio/terrain-editor/Paint-Tool.mp4 new file mode 100644 index 00000000..aaa08188 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Paint-Tool.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f2f7fff619bff3f9da39d16d3ce59d6daed0b06cd0c79ba83b866bee675676f +size 7258092 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Sculpt-Tool.mp4 b/.cursor/rules/roblox/assets/studio/terrain-editor/Sculpt-Tool.mp4 new file mode 100644 index 00000000..7d3c1765 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Sculpt-Tool.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:050e04f1475d1bd38a5af75e7f491f91386ced133d77712fbc761ee2232df909 +size 5266015 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Sea-Level-Tool.mp4 b/.cursor/rules/roblox/assets/studio/terrain-editor/Sea-Level-Tool.mp4 new file mode 100644 index 00000000..401b2ae2 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Sea-Level-Tool.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8302bde3117004c6bd0be1c5b1488792d2d7081c98f0687092fbeae589c799ee +size 10189993 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Select-Region-Labeled.jpg b/.cursor/rules/roblox/assets/studio/terrain-editor/Select-Region-Labeled.jpg new file mode 100644 index 00000000..dfa8b8ab --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Select-Region-Labeled.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a803a6faa51e7dd41c83e398e5071f0c9cfb7885c10171f0e0d522d2edb6cdda +size 249196 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Smooth-Tool.mp4 b/.cursor/rules/roblox/assets/studio/terrain-editor/Smooth-Tool.mp4 new file mode 100644 index 00000000..46320337 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Smooth-Tool.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4a1481cad65c8db312eccddbf7b1c3bbb044a99945ccbef0f911a1a56eac48f +size 2922904 diff --git a/.cursor/rules/roblox/assets/studio/terrain-editor/Transform-Region-Labeled.jpg b/.cursor/rules/roblox/assets/studio/terrain-editor/Transform-Region-Labeled.jpg new file mode 100644 index 00000000..972ace5f --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/terrain-editor/Transform-Region-Labeled.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30da8db2aa9ee0fb7a27277d7f1726347de398d578bd8dff6bb9d489d0c83d27 +size 268187 diff --git a/.cursor/rules/roblox/assets/studio/texture-generator/Art-Style.png b/.cursor/rules/roblox/assets/studio/texture-generator/Art-Style.png new file mode 100644 index 00000000..2d83aec2 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/texture-generator/Art-Style.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae709085614e2f71c0e043b2f2f7b04b5470b5dc3c2d910596a6ece6d4b9cb24 +size 30042 diff --git a/.cursor/rules/roblox/assets/studio/texture-generator/Generation-Angle-Bad.png b/.cursor/rules/roblox/assets/studio/texture-generator/Generation-Angle-Bad.png new file mode 100644 index 00000000..735b1145 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/texture-generator/Generation-Angle-Bad.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f08f2aa55cdacda3129953af1415c91b9469eb6038bb7ae61379891a2b4626a +size 45727 diff --git a/.cursor/rules/roblox/assets/studio/texture-generator/Generation-Angle-Good.png b/.cursor/rules/roblox/assets/studio/texture-generator/Generation-Angle-Good.png new file mode 100644 index 00000000..5f30e666 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/texture-generator/Generation-Angle-Good.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ebbf671e733b03cf05038e6d8dd61e4a9ae985f98ce47c1a159e6ddfe5ee0aba +size 49214 diff --git a/.cursor/rules/roblox/assets/studio/texture-generator/Generation-Mossy-Stone.jpg b/.cursor/rules/roblox/assets/studio/texture-generator/Generation-Mossy-Stone.jpg new file mode 100644 index 00000000..99b43caf --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/texture-generator/Generation-Mossy-Stone.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29419397f7d80ea78821335050a22b80df12316c9d3d5a2f8bfca7d85bfeb05b +size 110465 diff --git a/.cursor/rules/roblox/assets/studio/texture-generator/Generation-Post-Preview.png b/.cursor/rules/roblox/assets/studio/texture-generator/Generation-Post-Preview.png new file mode 100644 index 00000000..87e41574 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/texture-generator/Generation-Post-Preview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3dc5a24b03a8ca577ac2dedfd8e00f9b77eaa4334ea8daf281cafaa8312b4069 +size 191039 diff --git a/.cursor/rules/roblox/assets/studio/texture-generator/Generation-Rusted-Metal-Charred.jpg b/.cursor/rules/roblox/assets/studio/texture-generator/Generation-Rusted-Metal-Charred.jpg new file mode 100644 index 00000000..0987133b --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/texture-generator/Generation-Rusted-Metal-Charred.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:046a7152f7b82c52477190a3c83ea6ad5daf71e9d72c447c42ab5bbc337f192b +size 118256 diff --git a/.cursor/rules/roblox/assets/studio/texture-generator/Generation-Snow-Covered-Ice.jpg b/.cursor/rules/roblox/assets/studio/texture-generator/Generation-Snow-Covered-Ice.jpg new file mode 100644 index 00000000..ebff56a0 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/texture-generator/Generation-Snow-Covered-Ice.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:902389b70f448238380bc858f04bf8ca5d2b5c091ea0ef61ecd111c2d9354797 +size 120286 diff --git a/.cursor/rules/roblox/assets/studio/texture-generator/Generation-Untextured.jpg b/.cursor/rules/roblox/assets/studio/texture-generator/Generation-Untextured.jpg new file mode 100644 index 00000000..a4f9b3ea --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/texture-generator/Generation-Untextured.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e23a38e9e2d695d38b12d9d41be478449bfd67909ac6d2f321f25f141d1e96e4 +size 86436 diff --git a/.cursor/rules/roblox/assets/studio/texture-generator/Saved-Textures-List.png b/.cursor/rules/roblox/assets/studio/texture-generator/Saved-Textures-List.png new file mode 100644 index 00000000..b0256166 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/texture-generator/Saved-Textures-List.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40e33303c7dad851a7562fad564771781919378c61e1972d515de1a25a138bae +size 22404 diff --git a/.cursor/rules/roblox/assets/studio/texture-generator/Specify-Front-View-Bad-Back.jpg b/.cursor/rules/roblox/assets/studio/texture-generator/Specify-Front-View-Bad-Back.jpg new file mode 100644 index 00000000..36810d5c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/texture-generator/Specify-Front-View-Bad-Back.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45d0b6406e09e6f32663d3da2ebdf3ee987e87db81f8f3340e63f7af8816f2c4 +size 135066 diff --git a/.cursor/rules/roblox/assets/studio/texture-generator/Specify-Front-View-Bad-Front.jpg b/.cursor/rules/roblox/assets/studio/texture-generator/Specify-Front-View-Bad-Front.jpg new file mode 100644 index 00000000..8e737ec8 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/texture-generator/Specify-Front-View-Bad-Front.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:795f6fd37cefafe498d5bc1c3e405e9407d987620847a08d1658483c1ef7c569 +size 143116 diff --git a/.cursor/rules/roblox/assets/studio/texture-generator/Specify-Front-View-Good-Back.jpg b/.cursor/rules/roblox/assets/studio/texture-generator/Specify-Front-View-Good-Back.jpg new file mode 100644 index 00000000..5845ac50 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/texture-generator/Specify-Front-View-Good-Back.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ccd5867b68cba541fd0a7f21a56107d53adf9a76c77f9b9db80fbdfb0ed1b6a7 +size 125029 diff --git a/.cursor/rules/roblox/assets/studio/texture-generator/Specify-Front-View-Good-Front.jpg b/.cursor/rules/roblox/assets/studio/texture-generator/Specify-Front-View-Good-Front.jpg new file mode 100644 index 00000000..ed9e6e2c --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/texture-generator/Specify-Front-View-Good-Front.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4506153c88e2f1a3b69a50fb67e33005670be7278d8763dbe904e0c78a74aec +size 141319 diff --git a/.cursor/rules/roblox/assets/studio/texture-generator/Texture-Applied.jpg b/.cursor/rules/roblox/assets/studio/texture-generator/Texture-Applied.jpg new file mode 100644 index 00000000..9964e796 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/texture-generator/Texture-Applied.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c744a7cebadb588c558ef2bc9eeb43ae9c1ea63071fbcf7a229c8d45c86c43a +size 194317 diff --git a/.cursor/rules/roblox/assets/studio/toolbox/Asset-Inspect-Icon.png b/.cursor/rules/roblox/assets/studio/toolbox/Asset-Inspect-Icon.png new file mode 100644 index 00000000..edc7d676 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/toolbox/Asset-Inspect-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0429fbcbd8ef1b29d2d2a7cc4837ee454676adf77079e2c556dfcf2ca4ddb1b8 +size 58670 diff --git a/.cursor/rules/roblox/assets/studio/toolbox/Creations-Group-Packages.png b/.cursor/rules/roblox/assets/studio/toolbox/Creations-Group-Packages.png new file mode 100644 index 00000000..0fab7344 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/toolbox/Creations-Group-Packages.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c254ff17283c590a16a63993290bfbd9f58422b2ac82b293875682ffa8e10ee6 +size 11568 diff --git a/.cursor/rules/roblox/assets/studio/toolbox/Creations-Tab.png b/.cursor/rules/roblox/assets/studio/toolbox/Creations-Tab.png new file mode 100644 index 00000000..f1906ba1 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/toolbox/Creations-Tab.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c56704059ea9a2930321c047aa26257b76f6c8cc0d8e1475be25de4fe928c880 +size 8829 diff --git a/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Advanced-Filter.png b/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Advanced-Filter.png new file mode 100644 index 00000000..4b2ec51e --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Advanced-Filter.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5abc4fc4bd7de466f1e9912180b92863e32ed6ff840bde15b81eb196bac698b6 +size 12360 diff --git a/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Audio-Discovery.png b/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Audio-Discovery.png new file mode 100644 index 00000000..e9daf7e8 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Audio-Discovery.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b605d142a0a4417d968dfcb3a0a2116e0fd4ea22769903e583032863a9f07bad +size 122509 diff --git a/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Audio.png b/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Audio.png new file mode 100644 index 00000000..42ef9eca --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Audio.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc77163e48535094b0e3953ed882f8123e858e01e4e5796db59ce9e9818f3028 +size 14565 diff --git a/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Categories-Ads.png b/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Categories-Ads.png new file mode 100644 index 00000000..e7078f97 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Categories-Ads.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:793742e4c3a929d5e9dafea71781790dbc3f6974217027c6e1664470b181a73d +size 11483 diff --git a/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Categories-See-All.png b/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Categories-See-All.png new file mode 100644 index 00000000..c0276aef --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Categories-See-All.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6bd5f6c3eb6fa8736705f0c4a949eee676da84646d17f312bf1f9e98451553cc +size 85932 diff --git a/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Category-Selector.png b/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Category-Selector.png new file mode 100644 index 00000000..e7b88b22 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Category-Selector.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4280e0d2822bdd5c8dd0e50dd1263f26e18cd77df4adecb1f3f181decb57906 +size 22262 diff --git a/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Scene-Manager-Plugin.png b/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Scene-Manager-Plugin.png new file mode 100644 index 00000000..bdb6e6b3 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Scene-Manager-Plugin.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b08ea72fb8d1dc3e3548aa8b757414f46e096796a338cbcdfd051fe7576b30fe +size 39404 diff --git a/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Tab.png b/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Tab.png new file mode 100644 index 00000000..484b6818 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/toolbox/Creator-Store-Tab.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a57323403b0f41e66cfe6ee944dcf8c7eca63e5db418d64cce728bd1a80f4224 +size 14156 diff --git a/.cursor/rules/roblox/assets/studio/toolbox/Inventory-My-Packages.png b/.cursor/rules/roblox/assets/studio/toolbox/Inventory-My-Packages.png new file mode 100644 index 00000000..489a9526 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/toolbox/Inventory-My-Packages.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:854136e6555a9621ab49edc3ca255979664e5f3936f58fd81b38e2d38cc19c56 +size 14089 diff --git a/.cursor/rules/roblox/assets/studio/toolbox/Inventory-Tab.png b/.cursor/rules/roblox/assets/studio/toolbox/Inventory-Tab.png new file mode 100644 index 00000000..81bccc43 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/toolbox/Inventory-Tab.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7967c4e42d4c2983407b514a2c49c81c9f69c14db620c2b7627979191ef16c8d +size 12789 diff --git a/.cursor/rules/roblox/assets/studio/toolbox/Model-Search-Example.png b/.cursor/rules/roblox/assets/studio/toolbox/Model-Search-Example.png new file mode 100644 index 00000000..751dfb79 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/toolbox/Model-Search-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50c5fa2a2924c9c4bdfc4507f000ebec7b96042907f21ff8c45834c68fd043ea +size 53609 diff --git a/.cursor/rules/roblox/assets/studio/toolbox/Recent-Tab.png b/.cursor/rules/roblox/assets/studio/toolbox/Recent-Tab.png new file mode 100644 index 00000000..8b625799 --- /dev/null +++ b/.cursor/rules/roblox/assets/studio/toolbox/Recent-Tab.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:835be229069ad9f6a5dcdaea4c9f5922f768cb0b5ef396b4f392e651833c137e +size 11994 diff --git a/.cursor/rules/roblox/assets/tutorials/.gitkeep b/.cursor/rules/roblox/assets/tutorials/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Background-Music.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Background-Music.png new file mode 100644 index 00000000..973e28a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Background-Music.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef75493951dbc3bfc14b0de3bb5b88680071f34fdd46a00f58f5e97535fdec02 +size 696722 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Box-Modeling.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Box-Modeling.png new file mode 100644 index 00000000..82ce0427 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Box-Modeling.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef3797879651eebc0b6402fb68ff8d5a4c663a53eeb1396095c86048008c8518 +size 485053 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Creating-Animations.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Creating-Animations.png new file mode 100644 index 00000000..0a91f011 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Creating-Animations.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:279fda3f7c1198b0e9fa1156a58e2a621e97c32a5950e152d768901a5e5d15e0 +size 458086 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Creating-HUD-Meters.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Creating-HUD-Meters.png new file mode 100644 index 00000000..0ac863b5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Creating-HUD-Meters.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef052a76bc0953107ebdb9349c83c29e084786c9e68b1b765bbdc4e61218d886 +size 215086 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Events.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Events.png new file mode 100644 index 00000000..65fbe110 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Events.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6188af3e71fe242f0ee21b96d454915e5b772b128dd39d7517d6bed8f210be8f +size 724172 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/First-Person-Camera.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/First-Person-Camera.png new file mode 100644 index 00000000..35b69243 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/First-Person-Camera.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26c2a23d8a707960dcefac045de4a68306b5942025da9f653a44084017a514e9 +size 524370 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Humanoid-Model.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Humanoid-Model.png new file mode 100644 index 00000000..c4819016 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Humanoid-Model.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6453c90161c91482cc32d3673d760559172abcbaf375b4f26c55164c0cb3c0b3 +size 485097 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Indoor-Lighting.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Indoor-Lighting.png new file mode 100644 index 00000000..8460bd99 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Indoor-Lighting.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e3a20877c99b767c6155d2c797fba7771601bca4794b222a860b9ee54b084ad +size 1673830 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Interactive-UI.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Interactive-UI.png new file mode 100644 index 00000000..e9284ca4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Interactive-UI.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:209345c572ab50ec7df6dbc709124178098c00a47da6515a71e39c5b2dafe5c6 +size 151388 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Isometric-Camera.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Isometric-Camera.png new file mode 100644 index 00000000..eda19c95 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Isometric-Camera.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a1eee0a6fa9c12265fbaff8ff1e14bc8f2ab1d3f8ae3647f2f95c133d8434e6 +size 1103952 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Laser-Beams.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Laser-Beams.png new file mode 100644 index 00000000..327f290b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Laser-Beams.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ddf9cbb812a0ff6079fa9a466b7b9fd22113149b1ea10e6f836e05560ac0465 +size 614234 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Modular-Environments.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Modular-Environments.png new file mode 100644 index 00000000..28150964 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Modular-Environments.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6efaea8a28471eb0c0c9d3a3a2dad09749e20bf6b94b2028ea54aa478cdec093 +size 834207 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Moving-Objects.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Moving-Objects.png new file mode 100644 index 00000000..021572e1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Moving-Objects.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6f90c46efae43c29920b049227112ba618533685db2386e756d01d238db80cf +size 897472 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Neon-Signs.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Neon-Signs.png new file mode 100644 index 00000000..666b26a2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Neon-Signs.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4eba2bc883366923ec96d224d695ab60afa7d013021b3e1ac94feb4ffac10fdf +size 330422 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Outdoor-Lighting.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Outdoor-Lighting.png new file mode 100644 index 00000000..7c28394a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Outdoor-Lighting.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea81cbbd0ca6cfd534eb5df01c52be72f434612207d6c87428ce08be224cbebe +size 2140426 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Part-Interfaces.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Part-Interfaces.png new file mode 100644 index 00000000..0647e5ea --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Part-Interfaces.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a383f214ea973b23b6dec0a8d95e87045d40e7b88745ac1863f166f0e55e1b46 +size 268744 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Player-Input.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Player-Input.png new file mode 100644 index 00000000..57160a8d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Player-Input.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce02356eaa259c505f81c98605446969d8020c08dc4173eb9d949448565686b0 +size 458604 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Positional-Audio.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Positional-Audio.png new file mode 100644 index 00000000..b4bc2789 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Positional-Audio.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d548ad626724903d1aa650b53266f93fef75306321fd81a43876b22129e7628 +size 803385 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Properties-Attributes.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Properties-Attributes.png new file mode 100644 index 00000000..e7971efa --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Properties-Attributes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:94bd755be19339fdd49ddc4b8618bf146eb5baeb80e07adc7b9cec2b92ad8d6d +size 315801 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Proximity-Prompts.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Proximity-Prompts.png new file mode 100644 index 00000000..43a66a9d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Proximity-Prompts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:92acd122a220c2bcd191ae6ce60606998c6ba7ccdeecdc4230a0b467a7b428b5 +size 438839 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Saving-Data.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Saving-Data.png new file mode 100644 index 00000000..84624018 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Saving-Data.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54aa5554aeedf7ca6338a7c0f5a7c7da1ea92c2845d79c726c84c734737ada76 +size 990282 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Score-Bars.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Score-Bars.png new file mode 100644 index 00000000..a5e86515 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Score-Bars.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c781fe8c9f4f9a377e69d35bcc469f2e40eb133004a1c5afcb6410bd2369e3de +size 239954 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Script-Types-Locations.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Script-Types-Locations.png new file mode 100644 index 00000000..0595fced --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Script-Types-Locations.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8259907617af9ea50aa1d169f556354d3344098c337c18d5647a2b0c4304e83 +size 582622 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Scripting-Avatar-Animations.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Scripting-Avatar-Animations.png new file mode 100644 index 00000000..3d8a4c3d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Scripting-Avatar-Animations.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f71124f1e22a04fafc9ec67b5fda58badc17cbe7c80edf6ffaf4aec606c6712a +size 734265 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Services.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Services.png new file mode 100644 index 00000000..f70f0fea --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Services.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6a49e24a60066722040cf4b0940e14234cced7c3062114e5fa311e8664da605 +size 549255 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Side-Scrolling-Camera.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Side-Scrolling-Camera.png new file mode 100644 index 00000000..c5feb871 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Side-Scrolling-Camera.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0275a417b7bff93a06fb49cbcfe1626920a7475c8af37511cfc6253c507ef2a5 +size 828726 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Simple-Mesh.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Simple-Mesh.png new file mode 100644 index 00000000..a53bd02e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Simple-Mesh.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f88b87463404cd38dd0f5481f020d6bed173dd7a8bedd81f24cb5fd927a60e78 +size 597317 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Spinning-Objects.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Spinning-Objects.png new file mode 100644 index 00000000..ed0710a2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Spinning-Objects.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1bd35596ecd9ae4d04738366e15c34b586a07c32a9509dceb32dacc019bf3fc0 +size 382273 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Text-to-Speech.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Text-to-Speech.png new file mode 100644 index 00000000..4f3bd69d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Text-to-Speech.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:206298b1de9262abdd973c9c780699be84639200c33e59a4637e3bfa535682f7 +size 622195 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Vertex-Coloring.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Vertex-Coloring.png new file mode 100644 index 00000000..81252647 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Vertex-Coloring.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cad09ba322ce120699758a7f2433366a6529fff6002252193b55183464a71264 +size 858542 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Voice-Chat.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Voice-Chat.png new file mode 100644 index 00000000..24903944 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Voice-Chat.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9cabc1d97301e0545a1e92fe1aedefe557d6193d2ad0f0214d5d7ca8fa9d1603 +size 547783 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Volcanoes.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Volcanoes.png new file mode 100644 index 00000000..4ecc2a54 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Volcanoes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1892f19bad81f99e60aaccbea18932dad70a9e3383a08b7e71a400874da795c8 +size 1866345 diff --git a/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Waterfalls.png b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Waterfalls.png new file mode 100644 index 00000000..c17a2362 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/UCT-Overview/Waterfalls.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:257768ebf2d03d6145ac319d24ca55c82463f5c068833ce0553f44a519754d5c +size 831910 diff --git a/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Button-Default.jpg b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Button-Default.jpg new file mode 100644 index 00000000..6291bba9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Button-Default.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c4383bd28059dc30f91c47bc72d597494a43e87bd083a95c36d35e59bc20e48 +size 10899 diff --git a/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Button-Pressed.jpg b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Button-Pressed.jpg new file mode 100644 index 00000000..2e685c5d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Button-Pressed.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65a42ff7c56cc37d84d28d06be5d0340ae9a4cc673698648fd6457b10755927d +size 10839 diff --git a/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Default.jpg b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Default.jpg new file mode 100644 index 00000000..46f976e9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Default.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:207935bb8eee55349fe8bbbf3962467247c42fcf10d3b10019fea4edf21531b0 +size 17910 diff --git a/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Feedback-DataModel.jpg b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Feedback-DataModel.jpg new file mode 100644 index 00000000..1873eb9a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Feedback-DataModel.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:822cb77b601d2d009c3765b7cb2228ab5d6f514de16b91cb0b140f461f4cb774 +size 6673 diff --git a/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Feedback-Final.mp4 b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Feedback-Final.mp4 new file mode 100644 index 00000000..2359f1c7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Feedback-Final.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9bda5e74f066c90a2f3eeb6a78c1d9abba603d865e0a928d28f2188ebf3951d1 +size 1813958 diff --git a/.cursor/rules/roblox/assets/tutorials/add-2D-audio/In-Focus-State.jpg b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/In-Focus-State.jpg new file mode 100644 index 00000000..cbd74ca8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/In-Focus-State.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:956c8a0bdd75d107064e5274dc5701935a1b9a811ce584e5122703f69469d5bd +size 21821 diff --git a/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Looping-DataModel.png b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Looping-DataModel.png new file mode 100644 index 00000000..c16c3e8e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Looping-DataModel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad9a784ba52f952c018fc0795c2fb0b9de9f1cac42ad65a59e6b84475f3842ca +size 6190 diff --git a/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Looping-Final.mp4 b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Looping-Final.mp4 new file mode 100644 index 00000000..3fba1aa1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Looping-Final.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:821b65a601c91fc9e624922d46d739e80230052454a2e1111ebb2b5a743ada1f +size 8685624 diff --git a/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Metal-Track.mp4 b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Metal-Track.mp4 new file mode 100644 index 00000000..c46f09bd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Metal-Track.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ea6f4ce520dce54642cdca2aada254ae49121ef868ba342428b10069bf0433b +size 5604306 diff --git a/.cursor/rules/roblox/assets/tutorials/add-2D-audio/On-Hover-State.jpg b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/On-Hover-State.jpg new file mode 100644 index 00000000..aeb22de2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/On-Hover-State.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f2c409562d4d711d9798f715cbdbdfe6840f2c3595626dea784bfe1c4f5594a +size 18936 diff --git a/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Selected-State.jpg b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Selected-State.jpg new file mode 100644 index 00000000..428bba22 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Selected-State.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec7c1c6c69bb7de2f3fd84f1d4bd839153fe60676041c74977b051bbca3b6529 +size 18516 diff --git a/.cursor/rules/roblox/assets/tutorials/add-2D-audio/UI-DataModel.png b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/UI-DataModel.png new file mode 100644 index 00000000..68726bcc --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/UI-DataModel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5422869e0d5d376a9aac773a5c53344a16fc5472faf40de10ba4c0aac6470d7a +size 8723 diff --git a/.cursor/rules/roblox/assets/tutorials/add-2D-audio/UI-Final.mp4 b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/UI-Final.mp4 new file mode 100644 index 00000000..03cbfe22 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/UI-Final.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39588a5c9f00810783938c6803c99041728a103463c92aaa4612501b9dd1dbc0 +size 3236807 diff --git a/.cursor/rules/roblox/assets/tutorials/add-2D-audio/With-Looping.mp4 b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/With-Looping.mp4 new file mode 100644 index 00000000..c83fef2e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/With-Looping.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:efc24bf61f6023455599da42ddf5ac61915b754d100b97ede6d4b8ec091aa7a2 +size 2791537 diff --git a/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Without-Looping.mp4 b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Without-Looping.mp4 new file mode 100644 index 00000000..037de6fb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/Without-Looping.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26d1adfe72c1362c2a9e2142b30a100fb3de853bc18cc6ac51c49e3a66281957 +size 2762362 diff --git a/.cursor/rules/roblox/assets/tutorials/add-2D-audio/game-state-example.mp4 b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/game-state-example.mp4 new file mode 100644 index 00000000..8597dbd5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-2D-audio/game-state-example.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5fc7c034556890a705dbac5a5aade464e4524e2dd71bcf3ab18875fefcbdc93 +size 2029982 diff --git a/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Button-Default.jpg b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Button-Default.jpg new file mode 100644 index 00000000..5e9d8728 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Button-Default.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2320c50e8a75b606c81f6e5f77282a5e38f75a65c93680733a2a9706dbce508d +size 22487 diff --git a/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Button-Pressed.jpg b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Button-Pressed.jpg new file mode 100644 index 00000000..da24fce4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Button-Pressed.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a88ded6b7db78287f9378813c274840cf6cda9716b1963cbdd312cdaf2bb99b0 +size 20599 diff --git a/.cursor/rules/roblox/assets/tutorials/add-3D-audio/CharacterDialogue-DataModel.png b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/CharacterDialogue-DataModel.png new file mode 100644 index 00000000..e83656a1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/CharacterDialogue-DataModel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af277ae3a4bc2e1dc0e54592be3dc31d8c9ffaf68c280d1464a2e3c4503f3d0c +size 6123 diff --git a/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Dialogue-Final.mp4 b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Dialogue-Final.mp4 new file mode 100644 index 00000000..3d7b9bfd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Dialogue-Final.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b4aacf3f58bc0efadc7b4fcdf5eccbc4d02feff085cd23277b1a55104c7d3db +size 8989844 diff --git a/.cursor/rules/roblox/assets/tutorials/add-3D-audio/EventFeedback-DataModel.png b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/EventFeedback-DataModel.png new file mode 100644 index 00000000..56265d36 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/EventFeedback-DataModel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c393558d7852879d3e46ee0a80592bd2b2aab6496638c874d0d397f12f204f09 +size 7859 diff --git a/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Experience-Object-Representations.png b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Experience-Object-Representations.png new file mode 100644 index 00000000..27d282b0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Experience-Object-Representations.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ffc3b28fb021cfce90f2e6804256919ae237a1e5bdf223f0269e619dcab278f +size 642965 diff --git a/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Feedback-DataModel.jpg b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Feedback-DataModel.jpg new file mode 100644 index 00000000..a5f66ca4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Feedback-DataModel.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:791087c70b97f9b6ba17420b7506e8a81e5286ffdbcb12639a4c0d36f998cbe0 +size 4345 diff --git a/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Feedback-Final.mp4 b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Feedback-Final.mp4 new file mode 100644 index 00000000..26f4b6ea --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Feedback-Final.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0129a187f177db90263ab7a0552d389c807e7f728cdb2999bf7eeadb9ed75965 +size 8663128 diff --git a/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Looping-DataModel.png b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Looping-DataModel.png new file mode 100644 index 00000000..100e0615 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Looping-DataModel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01e8353c9084f9149b8ddd0fa9dad56c2adfab8f6936bf73fa33bbabd1358f13 +size 6480 diff --git a/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Looping-Final.mp4 b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Looping-Final.mp4 new file mode 100644 index 00000000..739c34a2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Looping-Final.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d992849d82e2f3e46ab8fd57454e2d233bb06dc8d2d694ea10081c5282400a6 +size 11024306 diff --git a/.cursor/rules/roblox/assets/tutorials/add-3D-audio/ObjectInteraction-Final.mp4 b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/ObjectInteraction-Final.mp4 new file mode 100644 index 00000000..cfae0829 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/ObjectInteraction-Final.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd1b8d7771a69664e4cb2c0063b051e0d8880737f60a80d39e2290c385c75ca8 +size 9044651 diff --git a/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Plant-Example.mp4 b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Plant-Example.mp4 new file mode 100644 index 00000000..82f4f662 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Plant-Example.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e8137c23215b69a5af2dfc081ad0a4368e406fe3c25cc2a9f2d56554b404f57 +size 21502164 diff --git a/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Realworld-Object-Representations.png b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Realworld-Object-Representations.png new file mode 100644 index 00000000..b2007a5c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Realworld-Object-Representations.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:baeb3a3ee7e54719385bbd02b93183b37466f5d7fbd55d5ee81d2332f40354ca +size 654362 diff --git a/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Space-Bark.mp4 b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Space-Bark.mp4 new file mode 100644 index 00000000..68ed2a0e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Space-Bark.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7acda92477ad4a326320c021adf61f8b526cfc583fb611486183d1b1a1bdbd2f +size 8500327 diff --git a/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Volume-Example.jpg b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Volume-Example.jpg new file mode 100644 index 00000000..30c2d6a6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/Volume-Example.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4edb814f4da44a78554c642c900011da7d57272d3582f92a392a8f2aab82a2f8 +size 193645 diff --git a/.cursor/rules/roblox/assets/tutorials/add-3D-audio/event-example.mp4 b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/event-example.mp4 new file mode 100644 index 00000000..b26768a8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/event-example.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2ab32fa4cc1c31d705803e54eeac8143640ad12e0082ccc20419f978e2af3b8 +size 2884971 diff --git a/.cursor/rules/roblox/assets/tutorials/add-3D-audio/looping-example.mp4 b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/looping-example.mp4 new file mode 100644 index 00000000..8babd931 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-3D-audio/looping-example.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a26092fc8316e01a74ef96bca9ce7230b4824f5e275ed3fac2540ecd42094e38 +size 7116998 diff --git a/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/ContextTTS-final.mp4 b/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/ContextTTS-final.mp4 new file mode 100644 index 00000000..8d43bb96 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/ContextTTS-final.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f7c4627992b54ea49c3ffe17787380993039c049d80a7fc2a4f0795376e4bc9 +size 32863928 diff --git a/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/GreenGumdrop.png b/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/GreenGumdrop.png new file mode 100644 index 00000000..622917a0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/GreenGumdrop.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c66b7a5ea1f4696630661dec302ab621e651c5847c1bb076ade0ff5bcc90a3c +size 89838 diff --git a/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/RedGumdrop.png b/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/RedGumdrop.png new file mode 100644 index 00000000..26167bc6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/RedGumdrop.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47cb6feb1613e20879743d948b5b7dda6a7f685518f4c1dbc366f61388dcffe8 +size 117826 diff --git a/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/YellowGumdrop.png b/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/YellowGumdrop.png new file mode 100644 index 00000000..32f75223 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/YellowGumdrop.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f3d9f38ab6b9ae9048622cffd457339a735e35fc5a94836bc3d1d43ed3b0003 +size 104001 diff --git a/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/basicTTS-exp1.mp3 b/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/basicTTS-exp1.mp3 new file mode 100644 index 00000000..dea66d58 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/basicTTS-exp1.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d51834cac64675b2e47b9d61ae0684eb019a7a2ca99b0a13d36f0b51872a065 +size 49583 diff --git a/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/basicTTS-exp2.mp3 b/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/basicTTS-exp2.mp3 new file mode 100644 index 00000000..1bd2def4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/basicTTS-exp2.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e1b7a5fdd60a932226f6700c3da54cef6b83c46de82f619a7be2c6b34e2a01d +size 92211 diff --git a/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/basicTTS-exp3.mp3 b/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/basicTTS-exp3.mp3 new file mode 100644 index 00000000..ac1cbebe --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/basicTTS-exp3.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7fa22a90fab441def4e59636f6fe807b6b700eedd00649bcbc3efae695897295 +size 96046 diff --git a/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/basicTTS-exp3.mp4 b/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/basicTTS-exp3.mp4 new file mode 100644 index 00000000..69bd92b1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/basicTTS-exp3.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3ed47dfcee4df19ff81d92385d00af71957d8253e88aeb6492518f8ba71d98c +size 261110 diff --git a/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/basicTTS-final.mp4 b/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/basicTTS-final.mp4 new file mode 100644 index 00000000..20474b12 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-text-to-speech/basicTTS-final.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85662b3cd7a2de1b4c20df1cc43443bafa67d20644104b919921cbbcb4652ca3 +size 2203992 diff --git a/.cursor/rules/roblox/assets/tutorials/add-voice-chat/DisabledScripts.jpg b/.cursor/rules/roblox/assets/tutorials/add-voice-chat/DisabledScripts.jpg new file mode 100644 index 00000000..622c29ed --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/add-voice-chat/DisabledScripts.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:771e81521610619232df1d3d4d7ff418c4420b4f88934a57713a72dc03803d0f +size 21532 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Combining-Additional-Mesh.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Combining-Additional-Mesh.jpg new file mode 100644 index 00000000..41d7abb3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Combining-Additional-Mesh.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b34d08e7172ca62e3df4a0001d672916d842fa0dc505c57536732432ed4dc318 +size 283752 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Combining-Core-Mesh.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Combining-Core-Mesh.jpg new file mode 100644 index 00000000..21c550fa --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Combining-Core-Mesh.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:574d8653a5bb555e741d9f1b4423e4e08228213d5481b8a4bc484deed6456431 +size 267901 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Combining-Making-A-Building.mp4 b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Combining-Making-A-Building.mp4 new file mode 100644 index 00000000..0704cdf7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Combining-Making-A-Building.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b35c1b662a3c67de96834f37f72654c7c7ea768df060964ebc9f3f2f8a29f1d0 +size 7951288 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Combining-Overlapping-Meshes.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Combining-Overlapping-Meshes.jpg new file mode 100644 index 00000000..e64e30bb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Combining-Overlapping-Meshes.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7571cd3ef5677e34af2761b36bc92ef20d79107a3f7f649480a7e93c0c211cb8 +size 272416 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Customizing-MassSelection.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Customizing-MassSelection.jpg new file mode 100644 index 00000000..946bd7ac --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Customizing-MassSelection.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5cc1c55d87559ddec3c87f436be4ee3e3e7b444eacc10f3ffad9e7553c1f5a2 +size 131256 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Customizing-MaterialVariants.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Customizing-MaterialVariants.jpg new file mode 100644 index 00000000..edf3a78e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Customizing-MaterialVariants.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dcd5a95a01548973cc3113482f4948356ccbe26f1cbf585601f61be7095c3b35 +size 43373 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Customizing-NewColor.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Customizing-NewColor.jpg new file mode 100644 index 00000000..95e27476 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Customizing-NewColor.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6da10b4c8ea98c031807935c268a89459ed6d07d7f1c2ebc822e13a6218be438 +size 121976 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Customizing-NewCustomMaterial.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Customizing-NewCustomMaterial.jpg new file mode 100644 index 00000000..b6832231 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Customizing-NewCustomMaterial.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2ece6064e50efb3b4caf90256eee64a2da30ebf7ca756c1ed0819459f598b90 +size 112244 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/DecorativeProps-Building.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/DecorativeProps-Building.jpg new file mode 100644 index 00000000..f698641a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/DecorativeProps-Building.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5457ddae0f5c7fe406df85c03584964f7d1931518382f7e305d34d59d3308aba +size 124275 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Overview-Asset-Kit.png b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Overview-Asset-Kit.png new file mode 100644 index 00000000..11e37d6c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Overview-Asset-Kit.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e161a6e91eaada89340dff9ec464f5ad94404789279f28bab2a0a649c9053f5 +size 1896701 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Overview-City-Template.png b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Overview-City-Template.png new file mode 100644 index 00000000..8850fb7d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Overview-City-Template.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5b946d172fcf1d54a14addda46c771881681d73816e95bc3b907ae19bce0783 +size 1608901 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Aligned-Diagram.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Aligned-Diagram.jpg new file mode 100644 index 00000000..841fc4c0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Aligned-Diagram.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b02596a83ade8c92a13afff2ea9bf456011f9a1706827dbbd13d0c5daa4e4de +size 91421 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Aligned.mp4 b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Aligned.mp4 new file mode 100644 index 00000000..eeecb430 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Aligned.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7c135b95d905d7916be0c5cd3925022205fe19fab2bd5982e6dfba91ea029fa +size 1130265 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Awning.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Awning.jpg new file mode 100644 index 00000000..3b30dfe6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Awning.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbb2ccef2f895dda4abeb029767403fe93ee4468080e83ca91dd14f3fcfb72bb +size 204190 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Cornice.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Cornice.jpg new file mode 100644 index 00000000..557b5288 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Cornice.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c701a93667bfede889d6c6e33fa88861072fa4ca31be8e420c23954339a6ec25 +size 258273 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Misaligned-Diagram.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Misaligned-Diagram.jpg new file mode 100644 index 00000000..2d36a6a0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Misaligned-Diagram.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:653f582e0da9735838f17d4b697aab81491c31852e5755325d35a1f067acbe8f +size 177082 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Misaligned-TopView.png b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Misaligned-TopView.png new file mode 100644 index 00000000..a161f76b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Misaligned-TopView.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:708705c0048ae9f79fbeb555a2ed3cdc0a62f66abc12987c58cd6c4ce76fd6a2 +size 275610 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Misaligned.mp4 b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Misaligned.mp4 new file mode 100644 index 00000000..d0200a2f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Misaligned.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d4a41c7c4d1ada1c324c286f105b9da18d7b1912ba694ebe7b2cd295696bd65 +size 1625114 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Railing.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Railing.jpg new file mode 100644 index 00000000..364536ad --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Railing.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad9902c43645251b08ec942fe9f31ef8263c8000f4aced36432b9fd0384f5c10 +size 248745 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Stud-Diagram.png b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Stud-Diagram.png new file mode 100644 index 00000000..0ea4714b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Pivot-Points-Stud-Diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a241ebb6253ecfcfbd7933c4acd6cdb2f3a8d33b53b55f6ca5b643c73e191af +size 1328362 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Snapping-Behavior-Values.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Snapping-Behavior-Values.jpg new file mode 100644 index 00000000..6226a5d5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Snapping-Behavior-Values.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec0a40f0d29a542d1f63c364db252cdfeef36c2c8299d926630eab0608c4304e +size 13096 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-Concrete.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-Concrete.jpg new file mode 100644 index 00000000..80b97f56 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-Concrete.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1a7b3ff7144730e4b3f42cf7e631f2bacbfa7cd8b3c181a395b4eb78f69d548 +size 20001 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-DefaultTrim.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-DefaultTrim.jpg new file mode 100644 index 00000000..5c919a11 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-DefaultTrim.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3034b96c1286f941b13001edab335717832848465e183897d6d8199dce88b7c +size 248807 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-Delete.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-Delete.jpg new file mode 100644 index 00000000..3ef13270 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-Delete.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:acae98cfcb2fdd980f5ad5ec6d7a9370f99ed3944c022e0875f833e44a8e40f2 +size 1086677 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-Final.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-Final.jpg new file mode 100644 index 00000000..2398879a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-Final.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5800e09b9a5c56c2416dcb3e6639c04e22a161f1554e21fa93ead598bc8d96ce +size 247997 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-NewColor.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-NewColor.jpg new file mode 100644 index 00000000..cd0f1fdf --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-NewColor.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59a54c07d4d68698f03cbfe6f933409caa5c3f85e63ab8236fe44595a3f35dfb +size 258895 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-NewTrim.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-NewTrim.jpg new file mode 100644 index 00000000..65a1279d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-NewTrim.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06a9b077174d139c329c6466a7745206b63dad48f144b36e0d92a0f6b738f5eb +size 243164 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-Objects.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-Objects.jpg new file mode 100644 index 00000000..f39f9c5f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-Objects.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d660b8d3e4b8925b8ca433476cb50a3202bfd7d745c030f527ffb09ab76a4e5e +size 51273 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-Wood.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-Wood.jpg new file mode 100644 index 00000000..265a46ba --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/SurfaceAppearance-Wood.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0ff67311d0d904a0a8c90ea3d60a1e031cb61306fab85376350f774d55eb01c +size 24569 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Textures-Building.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Textures-Building.jpg new file mode 100644 index 00000000..121b69d7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/Textures-Building.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f8068847e793f6a73ee28b4798aca58bc1013295bdaddd931cec03b89bdc09f +size 64504 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/WithTexture.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/WithTexture.jpg new file mode 100644 index 00000000..4e1cb9ef --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/WithTexture.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c53a358000f871df14fa7b1f3f10ee1857752520110fc0398289477269bb7409 +size 256862 diff --git a/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/WithoutTexture.jpg b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/WithoutTexture.jpg new file mode 100644 index 00000000..360d4899 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/assembling-modular-environments/WithoutTexture.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32fe5261bea2620d8ae2c9eda8747cd60709883b2351d525ab3029cd91aa967f +size 253546 diff --git a/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/basicParticleFinished.mp4 b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/basicParticleFinished.mp4 new file mode 100644 index 00000000..14eb5345 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/basicParticleFinished.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df34380d3d77f5df4360c03a77b6b86e058c1bf666530b4879940daf1af899c3 +size 108044 diff --git a/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/basicParticleNoLight.mp4 b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/basicParticleNoLight.mp4 new file mode 100644 index 00000000..52afa0c0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/basicParticleNoLight.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:324733e9fa01c8ef8a0876d45f5f81f016d070bf3ed75669fff03bc9ba528931 +size 91403 diff --git a/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/defaultParticles.jpg b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/defaultParticles.jpg new file mode 100644 index 00000000..258f3642 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/defaultParticles.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:725391c3b52debbcf21a01a1af8e90c94d5ac3bf2ce4781c34efef872e8d4ab7 +size 1000108 diff --git a/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/explorerMeshPart.jpg b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/explorerMeshPart.jpg new file mode 100644 index 00000000..624ec8ee --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/explorerMeshPart.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f23ab15152a1529406cc0bb8c5585a70db2fe7666a4fb7b73ce7213f8e7a0b87 +size 67067 diff --git a/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/meshProperties.jpg b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/meshProperties.jpg new file mode 100644 index 00000000..53bbaf7b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/meshProperties.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a98e5bee43d974daf332f27bd021fe649ddc6d7560dbe90002a4caade4ea5221 +size 87784 diff --git a/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleColor.jpg b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleColor.jpg new file mode 100644 index 00000000..b1b755fa --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleColor.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:816541038c6188417aa8e72cd9027c3599d6bec0399cf9bbfbed0d07f5af4590 +size 39714 diff --git a/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleColorGame.jpg b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleColorGame.jpg new file mode 100644 index 00000000..57e90704 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleColorGame.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1675b3a46921ee5dd8123ed6dac5b2fa0fef79b936637e8b04453b8f2b041c4 +size 691658 diff --git a/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleLifetime.jpg b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleLifetime.jpg new file mode 100644 index 00000000..b2b2eade --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleLifetime.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:908bd35a29d39a93f6b89d9245cbad88f0da67f61d9f8d3bdffecab6396236b3 +size 48977 diff --git a/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleLifetimeGame.jpg b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleLifetimeGame.jpg new file mode 100644 index 00000000..70251b5b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleLifetimeGame.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0c268a82b90b1638a72bd1dce2821f9d0848a455abdf885593214c714df43c0 +size 674330 diff --git a/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleRate.jpg b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleRate.jpg new file mode 100644 index 00000000..ed23d14a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleRate.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e0a617c213e897ba3a06be7d818885029c6a8975f6a81a607c580bb8ac5091d +size 47776 diff --git a/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleRateGame.jpg b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleRateGame.jpg new file mode 100644 index 00000000..e1c16473 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleRateGame.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:246a27e8d026c50886a795f6a8723dc0b88342e3e2eae8f9381939ebe5515f74 +size 669761 diff --git a/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleSpeed.jpg b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleSpeed.jpg new file mode 100644 index 00000000..89d8d464 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleSpeed.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d53a3564fb15013fa98d7f161b5eafe5f0616fe2bfc0eb243efc6f320b03aee8 +size 39411 diff --git a/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleSpreadAngle.jpg b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleSpreadAngle.jpg new file mode 100644 index 00000000..7309a7ae --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleSpreadAngle.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cc62ff7c4ecac68290840279761ddae50b692b7ae4ccf6cf8409645ec471124 +size 46790 diff --git a/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleSpreadAngleGame.jpg b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleSpreadAngleGame.jpg new file mode 100644 index 00000000..668f7033 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/particleSpreadAngleGame.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00382d5a1fe00ef671eb6ed82e17f50cf62af6e2b378288ef5c7d5aa665f47aa +size 650821 diff --git a/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/rotatingParticleEffect.mp4 b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/rotatingParticleEffect.mp4 new file mode 100644 index 00000000..bd5c763e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/rotatingParticleEffect.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b9c854d3712cccb8bacf2da13e5c3d74b58c4c5a7106f993ef64e5d6950d7ac +size 975324 diff --git a/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/scalingParticleEffect.mp4 b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/scalingParticleEffect.mp4 new file mode 100644 index 00000000..649115db --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/basic-particle-effects/scalingParticleEffect.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5086687e52bd1e7e2c941ca45ec6668d680011d3174cd8e0a7d8fc37deee48ad +size 825509 diff --git a/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Add-Platforms-Final.jpg b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Add-Platforms-Final.jpg new file mode 100644 index 00000000..b9e710f5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Add-Platforms-Final.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbd6cfadce89f56be40e16854a45a01d8e9827862906e6400a62d563d97ca43e +size 136486 diff --git a/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Add-Platforms-Greybox.jpg b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Add-Platforms-Greybox.jpg new file mode 100644 index 00000000..e8116d83 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Add-Platforms-Greybox.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eef49192756db4acc248d19b04138d5bcdb1c9284e5e78161c03451ae8f5bae2 +size 78303 diff --git a/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Explorer-Add-Folder.png b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Explorer-Add-Folder.png new file mode 100644 index 00000000..7a577b65 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Explorer-Add-Folder.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d9e9714399ff690c401a9ada018af96918224b9ab4ca7f9205cb53da2ea072b +size 36736 diff --git a/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Explorer-Add-Model.png b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Explorer-Add-Model.png new file mode 100644 index 00000000..840ee7d1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Explorer-Add-Model.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d23626e14ae3004981ce8e61734052ae9acca67e300953fc87976981b1204b6 +size 35685 diff --git a/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Explorer-Character-Humanoid.png b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Explorer-Character-Humanoid.png new file mode 100644 index 00000000..a62045ae --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Explorer-Character-Humanoid.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63c345967821769605578aa6ad056e021108a767d62019120562c708b26f7ff2 +size 37935 diff --git a/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Explorer-Model-Renamed.png b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Explorer-Model-Renamed.png new file mode 100644 index 00000000..c75546ea --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Explorer-Model-Renamed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c44350db58418ea38fb45894df61ce2ce2613a5daf8f3296855dcd3dd9947aab +size 21252 diff --git a/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Final-Platforms.jpg b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Final-Platforms.jpg new file mode 100644 index 00000000..077e74ae --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Final-Platforms.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:127da5003c62a292360a2045d461f20cb0c534e3cdcfa46df4f7268c8e798e41 +size 255716 diff --git a/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/First-Platform.jpg b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/First-Platform.jpg new file mode 100644 index 00000000..ad96fb20 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/First-Platform.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d939829fd35921e89de1297293893aaac323cb7a85ed4e3262f5bd0f8785e85c +size 246144 diff --git a/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/HollowTunnel-Final.jpg b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/HollowTunnel-Final.jpg new file mode 100644 index 00000000..a67f6a06 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/HollowTunnel-Final.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19bfc754b7f90daf452d77bfeaded871e96684dcc9292020e062c53fe1c804aa +size 56129 diff --git a/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/HollowTunnel-Negate.jpg b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/HollowTunnel-Negate.jpg new file mode 100644 index 00000000..d1cc01d9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/HollowTunnel-Negate.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:831b72228753f3b5e847afd36a11364828d042eaea94cace3c5930298b82bfbe +size 54244 diff --git a/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/HollowTunnel-Start.jpg b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/HollowTunnel-Start.jpg new file mode 100644 index 00000000..f5ed93b0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/HollowTunnel-Start.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79cdfaf2523ac63b29890a03189554f77be300b3f99b4600365590f2e38bade5 +size 53465 diff --git a/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/HollowTunnel-Union.jpg b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/HollowTunnel-Union.jpg new file mode 100644 index 00000000..68dd3e6d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/HollowTunnel-Union.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d979aead2bd77811feead26646e0096784c6d5c3cee084a76dc84e018f89631e +size 57710 diff --git a/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Humanoid-Jump-Settings.png b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Humanoid-Jump-Settings.png new file mode 100644 index 00000000..e2d77614 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Humanoid-Jump-Settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc6bb4934ff2edec873117afd4ad019503ecb4feeac63d595dad95c1e0ce3a47 +size 14228 diff --git a/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/New-Part-As-Child-Of-Model.png b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/New-Part-As-Child-Of-Model.png new file mode 100644 index 00000000..4e86c173 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/New-Part-As-Child-Of-Model.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7bb3f61067781e264b20229b90a9d108d5e88e1d5f253996742618d40e9eb4e5 +size 20552 diff --git a/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Part-Picker.png b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Part-Picker.png new file mode 100644 index 00000000..65fcce46 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Part-Picker.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90752d272dfce1b421c0a10795c83d0bb10578b8482f2c24786d9c4b9450470a +size 140943 diff --git a/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Platform-Levels.jpg b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Platform-Levels.jpg new file mode 100644 index 00000000..63029516 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Platform-Levels.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f462ec6053486b374a17b03abc94cf603c4185eb2bb3051d240d39d490de604 +size 219562 diff --git a/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Platforms-Aligned-Underwater.jpg b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Platforms-Aligned-Underwater.jpg new file mode 100644 index 00000000..4688a6b1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/Platforms-Aligned-Underwater.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a22027a90eaf161b4fa1d433a44aa55564b6c8f4146cad92fa124e477ec3607 +size 119517 diff --git a/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/playable-area-walk.mp4 b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/playable-area-walk.mp4 new file mode 100644 index 00000000..1dae8e75 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/block-out-a-playable-area/playable-area-walk.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6168e7d6903ab83fe8ef98214fbc22d6ebf8bb746bde02467a7cd308e330d969 +size 14425943 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/Ferris-Wheel-Edit-Place.png b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/Ferris-Wheel-Edit-Place.png new file mode 100644 index 00000000..a33fb301 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/Ferris-Wheel-Edit-Place.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0ecebdfc33e41c5a8e6738d4f1981f880345c9ea36a05c24d9fae15f9ef4b4a +size 134307 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/ferrisWheel-finalExample.mp4 b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/ferrisWheel-finalExample.mp4 new file mode 100644 index 00000000..8247192e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/ferrisWheel-finalExample.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf3cb80774b29908523cdbd371b682b9f49387490e42261a0c7123ba4c02ab0a +size 1266682 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/ferrisWheel-inContext.mp4 b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/ferrisWheel-inContext.mp4 new file mode 100644 index 00000000..40fc1102 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/ferrisWheel-inContext.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90badf3a3319a6bd2bbeb02605534659650b13bfdd43a28f3a00c29950af25ca +size 3689675 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_actuatorType.png b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_actuatorType.png new file mode 100644 index 00000000..fa3a7e0d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_actuatorType.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:170735a33cdc6db74596b54b47753bcdc104df039fd79f5175ce502a6f031f3c +size 24211 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_angularVelocity.png b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_angularVelocity.png new file mode 100644 index 00000000..5a86eaa6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_angularVelocity.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c9483091a97d239c7b15cd0d6ef450ce20a67c6ebd7053ae9bbde25ace5b2b5 +size 27247 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_mainMotor.png b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_mainMotor.png new file mode 100644 index 00000000..483ec41c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_mainMotor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a90a85f012f3ded2d858b71cfc1023a2d3a4c652d4d9cec9bac771674b27a297 +size 35464 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_mainMotorAttachments.png b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_mainMotorAttachments.png new file mode 100644 index 00000000..5bb523d9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_mainMotorAttachments.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:047bd97673ef20f8aa31459f3d94089073259a94f4ef3071a5217b0483d25332 +size 22769 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_motorMaxTorque.png b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_motorMaxTorque.png new file mode 100644 index 00000000..8157ebb5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_motorMaxTorque.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a6c68d3194e213a67e56d5732cb965c61f14184a335bb2ad0cce4aa69fea186 +size 27192 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_moveMainSupport.jpg b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_moveMainSupport.jpg new file mode 100644 index 00000000..b38462c7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_moveMainSupport.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b9da8cc4db868137df247874bb1befcbce0b1f40a5fd3f34ac6de15599365db +size 63531 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_movedSupportAttachment.jpg b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_movedSupportAttachment.jpg new file mode 100644 index 00000000..191c3a53 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_movedSupportAttachment.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fec04f12cb14941832631a63f26941c19c3a645ed46d056894c05aa541d25ec2 +size 43155 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_movedWheelAttachment.jpg b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_movedWheelAttachment.jpg new file mode 100644 index 00000000..c059346b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_movedWheelAttachment.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97030b1b1a9667d550906abcd668da2df1c19899181bf864ef85da9d7dbd1ab4 +size 62012 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_originalPosition.jpg b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_originalPosition.jpg new file mode 100644 index 00000000..21e56881 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_originalPosition.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dee99244a3e72120baad88e9597b498a475ca399aeaa7e7f20d79c137e85bc1c +size 70599 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_rotateWheelAttachment.jpg b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_rotateWheelAttachment.jpg new file mode 100644 index 00000000..37e8cc6d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_rotateWheelAttachment.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18d943870db7137e448c6695e43e92ebb1956c7a0efbfe2a0a301116a12e7774 +size 106466 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_supportAttachment.png b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_supportAttachment.png new file mode 100644 index 00000000..ebaeea7a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_supportAttachment.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95789bf1d5da172a2863dea62f7aba5c10959a7dd87760b3e0e1376c5fa3ec98 +size 33797 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_wheelAttachment.png b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_wheelAttachment.png new file mode 100644 index 00000000..72e790c7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-ferris-wheel/makingAFerrisWheel_wheelAttachment.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0be47f247b0721f682538bde6bac904610b3677214cbf8429f45c772a34fd793 +size 38652 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints-showDoorCreated.jpg b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints-showDoorCreated.jpg new file mode 100644 index 00000000..056ba135 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints-showDoorCreated.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a36133ec878eab656255d08e20596ff6352d705c855d69fc2ba15ab7a8998aa +size 48789 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_attachmentsConnected.png b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_attachmentsConnected.png new file mode 100644 index 00000000..462c9f5d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_attachmentsConnected.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b41e752f11e32d75391d46a5e6b5f75d40596f7a3d0331d0a5792b8ebaf0a97 +size 4097 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_attachmentsCreated.png b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_attachmentsCreated.png new file mode 100644 index 00000000..fa8df2a3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_attachmentsCreated.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1505fd01229148f853e67938b81e38f7ba01c024e89265ec3f7c37fa283ce1b1 +size 4988 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_attachmentsRenamed.png b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_attachmentsRenamed.png new file mode 100644 index 00000000..67d3dae4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_attachmentsRenamed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a33a090520b2366dee24e1fdec94d859a5227010c7a06274de2cec3ecb438df +size 9191 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_doorSwingingWrong.mp4 b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_doorSwingingWrong.mp4 new file mode 100644 index 00000000..ff02d88a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_doorSwingingWrong.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:398b9712dd16192767873298c3047d4f45ad2aa15b0b0a612b139b70046663b0 +size 578850 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_finalDoor.mp4 b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_finalDoor.mp4 new file mode 100644 index 00000000..9108ac67 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_finalDoor.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bec664c6fc727a894d82be801b134e4a069167be57f3ea0e24c0740825503800 +size 267309 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_finalDoor_WithLimits.mp4 b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_finalDoor_WithLimits.mp4 new file mode 100644 index 00000000..aa1661d6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_finalDoor_WithLimits.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b138e876ad49702c9a834b4e9ff201eeb4b335ae98ddb899d5bc20742910963b +size 190941 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_finalExample.mp4 b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_finalExample.mp4 new file mode 100644 index 00000000..d3977b72 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_finalExample.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ee623c4e73a0c8494743fc25e99a28fc05fcf3b7b48abcc2d573cee3ded8be3 +size 409615 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_limitAnglesV2.jpg b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_limitAnglesV2.jpg new file mode 100644 index 00000000..675fb437 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_limitAnglesV2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f6a2856b8e7b351603d89b610941f8a918f8539c8544c54876189064be0dbff +size 77514 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_limitsEnabled.png b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_limitsEnabled.png new file mode 100644 index 00000000..92efbdb3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_limitsEnabled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eca9b50b7d2893dbdd8a03bbff9a9e4a599fff157bf2f034be58b982cde03fe1 +size 8190 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_primaryAxis.jpg b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_primaryAxis.jpg new file mode 100644 index 00000000..150d3033 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_primaryAxis.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e3d93cd2a44e17a37ad3e719368dce84ebdb2a8e2b2513f58ec7ca651c7927d +size 44404 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_secondaryAxisArrow.png b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_secondaryAxisArrow.png new file mode 100644 index 00000000..07e0b2a1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_secondaryAxisArrow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:62d0f2a58b4bfd0506c5abbd2e5e3981990a2b4a50066ba70e6008ab1e298598 +size 51297 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_selectAnchored.png b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_selectAnchored.png new file mode 100644 index 00000000..6c56197a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_selectAnchored.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b310ab71e55754003bdefe77e6aa2e0e19af1b214e0776449721e9fb1d6a006c +size 7726 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_selectAttachment0.mp4 b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_selectAttachment0.mp4 new file mode 100644 index 00000000..1b9e1a47 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_selectAttachment0.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d4cef19ecdf6fa6e9c447a2e53cf08339dfa1b824f4fb736a5febb679571efb +size 548192 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_selectFrameAttachment.png b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_selectFrameAttachment.png new file mode 100644 index 00000000..06794975 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_selectFrameAttachment.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d69eb68c9956f6c16d1a0404426d2d3fca67590787b80630e3ac3e4ddc9e8d7 +size 9920 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_showAttachementsMoved.jpg b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_showAttachementsMoved.jpg new file mode 100644 index 00000000..ba70eaf7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_showAttachementsMoved.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89a541ab9632276fc6b9b99b45d469cca98ecae91c16129f0971d48beacb0e25 +size 28446 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_showAttachmentAxis.jpg b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_showAttachmentAxis.jpg new file mode 100644 index 00000000..8f01eb35 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_showAttachmentAxis.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d50bff63838c23eb738dcd9984d441ecf92dbc39bbe6158231139328947fb8b2 +size 42915 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_showAxisArc.jpg b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_showAxisArc.jpg new file mode 100644 index 00000000..718a9c97 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_showAxisArc.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4520b80da584e7e8277d110e5cfe2c8eb29df2fd638eb5dbee6afabbdaaeeab +size 51519 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_showCreateHingeConstraint.png b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_showCreateHingeConstraint.png new file mode 100644 index 00000000..5341afe4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_showCreateHingeConstraint.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de3b1ab6ceebe9baac7b3bb918364cadd0ffcdf528478174d94c1ef7da7eb376 +size 6427 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_showLimitsSet.png b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_showLimitsSet.png new file mode 100644 index 00000000..dc4fc764 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_showLimitsSet.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75e4a14f17e9637f73de554cf01cc1c73b1d312b3d893755e8e1f31929b72f41 +size 4007 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_showMoveAttachment.mp4 b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_showMoveAttachment.mp4 new file mode 100644 index 00000000..61fd558d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_showMoveAttachment.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0550eea5bea0f8550b1276795eeb129f0405c92c24bb490e1a07a71fb9e1007 +size 227312 diff --git a/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_snapRotate.png b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_snapRotate.png new file mode 100644 index 00000000..3c9adb38 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-a-hinged-door/introToConstraints_snapRotate.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48b79e4013d8c9a0590382e858e09a0d27266773ef4ed22a4a61f9f89c81cfaf +size 5895 diff --git a/.cursor/rules/roblox/assets/tutorials/building-lesson/Mezzanine-Assistant.png b/.cursor/rules/roblox/assets/tutorials/building-lesson/Mezzanine-Assistant.png new file mode 100644 index 00000000..dbd87b58 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-lesson/Mezzanine-Assistant.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50d3f63ab972be3868777c70c9d74fdeb00b0eedf936a7dec4bfc80d86bce94e +size 84294 diff --git a/.cursor/rules/roblox/assets/tutorials/building-lesson/ObbyThumbnail.png b/.cursor/rules/roblox/assets/tutorials/building-lesson/ObbyThumbnail.png new file mode 100644 index 00000000..76afbb8d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-lesson/ObbyThumbnail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66f11b7ba0a48ec3df87e0fb1840f31fca54bd195e5158ee5df53ff91891a333 +size 1327385 diff --git a/.cursor/rules/roblox/assets/tutorials/building-lesson/Studio-Setup.jpg b/.cursor/rules/roblox/assets/tutorials/building-lesson/Studio-Setup.jpg new file mode 100644 index 00000000..b98c9690 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-lesson/Studio-Setup.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfe6adec24e0a2a8d6e50865e4a8a7ebb60df82932e9d8c6f0537b2e859f202e +size 162858 diff --git a/.cursor/rules/roblox/assets/tutorials/building-lesson/Texture-On-Surface.jpg b/.cursor/rules/roblox/assets/tutorials/building-lesson/Texture-On-Surface.jpg new file mode 100644 index 00000000..090c096e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-lesson/Texture-On-Surface.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c357ffaf1a4735d73c28262a5ae87c8f9e55914729af19553ff5b0c8c4b8162 +size 99182 diff --git a/.cursor/rules/roblox/assets/tutorials/building-lesson/anchor-demo.mp4 b/.cursor/rules/roblox/assets/tutorials/building-lesson/anchor-demo.mp4 new file mode 100644 index 00000000..d338a75f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-lesson/anchor-demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e89401cc0b66879ba1c6718860d0db08c24bfe837d7b9ecb1fed5956a60f044 +size 262262 diff --git a/.cursor/rules/roblox/assets/tutorials/building-lesson/createPrompt-2.png b/.cursor/rules/roblox/assets/tutorials/building-lesson/createPrompt-2.png new file mode 100644 index 00000000..1027f4df --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-lesson/createPrompt-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2916ec78c211726daf78d906c195ed1ea12f90a79623b61bc2c0a9f12ca22d46 +size 32962 diff --git a/.cursor/rules/roblox/assets/tutorials/building-lesson/customize-1.png b/.cursor/rules/roblox/assets/tutorials/building-lesson/customize-1.png new file mode 100644 index 00000000..6b3d358f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-lesson/customize-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3ba7bb03739b16f53eb7393c91463082cd96b679a21d0e2c896eebbca10e469 +size 1233347 diff --git a/.cursor/rules/roblox/assets/tutorials/building-lesson/customize-2.png b/.cursor/rules/roblox/assets/tutorials/building-lesson/customize-2.png new file mode 100644 index 00000000..a848fceb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-lesson/customize-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b45080ed6601d5af008335ac6120d7c835d82e79b6040f8b24cd8fe9763b339 +size 1155645 diff --git a/.cursor/rules/roblox/assets/tutorials/building-lesson/customize-3.png b/.cursor/rules/roblox/assets/tutorials/building-lesson/customize-3.png new file mode 100644 index 00000000..75af8c50 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-lesson/customize-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96fc01d44fff025ebdd1d7709f60eea7543ff1a3212001ff678e0441f465b103 +size 1280358 diff --git a/.cursor/rules/roblox/assets/tutorials/building-lesson/customize-4.png b/.cursor/rules/roblox/assets/tutorials/building-lesson/customize-4.png new file mode 100644 index 00000000..509256e4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-lesson/customize-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97ad8687f7ce9f03089667aca20f3170cc53c71262d13d5ddbf9bf20fe864b09 +size 1155283 diff --git a/.cursor/rules/roblox/assets/tutorials/building-lesson/customize-5.png b/.cursor/rules/roblox/assets/tutorials/building-lesson/customize-5.png new file mode 100644 index 00000000..b76aa24d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-lesson/customize-5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d2eae5ace265868811ccbe624f6d6e0bcd7d910232c6c2d67da712cd8107eb5 +size 1181046 diff --git a/.cursor/rules/roblox/assets/tutorials/building-lesson/insert-2.png b/.cursor/rules/roblox/assets/tutorials/building-lesson/insert-2.png new file mode 100644 index 00000000..41388e25 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-lesson/insert-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44aac9f1eb813f471c24b774eb69c405cdc62a79d9cf78e7b927bb3e2d51252c +size 635182 diff --git a/.cursor/rules/roblox/assets/tutorials/building-lesson/insert-3.png b/.cursor/rules/roblox/assets/tutorials/building-lesson/insert-3.png new file mode 100644 index 00000000..c90533b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-lesson/insert-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b391964bfb8e133fc94ce5e00478d03d707cc2c0e53973307d1d429125c5a38e +size 738803 diff --git a/.cursor/rules/roblox/assets/tutorials/building-lesson/materials.png b/.cursor/rules/roblox/assets/tutorials/building-lesson/materials.png new file mode 100644 index 00000000..8dd59f81 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-lesson/materials.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cc59583692b1473a2298a3003d9e129f49c384f646430dae9a2b582d7339035 +size 380388 diff --git a/.cursor/rules/roblox/assets/tutorials/building-lesson/part-picker.png b/.cursor/rules/roblox/assets/tutorials/building-lesson/part-picker.png new file mode 100644 index 00000000..72878952 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/building-lesson/part-picker.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1345d5feba819373b83b97f9d8d98e9190b1940c583c1a7f1b76532ef972b261 +size 50826 diff --git a/.cursor/rules/roblox/assets/tutorials/coding-lesson/StoryGameThumb.png b/.cursor/rules/roblox/assets/tutorials/coding-lesson/StoryGameThumb.png new file mode 100644 index 00000000..20eabeb0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/coding-lesson/StoryGameThumb.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1fcc88f3df702fdd004c16ce9a5d701b9984aa2fa7d04e329ea0aff6e39734b +size 1377169 diff --git a/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/CameraManagerScript.png b/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/CameraManagerScript.png new file mode 100644 index 00000000..3f697e7b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/CameraManagerScript.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aac5005bdee0a07ed09acd11043103d01f287bebd02363c70d41a0f892993d9f +size 5878 diff --git a/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/CameraModeProperty.png b/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/CameraModeProperty.png new file mode 100644 index 00000000..7a5b43fc --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/CameraModeProperty.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:833481618acfffdf48d8ab8dbb067c33116d35336fd020600754d8285e5541c5 +size 3820 diff --git a/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/FirstPersonCameraExample.jpg b/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/FirstPersonCameraExample.jpg new file mode 100644 index 00000000..744bc6f4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/FirstPersonCameraExample.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2ebe8ad28418ac542a6fa824dceb29d1f7aebaf6d8a3ca8d4446dc0bbd66a5a +size 378038 diff --git a/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/IsometricCameraExample.jpg b/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/IsometricCameraExample.jpg new file mode 100644 index 00000000..49299576 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/IsometricCameraExample.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:885e7d99a1510cf628a6b07963d0887ee2d16b3df4761ae69d84f2f812a74f8c +size 675526 diff --git a/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/SidescrollingCameraExample.jpg b/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/SidescrollingCameraExample.jpg new file mode 100644 index 00000000..03eee34f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/SidescrollingCameraExample.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8e2b776eb74abaaf612b5bcbd85afd93a0cfeb6a1751af21cf2fb7bfc8f2e4e +size 321067 diff --git a/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/StarterPlayerSelection.png b/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/StarterPlayerSelection.png new file mode 100644 index 00000000..5bebd5c4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/StarterPlayerSelection.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59096c073f89a17ba8d2835c8fc7a5741079e9078f65b6941299af49d4a0bae8 +size 5434 diff --git a/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/ThirdPersonCameraExample.jpg b/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/ThirdPersonCameraExample.jpg new file mode 100644 index 00000000..8308d376 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/ThirdPersonCameraExample.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e4e5afaa798e64342b3ff8abf4e3666afe697b5b1b6a73d4c6a9b2a3d5f4b92 +size 378397 diff --git a/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/VectorComponentDemonstration.jpg b/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/VectorComponentDemonstration.jpg new file mode 100644 index 00000000..18ae1672 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/controlling-the-players-camera/VectorComponentDemonstration.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f25aada989d2b0ff01b11d759ec9a9e47f097cadbdfb551677bddec440cc08f +size 1494633 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/Coins-Final.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/Coins-Final.jpg new file mode 100644 index 00000000..c03b0e0e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/Coins-Final.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd509934a1492b8613a390166a85bb721c990a09c6e689c0f98fe30d9ca13ded +size 208532 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/Mountains-Final.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/Mountains-Final.jpg new file mode 100644 index 00000000..7ae6c2d4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/Mountains-Final.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a016d9f28c0ded5e1c534beeb80f8ea407a46de5e5f4d29d14f0693a1914a556 +size 221652 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/Organization-Structure.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/Organization-Structure.jpg new file mode 100644 index 00000000..427fc39b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/Organization-Structure.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55627eb53fb6bffb15f17a10c9573e44d0fd447465c267ff0445863d54899abe +size 21515 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/Platforms-4.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/Platforms-4.jpg new file mode 100644 index 00000000..796460ee --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/Platforms-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ba64faf702db65b5088320573849c9785c131d6fcf4b6d9a613f62f19bd458e +size 121768 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/Platforms-5.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/Platforms-5.jpg new file mode 100644 index 00000000..1959bf42 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/Platforms-5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb3d7250c91277779367c3acffe88ade3a9db160c4e5f20a12146d83ea1bd6bb +size 163315 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-10.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-10.jpg new file mode 100644 index 00000000..be507fb6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-10.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64eead6e01a6b6ac90d07f9c43bdd934936efd520cad7b2a0fe1d5d766ed8397 +size 161054 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-11.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-11.jpg new file mode 100644 index 00000000..dee0f32a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-11.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2be8738ea337ac02f25f6a1d17c8cbde35ab4367c49b77b01ec5b0c88e250e93 +size 162884 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-12.png b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-12.png new file mode 100644 index 00000000..23984267 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-12.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd02ab7805ec48647ab25a1652c493f174baac57b70197bec5b23cf5543cfdc2 +size 711124 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-13.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-13.jpg new file mode 100644 index 00000000..27edf4de --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-13.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c012ec0205e1b6d561f692c41d166f39a5ebb6606515686384410c0edcbcdd0 +size 165073 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-14.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-14.jpg new file mode 100644 index 00000000..7f288a51 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-14.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26a98f2cb5bb53e39d023d75884f5a633bfb4a055511262849cf5eee250dcf68 +size 161118 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-15.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-15.jpg new file mode 100644 index 00000000..8eda2a38 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-15.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d951065a7aa0fe0ef12e458b250b606ad08d573cd51a09e0416e62b80b7efe5 +size 159768 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-16.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-16.jpg new file mode 100644 index 00000000..cd8044b9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-16.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5408b83953d2ce1f72bc06d09c3f566732a551565379fc630ab41a54ee28a1d +size 159692 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-17.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-17.jpg new file mode 100644 index 00000000..336cb33d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-17.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c986e5a3c8536ed7dc468b2e62784038195e41bd12255207621f24c083fc9a1 +size 158566 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-18.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-18.jpg new file mode 100644 index 00000000..fca65de8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-18.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eea149bf457d981e9f47664e4ec3eb46c9131d23be2908d4f61b251ce5294430 +size 158383 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-3.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-3.jpg new file mode 100644 index 00000000..082adfa5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e22593c0244979add990ae982d53e64b702abe41308260892e1ba1b0d1db48fa +size 165609 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-4.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-4.jpg new file mode 100644 index 00000000..ea5286a4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c7307c99df4daf7cf288a44a499b8b051c139fef4a4f0d64a626364e9a0cf66 +size 169508 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-5.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-5.jpg new file mode 100644 index 00000000..c26e56c6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac6513515684fa4370cb93c3ce0acdba9d72e2d21c6526e95b0e195cbd8ba7db +size 169681 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-6.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-6.jpg new file mode 100644 index 00000000..2739d9bc --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-6.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec591209d1c656b023027cdae0d9f469f2fc047a344d2010214ba6514b6139a3 +size 168928 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-7.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-7.jpg new file mode 100644 index 00000000..503ea2d3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-7.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cdf72910bf27059c33e06fb4f9bbf00e2ede387cf1448f81d288d9edf3e0f9de +size 171077 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-8.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-8.jpg new file mode 100644 index 00000000..ee5d8551 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-8.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f22410f04673028e6ddb5472cea74325ac7f7a50041029692469cd22c7bb58c6 +size 165450 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-9.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-9.jpg new file mode 100644 index 00000000..cb0b05bb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/ApplyAssetLibrary/SeaStacks-9.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d41b3d598beb0401c969cd4db4367f85b64093472219037de7995cc6e8859d30 +size 172773 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Asset-Library-Complete-With-Materials.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Asset-Library-Complete-With-Materials.jpg new file mode 100644 index 00000000..6f8f47fd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Asset-Library-Complete-With-Materials.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e48c395eb9377f4e7e0f8873e149d0cc07111651d99d9d45cbb60308ff9356c4 +size 217149 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Asset-Library-Complete.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Asset-Library-Complete.jpg new file mode 100644 index 00000000..035eda3a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Asset-Library-Complete.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e9f73a2f3cfd2b727595f419b698759ccbcbad572d5cbe2a084ddb504815dfe +size 216819 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Baseplate-Deleted.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Baseplate-Deleted.jpg new file mode 100644 index 00000000..b7301f27 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Baseplate-Deleted.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bdc39a3f86f977577901eb06194e2e31acd0c7aaa71f4205a2cbd9a9fb8ef207 +size 69142 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Coin-Mesh.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Coin-Mesh.jpg new file mode 100644 index 00000000..5e118246 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Coin-Mesh.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:795ddd0a7c6bcbe8030c57a2a7a21b4d5e0a2550fa1519721292997b1cd84272 +size 44400 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Completed-Sea-Stack.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Completed-Sea-Stack.jpg new file mode 100644 index 00000000..358997a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Completed-Sea-Stack.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b3768ba17696082b73247e13270b3344e7841ce55c8be3976e69cc1ca3d4a6a +size 209196 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Custom-AirParticleDensity.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Custom-AirParticleDensity.jpg new file mode 100644 index 00000000..950a31d5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Custom-AirParticleDensity.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11ff0e0ed27b437c301d55fafd664175b11fbdfbf6fb174f893cd239c9a8580f +size 159548 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Custom-Color.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Custom-Color.jpg new file mode 100644 index 00000000..18f84a39 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Custom-Color.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7472e9121b134b86707656e11cc65b4295e03ce67d334f1b474692467df92a51 +size 183098 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Custom-Offset.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Custom-Offset.jpg new file mode 100644 index 00000000..0a03d2f6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Custom-Offset.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03d66396ec62003b419437de49ecd8da1411c18e7652cec6e3d75823d27d5267 +size 158801 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Custom-Shadows.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Custom-Shadows.jpg new file mode 100644 index 00000000..f97c86a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Custom-Shadows.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b491bfec163e1bf2bc14a1cfc35b29ef926a31375d0e7c7368874f60e1046c75 +size 92433 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Custom-SunPosition.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Custom-SunPosition.jpg new file mode 100644 index 00000000..3eecd0dd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Custom-SunPosition.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25ae237a12fbdb4129865b57a0d191cd4a09ec9c2c04234d46b8345bc3fa0d94 +size 192597 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Default-Color.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Default-Color.jpg new file mode 100644 index 00000000..c3ac4941 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Default-Color.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b00bd678beb4f0000a0424aa5e5ddd2e225f93db841bff34e259b63f2df627f4 +size 182966 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Default-Shadows.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Default-Shadows.jpg new file mode 100644 index 00000000..7c6aaa6a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Default-Shadows.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d5635b1e9eaf91511a6b6fb73b5fe58ea6976a5c3a8bcbe9cd690d6e0aa5e4d +size 91711 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Default-SunPosition.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Default-SunPosition.jpg new file mode 100644 index 00000000..d0f86675 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Default-SunPosition.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9b0002041482af81294e8cae0e50f0d8d4cdfe27d00431966ce6aa37eb714ef +size 186419 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Dust-Motes-Sky.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Dust-Motes-Sky.jpg new file mode 100644 index 00000000..59beed1d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Dust-Motes-Sky.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f02cda82374e1d35f0431ff9019d87e825ef502993a0be42e8d90d03350d9d3c +size 100203 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/DustMotes-NumberSequence-Size.png b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/DustMotes-NumberSequence-Size.png new file mode 100644 index 00000000..6f710bce --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/DustMotes-NumberSequence-Size.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5d7c16256b7196a244866c25719c7fd3a1d7392ac1f732f085940f8c3991d71 +size 11790 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/DustMotes-NumberSequence-Transparency.png b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/DustMotes-NumberSequence-Transparency.png new file mode 100644 index 00000000..e012ebdc --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/DustMotes-NumberSequence-Transparency.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34be10eb509f843437f8a72e7d23f2f98d7eca0ae06842ae13e0469ee7feb672 +size 42984 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/DustParticles-1.mp4 b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/DustParticles-1.mp4 new file mode 100644 index 00000000..e47d6645 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/DustParticles-1.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b32d9070d1a39fe94a780130b2db5c40c333b524ed078ba2aa26134d847d0bb +size 1371181 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Final-Coin.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Final-Coin.jpg new file mode 100644 index 00000000..53f4aa5a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Final-Coin.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3caf24ceb4d95d8388ff4d9d0e62a3e0ac930cdfbe1f229bf1ebdfdd1f17f2b7 +size 189106 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Final-Flare.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Final-Flare.jpg new file mode 100644 index 00000000..76c73c47 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Final-Flare.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51553f57fc1eed749b4365022862b745308942e77fed0076d203077082d2db1b +size 165582 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Final-Polished-Assets.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Final-Polished-Assets.jpg new file mode 100644 index 00000000..072b4ab2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Final-Polished-Assets.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8388fd995a95e2bef8c7bbb5bb1bd0d272d58cf379b0744c2682c00f08c4abe +size 145759 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/First-Platform.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/First-Platform.jpg new file mode 100644 index 00000000..d272b039 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/First-Platform.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b6e33cfc803234df12eac83cc9fc3c8ac3189ac0e73575f72a4c8b76160d320 +size 258698 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Flare-1.mp4 b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Flare-1.mp4 new file mode 100644 index 00000000..e5ecd75d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Flare-1.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a017206337c98c945e42e4a398d4d6a8dbdf435ebf710c2f2f7143d1be9eaac1 +size 619800 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Flare-NumberSequence-Size.png b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Flare-NumberSequence-Size.png new file mode 100644 index 00000000..a3d7a54a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Flare-NumberSequence-Size.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78a1c1c5d30b03437189cf46c87eb3fed9a40dffc67a396a4a15bcfa1c582e38 +size 13717 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Flare-NumberSequence-Transparency.png b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Flare-NumberSequence-Transparency.png new file mode 100644 index 00000000..d6bc2d65 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Flare-NumberSequence-Transparency.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba49ea2d3bf146abd37c94997058662a6d138cdf55c87c71cea465b857e18d2a +size 18431 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Flare-With-PointLight.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Flare-With-PointLight.jpg new file mode 100644 index 00000000..0606bca7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Flare-With-PointLight.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:542c78993c091fc9234c3d1940caa6d7950b58f55c7013d3f84f6179e0188b60 +size 161998 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Lighting-Post-Customization.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Lighting-Post-Customization.jpg new file mode 100644 index 00000000..f64a6f2d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Lighting-Post-Customization.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff65efbd635893cc42635e7d2e3e4c646ea32b122d48b23ae97b828fb8b1e561 +size 221284 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Lighting-Pre-Customization.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Lighting-Pre-Customization.jpg new file mode 100644 index 00000000..636aaf48 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Lighting-Pre-Customization.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4ce3f006683f9b22b06fb19738d03c0b48967fcab4f73fcdfc98f3b1c7b7f57 +size 193883 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/LightingStyle-Realistic.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/LightingStyle-Realistic.jpg new file mode 100644 index 00000000..dde3e0ac --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/LightingStyle-Realistic.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6b8c658c6ad642d75585904403f249df9da377aa88f8f2c10370ff5c50804a5 +size 103379 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/LightingStyle-Soft.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/LightingStyle-Soft.jpg new file mode 100644 index 00000000..216a87dc --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/LightingStyle-Soft.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6275dfdcbcf7242b573d911f99b5bd06871aa05b2853ba59b58459cb3f1e4a21 +size 105466 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/MaterialService-Contents.png b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/MaterialService-Contents.png new file mode 100644 index 00000000..4cb4d000 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/MaterialService-Contents.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8be74893256887dcb57456edb3918bf40d21339931051149e60a25fed121ea4f +size 26752 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Mountain-Mesh.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Mountain-Mesh.jpg new file mode 100644 index 00000000..e9c03508 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Mountain-Mesh.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf2acbd6a9e74bdfc766ce5e019fc6eee624457b1552e12a665d6be14242cbf7 +size 149350 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Mountain-Meshes-Stacked.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Mountain-Meshes-Stacked.jpg new file mode 100644 index 00000000..dd97c99a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Mountain-Meshes-Stacked.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3dc88d0c7241e25fb892400e49bacc58bc730bed8d50ab2b39736fb3249aabac +size 138755 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Platform-A-Model.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Platform-A-Model.jpg new file mode 100644 index 00000000..e0f6f710 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Platform-A-Model.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d281e0a272626a6c61e558d2044e8cd379a86467202649ab7b394ee237d71d3e +size 95035 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Platform-B-Model.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Platform-B-Model.jpg new file mode 100644 index 00000000..564b730b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Platform-B-Model.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c554a937c1916ef7a5f18fafb7cb434f4ec2844bf0307ada6e5ce5ed764ca6b9 +size 87083 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Platform-Types.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Platform-Types.jpg new file mode 100644 index 00000000..52d7f892 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Platform-Types.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f922a08bdc6e73ca00cba889afcd724bcb54852d5b5eb1fc8a9224bebb99067b +size 198837 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Pre-Polished-Assets.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Pre-Polished-Assets.jpg new file mode 100644 index 00000000..14b63c5d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Pre-Polished-Assets.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d17916b6dc3f8bc2c3e683b26d9c38622057cf82c9e3035ea035c69fb10c7b5 +size 139236 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Sea-Stack-Cave-Mesh.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Sea-Stack-Cave-Mesh.jpg new file mode 100644 index 00000000..a2bff6df --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Sea-Stack-Cave-Mesh.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a6e89718c8bbe08953071519f8a62fa403b2e1c8fae168fe1ac16bd91c2d867 +size 92840 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Sea-Stack-Mesh.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Sea-Stack-Mesh.jpg new file mode 100644 index 00000000..1f3a555f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Sea-Stack-Mesh.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6472406191b34918e9445cfc85bb53c7e9ddd63738f349e30f9cc273deb1f285 +size 97076 diff --git a/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Sea-Stacks.jpg b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Sea-Stacks.jpg new file mode 100644 index 00000000..2a316d20 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/core-building-and-scripting/Sea-Stacks.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fe68f142717250972c34a4331c57f5f82cce4b6ee46dcd45c286755ea33ffed +size 200133 diff --git a/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Adding-First-Sphere.mp4 b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Adding-First-Sphere.mp4 new file mode 100644 index 00000000..8bceb0e3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Adding-First-Sphere.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:192eccbcacd21ff78b1142404c609a3d2d923016b567530839e2bb270fbb5138 +size 644344 diff --git a/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Editor-Draw-Settings.png b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Editor-Draw-Settings.png new file mode 100644 index 00000000..bbba36eb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Editor-Draw-Settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a1754cd2820fb57e8d1f24ab02bfc0479afe45edfbf1436374c9ff78bf928e4 +size 303738 diff --git a/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Editor-Fill-Settings.png b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Editor-Fill-Settings.png new file mode 100644 index 00000000..87d71a15 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Editor-Fill-Settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8c370d16cdc7af1d0a8354083c640b89b292f314c97286acb8fe48ee37ea91b +size 479572 diff --git a/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Editor-Flatten-Settings.png b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Editor-Flatten-Settings.png new file mode 100644 index 00000000..cbc67280 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Editor-Flatten-Settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7c3ea036ddc9aa4f39688ee2aac97d74ef8ac5ed80542cc1356374650cc1a4a +size 73462 diff --git a/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Editor-Paint-Settings.png b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Editor-Paint-Settings.png new file mode 100644 index 00000000..3a70eb4a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Editor-Paint-Settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c76c0476156a589808802999b5bf22c470076bd347b856ef0abf869a3ac48ba +size 298389 diff --git a/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Editor-Sculpt-Settings.png b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Editor-Sculpt-Settings.png new file mode 100644 index 00000000..890169b1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Editor-Sculpt-Settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3bdfbb4ec5bbe40f3d6024dc50deb9aae4f31202d474bdb453ce7bb5a668736a +size 300826 diff --git a/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Filling-Water.mp4 b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Filling-Water.mp4 new file mode 100644 index 00000000..044c447f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Filling-Water.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19fdc0505f603f91b8fa38b571c6641c03a7e888058063f127d63eb617e16c88 +size 8479432 diff --git a/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Flattening-Sphere.mp4 b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Flattening-Sphere.mp4 new file mode 100644 index 00000000..fce175b1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Flattening-Sphere.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7bee692939b8546023b3a40aab331bc9968b242c00cc0d93790088e0805850a +size 1335918 diff --git a/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Painting-Grass.mp4 b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Painting-Grass.mp4 new file mode 100644 index 00000000..2d4ab610 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Painting-Grass.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0df54f750e7b08ca53ff41e08a1330a77e86049cd95ee54cc12edba6b4b6521 +size 10950001 diff --git a/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Sculpting-Edges.mp4 b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Sculpting-Edges.mp4 new file mode 100644 index 00000000..3b23ad27 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/Terrain-Sculpting-Edges.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:362ac8fed78d606bffd13e82d0d295b52b7fd177ea48a049d4e812adf442167b +size 2564388 diff --git a/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/create-an-environment-with-terrain-spawn.mp4 b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/create-an-environment-with-terrain-spawn.mp4 new file mode 100644 index 00000000..3429955c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/create-an-environment-with-terrain-spawn.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6b31ef45094c8e84639d61ba2214a9661d9301f372321b5d6f42356d98fc392 +size 20794585 diff --git a/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/create-an-environment-with-terrain-walking.mp4 b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/create-an-environment-with-terrain-walking.mp4 new file mode 100644 index 00000000..960c13f8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/create-an-environment-with-terrain/create-an-environment-with-terrain-walking.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31cfe4eda3c1c10be03098820dc56881806a7c03ea660fb87a0bc43d6445eb50 +size 21349539 diff --git a/.cursor/rules/roblox/assets/tutorials/create-player-hazards/Hazard-Part-On-Water.jpg b/.cursor/rules/roblox/assets/tutorials/create-player-hazards/Hazard-Part-On-Water.jpg new file mode 100644 index 00000000..ec931de6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/create-player-hazards/Hazard-Part-On-Water.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:240ecbe7d25dda97800008388c2762ee7336ad771bd1e7a8735ef641f083d286 +size 71607 diff --git a/.cursor/rules/roblox/assets/tutorials/create-player-hazards/New-Hazard-Part.png b/.cursor/rules/roblox/assets/tutorials/create-player-hazards/New-Hazard-Part.png new file mode 100644 index 00000000..dc9e3393 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/create-player-hazards/New-Hazard-Part.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bca15bb64377ed11e0d4fafdf081aebacb97cfe25ac030295ba1f774c2a6f319 +size 27478 diff --git a/.cursor/rules/roblox/assets/tutorials/create-player-hazards/player-hazards-example.mp4 b/.cursor/rules/roblox/assets/tutorials/create-player-hazards/player-hazards-example.mp4 new file mode 100644 index 00000000..d2304be8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/create-player-hazards/player-hazards-example.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:546bba1dedbe1f05ff784d382a313aef5e5b6292ca5ab58bf3451decde22f0b7 +size 30042960 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/Showdown-Town-Edit-Place.png b/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/Showdown-Town-Edit-Place.png new file mode 100644 index 00000000..c65507c2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/Showdown-Town-Edit-Place.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:716d9a65c157b52f7129344c46c198f64811a7ce14c94466c373efb374f5df46 +size 197148 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/dangerousVent.jpg b/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/dangerousVent.jpg new file mode 100644 index 00000000..86726069 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/dangerousVent.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f14a9e08eb00f2477499c3dced39ae015e422a9c0255545fbe0a94e2e8d08b3 +size 435753 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/finalHealthPickup.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/finalHealthPickup.mp4 new file mode 100644 index 00000000..821c0b01 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/finalHealthPickup.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8c01c291e11eca99b320b373429162652024a9042cff21f0450475edb0be385 +size 1102282 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/finalHealthPickupTest.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/finalHealthPickupTest.mp4 new file mode 100644 index 00000000..5c3b7ccd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/finalHealthPickupTest.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4724101d275fab0ec780f4689dd5dbc4a77dd6cb1645967eabd7e908f8dcef7 +size 2539970 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/forLoop.jpg b/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/forLoop.jpg new file mode 100644 index 00000000..cabee348 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/forLoop.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e0cec3b68c3e46114eca963a6a6e6d1a3fa5005d1da61a056947e53eb702836 +size 80505 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/fullHealthPickupEffect.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/fullHealthPickupEffect.mp4 new file mode 100644 index 00000000..625fe6e7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/fullHealthPickupEffect.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16feeb86e7be12ac15ce35ff8d67a8e01469ce177f5ad69106f89e00f0dd9283 +size 4014445 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/healthPickupExplorer.png b/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/healthPickupExplorer.png new file mode 100644 index 00000000..bb9581ec --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/healthPickupExplorer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a22bf096f8dc5ec1ff4a414aab17791c787fcbe66b2ee913f937a6d3ceecaafe +size 12239 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/healthPickupGame.jpg b/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/healthPickupGame.jpg new file mode 100644 index 00000000..bfe26515 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-a-health-pickup/healthPickupGame.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c71434ac9b8bb5b173ceceb4ce90a1bcade41babe3c5dc61e0cf9a19870e1be6 +size 474214 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Device-Emulator-Preview.png b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Device-Emulator-Preview.png new file mode 100644 index 00000000..b29d09db --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Device-Emulator-Preview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1be93af088434fe49b570cb1d1108ebc4b46bb4d8ba5f04af1618b7688c64ac1 +size 172569 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Device-Emulator-Setup.png b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Device-Emulator-Setup.png new file mode 100644 index 00000000..dd00f73e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Device-Emulator-Setup.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ae99f6c5038d20d99298f38f5c7412600fbdc34a13b4e9ee8747b905190a21d +size 151995 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Frame-2A.png b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Frame-2A.png new file mode 100644 index 00000000..f2b50dca --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Frame-2A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d823e32712082bf8b85fe4609ecae72449772134cadaec574ecd4746a6a21e13 +size 765481 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Frame-2B.png b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Frame-2B.png new file mode 100644 index 00000000..74133efc --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Frame-2B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6598c706e27bc834f8c165d3fa8dbce82b86f6652fe71f9a8ed67043cea7e0ae +size 1907130 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Frame-Diagram2.png b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Frame-Diagram2.png new file mode 100644 index 00000000..b0e91e8f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Frame-Diagram2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb2532a51d41d40c6d537e0d271f8cb3f746504dedb50d13c30a011a1a1f6c13 +size 79882 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Frame-Horizontal.png b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Frame-Horizontal.png new file mode 100644 index 00000000..273859e4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Frame-Horizontal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6792a4565c37a9b28ec88a22863e5abaea4657d364687104cfde4a347fb455da +size 81193 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Frame-Vertical.png b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Frame-Vertical.png new file mode 100644 index 00000000..054054bb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Frame-Vertical.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2510048f10d4d0166cf8259deaa3cbedd0209b90d5238553b46b2f5a6939ca0 +size 85612 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Icon-1B.png b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Icon-1B.png new file mode 100644 index 00000000..a46ea79f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Icon-1B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57333df78e868d331eb371e84e05d97f9ef3f625cd0c3d6941bdb3241e2860b4 +size 1897234 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Icon-2E.png b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Icon-2E.png new file mode 100644 index 00000000..2f6b7055 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Icon-2E.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce00b95ae638e30947db00153e0e7efbb5b5ced83789899ccc8a40d5df2ec3d5 +size 777632 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Score-Bar-Intro.png b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Score-Bar-Intro.png new file mode 100644 index 00000000..50e5042b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Score-Bar-Intro.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f72620bc02a140c2609717db7b50ae5fcb28edbac7d30ccf06570323bb24c519 +size 1717358 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Text-1B.png b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Text-1B.png new file mode 100644 index 00000000..946d153c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Text-1B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7766f9b6b65b07c48096a4602e6dd067586c677e9f564f53bf569059643d7912 +size 1903610 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Text-2H.png b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Text-2H.png new file mode 100644 index 00000000..b83a8f14 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-a-score-bar/Text-2H.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f205d1429ea3ac07514b7f07a134dc7f7cdc7a5028121accfe51a5096c0721a +size 1913019 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/bipi_t2_showFrame3_front.jpg b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/bipi_t2_showFrame3_front.jpg new file mode 100644 index 00000000..e4f0f374 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/bipi_t2_showFrame3_front.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:738496538b3abe9627bde52c393c9d7d0e69ec0d2238b43b28712ea3d4f223b2 +size 22070 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/bipi_t2_showFrame3_side.jpg b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/bipi_t2_showFrame3_side.jpg new file mode 100644 index 00000000..e7fed6e7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/bipi_t2_showFrame3_side.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:403a3d0850ea62330d0fcca638c0acfba1a081f92b06b54c0c8328516c82581d +size 12249 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/ccs2020_t2_exportedAnimationWeb_alt.png b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/ccs2020_t2_exportedAnimationWeb_alt.png new file mode 100644 index 00000000..13f9b909 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/ccs2020_t2_exportedAnimationWeb_alt.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b669d525266da074053e143a997b2bc9bcf3fc6e0a1380358df526791c8c285c +size 47551 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/ccs2020_t2_jumpAnimationStills_01.jpg b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/ccs2020_t2_jumpAnimationStills_01.jpg new file mode 100644 index 00000000..8a225f60 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/ccs2020_t2_jumpAnimationStills_01.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97ca114e4c500010f45de3523710c6eb7e4758c81380d64d1665782d891537ed +size 14976 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/ccs2020_t2_jumpAnimationStills_2.jpg b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/ccs2020_t2_jumpAnimationStills_2.jpg new file mode 100644 index 00000000..024b58fe --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/ccs2020_t2_jumpAnimationStills_2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4f6681be935a40e976aea1335db4a103f121740ca4da91871df25bea65fb916 +size 16009 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/ccs2020_t2_jumpAnimationStills_3.jpg b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/ccs2020_t2_jumpAnimationStills_3.jpg new file mode 100644 index 00000000..89510cd4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/ccs2020_t2_jumpAnimationStills_3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e665cc907f82e77f993d4ea03fcfb82eeef83f69f1a0f5690a657340e0de2a64 +size 18698 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/ccs2020_t2_jumpAnimationStills_4.jpg b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/ccs2020_t2_jumpAnimationStills_4.jpg new file mode 100644 index 00000000..0d492768 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/ccs2020_t2_jumpAnimationStills_4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77041bbcfb34190fd2835605579f12b321bfd813c18204743a636711ecf12846 +size 15496 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-AddKeyframe.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-AddKeyframe.mp4 new file mode 100644 index 00000000..7c463a8c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-AddKeyframe.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b36998f149b2e7671dce1f7d091698962bf1e4eaab924c6c25b66524adfd132f +size 27651 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-changeExactTime.png b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-changeExactTime.png new file mode 100644 index 00000000..9eb55d7c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-changeExactTime.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec7889e3f4283644deaa58f8dab12f4b1095ca9d4b1009ce0ee41cad0c84d466 +size 10554 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-clickAddAll.png b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-clickAddAll.png new file mode 100644 index 00000000..effdbc05 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-clickAddAll.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc24ba894b6fcaf62346af6e1f2b0c359bef812815fa4831de3bab173a1e0456 +size 7409 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-clickMenuButton.png b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-clickMenuButton.png new file mode 100644 index 00000000..72a8630a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-clickMenuButton.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79e85d632fc299900df34569fbb1974ddb3d7407f4e2dda3d998374d8a7d49fa +size 8285 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-exportAnim.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-exportAnim.mp4 new file mode 100644 index 00000000..8c1a0599 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-exportAnim.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:637077cc7fe7041bd6661bee1e2c1996b2cd62b29e0a8d48866c3528fbbcf9e8 +size 28933 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-exportCopy.png b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-exportCopy.png new file mode 100644 index 00000000..b7dd7ca0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-exportCopy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99c0c31e0740bad07bf4f9e2c033ac53208c0d8f908fd74d348358b205d2d5db +size 13112 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-partHierarchy.png b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-partHierarchy.png new file mode 100644 index 00000000..15b0ecbf --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-partHierarchy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6386e5bf24bb61d960d6d16eb44c784eb70118fa187ccf675a248195db34293e +size 9487 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-pasteLastFrame.png b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-pasteLastFrame.png new file mode 100644 index 00000000..1b4c1728 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-pasteLastFrame.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b3341685d01ed16beecadcdfcae18c6e99b44ff734fc59c3bed9836e94149f5 +size 8013 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-rigCreated.jpg b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-rigCreated.jpg new file mode 100644 index 00000000..ea2af1e7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-rigCreated.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e818a541125658f61b1f20025123780cbb5433e1f20f95338ba810836bc7502e +size 53209 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-selectFirst.png b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-selectFirst.png new file mode 100644 index 00000000..167d2a01 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-selectFirst.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0a01ba391ff62435fb3eb6f21ada986a396b2d5c8f3ad1765978071abe13b9c +size 10369 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-setToMidFrame.png b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-setToMidFrame.png new file mode 100644 index 00000000..8d24bedc --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-setToMidFrame.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2062195e9d5f2324f30400029d0585c29b6fabef59b6ea6bda90d136fa9574f2 +size 6829 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-setToThirdFrame.png b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-setToThirdFrame.png new file mode 100644 index 00000000..d199d99e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/creating-an-animation-setToThirdFrame.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:021a6a8a493bc1cdb9e5b9165b8c1fc95debd870f2950b836d20d015e3b77b23 +size 6776 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/intro-to-animations-victoryPoseFinal.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/intro-to-animations-victoryPoseFinal.mp4 new file mode 100644 index 00000000..f795aba2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/intro-to-animations-victoryPoseFinal.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95a49de319e02dc170300abfe27a805445a8b1e9937b7f5b67fc3c7266d52fa8 +size 1558487 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/showFinalVictoryPose_simple.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/showFinalVictoryPose_simple.mp4 new file mode 100644 index 00000000..1f024f9a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/showFinalVictoryPose_simple.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31964d5fd700ace0cc0623337499be659e2719ece88fa6efc3eda274e195b5df +size 451501 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/showMoveBody.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/showMoveBody.mp4 new file mode 100644 index 00000000..efc3dd79 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/showMoveBody.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb7470d0968d6f94887dc6a74eae255250f41bb1098c81c1d79910a435498f1a +size 121563 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/showPose2TimeLapse_optimized.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/showPose2TimeLapse_optimized.mp4 new file mode 100644 index 00000000..1e653d99 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/showPose2TimeLapse_optimized.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc3f3a4f90bd42ef3088a16b62678c91e618b0a0bf8e270e308e3261b4084ede +size 2541262 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-an-animation/showRotateArms_web.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/showRotateArms_web.mp4 new file mode 100644 index 00000000..28c27f98 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-an-animation/showRotateArms_web.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8aafa656b47751a1217acc9d54bec39a4f08c3a465fa7772a359edfe994e37f4 +size 207007 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Add-Rig-2.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Add-Rig-2.jpg new file mode 100644 index 00000000..fb27a720 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Add-Rig-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d453f19aa21e15fb1dec4ca2af5a64fdc989bb0109f87a78e978bcea196f2ec +size 1057553 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Creations-Animations.png b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Creations-Animations.png new file mode 100644 index 00000000..5373f770 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Creations-Animations.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5e969bc89316cb0ffe8267186a2d817ade461c7f5c3c264780021ab82456935 +size 52325 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Ellipsis-Button.png b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Ellipsis-Button.png new file mode 100644 index 00000000..45804a09 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Ellipsis-Button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6f9ea197a2bf5a11ebbbfb5c6480f0ff457466b85926f23972fb3c0789d974b +size 16169 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Feminine-Rthro-Rig.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Feminine-Rthro-Rig.jpg new file mode 100644 index 00000000..4edd45e2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Feminine-Rthro-Rig.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44f9b42e7afd7aea3007293da3839b265f287cbc3c471c3c7e7bb6a139cf1fd1 +size 344982 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Final-Animation.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Final-Animation.mp4 new file mode 100644 index 00000000..d01cd3ea --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Final-Animation.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32d6ed6fccb9c356881164bf088c9fb52223c55feda11ebf8dc86c5dd8e00c9a +size 7182255 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Gear-Icon.png b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Gear-Icon.png new file mode 100644 index 00000000..322d295c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Gear-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fae366b8535eb4ad2592394daee8d8a9a42a073111a84d49e308af519fd82447 +size 4807 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/InterpolationExample.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/InterpolationExample.mp4 new file mode 100644 index 00000000..2692ccac --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/InterpolationExample.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de92707b36c95366d189f8a120f68d0dcf9e9f3cd61ab2774520535f1431d5d3 +size 2821387 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-2A.png b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-2A.png new file mode 100644 index 00000000..dd8f0921 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-2A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d7f7e543783797b36aecdd80cf37652d80a5aa971333d23a269a12a19b80637 +size 12362 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-2C.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-2C.mp4 new file mode 100644 index 00000000..8eb0dc39 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-2C.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:417127751d1f9d226d9716c5f8c9019e2f7d138454488fa75e9c28e926218008 +size 127212 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-3A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-3A.jpg new file mode 100644 index 00000000..a2b13809 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-3A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01ce1936d54e9125570f93ee8c5f286b1382ca60e3cf11daeb3c4800f84cec15 +size 1005812 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-3B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-3B.jpg new file mode 100644 index 00000000..ca9fd2b5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-3B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8da40961c40db731b277e45e6ce71f2a7b9a417f3e1b28d0274f1efc364ee269 +size 999944 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-4A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-4A.jpg new file mode 100644 index 00000000..b155d12b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-4A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c542636f130516ee95259320817e0878dce09caed2752dcca49df39215c3914 +size 1009459 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-4B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-4B.jpg new file mode 100644 index 00000000..acea5879 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-4B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ebe4f4d989f08ac335741049a6291c7f21df4098118a81c6705a6f4517e2c237 +size 1010421 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-5A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-5A.jpg new file mode 100644 index 00000000..288088a9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-5A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0420d7301ce9b451cf2ccd6aacdfa63c38e788f38ba66e88b87297d3dbfc6d7e +size 1020152 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-5B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-5B.jpg new file mode 100644 index 00000000..98d33b0f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-5B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be8b90b254b63b7988762f33124fbc857d6c5c3e33da59d5f25a42098e254cba +size 1009840 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-6A.png b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-6A.png new file mode 100644 index 00000000..fe7136d9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact-6A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:62d36448be22f4de585a232ec3020e42432c74617cc7e4061a624e9aa3b8bf93 +size 12296 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact.mp4 new file mode 100644 index 00000000..5c50a7c6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Contact.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a7fc40bc1b2385b6d0685c87574e68cda5086de174fdc8b40117454b02875c8 +size 15708836 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High-2A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High-2A.jpg new file mode 100644 index 00000000..7d80ad83 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High-2A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d97162584fbe5bbf02b1da9985b3a4878fddcd1f3ac94a50882971bf4aa9572 +size 1009196 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High-2B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High-2B.jpg new file mode 100644 index 00000000..31a37a33 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High-2B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c3db7f4fd278e69652d5270ce0d52abd24eaf471fd847a919a9a2cd157fd891 +size 1002934 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High-3A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High-3A.jpg new file mode 100644 index 00000000..7f36ded8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High-3A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:496730c9d6840ad31f13d513e1c9a6c9106498fc1523fbdd95e4e460968999d2 +size 1017335 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High-3B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High-3B.jpg new file mode 100644 index 00000000..e279b3d6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High-3B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:433bafdc05ffba2c70610cb755d6c935676107e760200044eb286a80912100d4 +size 1003979 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High-4.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High-4.jpg new file mode 100644 index 00000000..3ae9143e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53b35ca312519e0b6eb085ff898568e25db943b171176134dd6fe4598e58ffea +size 1006028 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High-5A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High-5A.jpg new file mode 100644 index 00000000..dfa7938c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High-5A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a35921f41566d8dbb8fba86678fb1f9580f5c06d118256125ab32798b189c5e +size 1009971 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High-5B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High-5B.jpg new file mode 100644 index 00000000..4babc69e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High-5B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ca0901a64d335be8df60df21336773ebd558b13d2056d24853a7a51e323823a +size 1010469 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High.mp4 new file mode 100644 index 00000000..9998a97c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-High.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74cb356246fc0b8070f0ec8b05cd03b693b375b0adc136608e03cb2903734688 +size 21768460 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low-2A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low-2A.jpg new file mode 100644 index 00000000..0a82c7b3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low-2A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:155dc91a552781059e8c383c8474ae143f5f3b688e5c14c78720c959702b62b7 +size 1009123 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low-2B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low-2B.jpg new file mode 100644 index 00000000..5aacb9f1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low-2B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c86fbc52ba6f2b844916ea318c776f11326dd3c651be1a7b85e6f5d0340985e5 +size 1013821 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low-3A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low-3A.jpg new file mode 100644 index 00000000..e6bf24e6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low-3A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b777fe1254a34949c9d9e64e789a407314e6f799fdbd9368a238ead88538c746 +size 1014781 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low-3B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low-3B.jpg new file mode 100644 index 00000000..febfd8cf --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low-3B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:045edf25b0686d21df569242915818d92257c15fd0174effff83ed24d2b760af +size 1014004 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low-4.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low-4.jpg new file mode 100644 index 00000000..aaadaf57 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20e6caf28a0d85bb58c87e8f38336bbb63226e2d7be3b7127a4d7f3b399fb8ed +size 1005717 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low-5A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low-5A.jpg new file mode 100644 index 00000000..622ee2f3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low-5A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0fc46089d1dfeff3197483763aa4471bcc8633c8cc6e6cf2c658b7f9e4df5430 +size 1009794 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low-5B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low-5B.jpg new file mode 100644 index 00000000..c474b2f0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low-5B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d43892ba67e0f46b3862336896315822da3a3ebe69eab6b45bf6491097cd5a5 +size 1013648 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low.mp4 new file mode 100644 index 00000000..8bafc8ab --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Low.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:426b3f4b220c47bdc19df84cc83e9c38c34e2824252c06b63a3d0468bce7e485 +size 17273390 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing-2A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing-2A.jpg new file mode 100644 index 00000000..fc56aab9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing-2A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e8d3874ef92e0c97d0d09e4d2dfaf99ea0702387798857a084b7a5e9cbc1957 +size 992232 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing-2B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing-2B.jpg new file mode 100644 index 00000000..b5cfbf17 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing-2B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:555c1d6908ec67f11add0a26182a5ec27ca506569d0c6c7578ce75941f22a1d2 +size 1001626 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing-3A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing-3A.jpg new file mode 100644 index 00000000..cd62d672 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing-3A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70642f778f326ebdf9535a7887f57ffcfb5ca33994ccb067c31f6239841cc313 +size 966862 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing-3B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing-3B.jpg new file mode 100644 index 00000000..e99ff8a6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing-3B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63532e675b94dfcebf308228bbc42a1d3c76e35dcb15be368416baeed193f6e4 +size 1002628 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing-4.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing-4.jpg new file mode 100644 index 00000000..e247bea9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d16656da444fed4fc8d8c70c3b9307199361f04c12d2a783b5f5cf606d25ed6e +size 985523 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing-5A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing-5A.jpg new file mode 100644 index 00000000..7efcf35a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing-5A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:155d031371878730b220315f02234b9148964db2af935b97362a845b85a2a25c +size 1016426 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing-5B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing-5B.jpg new file mode 100644 index 00000000..4bf8da98 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing-5B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:329bafaf7c4b9a858b27b4e426457352067a577071f44f439bf4ad94bb214f4b +size 1003325 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing.mp4 new file mode 100644 index 00000000..53a27524 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Left-Passing.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02f636919cd57d2f362bd0bc4c6d5303ea8d71f07ee6378dac09642f561a3d57 +size 14646739 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/LeftStepSequence.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/LeftStepSequence.jpg new file mode 100644 index 00000000..f4b90a2a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/LeftStepSequence.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:127163f8dcff54be507c0b730e1fcfb9fa809887d64c78018cc6d9a752a725d7 +size 371778 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Masculine-Block-Rig.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Masculine-Block-Rig.jpg new file mode 100644 index 00000000..6f654953 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Masculine-Block-Rig.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5dbaa5aba19b6d16ef352b3a0788b644ca48284cbbe40b0fe9143a05b9d160f8 +size 267273 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Masculine-Skinned-Rig.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Masculine-Skinned-Rig.jpg new file mode 100644 index 00000000..2c4c70cf --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Masculine-Skinned-Rig.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67847fc20fa0814b539a6f40aee99e922f4c588cb891a10ef9c79080d9143274 +size 337474 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Publish-4.png b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Publish-4.png new file mode 100644 index 00000000..e16bd9f7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Publish-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:506eb68aa1093c4b20a855de153e85609018991d504ac19ad2252af1b45b6219 +size 32661 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Ref-All.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Ref-All.jpg new file mode 100644 index 00000000..140bb6a1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Ref-All.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8c70f934be163f138ce3b6153e765a04b58987a3c250f16de786c844c8a2971 +size 1145346 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Ref-Feet.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Ref-Feet.jpg new file mode 100644 index 00000000..c9dd95bd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Ref-Feet.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de2541b8e2bd5511285ec0f96fdc618d9764369450bc37ce48100d98b911e612 +size 427122 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Ref-Head.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Ref-Head.jpg new file mode 100644 index 00000000..a44ec07e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Ref-Head.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca18ec0f60e9b37c415163ffc8ca757504374dadab0b0f19925b42060b06d2ab +size 922957 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Ref-Masculine-Rig.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Ref-Masculine-Rig.jpg new file mode 100644 index 00000000..213f1990 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Ref-Masculine-Rig.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aba9305c323016665437bc7fd85cf0bab1fb13eabb046443d3225500dfbfed7b +size 433559 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact-2.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact-2.jpg new file mode 100644 index 00000000..c0fe8450 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c53839b8c89e1d4fa074a809544fd4be21c9f569c8e3763934631d6f9e976e08 +size 1008038 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact-3A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact-3A.jpg new file mode 100644 index 00000000..1719156a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact-3A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0bd2396962feaa482900a8f7ba5982228923ae69b2e797bc1ee62a5e554bd58 +size 1005464 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact-3B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact-3B.jpg new file mode 100644 index 00000000..47283d8a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact-3B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:197e578cba5ec588eeefcc9e8ed065896a3cdf62a53e5ea2b3635ace8436f32e +size 1014288 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact-4A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact-4A.jpg new file mode 100644 index 00000000..fbc77c56 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact-4A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fb74d47216f559b4b4e07fd36884f49e01190929c8ce77856aa9c8c782d4a7f +size 1016185 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact-4B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact-4B.jpg new file mode 100644 index 00000000..411578d8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact-4B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c81527d8520662a479992a248c78be4b125cf34d335a6f8de846a0d50aa551f4 +size 1075915 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact-5A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact-5A.jpg new file mode 100644 index 00000000..aadde04f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact-5A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0badccf487a97bcee30cb0a1e29945f808323893d0ce910e0f788d88d8854382 +size 1062926 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact-5B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact-5B.jpg new file mode 100644 index 00000000..5340e3b7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact-5B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d101a4e3e22fe5df0aecc2c842b7974afd41cf37a882d8a6fa8a84d80e8a2909 +size 1068230 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact.mp4 new file mode 100644 index 00000000..5fff402a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Contact.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac8aee4c574ea8f35c40505ce0092d1eeb46d2c21de6cbf1d1f46447c8dd6426 +size 15800135 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High-2.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High-2.jpg new file mode 100644 index 00000000..d8bd2d0b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:114c8f630a31b944b96f0c48862f29ec358be5b7e816f78683e843c5ff9dec3e +size 912566 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High-3A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High-3A.jpg new file mode 100644 index 00000000..4ce34cae --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High-3A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9af37fc4eb6d052c661a8945edfdb1939fd4832fcbb0140f76b4eaf52b18f79 +size 924717 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High-3B.png b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High-3B.png new file mode 100644 index 00000000..3ad263d1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High-3B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5aecdb19067bf3cc64a28e38ac3351bf8e03499ce4d5bc577415af7c36a76b0f +size 1140817 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High-4A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High-4A.jpg new file mode 100644 index 00000000..85df9d2a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High-4A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a56a9c45d9b78b7ff03809e729d7d05660e14211f7a3e72b8b72d7030d6e896 +size 938940 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High-4B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High-4B.jpg new file mode 100644 index 00000000..ec30ca12 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High-4B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fce5337cbfefa1f02bbaa4a34f47604d491499d25328eb645c3b9c81728df58 +size 932359 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High-5A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High-5A.jpg new file mode 100644 index 00000000..c094361c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High-5A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f2f59091a5d0d5073982c7962ec2024ad2f95e6523540f96567b84e70b434fa +size 929419 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High-5B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High-5B.jpg new file mode 100644 index 00000000..18c30a7d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High-5B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc93dd29a41417aecf6232f7168b2ad476dbe526f57b949f597624cb011df7ff +size 935469 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High.jpg new file mode 100644 index 00000000..18c30a7d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc93dd29a41417aecf6232f7168b2ad476dbe526f57b949f597624cb011df7ff +size 935469 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High.mp4 new file mode 100644 index 00000000..6d19196c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-High.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:043a5a053b471534730dddc470831306bdb369ec58f17196c70daefda756f4d5 +size 16934158 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low-2.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low-2.jpg new file mode 100644 index 00000000..989d7472 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f8d5c687928fa3528363cbb5e45b646c61cfc3f145a5a3da75c1733b57fa69e +size 1072394 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low-3A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low-3A.jpg new file mode 100644 index 00000000..9f12b0ba --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low-3A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fde6184708ce9c5a11ea99521e5650d72de1884137d590fa507d3a4b91bce92 +size 1060759 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low-3B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low-3B.jpg new file mode 100644 index 00000000..8e285e66 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low-3B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5cef40f5bbcf9f6ad7e4a21833c71a803e365a0e8753f9f8d23e9bce795c527a +size 1070808 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low-4A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low-4A.jpg new file mode 100644 index 00000000..8edb9003 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low-4A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58b29df63493136951468d2b08ff7c70d8981d3990001ee3206b245b4a140165 +size 1068555 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low-4B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low-4B.jpg new file mode 100644 index 00000000..5a281f1a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low-4B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bedfc1f365fd71d8c116297004401adaa57c74865d5d2565b770eaab23f638cd +size 1009459 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low-5A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low-5A.jpg new file mode 100644 index 00000000..086d9be1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low-5A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ece8eb0d16f2e8dd9d19132cc192e8706defcfa36d2a12a4951eff899087ea8 +size 936577 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low-5B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low-5B.jpg new file mode 100644 index 00000000..c76726fe --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low-5B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f99093a79c2b0311cf1e1b7d41a385d0748c3d4c5c65d8aee247190836a46b78 +size 932800 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low.mp4 new file mode 100644 index 00000000..5d2fcd0e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Low.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8041b7f8f8fe3c79abab284846bafc046d0bd309b8af4f86a454e621bba9805 +size 14970961 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing-2.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing-2.jpg new file mode 100644 index 00000000..288c0b11 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da173203bedfcc3deee3799f353ae83b486e7b4485784589845bf7b51e2639d9 +size 932301 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing-3A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing-3A.jpg new file mode 100644 index 00000000..fb74fe77 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing-3A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5ff0adf79f2330a1cb6eeaca9432d6429c2a9842dae0b4ef6e37149b704baaa +size 935210 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing-3B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing-3B.jpg new file mode 100644 index 00000000..0108f740 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing-3B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4595240de57b25f45b5bdf915217b1caff577bf2397e0d6cc269bdbb454fdd7f +size 938946 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing-4A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing-4A.jpg new file mode 100644 index 00000000..b9e83649 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing-4A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b9b109b2123068e5aac7f56c26041d7fd6789312f661412612f40a9a67dfd0a +size 930959 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing-4B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing-4B.jpg new file mode 100644 index 00000000..461f186c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing-4B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08b842dcab1957a7e3f685582952387f2cc01129442bba22a775182d2593b387 +size 932316 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing-5A.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing-5A.jpg new file mode 100644 index 00000000..0390aadc --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing-5A.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77a3148fea4b00fc67a59fe2272d26462c2cf7c60466f6dbd3f95fdcd5209952 +size 936078 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing-5B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing-5B.jpg new file mode 100644 index 00000000..7230510d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing-5B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c18f3993e7d78d9b8e6815dfd303310e597f41866ca297cf7bc1fceee684536a +size 921958 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing.mp4 new file mode 100644 index 00000000..fcc25313 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Right-Passing.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f3af1d1db4bf92c5086a89d8de47151eccccfb30356882a9e88359b73ff9c9dd +size 14735270 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/RightStepReference.jpg b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/RightStepReference.jpg new file mode 100644 index 00000000..816a908b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/RightStepReference.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a60f20b536ee2ed8214052fe4dc83dfb822a4f9c59ab47a61aefe8ed7dbccf2 +size 370185 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Test-1.png b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Test-1.png new file mode 100644 index 00000000..824ba8c2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Test-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e690888e48951cd86bcbe534dc8c2f1b5019f1ada0c15fccc26ecdd3e44393b2 +size 12295 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Test-2.png b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Test-2.png new file mode 100644 index 00000000..2c506aa0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-character-animations/Test-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74784a906139d6a4b6e8dadf25b5dc2d801b96b1fd56c8b36d03487b78cce7e3 +size 12296 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-elevators/Constraint-Details-Scale.jpg b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Constraint-Details-Scale.jpg new file mode 100644 index 00000000..7c5f0d55 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Constraint-Details-Scale.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f97225222967d0ff12eb250595cf240e4061fc261dd7c119ac08ad3d2711249 +size 20739 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-elevators/Constraint-Details.jpg b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Constraint-Details.jpg new file mode 100644 index 00000000..882451a2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Constraint-Details.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3be2a1a70ad940535852ec4f8d4b662c459e541e1adbf33810e80a5ca7b4aa26 +size 19828 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-elevators/Creating-Platform-Track-Hierarchy.jpg b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Creating-Platform-Track-Hierarchy.jpg new file mode 100644 index 00000000..66791ad8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Creating-Platform-Track-Hierarchy.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8145a1a5dc3310b37681a0f19bb2ba5f6a18dec0116f4324e64d37c1b88450d +size 8843 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-elevators/Creating-Platform-Track-Parts.jpg b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Creating-Platform-Track-Parts.jpg new file mode 100644 index 00000000..8a24bfc8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Creating-Platform-Track-Parts.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60e1a83804c4204881241618470e8247d3dc7d6f76d0ca2b0ec8c745b7c045da +size 545425 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-elevators/Creating-PrismaticConstraint-Attachments.jpg b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Creating-PrismaticConstraint-Attachments.jpg new file mode 100644 index 00000000..2e8d3b3a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Creating-PrismaticConstraint-Attachments.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:894b6e1780c703bd6460280ec1832d3bcae8bb3e79eba414fe66d594158551fc +size 16795 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-elevators/Creating-PrismaticConstraint.jpg b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Creating-PrismaticConstraint.jpg new file mode 100644 index 00000000..c864c700 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Creating-PrismaticConstraint.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a8a3a13071df849cf2991671fd493d6419f90124de68cc564ee2b1b642233a4 +size 23011 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-elevators/Creating-ProximityPrompt.jpg b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Creating-ProximityPrompt.jpg new file mode 100644 index 00000000..5d61ea36 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Creating-ProximityPrompt.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac2a008e1ca550511cef6e2d0b5ce4f9759477aed1e13c3be9d68a1c062322a1 +size 37072 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-elevators/Elevator-Comparison.jpg b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Elevator-Comparison.jpg new file mode 100644 index 00000000..f534e969 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Elevator-Comparison.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c76b3239196d055a07dcfaa51ac4c9b42c4013bb945968baab01ed1f9b004039 +size 208944 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-elevators/Elevator-Stud-Visualization.jpg b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Elevator-Stud-Visualization.jpg new file mode 100644 index 00000000..76774402 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Elevator-Stud-Visualization.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2bc96c5e7a36565efd076acf9b81362b45f34b56c7b11d13c6f3b0de60f927d2 +size 116180 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-elevators/Moving-Attachments.jpg b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Moving-Attachments.jpg new file mode 100644 index 00000000..ee90ab2e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Moving-Attachments.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8929f622120e0492305070937ee18c9090c7bd70ead9e13e73231f5cca7f25ed +size 396124 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-elevators/Overview.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Overview.mp4 new file mode 100644 index 00000000..40d22b7b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Overview.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:106f0e26b5d21dbf8a091f77e46cd65c88cc4ed2e506a1bed781323cfb9e554d +size 1578162 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-elevators/Rotating-Attachments.jpg b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Rotating-Attachments.jpg new file mode 100644 index 00000000..f5127cbe --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-elevators/Rotating-Attachments.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98704a637417bd3fdbd37d9fe9806a50e49792ef515f631218c2a0c16f37ec01 +size 825334 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/BankersLamp.rbxm b/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/BankersLamp.rbxm new file mode 100644 index 00000000..36557f53 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/BankersLamp.rbxm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec64fff0c54ba396873512e4a059b74ffe87a0e1a5879c071ecf49ec6a79b653 +size 53949 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/BrightnessCurve-Attribute.jpg b/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/BrightnessCurve-Attribute.jpg new file mode 100644 index 00000000..9257fdf6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/BrightnessCurve-Attribute.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec7770827769e2afb0e9bc3af915b01a76f0baea80f5f343c4810612ebd0dadc +size 22717 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/BrightnessCurve-Default.jpg b/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/BrightnessCurve-Default.jpg new file mode 100644 index 00000000..900db09b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/BrightnessCurve-Default.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43c6fd619da76bbba331e7c0c456708a0664c95baa2f7039a9f52990695319f9 +size 30138 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/BrightnessCurve-Example.jpg b/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/BrightnessCurve-Example.jpg new file mode 100644 index 00000000..143bd2c3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/BrightnessCurve-Example.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6f6bcdc2f82472b6d5322a08ab37a3f4ff2b4c0a451b9dd1e96086ca6487835 +size 41544 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/BrightnessCurve-Menu.jpg b/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/BrightnessCurve-Menu.jpg new file mode 100644 index 00000000..a7a1f4aa --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/BrightnessCurve-Menu.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7045530f3a55cc37bfbeba5287fc014589f3156f6031e8b360c5649b5c9d0fd +size 7137 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/Importing-Sample-Lamp.jpg b/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/Importing-Sample-Lamp.jpg new file mode 100644 index 00000000..9d9aadb8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/Importing-Sample-Lamp.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33e8a831232288a6dfd5c53d31651ba351b625f0a45e33c3de6e903c0f4aec46 +size 18076 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/LoopDuration-Attribute.jpg b/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/LoopDuration-Attribute.jpg new file mode 100644 index 00000000..b114f220 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/LoopDuration-Attribute.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e09a63e7cf3c3198a44a2beb3cc62de6598a3638a13b92a130d460ea2b826a7 +size 9891 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/Overview.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/Overview.mp4 new file mode 100644 index 00000000..003e68ef --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/Overview.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30e624d36fa06dc25e7986024e7f62e40ffe606c7d09ce52bb25037f47d95156 +size 550652 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/Scripting-Light-Flicker.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/Scripting-Light-Flicker.mp4 new file mode 100644 index 00000000..22697b25 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-flickering-lights/Scripting-Light-Flicker.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19eb83c2cac97656e1a1eec3dc85a74d989ea9bd3d295563b8101e74018a631d +size 555250 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Default-Health-Meter-Disabled.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Default-Health-Meter-Disabled.png new file mode 100644 index 00000000..5429376a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Default-Health-Meter-Disabled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc340ccf593a26796fd918ad57b8c3907ec2cbea345bf577bc48a314e3ec0d31 +size 146332 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Default-Health-Meter.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Default-Health-Meter.png new file mode 100644 index 00000000..9b36359f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Default-Health-Meter.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72e1164ef223a307808f5ad2c6a7d513a589d1e4c612dced5b4156f57c3650ab +size 279776 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Emulation-Phone-Constrained.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Emulation-Phone-Constrained.png new file mode 100644 index 00000000..c7396cd3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Emulation-Phone-Constrained.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1da2e58079cd8876b2f3846ed27961578910bc35150c3b68607503c39133752a +size 271028 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Emulation-Tablet-Constrained.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Emulation-Tablet-Constrained.png new file mode 100644 index 00000000..ff5ecdf6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Emulation-Tablet-Constrained.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38b3e1e9245c2245a0746fc59bf7141f418d2967ff4ef81a94e4615217fef60b +size 331877 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Emulation-Tablet-Unconstrained.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Emulation-Tablet-Unconstrained.png new file mode 100644 index 00000000..861565cd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Emulation-Tablet-Unconstrained.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72c9c5adc9a6566f634acf5c2319a48a8dd3717a555b18edd9e6179fbca436f3 +size 325495 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Intro.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Intro.png new file mode 100644 index 00000000..9768ef66 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Intro.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:961b5ff97470ecd71bb646d9ae658b667b3ad381a627a325a235a2a5cebbf95b +size 324774 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Change-Damage-Effect.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Change-Damage-Effect.mp4 new file mode 100644 index 00000000..c5faf3aa --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Change-Damage-Effect.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea81019b9971fe758f8e72e7bd23419e151df480bc09680ab20d84b96eed1ee9 +size 9618926 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Change-Static.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Change-Static.mp4 new file mode 100644 index 00000000..c47d2bd8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Change-Static.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df5d39f2533aaba24ff86f275249348ff558bf1da34cbdc9f657294677256aa0 +size 9945317 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Change-Tweened.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Change-Tweened.mp4 new file mode 100644 index 00000000..8a8e10c9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Change-Tweened.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2657dcf49c7d0c102a32157667ebd4d8219afecde060dfd2327adfd41164a97b +size 8225202 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-CoreUISafeInsets.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-CoreUISafeInsets.png new file mode 100644 index 00000000..b18a8d87 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-CoreUISafeInsets.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc3952bd0eee3cb9d57ee0680389dd0afb3de2387368fc88e85bcf82aa6d5e4a +size 277718 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Components.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Components.png new file mode 100644 index 00000000..a7d172ae --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Components.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f784b4f9b254cc44cf8e3912c0459a629a12758a47bbbd2741be9559061f8999 +size 174077 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Icon-Finalized.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Icon-Finalized.png new file mode 100644 index 00000000..4db6b1cf --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Icon-Finalized.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d124b6992d5d346bea17f5c9e31833700e0684e236a0fd2be6c47c7d7a6bb997 +size 188817 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Icon-Large.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Icon-Large.png new file mode 100644 index 00000000..8a63c8e3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Icon-Large.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21939326807ddcfc1e4ff00f60577994b2bcabb2429da3544ba6deb79434b343 +size 179541 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Icon-Preview.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Icon-Preview.png new file mode 100644 index 00000000..3664d229 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Icon-Preview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02b77e39faf59a0581b9767df7c39596404bb0ba1b13ee6888a3fc443ce07ece +size 167554 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Inner-Fill-Colored.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Inner-Fill-Colored.png new file mode 100644 index 00000000..dc0d232e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Inner-Fill-Colored.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8af1f734afc7aa41decb6a9c5187dd3a8df1aa5113cc87b273a2a611291bb46 +size 194697 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Inner-Fill-Preview.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Inner-Fill-Preview.png new file mode 100644 index 00000000..321f9b78 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Inner-Fill-Preview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d14a16ea8011c0c8809c7bc7b848dd53ec664e9227d7284a631a74565d126ca6 +size 175684 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Inner-Fill-Resized.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Inner-Fill-Resized.png new file mode 100644 index 00000000..281c2c45 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Inner-Fill-Resized.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:666dcb6062e1839717ea3a3e6a866c09e2dc93b3825ff2aa5a42e36b97104e8b +size 186178 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Inner-Fill-Rounded.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Inner-Fill-Rounded.png new file mode 100644 index 00000000..66f0b5cf --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Inner-Fill-Rounded.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0080888464176a0a303d6fa7ac5962c88c76fa80aaaa90cd34e7631caf19f960 +size 195022 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame-Anchor.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame-Anchor.png new file mode 100644 index 00000000..a0fe7343 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame-Anchor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2052a632896a084dabb2010cb92da49845d75c23f459fd5731dff48e79830de +size 192786 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame-Opaque.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame-Opaque.png new file mode 100644 index 00000000..d0d0930f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame-Opaque.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:103a51d1351c9bda148b1746efed05e4de98f9bbb9b12b46f10140c48b1840dc +size 199399 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame-Preview.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame-Preview.png new file mode 100644 index 00000000..2aa3a566 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame-Preview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d88b658016ed624200c50d4659d97bc582d3f9e2bce081e11eafd5a0fbf5861 +size 186275 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame-Repositioned.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame-Repositioned.png new file mode 100644 index 00000000..9b4e0933 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame-Repositioned.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e13d05cee8371840f19b84e7c8e4b3a77a719b22db229c2d6c534c77556b6fc +size 152708 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame-Resized.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame-Resized.png new file mode 100644 index 00000000..473c8438 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame-Resized.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:561f2164e154d86df2d61328808e31d52d59cc709cac41abc9ebcf824bb11449 +size 174249 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame-Rounded.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame-Rounded.png new file mode 100644 index 00000000..48b8e866 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame-Rounded.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5fcadb71d17f2e57a0ed7392d6f219ff142307b17e38bb6efe7812a36d3a0bc1 +size 198929 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame-Stroked.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame-Stroked.png new file mode 100644 index 00000000..b2d0214d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame-Stroked.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9dd6857a0c61107d5ae8dcf1054e1883aa645cab0dee1089f735766eb1859a57 +size 198493 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame.png new file mode 100644 index 00000000..c7469e3e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-Design-Parent-Frame.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:412ea04bb4bfdda8d94d276793e9c4f6a270eaa1f20232c5f6e56b6273042457 +size 190818 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-DeviceSafeInsets.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-DeviceSafeInsets.png new file mode 100644 index 00000000..b0d5257e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/Meter-DeviceSafeInsets.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99b7b83f87df22c77cf2b7d2e98a94fdd534d0a4287efbf0459b70ca9f407043 +size 290602 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/ScreenGui-Axis-Ranges.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/ScreenGui-Axis-Ranges.png new file mode 100644 index 00000000..c334bb29 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/ScreenGui-Axis-Ranges.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3947a554a746d1daf7c18207eb25282527af47c8fb414828a4a2c817616dce2d +size 302498 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/ScreenGui-With-Padding.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/ScreenGui-With-Padding.png new file mode 100644 index 00000000..a7368917 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/ScreenGui-With-Padding.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:efa2b57cc1519129e8a8f01a9e228272fb3a6b9cfb3bd21a5d1d0583b68de2ee +size 329790 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-Icon-UIAspectRatioConstraint.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-Icon-UIAspectRatioConstraint.png new file mode 100644 index 00000000..a17cc346 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-Icon-UIAspectRatioConstraint.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c9886695f4925b9c4d765f2ab1413cf4f12c30911942e183c942ce1d4c951fa +size 52084 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-Icon-Values.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-Icon-Values.png new file mode 100644 index 00000000..2583ed91 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-Icon-Values.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5505224bbf8be72a4b1e3233659677062938978278474080e743e432f09d523 +size 30135 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-Icon.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-Icon.png new file mode 100644 index 00000000..b0d390d7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18ba8a9fc5e659efc2ef4e0ed568b51da0a830ae6a38cbffd86d82d8cb56bb4d +size 46277 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-InnerFill-UICorner.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-InnerFill-UICorner.png new file mode 100644 index 00000000..6b35fef5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-InnerFill-UICorner.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b05f726507f8709c620d09d4bc7ea68e680e8bf0cc9ebbf2aba6c019fb2e877c +size 44205 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-InnerFill.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-InnerFill.png new file mode 100644 index 00000000..cd29c2b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-InnerFill.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1eda512b1c1591c68c656d80d574f57e5aca227502d205cd596618e470a4357a +size 39179 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-UICorner.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-UICorner.png new file mode 100644 index 00000000..2ddc77b1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-UICorner.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:029fb73d34b91f49d945b3a1c22ecaafcf44df4f9221e665a151b674ad36593f +size 35230 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-UISizeConstraint-Values.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-UISizeConstraint-Values.png new file mode 100644 index 00000000..e8c2e3fd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-UISizeConstraint-Values.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0c5e228b5e7de19b6692b1f9d3671b510b67fa123edca4f1bd5b27dbc6f4a0c +size 31273 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-UISizeConstraint.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-UISizeConstraint.png new file mode 100644 index 00000000..f1bd5835 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-UISizeConstraint.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3bea3e7c7eefaec4bf6e7e9b12174b2ca60c04c7f2906e947e7648e201af78dc +size 55744 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-UIStroke.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-UIStroke.png new file mode 100644 index 00000000..82e67500 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar-UIStroke.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f3f5d74b11122e953e874ca9068ccdf948d96d15ba6d85b60f11425767c59a6 +size 32684 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar.png new file mode 100644 index 00000000..33acf248 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-MeterBar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b426336714f937e93ce3045a3f27e5821f65bb7a3e1ff53d2678beb3b140bff1 +size 29988 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-UIPadding-Values.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-UIPadding-Values.png new file mode 100644 index 00000000..d00f8c24 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-UIPadding-Values.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:294986837ce1553db0e89c9dc9bb6fc3ce62aced9db906f4460d05ce391107c1 +size 76544 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-UIPadding.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-UIPadding.png new file mode 100644 index 00000000..49da4d44 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer-UIPadding.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32625407f11928d2c961509aacf797f6ea9e6b1febfbc00972a62a5c348a5a88 +size 31013 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer.png new file mode 100644 index 00000000..f4fbd263 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterGui-HUDContainer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e15104ea168274809f4b8f8c3cba916941480e7a57abf3340e7af0aacf8b86eb +size 32140 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterPlayer-StarterCharacterScripts-UpdateCustomMeter.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterPlayer-StarterCharacterScripts-UpdateCustomMeter.png new file mode 100644 index 00000000..9434be1e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterPlayer-StarterCharacterScripts-UpdateCustomMeter.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a00674ec3450204b597ff03678c8b76944071c65ddf9f27cab60ac5d5b306f4a +size 59460 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterPlayer-StarterCharacterScripts.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterPlayer-StarterCharacterScripts.png new file mode 100644 index 00000000..627f672f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterPlayer-StarterCharacterScripts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c2871694028bff3b73a5b1b7bcbd4d2e0e90f363f78769f80bbf8d49028a367 +size 43561 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterPlayer-StarterPlayerScripts-HideDefaultHealthMeter.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterPlayer-StarterPlayerScripts-HideDefaultHealthMeter.png new file mode 100644 index 00000000..734297cd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterPlayer-StarterPlayerScripts-HideDefaultHealthMeter.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81d89fdac558d99d9952ff3e90e83c733611df440657104b8215aeb33893ce6b +size 44179 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterPlayer-StarterPlayerScripts.png b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterPlayer-StarterPlayerScripts.png new file mode 100644 index 00000000..b472bb4c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-hud-meters/StarterPlayer-StarterPlayerScripts.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e560c826f826b00f4959a58bca709f5a9d638e6750ad87fbd446b6309c9bcdd +size 34973 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Big-Triangle.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Big-Triangle.mp4 new file mode 100644 index 00000000..8da6b52c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Big-Triangle.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b0657173c33f2ad852dcfc44ede730530d517fd0def5a7c74d2a5548d3070ebe +size 8956445 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Impulse-3.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Impulse-3.mp4 new file mode 100644 index 00000000..5988eb47 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Impulse-3.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79aa70ddcae1a0b0770a19f10696b144e2f4110eea431c98ae41645fee566335 +size 1453845 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Intro.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Intro.mp4 new file mode 100644 index 00000000..400a79ad --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Intro.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54e3b7abc08ad4d12c057523c11e8d96bb8548e4b64362176ce1a3737530a69d +size 6448485 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/LV-3.jpg b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/LV-3.jpg new file mode 100644 index 00000000..4930f90a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/LV-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce4c5fb9da91e8847c15df7cf9f5bc62c6608dca3716f6523fe12529b077bf51 +size 504995 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/LV-4.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/LV-4.mp4 new file mode 100644 index 00000000..50743b00 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/LV-4.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67d10a20ea255c14fc832cd6945d006e7d668be4c3d38de4813d6ceb8f9a9ec2 +size 965136 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/LV-Attachment-2.jpg b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/LV-Attachment-2.jpg new file mode 100644 index 00000000..b4ca29d0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/LV-Attachment-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70e3c71b1f03f31c0d312ec09aba5e30582a515d4624a8a4101336e3ca5187e6 +size 468221 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/LV-Attachment-3.jpg b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/LV-Attachment-3.jpg new file mode 100644 index 00000000..c877308f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/LV-Attachment-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60126d16f255f9b3e6a747f7ec3af08d3e8c6795a312cc95e2497b6b20e77855 +size 483825 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/LV-Intro.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/LV-Intro.mp4 new file mode 100644 index 00000000..4e827cf9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/LV-Intro.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a77d05bbfc2196d2e061c7144c51963b6ada66d7e8514be23d4adcad4d5bc9e +size 5494531 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Move-Block.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Move-Block.mp4 new file mode 100644 index 00000000..65e7774f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Move-Block.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6be04510a322abb85c6af3e1c87765d4577c69ee7df667b839b36b589cb1fab5 +size 645094 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Movement-Axis.jpg b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Movement-Axis.jpg new file mode 100644 index 00000000..06999565 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Movement-Axis.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b17a7f49c95365137f4845440b2a6cc3d305d51aae0245c5d682ec72864d47db +size 1209315 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/One-Stud.jpg b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/One-Stud.jpg new file mode 100644 index 00000000..b6b4f4ff --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/One-Stud.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a758ac53c81808b9c1921c4d0c4c707c22b2ddc55565e176f9f23ff5ab4941f1 +size 94645 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-2.jpg b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-2.jpg new file mode 100644 index 00000000..f9b61621 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0dd6df4da9f85ba064b402ec2a8d8baf86c3c9d1f91da4cfc87ade8ab7539552 +size 502531 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-3.jpg b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-3.jpg new file mode 100644 index 00000000..25a1e251 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:818d28b1f2b01f83febde2246672bed879d4c5c7223b54ca6afc1cd48df756fe +size 503755 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-4.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-4.mp4 new file mode 100644 index 00000000..90c57808 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-4.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e14c2fbad51e2d43a6b21ece49ad3e8a1e3852d6d9ca57a2b15d1306e7352c6 +size 742354 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-Attachment-2.jpg b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-Attachment-2.jpg new file mode 100644 index 00000000..62d5bb75 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-Attachment-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95304e83712b71a6e6b017061ffd388cb6e90e2397d6f10403673903e1404c01 +size 487632 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-Attachment-3.jpg b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-Attachment-3.jpg new file mode 100644 index 00000000..51ba2be2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-Attachment-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e4437513d93312b1d7f285a86a834c247780a5aa5bf257d70e30ca20090a339 +size 487843 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-Attachment-4.jpg b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-Attachment-4.jpg new file mode 100644 index 00000000..75ffee7d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-Attachment-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18b6d9cad7564e84e3b8b5bb106bf99ba36431556bdc5a969455deb54a636a49 +size 493008 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-Attachment-5.jpg b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-Attachment-5.jpg new file mode 100644 index 00000000..23b6b959 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-Attachment-5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc2b51726f358f672c713780165c839785c405e3cf0bbd420bf33d6716e42a61 +size 491041 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-Intro.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-Intro.mp4 new file mode 100644 index 00000000..3c1f5648 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/PC-Intro.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98e9fd42958eb25494d62662acaef814890fababc8ef2b4b900bc94029610835 +size 6340288 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Plate-Friction.jpg b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Plate-Friction.jpg new file mode 100644 index 00000000..76f1d2b8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Plate-Friction.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea00b4b284a88f8c8b07cf65a1d87258c5fb096e8fec5249f5c0f4c801f07d51 +size 332137 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Plate-Friction.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Plate-Friction.mp4 new file mode 100644 index 00000000..52c71ba5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Plate-Friction.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0bb53110ba5c23e26a413bc3e2c70effd82e0ad8b3cc4850e1fe8c7e6792e2c +size 8640288 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Small-Triangle.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Small-Triangle.mp4 new file mode 100644 index 00000000..079b7688 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Small-Triangle.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37a700b038e5591fe8bfe0a90e5b0ce6f9f02f47481ac9035ba3e663bf314a41 +size 42697 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Wind-Block.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Wind-Block.mp4 new file mode 100644 index 00000000..f163be67 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-moving-objects/Wind-Block.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9ff0f7fab1bf8db145050d2c2b1ed4d0efbb9091d18158fe33fc0203612e91d +size 872844 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/Backboard.jpg b/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/Backboard.jpg new file mode 100644 index 00000000..b5ab48bb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/Backboard.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2413115b4d1b3c64cf273953f1f66dfbbdb6c843a1078b3d479d5c21b93b825f +size 48749 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/Border-Moved.jpg b/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/Border-Moved.jpg new file mode 100644 index 00000000..fc25e4a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/Border-Moved.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b8bedac17356e273e7079c523e25c06b22a14082e621aafc2b342489129fb77 +size 62231 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/Border.jpg b/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/Border.jpg new file mode 100644 index 00000000..095eebe4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/Border.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ff9c6c88f97af251dba52b1efbbb8c7b3e486357788261006bf99ef97637086 +size 58439 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/Duplicate-Border.jpg b/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/Duplicate-Border.jpg new file mode 100644 index 00000000..9bdd849b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/Duplicate-Border.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a98b7df39905bd51c675949efedca4fe05da3746021c70396d6e0dc7db68f414 +size 69409 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/Final-Sign.jpg b/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/Final-Sign.jpg new file mode 100644 index 00000000..eab6334f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/Final-Sign.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c369c30636db88101db3a35e0af8e8235e1c45e18f6ed01963a8c0d8899927f +size 71101 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/Moving-Border.jpg b/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/Moving-Border.jpg new file mode 100644 index 00000000..eb1b87a9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/Moving-Border.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7601b1ff33048dbdf81d59e18c06a26f5515960e7169886c28c0fb05f3015b2 +size 75296 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/NegativePart.jpg b/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/NegativePart.jpg new file mode 100644 index 00000000..dc255d88 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/NegativePart.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdb363d39d32b1eb5d617e34441b00e56f32838ff51c6fbf5b42e15ff97a8d0a +size 68783 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/Overview.jpg b/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/Overview.jpg new file mode 100644 index 00000000..ac01266e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/Overview.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a86892ddf582f14188cf709ea805cc691bc5e252946172570d92b17216f69188 +size 103174 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/neon-sign-baseplate.rbxl b/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/neon-sign-baseplate.rbxl new file mode 100644 index 00000000..4353009d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/neon-sign-baseplate.rbxl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1cc2392b955ae247943d9ffaaf91d03cc831ee4d47bfe1ed61d089224a9bed0 +size 57988 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/open-text.obj b/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/open-text.obj new file mode 100644 index 00000000..2cb0e59c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-neon-signs/open-text.obj @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d782fba22d5de91d505bf76ce496635a832ad54f1ea6d5a4219822311f320d0 +size 48641 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-MeshPart.png b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-MeshPart.png new file mode 100644 index 00000000..617c1b07 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-MeshPart.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:479bc049841e92ed8eee88ef42536ec1c2ae0641235332915f3578960b194984 +size 6358 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-blaster.png b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-blaster.png new file mode 100644 index 00000000..bf92715c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-blaster.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3e8946ec75adcd66d1023d41141269031e992f75bcc967acf928d8ceb5f67ef +size 5172 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-equipped-character.png b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-equipped-character.png new file mode 100644 index 00000000..c43b0d76 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-equipped-character.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7efb57712b3430b533ac42cc1bdd950b96cfa9db8455f09d025908c888ac732b +size 9688 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-handle.png b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-handle.png new file mode 100644 index 00000000..dad7a423 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-handle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a606c856a7274aff737c3375e87940999a97f21a4a00fc93e118cbaf5c6bf9ec +size 4081 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-sounds.png b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-sounds.png new file mode 100644 index 00000000..f6f9b756 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-sounds.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea7638e45209261d2b9180e6ccd26e6991a9599422ffcf14b432b1e073956c76 +size 4588 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-starterpack.png b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-starterpack.png new file mode 100644 index 00000000..7a2b9459 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-starterpack.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:590fa194cda290a75f87cadbef799a4992cba7d1dd38f16e57834e59c55d06bd +size 5363 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-toolcontroller.png b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-toolcontroller.png new file mode 100644 index 00000000..a124a4de --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-toolcontroller.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14d908021651c137cb074414995712ed646fdcd65c81945092ee62237518f99f +size 4588 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-unequipped.png b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-unequipped.png new file mode 100644 index 00000000..2926d36f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/explorer-unequipped.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5397a22cc5f7531251956fc37658bd7c361da736f360e748564eab587a80616e +size 10747 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-player-tools/properties-MeshPart.png b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/properties-MeshPart.png new file mode 100644 index 00000000..6913a92d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/properties-MeshPart.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f1e62a3e61a2d713734715c8fea192e9f27aa47c33923a8b695f9a26e54edb1 +size 11923 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-player-tools/property-grippos.png b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/property-grippos.png new file mode 100644 index 00000000..b3a87257 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/property-grippos.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eec0096720c7b537d3c171c1b003822afafe208a40154dec4216ed65a6508ecf +size 2781 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-player-tools/title-image.jpg b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/title-image.jpg new file mode 100644 index 00000000..7d9d4ead --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/title-image.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bfc204943e52b66d48026f67d6179298221fd72ebdae469e26c82eb0bf16e177 +size 93379 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-player-tools/video-collection.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/video-collection.mp4 new file mode 100644 index 00000000..e5f4ebd8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/video-collection.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6e12a746aac05e16df3d9b1a6ba68d57a9ef8d842ea7898cfebf1a6939e9a43 +size 495838 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-player-tools/viewport-blaster-icon-2.png b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/viewport-blaster-icon-2.png new file mode 100644 index 00000000..d51a1e6f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/viewport-blaster-icon-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20e3fcf35085c2989ee6c58bfdb24feb31a50e4da2ed47d3ae8f83faa7104f40 +size 2092 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-player-tools/viewport-blaster-icon.png b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/viewport-blaster-icon.png new file mode 100644 index 00000000..f09ce741 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/viewport-blaster-icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:452a3efd0818bc609640ed28dbc80d00b76e2e894d5a2f2c222850045f9d29ed +size 5471 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-player-tools/viewport-mesh.jpg b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/viewport-mesh.jpg new file mode 100644 index 00000000..3e943c0a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/viewport-mesh.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87300c19f3e7eb15440faa254ff34aede4a95e7397caaed60b7c6ddd81d8f010 +size 76090 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-player-tools/viewport-tooltip.png b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/viewport-tooltip.png new file mode 100644 index 00000000..bafc0df6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/viewport-tooltip.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:236150666b2f9d45398f8b8f3a9ee880637d5420e8b1e1f1a33744d8115ee592 +size 6750 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-player-tools/viewport-weapon-pos-1.jpg b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/viewport-weapon-pos-1.jpg new file mode 100644 index 00000000..3a613010 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/viewport-weapon-pos-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:adc14aded746e4a25e03e01e4e416a5033f42dda3db379fad565201db27b63ee +size 201250 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-player-tools/viewport-weapon-pos-2.jpg b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/viewport-weapon-pos-2.jpg new file mode 100644 index 00000000..4d994773 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-player-tools/viewport-weapon-pos-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2cce4876d99d76b0b2ba416e5cb2b502901183d43676aa8c0ff6003cee67e77 +size 194916 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/AV-Attachment-2.jpg b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/AV-Attachment-2.jpg new file mode 100644 index 00000000..25ea9edd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/AV-Attachment-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6cfc0c84aaebc10bf46829edda45dc0bdd06b198046429d7f9676dba082fdb7 +size 1165431 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/AV-Attachment-3.jpg b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/AV-Attachment-3.jpg new file mode 100644 index 00000000..955ea7a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/AV-Attachment-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39362ed4b117f057fc3de9d6ed79b4644c7da64c9c791b4b1a04a8f54c1aa8db +size 1167874 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/AV-Constraint-2.jpg b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/AV-Constraint-2.jpg new file mode 100644 index 00000000..743cf526 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/AV-Constraint-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f539920a830459cc1745bc954de55153bcdfb89cdba5c092f63f65112d960b4c +size 1180248 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/AV-Constraint-2.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/AV-Constraint-2.mp4 new file mode 100644 index 00000000..6886b140 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/AV-Constraint-2.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95c110e1b94d75ac575552a0612108700dfcdcc04753fcc6ef3d44e59870bf89 +size 5907300 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Attachment-Visual-Aids.png b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Attachment-Visual-Aids.png new file mode 100644 index 00000000..3ea29038 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Attachment-Visual-Aids.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a19b8b11cf203f9720eba9e416b03516bb87689563f7e05ca2137cf5cbb4738 +size 3934258 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Big-Block.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Big-Block.mp4 new file mode 100644 index 00000000..9db09a8a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Big-Block.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7044c965578153a6fe3c15db1493315f6f4ed46f0276210a6a5248f725a244fc +size 5686031 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Big-Triangle.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Big-Triangle.mp4 new file mode 100644 index 00000000..584b666d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Big-Triangle.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:895217e07a9363e9c5b9836e6256da6818c789d1d47749d5e8dab0f719ef0541 +size 2547753 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Dirt-Friction.png b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Dirt-Friction.png new file mode 100644 index 00000000..d87cd145 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Dirt-Friction.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4faeff3578e74ac1bf0de150ae1eb349bc0e6d7a9d928a52b6773181c184d58f +size 1941877 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Dirt-Propeller.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Dirt-Propeller.mp4 new file mode 100644 index 00000000..7e929c87 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Dirt-Propeller.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b64d2e98e1b1ec6f72fe42a0b73da5627e2b37884b486ff847af34e69bc36a7 +size 4280960 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/HC-Attachments-2.jpg b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/HC-Attachments-2.jpg new file mode 100644 index 00000000..ff5ef999 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/HC-Attachments-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fc94a645c7767d73d46ea77d59d1999f8a731f31314c91e14ecb48c612f0857 +size 768572 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/HC-Attachments-3.jpg b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/HC-Attachments-3.jpg new file mode 100644 index 00000000..c618dceb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/HC-Attachments-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bfd557f3f962bf96b0fbcc162cf3404718f14b2e84f9722f1108a778378979d0 +size 767163 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/HC-Attachments-4.jpg b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/HC-Attachments-4.jpg new file mode 100644 index 00000000..c53019dc --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/HC-Attachments-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29607b1c59f12504c765a036ede4a2e805e7b1b4b98857550ad6d6d811134a48 +size 749970 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/HC-Hinge-2.jpg b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/HC-Hinge-2.jpg new file mode 100644 index 00000000..d340e587 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/HC-Hinge-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e42fa6d11f9f790aae3603d4a161aa0cd6cd2046b766a178ddb57851c488beae +size 809116 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/HC-Hinge-3.jpg b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/HC-Hinge-3.jpg new file mode 100644 index 00000000..44393431 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/HC-Hinge-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e41326f46b23bb93349e77162a7ab93deb78ebf04566a73431b110709cf87ac +size 784925 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/HC-Hinge-3.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/HC-Hinge-3.mp4 new file mode 100644 index 00000000..22a83c41 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/HC-Hinge-3.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:545689149c0fef7a1dead0288a0e359f634a47847c2bc01d1e8384457766d288 +size 7803588 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Impulse-1.jpg b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Impulse-1.jpg new file mode 100644 index 00000000..85e83204 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Impulse-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46ffc41d2cbc3cc6b75babedf9248685940c7f065958e73c81796e592a25fcd2 +size 1155239 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Impulse-3.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Impulse-3.mp4 new file mode 100644 index 00000000..2e1fcb36 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Impulse-3.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5e9dc396f000a22d80ee9a893e73d8012263311bbd042b2f6bc4906842c8800 +size 38036820 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Little-Triangle.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Little-Triangle.mp4 new file mode 100644 index 00000000..f0fcc2a4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Little-Triangle.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4926001edfba220ee4fff751cad1efe022c19fec17ee27c6e1523ac1c7ac7847 +size 1375801 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Overview.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Overview.mp4 new file mode 100644 index 00000000..3aa128c8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Overview.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23bcffaa704b1af68097d6b972ffb7abab946b42c6a2ff992a5b0d834d473407 +size 8072034 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Propeller-HingeConstraint-Method.fbx b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Propeller-HingeConstraint-Method.fbx new file mode 100644 index 00000000..5d155574 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Propeller-HingeConstraint-Method.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ed4e0fbc60692da9b6e35b7bcad3a2f5a83d4d6d8a6ae66850bc5c61ddc3753 +size 45088 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Propeller-Scripting-Method.fbx b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Propeller-Scripting-Method.fbx new file mode 100644 index 00000000..cedf1d3d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Propeller-Scripting-Method.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c4ff0d144edff90d5941a20fd0622b6c0c86ec91e9a36fb2af9473e4e4f808c +size 39776 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Propeller.jpg b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Propeller.jpg new file mode 100644 index 00000000..5690817e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Propeller.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:072a98ccf2a36bcbb149e79f220b9b5944e22ad3736102940916af670907754b +size 763593 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Rotational-Axis.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Rotational-Axis.mp4 new file mode 100644 index 00000000..941f907c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Rotational-Axis.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b54a11ef1be06d671541575acde9f61448e327e7f5436cd73b4278b59c96b84 +size 2966352 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Rotational-Axis.png b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Rotational-Axis.png new file mode 100644 index 00000000..3bb7f28b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Rotational-Axis.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f464d53e56d77c5df4109a72195d308224f7bf38506d92c7174f2d76392805e5 +size 2981271 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Stop-Propeller.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Stop-Propeller.mp4 new file mode 100644 index 00000000..09e520ef --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Stop-Propeller.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df3c1919d26ce09d94c2794b17ebef7a966bd9d091e1bb91226abdb12981963b +size 3052677 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Using-HingeConstraints.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Using-HingeConstraints.mp4 new file mode 100644 index 00000000..b2b29828 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Using-HingeConstraints.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be9d77d1d2149246a4a6cba8e2f1521824d6ad6da3b1d0326e725738bbceba04 +size 2205567 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Using-Scripts.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Using-Scripts.mp4 new file mode 100644 index 00000000..b8186db8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-spinning-objects/Using-Scripts.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3279acd846bd7049158a23b42f975698de52a08df9a7b3891a05c7383453e9b +size 3398145 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Bottom-Layer.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Bottom-Layer.jpg new file mode 100644 index 00000000..1a833b71 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Bottom-Layer.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52fcddbf0d155a76795d903966cf8b916251157f527c5021f5fd18ab866b6163 +size 1074538 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Crust-Texture.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Crust-Texture.jpg new file mode 100644 index 00000000..2ac9dd48 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Crust-Texture.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e70be740c29103b4657d237c526dc8182d96c8d5eb9580e62eba1a48c0a0b41 +size 432895 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Custom-Lighting.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Custom-Lighting.jpg new file mode 100644 index 00000000..991c6e87 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Custom-Lighting.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f752819d28afc0053282bfad0ca58f1fbe5655c8348ab4e18b537b8111379c84 +size 941197 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Default-Lighting.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Default-Lighting.jpg new file mode 100644 index 00000000..8cc4d765 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Default-Lighting.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd44397770b830d3e1206eb3196d888a6d6a5bf5dfe42f49b3de648689270c36 +size 1299363 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/DenseSplash-Texture.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/DenseSplash-Texture.jpg new file mode 100644 index 00000000..3fab9a5e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/DenseSplash-Texture.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5aeadc82dfa16475a297a5c08c66a0d102aef930b7f3563e77b139948f6f41c6 +size 216223 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Embers-2.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Embers-2.jpg new file mode 100644 index 00000000..a4db708e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Embers-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55e5490f9892dace7ffe60825e495f3633ad2283ed6ff4076a59a253dae5c310 +size 4290539 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Embers-5.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Embers-5.mp4 new file mode 100644 index 00000000..1e8135cd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Embers-5.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:549055eb613dd1c3e205c0efee08813c66270d9da966eb98186dd45f5eb8abc8 +size 7929756 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Embers-5Color.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Embers-5Color.jpg new file mode 100644 index 00000000..6b350c5f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Embers-5Color.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c7620480995b20767007845ecfadafd4d3d12729f82b6db420a3478a91efba8 +size 79711 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Embers-5Size.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Embers-5Size.jpg new file mode 100644 index 00000000..6f0fd75e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Embers-5Size.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56b08664e6accf6ee4ebcb75d7cbb2cbd90ee136e8012e9ed46e86ee651ee432 +size 149817 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Embers-5Squash.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Embers-5Squash.jpg new file mode 100644 index 00000000..bb71e129 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Embers-5Squash.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b9264fac22e406442d7c7ef0ef15dfcbf059e84d955375962b981e68e87d2e3 +size 232102 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Embers-5Transparency.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Embers-5Transparency.jpg new file mode 100644 index 00000000..cc3865eb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Embers-5Transparency.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ec8d67a0713e906efe0cb32aa5b653a3bf39340ca10e398ff04327223926a06 +size 267271 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Embers-Texture.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Embers-Texture.jpg new file mode 100644 index 00000000..7e6fe179 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Embers-Texture.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4120d217eaecb79bde42e1b96fc84f28aee51f60c159c9714b7ec35a498c7e6 +size 84734 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/GL-1.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/GL-1.jpg new file mode 100644 index 00000000..c76759e6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/GL-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e5bd2f85b822c4dc9901ea35d9487b9b48213e41d7645621221cbb77b1a96cd +size 2347907 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/GL-2.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/GL-2.jpg new file mode 100644 index 00000000..3082005b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/GL-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ed4763cd617db4537823e966fdfc7b3d12376f84f69c902bc2a6bc934ca0766 +size 2349886 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/GL-3.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/GL-3.jpg new file mode 100644 index 00000000..776fd47e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/GL-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ad4c5386d5f3c0404167fb0c2c3c6c7882b960bb53c8df460973fea7d74bbf5 +size 2002905 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/GL-4.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/GL-4.jpg new file mode 100644 index 00000000..23a6dc03 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/GL-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc2f84a0edea2a12a4fe5f46ef2841efbd40ae28112ba7ca93b4832253c3751d +size 2221646 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LL-3.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LL-3.jpg new file mode 100644 index 00000000..f94bf0b7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LL-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e40ca1536c9f894ed4b91cc2e873d86eeb1a5f545e26a31fba6e36b5a17df7b +size 3032406 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LL-4.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LL-4.jpg new file mode 100644 index 00000000..2ef5f107 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LL-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:719e6d37e459514053cda36df6046f3d4949eb7f035be0e401fceb09f150d8ae +size 3029975 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LL-5.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LL-5.jpg new file mode 100644 index 00000000..c58b265c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LL-5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:143c638cea7b3056bfd77c98917540c4141944531b87107f6efc1c5224e9600c +size 3057278 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LL-6.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LL-6.jpg new file mode 100644 index 00000000..4947e893 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LL-6.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95a2ff862a34715e8b3260cebd72e18495bed5027bbf275638b0b2378c715422 +size 3176312 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LL-7.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LL-7.jpg new file mode 100644 index 00000000..97904aa9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LL-7.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41f6a1e4d0e0bc62d57fb59c5f5e59b4b14006c4f819cb61f48753567863e938 +size 3088505 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-10.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-10.mp4 new file mode 100644 index 00000000..50d4927c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-10.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85e224fc5182fbcc1f51f3c6c840609512e07eb1c41800df291b395524ce73ee +size 1378343 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-11.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-11.mp4 new file mode 100644 index 00000000..4a67050b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-11.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a98906d77c0e8d0cac64e04a08db942a56b3605b0c9a9ac2e9d5eec99922b76c +size 668052 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-3.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-3.jpg new file mode 100644 index 00000000..abc95b7b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9726e9a7931d8e823785af3a8dc330db56e43c1e5a793243d09b5e134684d39e +size 1969689 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-4.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-4.jpg new file mode 100644 index 00000000..62ba6bfa --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0bfd9633bb2304abbcd697eaa5482e6b4bf1fb6afd0dfbd146b291613f7f087 +size 1851968 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-6.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-6.jpg new file mode 100644 index 00000000..0ab5bf26 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-6.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:529ca9cdea68421dc50be44f730365ae4bcd3d00ac6c8ff2a1eb280c4ebd7966 +size 1876911 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-7.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-7.mp4 new file mode 100644 index 00000000..bc21623c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-7.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9cf8a254f4b379d135b53e7e0c0b85df7433dbe5c4a3fe885e69dcd95c99896 +size 867358 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-7Color.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-7Color.jpg new file mode 100644 index 00000000..cb2b9eb2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-7Color.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1c1593eed7089f8b15102095727e7b374b50733004a742bb587cfeeff98550e +size 87320 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-7Transparency.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-7Transparency.jpg new file mode 100644 index 00000000..23176dc6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-7Transparency.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d36e1c729e9ac36a6d90d2da2d50b50fa71b9b50910faae752c8eb60fae5ae7 +size 197269 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-9.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-9.mp4 new file mode 100644 index 00000000..ddb7512a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-9.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f721b8bf584ab1d3ba448015ff19f5c59da7e402bfd5142a03496613514e445 +size 1232594 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-9Transparency.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-9Transparency.jpg new file mode 100644 index 00000000..63a4f012 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/LavaFlow-9Transparency.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:236038cb7221103ba14151594e32bbb10c072ef073b694364170d6a581e824a6 +size 128776 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Middle-Layer.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Middle-Layer.jpg new file mode 100644 index 00000000..7e23c908 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Middle-Layer.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00c316fe13cbb57b30276db47cdf3cf03a77b834cf126e4de92aa8076c88f831 +size 1524124 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Plume-2.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Plume-2.jpg new file mode 100644 index 00000000..d7b6c1f3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Plume-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e533a3eab3188ed673f7591846b68a963c7f2456b8ff1c1ec89096c3ee6cbb3 +size 2563212 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Plume-4Color.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Plume-4Color.jpg new file mode 100644 index 00000000..e4e25dff --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Plume-4Color.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c60b67d659b2ec1585f600fc9195bb56760e1755f9c5dfedf3765d1d098582b +size 74783 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Plume-4Transparency.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Plume-4Transparency.jpg new file mode 100644 index 00000000..1f22f888 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Plume-4Transparency.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5d93491c40d5209448adff9c958d6bbcbb301c600d52645bf6293fc627fff0b +size 145361 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Plume-5.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Plume-5.mp4 new file mode 100644 index 00000000..d8d56cb7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Plume-5.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c528edcb40e1961ab12c9806ca13a87ff7d53f98b625af5ad32dcee5fc1de64 +size 3489689 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Ripples-2B.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Ripples-2B.jpg new file mode 100644 index 00000000..03da56fa --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Ripples-2B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84d12b781f118d87ae313e662fc21f9fb44e487a31fbc927dbbf35a55c817c8f +size 2731135 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Ripples-2C.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Ripples-2C.jpg new file mode 100644 index 00000000..b7298a25 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Ripples-2C.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04c37bacc6df66795a7e56dc52c0fde84aa2a379ffed0bd70b3320e215733f42 +size 2628691 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Ripples-3DColor.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Ripples-3DColor.jpg new file mode 100644 index 00000000..ec53942c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Ripples-3DColor.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6285382959240e2328cd77a37bee891d283aaf8aea53564af12757709b6346fe +size 78448 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Ripples-3DSize.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Ripples-3DSize.jpg new file mode 100644 index 00000000..17a78b90 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Ripples-3DSize.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5071fc1b739370e224fb31501472aebb141cc31d78eeeaa8ecb7c61bbbd8c42 +size 217330 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Ripples-3DTransparency.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Ripples-3DTransparency.jpg new file mode 100644 index 00000000..6791104c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Ripples-3DTransparency.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01a5a17b0e0ad9eba109a814546e4c3bf032a49bbac1a93648eb42e51dfc3e55 +size 212267 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Sample-Components.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Sample-Components.jpg new file mode 100644 index 00000000..e9d74d0d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Sample-Components.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b79966a3221d4cfcf90a321eb515e8374ff234c2d11cb1512d457bf4e52b0905 +size 870507 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-2.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-2.jpg new file mode 100644 index 00000000..e886f02d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0189c086db4a1a317c1145fdbe952b227dfc713ed82f6f349810983e7fcb840a +size 4330900 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-5.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-5.mp4 new file mode 100644 index 00000000..d0e604ac --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-5.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e749964cbd91048d55a879e9bcdbf4e43721cf7a4278cd70270ca7fa34394c27 +size 8323506 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-5Size.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-5Size.jpg new file mode 100644 index 00000000..b87d6b20 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-5Size.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fff707c8484e2520983a16670442422345080f807275fb46a2330632b0f28db6 +size 278540 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-5Squash.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-5Squash.jpg new file mode 100644 index 00000000..2c221378 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-5Squash.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45ea254fc7d93e73780cbcdb6690f376156459a2f9d513a3435c18cc77ca28bc +size 268868 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-6.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-6.mp4 new file mode 100644 index 00000000..caf737f8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-6.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83d5696352a93a121e447ffc1dd634c03c500e350bbeed7aea730f6a9a92a903 +size 9639271 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-6Size.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-6Size.jpg new file mode 100644 index 00000000..f5b31d44 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-6Size.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef407282ae697716c694b2def158f9726b6a0455d7e7666ae72d3e224e050a8f +size 194996 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-6Squash.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-6Squash.jpg new file mode 100644 index 00000000..c7985d42 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-6Squash.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:daccd1800dea9ab99fc85b561b87411378574ada7b4315a1f6b7dd7cc941f5f5 +size 172802 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-7.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-7.mp4 new file mode 100644 index 00000000..d05e99ce --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-7.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0970ecc60fc31fa1bca07bc5458b7990067d2ad24d73e37031a9ea48db0cc3d +size 8153568 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-7Size.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-7Size.jpg new file mode 100644 index 00000000..2e6c2727 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-7Size.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc845218767730efadb2a91111dfc9355362a65c7b237e5e40afa6ceed36f92c +size 207161 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-7Transparency.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-7Transparency.jpg new file mode 100644 index 00000000..1865224e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Splashes-7Transparency.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0fe376771e9baaa77c35d7475a9cf980c64fab0d11a6c89f37a48acff386862e +size 218065 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Top-Layer.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Top-Layer.jpg new file mode 100644 index 00000000..ccce078a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Top-Layer.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc0b4172ac6b13fcb200a091deb0e3d829659c3e890c3cd5a104d9081cf2c659 +size 1721645 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Volcano-Complete.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Volcano-Complete.jpg new file mode 100644 index 00000000..f8b50709 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Volcano-Complete.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:710b3ca4144d5220b796b5d6f9a44ab105f3302746d03dc3534a95a72e6a55fe +size 317841 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Volcano-Components.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Volcano-Components.jpg new file mode 100644 index 00000000..55ce6609 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Volcano-Components.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69622edfc7ea810589501a1e2b70a704eae4cd622a8fb0a5548e364d51b3ff78 +size 4727556 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Volcano-NoComponents.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Volcano-NoComponents.jpg new file mode 100644 index 00000000..889d1f03 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Volcano-NoComponents.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07adbff0dc82c761a41acf0a616ecbb22f5387f36c4ec4c6293b57b96dfd1bed +size 791379 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Volcano-Start.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Volcano-Start.jpg new file mode 100644 index 00000000..f77ef1d4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Volcano-Start.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a08732e20971c9ece2ba29843b475480ed33ca0a5373e45377362d52d6d946e +size 2993744 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/WebbySplash-Texture.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/WebbySplash-Texture.jpg new file mode 100644 index 00000000..10ef9c85 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/WebbySplash-Texture.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aadfc70eaeb2bcbf9f08f5dc20072a8e9963069032f1df0e28ee638604aeae1e +size 193998 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/With-Bloom.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/With-Bloom.jpg new file mode 100644 index 00000000..51faafa8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/With-Bloom.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28080bfc48a179c58b0258347e3bc144949e7f75dfdc18d3a4816927fec7fc9e +size 1241783 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/With-LocalLighting.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/With-LocalLighting.jpg new file mode 100644 index 00000000..51faafa8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/With-LocalLighting.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28080bfc48a179c58b0258347e3bc144949e7f75dfdc18d3a4816927fec7fc9e +size 1241783 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/With-SurfaceRipples.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/With-SurfaceRipples.mp4 new file mode 100644 index 00000000..4366c782 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/With-SurfaceRipples.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0378b550cc44d4ef4e2c0dedfe09ef9d70347ab4440dcdc82fe660247ab5f4ec +size 1513685 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Without-Bloom.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Without-Bloom.jpg new file mode 100644 index 00000000..8829d275 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Without-Bloom.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd8d1a3b1663d857912ba609e33ad402081bc3a01b1e5301c4e94f3aa399c37a +size 1134449 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Without-LocalLighting.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Without-LocalLighting.jpg new file mode 100644 index 00000000..a194132b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Without-LocalLighting.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66ce75b2a313e4f028e4025d1d5dd3927ec11446109f69feb4c0f0bc24e3b9a0 +size 2140014 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Without-SurfaceRipples.jpg b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Without-SurfaceRipples.jpg new file mode 100644 index 00000000..d40e69f3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-volcanoes/Without-SurfaceRipples.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc9c75bda8dceb710875c0f200ef7986ac8c18086e8eb59282f994441154949c +size 2552513 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1C.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1C.png new file mode 100644 index 00000000..b8fa1500 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b388cf3f4a7092eff858a7cec1cf2913a540f78fe7878b720aabdbde0cad8135 +size 1834323 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1D.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1D.png new file mode 100644 index 00000000..08ad72d9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1D.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b7367037a5f4b97fb9676fee716ae374be1757093e48e4a92603a876dd1fe4e +size 1157560 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1F.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1F.png new file mode 100644 index 00000000..46319a7f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1F.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1fd23cf8e849be52e9a5c505ab19ff479c5dca3a0aafbb76f971be7a257c38f1 +size 1160001 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1G1.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1G1.png new file mode 100644 index 00000000..919cc3c6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1G1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd5ee4e86b83e0d188b8d52e2e9c519d9a28a2296eea60ca0186022089215ef6 +size 12798 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1G2.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1G2.png new file mode 100644 index 00000000..e940fbd2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1G2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e35406825b2033a250af9099fd6a8e9b794af0ed1c234293053b1b59bd5d86cc +size 4581 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1H.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1H.mp4 new file mode 100644 index 00000000..292ba00e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1H.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:792e0f0962a871c2205f272b19a283556448dffeee8cebf39e7bcea69940dab0 +size 6137463 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1H1.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1H1.png new file mode 100644 index 00000000..fd3059f1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1H1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:255bde26cd114247d5949346813c8356f94b918a7b4406e18f26e046a53d7ad1 +size 16667 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1H2.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1H2.png new file mode 100644 index 00000000..cb7dc510 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-1H2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:302b4a98be5928713e073fe6f1598ff3519f0dcdd8ba3f2f834a47a4d10e7314 +size 31449 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-2C.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-2C.png new file mode 100644 index 00000000..bb575646 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-2C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b44bc68142590541dc250c7bf5d95568423e53053e7f71896acd1c265a442933 +size 1208768 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-2D.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-2D.png new file mode 100644 index 00000000..a776288a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-2D.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c30a1ecd1212ceada1c256f0d08d07f0ea19cc4b059cb0e0b6e7eaa0a79eab00 +size 1222747 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-2F.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-2F.png new file mode 100644 index 00000000..97b8e761 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-2F.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dbb6d549a1dca7baba395923451df9ca382e08bf0446b4b3e4a92bf2fb24cdb9 +size 1224055 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-2G11.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-2G11.mp4 new file mode 100644 index 00000000..5353cc42 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-2G11.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81bae628be486fd5ca97fb9d3e029d2ee6a877ebe51753da7cef8f8fbde03b8f +size 5219818 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-2G8.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-2G8.png new file mode 100644 index 00000000..7608a96b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-2G8.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:119e101e40a55e58e702c715a4705f1e572ba38d25545a5922838decfb641afa +size 11438 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-2G9.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-2G9.png new file mode 100644 index 00000000..bc39dc05 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-2G9.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c0f8338ccfdad4f15a6bc2fee5f13070204c845a48c3a2ebfccea7ca6ffe3ab +size 32359 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-3.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-3.mp4 new file mode 100644 index 00000000..04e023ea --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-3.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:505e1a64192e41eee23fb783b9885d9f7c745b9bc3a58e021841e577b0fa5501 +size 5383833 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-Final.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-Final.mp4 new file mode 100644 index 00000000..c8429adf --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-Final.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3eff98ca24d77942c1513921c80498c3c24185ec5a499e7d895a793de87bbbc +size 7750596 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-MainDrop.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-MainDrop.mp4 new file mode 100644 index 00000000..542e191b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-MainDrop.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a01eb7a388f07cb0fa95d534bd37cd8079ec9b08ac3ed7ff34ac62a1ae8cd954 +size 5570217 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-SecondDrop.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-SecondDrop.mp4 new file mode 100644 index 00000000..1d5c5f72 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-SecondDrop.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8760c3a11950e1ad60b107fae56bfaf938ebb7f1bcaa4e8e64295b2daf913ad +size 6577437 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-Unnatural.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-Unnatural.mp4 new file mode 100644 index 00000000..4c908ed4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Cascades-Unnatural.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98b28d2f8da81ab4c380bc7f029bff1be0ecb68393b7f9a6b5fce0f94b8a6b8b +size 5353557 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Falls-Components.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Falls-Components.png new file mode 100644 index 00000000..d85694c2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Falls-Components.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:406981e02485d174cdcaccd95cc409831bd5773f2b97b857341a67f569e4b193 +size 1412808 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Falls-NoComponents.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Falls-NoComponents.png new file mode 100644 index 00000000..fa2868ed --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Falls-NoComponents.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36bff8b561d3e906d04bbddba6eb3eb1cc0e2e58f2e39d46b453c78ef44c0777 +size 8552083 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Foam-2.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Foam-2.mp4 new file mode 100644 index 00000000..5f154df6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Foam-2.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e85ef516c18a1332fb167494ae62f2191f4e90ad3bddb6c3a8af102630806d99 +size 6693824 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Foam-2B.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Foam-2B.png new file mode 100644 index 00000000..ce8e0430 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Foam-2B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ab7b255746e1ff239b3da4e83d29930f99c14d3e09027b2c2d3acd7767fc78d +size 3629032 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Foam-2D3.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Foam-2D3.png new file mode 100644 index 00000000..dd15b02b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Foam-2D3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4274b9c9af75091777863a571696ad7bcb3b50fe733a006241d46347540775db +size 29637 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Foam-2D4.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Foam-2D4.png new file mode 100644 index 00000000..114f8046 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Foam-2D4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1af63bfe07ac27368583041388adcc00dc9b1ca21abf4bafe51ee0a4d3f96e1 +size 52426 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Foam-Final.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Foam-Final.mp4 new file mode 100644 index 00000000..3b3e047d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Foam-Final.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3bd4d48465b7f2506aac08a302f7ad67108db0e381f90b5bb5416dfb5015f38 +size 7745350 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Foam-Texture.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Foam-Texture.png new file mode 100644 index 00000000..692e808e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Foam-Texture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:edc94ebcaaced9be25f96d2fbdd0db35bc4054cbcc14fbbffdd3ed702fb5cb1f +size 165946 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Intro.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Intro.mp4 new file mode 100644 index 00000000..74fac804 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Intro.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:056699257d2c6979508fcf9e4e9307f386705e7a091cde289f95bc2278d53be9 +size 5847943 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-2.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-2.mp4 new file mode 100644 index 00000000..d4b657e2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-2.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4756ba412a1569a02f199a8c6fb276222e507f6ce018cb0e094d41f71d207377 +size 5693612 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-2B.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-2B.png new file mode 100644 index 00000000..71b4a7d6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-2B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:afe570c7734cd939dadc7c788f184f23bef6e17d1dc5dfba35328666ad903a82 +size 1268400 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-2D2.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-2D2.png new file mode 100644 index 00000000..800ed425 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-2D2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d106425c37dc131ce26191ac707ab27416bb860d3b5a2908b49f938fbdf66b3b +size 2730 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-2D3.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-2D3.png new file mode 100644 index 00000000..e0f23da5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-2D3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63515145ecd6a117ba7b8e1a922df99fcde6a483f444ad246f5a7dfb319f6b68 +size 9904 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-2D4.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-2D4.png new file mode 100644 index 00000000..63e9f6b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-2D4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc8c81e6809caf3943b8110177d31b142f1a55df8a3d3955f07ac4d66777e623 +size 14404 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-3.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-3.mp4 new file mode 100644 index 00000000..42b5124b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-3.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60a1b0464b687965f7a58af28455983c4eaebd610dcda559ffca1b5445a89de3 +size 6031449 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-4.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-4.mp4 new file mode 100644 index 00000000..6b2b9a89 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-4.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f89dbac8d5121215eecc6044bd718c3d6c8a48d0703277420e07904b6bf9fcc0 +size 5614546 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-Final.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-Final.mp4 new file mode 100644 index 00000000..9efb84ef --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-Final.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7cc8e03fd5e278bee036410e67cd04ad44c0eda5e982dfd9eee624c9f4298782 +size 7740123 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-Texture.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-Texture.png new file mode 100644 index 00000000..97b965ea --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Mist-Texture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2c439cc59873b388020723cc49c058c858b536082332aa765d60dca1885970e +size 136007 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Rainbow-4B.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Rainbow-4B.png new file mode 100644 index 00000000..8d6384c9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Rainbow-4B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a22ef6dae2b012fec0614fb7b2ffe3c7b27ef09008855a4da1d4adbba0093d55 +size 1050656 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Rainbow-4D.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Rainbow-4D.png new file mode 100644 index 00000000..15841afd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Rainbow-4D.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d0159111f111ac5f4e5aa691a9bad340aedcdd0c1ef81d40aa8f4b528ac0329 +size 14266 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Rainbow-Texture.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Rainbow-Texture.png new file mode 100644 index 00000000..d63cf844 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Rainbow-Texture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6a622f238fa605112fea8d7943a9782655cf0190c44a221f3bd9227e67a7273 +size 49591 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Sample-Components.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Sample-Components.png new file mode 100644 index 00000000..c813621f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Sample-Components.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b0d24c1265a37c0b285cfb3731e0abe595031791dce20cd8fb9757776b0cdee3 +size 1841323 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Snoqualmie-Falls.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Snoqualmie-Falls.png new file mode 100644 index 00000000..6937bc17 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Snoqualmie-Falls.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:912b5c6db4f2100f6fed8278743ba0795c46e6cae20a13714f7cc94f39ca5d64 +size 2536902 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-3.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-3.png new file mode 100644 index 00000000..37b1751a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21893283456fcab9c97a2f14f0c241f4701a4a009067faab934ad8688862a678 +size 1289650 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-4.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-4.mp4 new file mode 100644 index 00000000..3f2cf4cb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-4.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2f907d0d1bc59d371f8299d51b433e77f9258b8ba27a7ec683e8b8a8a35cf07 +size 5889706 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-4B2.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-4B2.png new file mode 100644 index 00000000..176084d1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-4B2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b5c6b4cfb0722959aa2b4624a5171802e8c539e9e64d6ce606cafdc34b3db59 +size 2723 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-4B3.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-4B3.png new file mode 100644 index 00000000..f9a06dbd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-4B3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bbff407566fa915dfd85b340a07aec4c5655bcf40766b9d8d8eaf51a56500f2 +size 36158 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-4B4.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-4B4.png new file mode 100644 index 00000000..32bd5055 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-4B4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7973aa4543992c21294a4291737cdd9a58c524ff21ebd04f673fd267d0e8af2 +size 24569 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-5.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-5.mp4 new file mode 100644 index 00000000..1904f065 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-5.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4baa47e7423ddaf1f49c4a89abb5a60aa5222a757c267a8884daf9580d27503 +size 6000666 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-5B2.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-5B2.png new file mode 100644 index 00000000..c3c77237 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-5B2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e97d78155e703519581d2e78811dac23d60b80870cbbb8c477da404960b590cb +size 20026 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-5B3.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-5B3.png new file mode 100644 index 00000000..3ac78227 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-5B3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:671e83721a7e10f18830d01e342bc3e43d9af8ca4b01967116940e940e484f7d +size 23402 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-Dense.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-Dense.png new file mode 100644 index 00000000..f6f6fcf9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-Dense.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:072f238a1797a8e9189ab6ec171efe2bda5d8e513294792e4d2b882641a3576f +size 675102 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-Droplets.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-Droplets.png new file mode 100644 index 00000000..6c2fb5e4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-Droplets.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d96d395daec401a2656958672bad2619594b4f573c617c213a6af85375bf7c50 +size 73861 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-Final.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-Final.mp4 new file mode 100644 index 00000000..37c553cd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-Final.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8283f428e1fe64c954f69576195b115f3399e5150691cfeb027ab86a6caf7094 +size 7322868 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-WhiteWater.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-WhiteWater.png new file mode 100644 index 00000000..342aa455 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/Splashes-WhiteWater.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7798a7b104576c289734901ff6d0e2b157ff5f28c0947a02a293edfcd288ed7c +size 203590 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-3.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-3.png new file mode 100644 index 00000000..f6795863 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b290281d19950c8a3eef6023d402f9c26e2af083f1659e430b714478d54c3bec +size 3655431 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-4.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-4.mp4 new file mode 100644 index 00000000..67b9fada --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-4.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee98632e57a723d427f6023e2c136c32ca0866873b11c0cd6c507b4f0614c7eb +size 6977775 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-4A3.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-4A3.png new file mode 100644 index 00000000..db4731a1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-4A3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:420be745d2c9747bd1e55b7fbf9a47aae5ea71965c53207f95fa69c11a717e27 +size 36419 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-4A4.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-4A4.png new file mode 100644 index 00000000..78e6b6b8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-4A4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f099cbbd3a9a2152949f941c40208b577a5e615d39e6f98b5f53ab1fa1c0817 +size 125309 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-5.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-5.mp4 new file mode 100644 index 00000000..07ef9768 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-5.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f3d03f77558f683cefe27cf3b1ba3d0e404217ac7ac492ccaf68ed044fe033f6 +size 7174065 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-5B1.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-5B1.png new file mode 100644 index 00000000..ee728e68 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-5B1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff20d1b88318ff15063e6d2477c062af574066f0bbea371ead3ac051480304ab +size 27751 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-5B2.png b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-5B2.png new file mode 100644 index 00000000..bd29444e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-5B2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:94757c5c96fa3d22360266dac1cce8f118e55ea6a8076d5d75219bf0a08e93d3 +size 21804 diff --git a/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-Final.mp4 b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-Final.mp4 new file mode 100644 index 00000000..ed9fca6e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/creating-waterfalls/WW-Final.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46c493627b0a85227f05bc074965930ac8a54ede6883992f2e149a5a7fbddbe6 +size 7986561 diff --git a/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/Treasure-Island-Edit-Place.png b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/Treasure-Island-Edit-Place.png new file mode 100644 index 00000000..11e8535f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/Treasure-Island-Edit-Place.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:096212fe30db86cdc40a73e35bca6f60b55458ede8b4dc3770608a64613bcd38 +size 147262 diff --git a/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/accelerationParticles.jpg b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/accelerationParticles.jpg new file mode 100644 index 00000000..9360a20e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/accelerationParticles.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f1c9c2be5053950541af873c340d054a894be268dda62349a39839416e6b261 +size 248121 diff --git a/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/centerLavaLocation.jpg b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/centerLavaLocation.jpg new file mode 100644 index 00000000..a1c279dd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/centerLavaLocation.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a003d763be972e63ed1fbd5e64c8fcbe4a8e58fe0818ab67064cf26e1b45fd7 +size 20995 diff --git a/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/colorSequenceDefault.jpg b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/colorSequenceDefault.jpg new file mode 100644 index 00000000..ac7218b2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/colorSequenceDefault.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f12c26e5bd1cad4df208e9c121cf5b245d219b74c8beff73e9545b3a8e1e1e4 +size 99542 diff --git a/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/colorSequenceGradient.jpg b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/colorSequenceGradient.jpg new file mode 100644 index 00000000..abc311dd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/colorSequenceGradient.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb40669400a51de91fdcf6e326f3564772ed4e84cc547d8dd3540ceb9813a1aa +size 147717 diff --git a/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/colorSequenceParticles.jpg b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/colorSequenceParticles.jpg new file mode 100644 index 00000000..06fc69f9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/colorSequenceParticles.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4f928eb61f3e3da89db3b269b1c7f0fb3be30fe08b5171348f0bf0c755d3e3f +size 248321 diff --git a/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/fadingParticles.mp4 b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/fadingParticles.mp4 new file mode 100644 index 00000000..b892acb8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/fadingParticles.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:adbe00a2ed1ae4d8db6a70857435822d3d1ceab775f0102e0c953d7678ed191e +size 645164 diff --git a/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/finishedDistantVolcano.jpg b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/finishedDistantVolcano.jpg new file mode 100644 index 00000000..4c8892b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/finishedDistantVolcano.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e8aed2789cac2c3dfb10c488b6171d1264717a3edb9c48cdc1ca45a5dbdac9e +size 241647 diff --git a/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/finishedVolcanoClose.mp4 b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/finishedVolcanoClose.mp4 new file mode 100644 index 00000000..96e67d6c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/finishedVolcanoClose.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0ad3945448b9d9f89c0b3e173f7c13943cbb4f25e9f75c26788f8d81a444d33 +size 492417 diff --git a/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/newTextureVolcano.jpg b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/newTextureVolcano.jpg new file mode 100644 index 00000000..29965b1c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/newTextureVolcano.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd7171d3b9af1e2303a94045cff69d8bcce05fbe00e49de2bf25f157cc71d184 +size 333957 diff --git a/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/openSizeSequence.jpg b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/openSizeSequence.jpg new file mode 100644 index 00000000..82283cde --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/openSizeSequence.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6952fb80138cd495fc3aaa2519c755e4c7d833f3580f785fbf1a4728ac6f579d +size 58716 diff --git a/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/openTransparencySequence.jpg b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/openTransparencySequence.jpg new file mode 100644 index 00000000..a2b25614 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/openTransparencySequence.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e6d343d4952435c154494e29fd51d031fae54036254c4c1b7d4fc80c07cefd4 +size 39434 diff --git a/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/particleEmitterInsertionVolcano.jpg b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/particleEmitterInsertionVolcano.jpg new file mode 100644 index 00000000..3cc53a25 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/particleEmitterInsertionVolcano.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d673fd746738bc8d4e993984859622d68ed659eec41b032f23ba0806ed725117 +size 385116 diff --git a/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/particleEmitterInsertionWorkspace.jpg b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/particleEmitterInsertionWorkspace.jpg new file mode 100644 index 00000000..f3cb5a7f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/particleEmitterInsertionWorkspace.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a8a9780fffa60d564460e3eb8056eee1b220621cd0430a19cc7de7231b63759 +size 11284 diff --git a/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/particleExamples.mp4 b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/particleExamples.mp4 new file mode 100644 index 00000000..876daf97 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/particleExamples.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bbe4a9f29929a8e400382636f4549d7ac0eaf0ab7391b5ca125355745fa35190 +size 529631 diff --git a/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/sizeSequence.jpg b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/sizeSequence.jpg new file mode 100644 index 00000000..642d8335 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/sizeSequence.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76cff900bb2ad891301d02204d33049b93661179c7d52b88b3c2b1db410681b7 +size 170661 diff --git a/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/sizeSequenceParticles.jpg b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/sizeSequenceParticles.jpg new file mode 100644 index 00000000..ead90129 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/sizeSequenceParticles.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:853c39514381181df196e37c314336594913048ede7beb95917724259ceffb71 +size 245355 diff --git a/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/textureProperty.jpg b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/textureProperty.jpg new file mode 100644 index 00000000..68ffdad0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/textureProperty.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52e780d739b0e77d5087ef848d6fbff1635553f50fc8e8bea74fd9c494cff3cd +size 78670 diff --git a/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/transparencyDefault.jpg b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/transparencyDefault.jpg new file mode 100644 index 00000000..8d7d7b41 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/transparencyDefault.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e34844ba466d7c32cf740c03435b10042d07a8e54d7191d84cdc4c92b4e8316 +size 160817 diff --git a/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/transparencySequence.jpg b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/transparencySequence.jpg new file mode 100644 index 00000000..102c3728 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/custom-particle-effects/transparencySequence.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e388bf3007a492f819b2a83280f3082a4a3346de72f75fc2eb656dcab1c39290 +size 215101 diff --git a/.cursor/rules/roblox/assets/tutorials/data-storage/DataStoreTutorial.png b/.cursor/rules/roblox/assets/tutorials/data-storage/DataStoreTutorial.png new file mode 100644 index 00000000..f63f84d6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/data-storage/DataStoreTutorial.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a577e9ae9dccba7ed93c84a711e732579692bb6e2144b3bf0fb5bb0bc3afd05d +size 948622 diff --git a/.cursor/rules/roblox/assets/tutorials/data-storage/DataStoreTutorial2.png b/.cursor/rules/roblox/assets/tutorials/data-storage/DataStoreTutorial2.png new file mode 100644 index 00000000..6b4a9e39 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/data-storage/DataStoreTutorial2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0eba0583fa344f89c757a93c9d044101e647270713433d4005cb63d4e4a5bfb5 +size 769577 diff --git a/.cursor/rules/roblox/assets/tutorials/deadly-lava/lavaFloorGameplay.mp4 b/.cursor/rules/roblox/assets/tutorials/deadly-lava/lavaFloorGameplay.mp4 new file mode 100644 index 00000000..ce3c9d2a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/deadly-lava/lavaFloorGameplay.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18e17735c71e83b051f8baabfe07833aa525d827c0cf0bef21acbf8e6d3f9409 +size 804053 diff --git a/.cursor/rules/roblox/assets/tutorials/deadly-lava/lavaProperties.jpg b/.cursor/rules/roblox/assets/tutorials/deadly-lava/lavaProperties.jpg new file mode 100644 index 00000000..0456b884 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/deadly-lava/lavaProperties.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ced8e673aec1e11e7cf0ff2231dab37eacf4bf52ee9ddef0a0870141fd216c89 +size 41909 diff --git a/.cursor/rules/roblox/assets/tutorials/deadly-lava/partInserted.jpg b/.cursor/rules/roblox/assets/tutorials/deadly-lava/partInserted.jpg new file mode 100644 index 00000000..16f509a9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/deadly-lava/partInserted.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f023a70d7e2ee24dedcef66d7f156abe54d3020c41cc479a2f4f49f7e4a3a93 +size 376791 diff --git a/.cursor/rules/roblox/assets/tutorials/deadly-lava/propertiesSet.jpg b/.cursor/rules/roblox/assets/tutorials/deadly-lava/propertiesSet.jpg new file mode 100644 index 00000000..93bad197 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/deadly-lava/propertiesSet.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd5dd4207e9a10f6453f42daede5c4751ff5c272beeddeb9007e70d44c886a8e +size 355609 diff --git a/.cursor/rules/roblox/assets/tutorials/deadly-lava/scriptExplorer.png b/.cursor/rules/roblox/assets/tutorials/deadly-lava/scriptExplorer.png new file mode 100644 index 00000000..c27186a7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/deadly-lava/scriptExplorer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ea281aeed3987623444aa639ed22585d584c0d75a1375520a5da5619c05b152 +size 28370 diff --git a/.cursor/rules/roblox/assets/tutorials/detecting-user-input/ReloadingSymbol.mp4 b/.cursor/rules/roblox/assets/tutorials/detecting-user-input/ReloadingSymbol.mp4 new file mode 100644 index 00000000..3d669e1f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/detecting-user-input/ReloadingSymbol.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d7371832fb73d3ac222d53fc2c4401cc36a799443a5c47fdb3e8f5172a8d3a8 +size 1798603 diff --git a/.cursor/rules/roblox/assets/tutorials/detecting-user-input/ReloadingSymbolZoomInOnly.mp4 b/.cursor/rules/roblox/assets/tutorials/detecting-user-input/ReloadingSymbolZoomInOnly.mp4 new file mode 100644 index 00000000..0eaab610 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/detecting-user-input/ReloadingSymbolZoomInOnly.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d444d370198e44c6b5e855bbfaa77ae8735a1ba6dcba370d950f10e480d1b1c +size 408172 diff --git a/.cursor/rules/roblox/assets/tutorials/detecting-user-input/ToolControllerExplorer.png b/.cursor/rules/roblox/assets/tutorials/detecting-user-input/ToolControllerExplorer.png new file mode 100644 index 00000000..a6c708eb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/detecting-user-input/ToolControllerExplorer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67c97949d8d420537407a9bb7f5aac173596134ea2e68f2f00a7cddfd3894f77 +size 5981 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Ambient-2.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Ambient-2.jpg new file mode 100644 index 00000000..6795116c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Ambient-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b596d29e5f84a4b568966929463450b93d1caabb150efc46e2d6e2ddf03e1732 +size 101997 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Ambient-Custom.png b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Ambient-Custom.png new file mode 100644 index 00000000..78c9c703 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Ambient-Custom.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f91a782e4c48513ba28adab5de8dd3146520da445e694482bb9a6a7f392dd7f +size 1283668 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Ambient-Default.png b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Ambient-Default.png new file mode 100644 index 00000000..fd0645c6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Ambient-Default.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6493a2fcccce72a1ac3a148f14f3ee802cf33fe740c61a2e2c3041ca0c63cd2 +size 1273847 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Cabin-Final.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Cabin-Final.jpg new file mode 100644 index 00000000..aa4fe076 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Cabin-Final.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:901328ea3eda081142c4cebb99517b96be5d8ee568eb8d49ec5ab106f3a28a43 +size 64856 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Cabin-NoParts.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Cabin-NoParts.jpg new file mode 100644 index 00000000..195d5a93 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Cabin-NoParts.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d1b592ff841026612813f446902a330003501f88e564b2f5f53e5c9fae964d1 +size 390111 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Cabin-WithParts.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Cabin-WithParts.jpg new file mode 100644 index 00000000..2289d97a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Cabin-WithParts.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:881eb188f58c353d9352b815f0aebc59473e58104472fd485a9ff314d64d53d6 +size 151151 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Candles-1.mp4 b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Candles-1.mp4 new file mode 100644 index 00000000..60501105 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Candles-1.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fd628fcea62f20b836c21688e5808de080440af48e17990e3ae44a328b289d1 +size 17239013 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Candles-2.mp4 b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Candles-2.mp4 new file mode 100644 index 00000000..9f440c36 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Candles-2.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3a544a6a8eab981e149d0d161408b172927a8ef53792e883d738dd130d33baf +size 16467981 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Candles-3.mp4 b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Candles-3.mp4 new file mode 100644 index 00000000..2a806c04 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Candles-3.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98e396535b1a8e0ecdf90603b0f835c5bcad3f951f6d910d6b23775f07067bd8 +size 13236020 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Candles-4.mp4 b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Candles-4.mp4 new file mode 100644 index 00000000..d9fc5e26 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Candles-4.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33d25ac756a94db16858d2e812e4e1bfe49ee5498989465ff360e991bb49184e +size 2877203 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Candles-WithPL.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Candles-WithPL.jpg new file mode 100644 index 00000000..2f3c1876 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Candles-WithPL.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5109afa3ad26d138925d98059c93e25a25b3596285f1d087901f0c2ec5e91a88 +size 215027 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Candles-WithoutPL.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Candles-WithoutPL.jpg new file mode 100644 index 00000000..fb01aea1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Candles-WithoutPL.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5bd5dbe75bed5e59f3d2813020a4ac8bbb97219edb2b54c4e8ee2c5a0bc8196 +size 189746 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Contrast-2.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Contrast-2.jpg new file mode 100644 index 00000000..84ecfc12 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Contrast-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77b772a0ef52527d810c18ce4b003d90d9ad59a8a8b7223bb6dc9f3e873c24fb +size 1710599 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Deer-SpotLight.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Deer-SpotLight.jpg new file mode 100644 index 00000000..c6016907 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Deer-SpotLight.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81d778d418f4cc2260217a7ebcdf3ef15e9d67f47f3d909aa7ffa0417e137af4 +size 162034 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Deer-SurfaceLight.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Deer-SurfaceLight.jpg new file mode 100644 index 00000000..f5d49e63 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Deer-SurfaceLight.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78aabc20a4e89990e74705cc49f28585f829a84fc4c271a072291294d76a47e1 +size 178889 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Density-2.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Density-2.jpg new file mode 100644 index 00000000..e92057cc --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Density-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea7f14f7fdd961d48bde892dc8e525210b6966ae6f4223664c82cb99306968b9 +size 144665 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Exposure-2.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Exposure-2.jpg new file mode 100644 index 00000000..b991a516 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Exposure-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae316f979fdd228cef9bcfa6ab37e44250581e6e21acca76aebffdb29f96acca +size 1092085 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Exposure-Brightness.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Exposure-Brightness.jpg new file mode 100644 index 00000000..1a479742 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Exposure-Brightness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0f728574c320c57c86b31082678798c488b1e2f1f7837b2c2d1d90a0de0bd11 +size 669632 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Exposure-ExposureCompensation.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Exposure-ExposureCompensation.jpg new file mode 100644 index 00000000..57af9b4f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Exposure-ExposureCompensation.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e8f2e4c5418df87950ad317bca39e7352895fdbff31057becc1a83bf18fa4a4 +size 725348 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Exposure-NoChange.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Exposure-NoChange.jpg new file mode 100644 index 00000000..57af9b4f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Exposure-NoChange.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e8f2e4c5418df87950ad317bca39e7352895fdbff31057becc1a83bf18fa4a4 +size 725348 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/HighDensity.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/HighDensity.jpg new file mode 100644 index 00000000..6fe2e8c4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/HighDensity.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d17050f2fd01fb6c08a0f359efa8b950fe487446746bf139b1ea6e5262624ea9 +size 453056 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Lamp-1.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Lamp-1.jpg new file mode 100644 index 00000000..18e477b7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Lamp-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:043699104f99789ba11ef6a04c7ced147ed5ac142f5da1ee11719f7a51abd07d +size 85500 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Lamp-2.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Lamp-2.jpg new file mode 100644 index 00000000..2483aafc --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Lamp-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:861b1d02e77ee3ec44fe394dabf831b6c76c5d37a88df591687d32c982ee5bc9 +size 154993 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Lamp-3.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Lamp-3.jpg new file mode 100644 index 00000000..cef73f82 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Lamp-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56b9e20c952d7bbfefe9aa1bf13b320adb025b2b4445d2a31a72abd983de5225 +size 182431 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Lamp-4.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Lamp-4.jpg new file mode 100644 index 00000000..02ea47f0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Lamp-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cb2bfc0af025d406ad5297dc789667113e7e53ad5aa7fc76e396e249098d200 +size 207115 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/LightingStyle-Realistic.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/LightingStyle-Realistic.jpg new file mode 100644 index 00000000..66bb8b34 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/LightingStyle-Realistic.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc4cdf45daae12ea723e4174de08ede25c8df070c9677fed0a51d0d71d438f75 +size 140006 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/LowDensity.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/LowDensity.jpg new file mode 100644 index 00000000..f70e64a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/LowDensity.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8371f793f6e77e1f3903ab637f65c6a23bfc6017df7242444f2c556d626af379 +size 91487 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Radio-1.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Radio-1.jpg new file mode 100644 index 00000000..affcf280 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Radio-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3ac4e1f8f1fa8c5ea333b685e22c1f250725274dd2d7d218c3c53d45b3b9437 +size 195571 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Radio-2.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Radio-2.jpg new file mode 100644 index 00000000..699f09e6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Radio-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:775f30728f009c92b7ec11546a5583a8561cfe445a4b545bb76b7053de0b3f19 +size 194599 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Radio-PointLight.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Radio-PointLight.jpg new file mode 100644 index 00000000..34aa0aff --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Radio-PointLight.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c4b9c00b1f0a8b381423ffd6f5718c04bee5854d3665ef758792eed9a18478c +size 223133 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Radio-Realistic.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Radio-Realistic.jpg new file mode 100644 index 00000000..6d22fc07 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Radio-Realistic.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1ba09bc0ef93bed1fd7830266da40cec6757144498834f047807cb62c65b522 +size 159838 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Radio-Soft.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Radio-Soft.jpg new file mode 100644 index 00000000..61517651 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Radio-Soft.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da697279f76734dfb2d4a1a45b290c535b648882e135177575c72d98e44335a1 +size 140889 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Radio-SpotLight.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Radio-SpotLight.jpg new file mode 100644 index 00000000..df5cfef6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Radio-SpotLight.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:759d23c0b53a95d702d8139ab469ccbe6d8bc333fc81e1a4586697f3d863fa5d +size 192972 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Sample-Complete.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Sample-Complete.jpg new file mode 100644 index 00000000..60f5fc3e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Sample-Complete.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04b7565a114abff64b0bc78c570cc5ffaf08c3ccd8cbf3620a35dd38843c4470 +size 1300862 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Sample-Start.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Sample-Start.jpg new file mode 100644 index 00000000..648c23c8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Sample-Start.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:312d39ba270fb96368c6ca46050d928b33b7f6e1261f2a8246b02bb1f86f1ac7 +size 939522 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Skybox-2.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Skybox-2.jpg new file mode 100644 index 00000000..f1b0363e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/Skybox-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d14df2b4c2499eec756a37311a490234f7872cf9721845ce19157c2cd73cbfe0 +size 160016 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SkyboxBk.png b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SkyboxBk.png new file mode 100644 index 00000000..0ec6bb48 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SkyboxBk.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b72e7625a8d7f9199fc114041a9e6fc9e96da1be7574f5ecb30baff2732aa8dd +size 216142 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SkyboxDn.png b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SkyboxDn.png new file mode 100644 index 00000000..d02bd2fc --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SkyboxDn.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0993765272ba1a248d01be6830f426c484ae53fb4fa55c2dd4d6ba51d37e29e6 +size 2984 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SkyboxFt.png b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SkyboxFt.png new file mode 100644 index 00000000..81068a83 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SkyboxFt.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91e92888d6111b0ec12d1a73038eb24e52bdca181212e76e4f7dca8e3bb7d476 +size 211465 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SkyboxLf.png b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SkyboxLf.png new file mode 100644 index 00000000..826f10d4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SkyboxLf.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:223de74765b5ac07dab15aa7695dbefc144bfcc2b96f5de805363768eab9ab8a +size 204878 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SkyboxRt.png b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SkyboxRt.png new file mode 100644 index 00000000..80fa55e3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SkyboxRt.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f89e1a31d28422de5f27c381bcda479c4790ff4dea3678ab00778123d26e1420 +size 210084 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SkyboxUp.png b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SkyboxUp.png new file mode 100644 index 00000000..5ed59a47 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SkyboxUp.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f6ecc4854b2e75c1e8579d2dfa61ffafd4947bbcc504bbbbe943d4b4e279ce4 +size 126874 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SunRays-Custom.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SunRays-Custom.jpg new file mode 100644 index 00000000..de9b3b58 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SunRays-Custom.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39e9e39faf30d1a03117c8872b7312f8be4652ac13bede2e1031842d10d69d41 +size 966299 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SunRays-Default.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SunRays-Default.jpg new file mode 100644 index 00000000..d81b6b6e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/SunRays-Default.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8d9a8a96dfb22ff804cbb143494c3797b808bfbf41ef6e5d27e70393db68721 +size 142994 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/TimeOfDay-2.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/TimeOfDay-2.jpg new file mode 100644 index 00000000..d5e76c7e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/TimeOfDay-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb35376c7696066db231506014ebde56517d31b9a7a3ac2cb853d824c739f144 +size 151689 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/WithReflections.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/WithReflections.jpg new file mode 100644 index 00000000..7782eea3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/WithReflections.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73e63ffc20bcb2dc3a1fc4599465977c341af48766b5652d6617c357526b65c0 +size 2276965 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/WithoutReflections.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/WithoutReflections.jpg new file mode 100644 index 00000000..8c5dcf74 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-indoor-environments/WithoutReflections.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee49824b0537a26f9ef8b2f47df87a5b6ded7d1d75f365c1560306442d1a9996 +size 2174500 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Adjusting-Brightness-Color.png b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Adjusting-Brightness-Color.png new file mode 100644 index 00000000..a88cbc28 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Adjusting-Brightness-Color.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7150fdb05e6cdb6190dabaa2681e91ac4a01fefacfd3e9f12ec2ec3e02a4cfd3 +size 1529796 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Ambient-Default.png b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Ambient-Default.png new file mode 100644 index 00000000..9f9eec9d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Ambient-Default.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2e8aa068e8e5fd658c2eaf5185f60f3989b569e1741c0ac478c968b8a30c9ac +size 1663900 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Ambient-New.png b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Ambient-New.png new file mode 100644 index 00000000..f1226164 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Ambient-New.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:186fd705a08f08caf7369a54f0a88f197fd06c2688b03352996c6576e79d9f8e +size 1963369 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Bad-Skybox.png b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Bad-Skybox.png new file mode 100644 index 00000000..4a11b748 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Bad-Skybox.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1a352fd0d02c2362b6ec51310857d898dbabb150dc1c57e8d9102a524b523c5 +size 526531 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Color-85-78-54.png b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Color-85-78-54.png new file mode 100644 index 00000000..2bac1a5e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Color-85-78-54.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02c766844467dff3a63208d7a06c41e1dba7e288798c13295dc98d8d2627ddb1 +size 2108660 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Default-Sun-Position.png b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Default-Sun-Position.png new file mode 100644 index 00000000..7d365fc3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Default-Sun-Position.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e462febb37e0776b0e05ece23d214efbc46ccf4d7402bd89fc55ec686914c42 +size 2290232 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Density-0.272.png b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Density-0.272.png new file mode 100644 index 00000000..a1ab76de --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Density-0.272.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6b8b1dc020a7816c536abb33b81f7a80e61087b02c3a673ee93d1dfa865db5e +size 2071974 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Density-0.3.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Density-0.3.jpg new file mode 100644 index 00000000..f17a7486 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Density-0.3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3228111a51dd3175ee7a787914c581b1cfb3a681fe326f6c96510e033506a3e +size 459039 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Density-0.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Density-0.jpg new file mode 100644 index 00000000..990782e1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Density-0.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49391d2769948ad345fecebd0d4c0b78030b6732469a2e57da60d0b73afcd199 +size 488675 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Enabling-Shadows.png b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Enabling-Shadows.png new file mode 100644 index 00000000..2313bfdb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Enabling-Shadows.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f5ad7a34d2232f0f5e9e6ae00bff07b69203fc6239534983bb04c3b314b5ffa +size 1520818 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/EnvironmentScale-0.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/EnvironmentScale-0.jpg new file mode 100644 index 00000000..45376da9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/EnvironmentScale-0.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e17bbb66b366bccbefd213a22d5a4ad98464f8677e813106c0850b9c590da53f +size 403375 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/EnvironmentScale-1.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/EnvironmentScale-1.jpg new file mode 100644 index 00000000..1b54eb18 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/EnvironmentScale-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36443efc70bb51414c5eb42b63f194b69eeda4790cbf955984b57748642556af +size 393379 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Forest_EveningLightingExample.rbxl b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Forest_EveningLightingExample.rbxl new file mode 100644 index 00000000..fc9b679c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Forest_EveningLightingExample.rbxl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95ad55d57c0905cf46685537d8ab0a9ee3767fbef120f50dca1e8b6009eb1c45 +size 3685174 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Good-Skybox.png b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Good-Skybox.png new file mode 100644 index 00000000..6d52ba2f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Good-Skybox.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c393df87b54ae8bab46efdc06334aff70561473e1dbc5f74a46a5b6760c6946d +size 450396 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Haze-1.png b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Haze-1.png new file mode 100644 index 00000000..1be8e54a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Haze-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d66b92d580017c04d739c4f32a7e9841683c524f58ca6608f3eccfc6708597f2 +size 2068314 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Increasing-Range.png b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Increasing-Range.png new file mode 100644 index 00000000..172d186e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Increasing-Range.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1584e2b57a4f3759b0d0da7acfb029042a2d9e468100967f3f38e666a2912a8 +size 1556516 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Intro-After.png b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Intro-After.png new file mode 100644 index 00000000..e9264a71 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Intro-After.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06c902c10409fe4a72531f9b9a8902977a5554f62e0d1dd5d7a8a55989fe0a41 +size 1984143 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Intro-Before.png b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Intro-Before.png new file mode 100644 index 00000000..ea93e1ea --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Intro-Before.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb2bfb85af5294466e7f969ed0bba80ea06e92ba57b9f70cd7307986d1943f77 +size 2217149 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/LightingStyle-Realistic.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/LightingStyle-Realistic.jpg new file mode 100644 index 00000000..1c6e8962 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/LightingStyle-Realistic.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba886d765dadda66b44148ebb7beea7e75918d69245276930c0c3cc2dbbf62a3 +size 442695 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/LightingStyle-Soft.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/LightingStyle-Soft.jpg new file mode 100644 index 00000000..2ce416fb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/LightingStyle-Soft.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b137a4ca08f9b4fe934c2433eec61ffcb57e4e6b4b9351dca3ccb0d1c6d5884a +size 508094 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/New-PointLight-Values.png b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/New-PointLight-Values.png new file mode 100644 index 00000000..3e5852ba --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/New-PointLight-Values.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:feeb51ad4b8021407fe1e7a1a4801f30557f6843ddaded0c9f0621d8d8d1853e +size 1367313 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/New-Sun-Position.png b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/New-Sun-Position.png new file mode 100644 index 00000000..8d9d7ff3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/New-Sun-Position.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a587d7ee9ab447564aad13a863288c91444baba0266b0ca3aeb1586d7000c439 +size 1999776 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/No-PointLight.png b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/No-PointLight.png new file mode 100644 index 00000000..e10bd47e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/No-PointLight.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f631e91c327ebf90759a50a7c6778a890d3a96ac01cc3e3756388a044f9f6bdf +size 902131 diff --git a/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Yes-PointLight.jpg b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Yes-PointLight.jpg new file mode 100644 index 00000000..f5a9934d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/enhancing-outdoor-environments/Yes-PointLight.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:355596ffb2d17598f9076b44938352f4874f27a7d15c5d0a6d8efac489ef4603 +size 317178 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CombatPockets-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CombatPockets-1.jpg new file mode 100644 index 00000000..2c65b735 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CombatPockets-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bfa29a8271702aba4bb87ebea37ddda7ac97b9b4517a664ed0aa4c1f7e08ff45 +size 148390 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CombatPockets-2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CombatPockets-2.jpg new file mode 100644 index 00000000..62288389 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CombatPockets-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:496cbce12f206a79e208ee793b64257775b370d805e4dad634db237b783476cb +size 152033 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CombatPockets-3.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CombatPockets-3.jpg new file mode 100644 index 00000000..439a9a31 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CombatPockets-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47fd7fa5b80d0b4585212ccf3e4bd38962726bfe0f9a5d4e9a29c29a75289560 +size 154512 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CombatPockets-4.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CombatPockets-4.jpg new file mode 100644 index 00000000..7f8d132a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CombatPockets-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f85da6a79913d5ea2346447386e0da46bf08130087a72810e0fb8a1405b83e1 +size 162357 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CombatPockets-Intro1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CombatPockets-Intro1.jpg new file mode 100644 index 00000000..fcc86974 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CombatPockets-Intro1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7e63096cc867b1e1c665b65159e854b8f59957da10099a82178c49f4a8f9b1e +size 102616 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CombatPockets-Intro2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CombatPockets-Intro2.jpg new file mode 100644 index 00000000..83d73289 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CombatPockets-Intro2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e166ac165c1a5f925e1d869385a0461416071cfd59e5f8dd5e7a4f42fbd367b5 +size 82076 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CreatingPlayableAreas-Intro1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CreatingPlayableAreas-Intro1.jpg new file mode 100644 index 00000000..f631ff5e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CreatingPlayableAreas-Intro1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2ce594762a854adfff8f59ed53b1f86f5a4ec46585627d04a09ee4e7cf025a0 +size 287707 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CreatingPlayableAreas-Intro2.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CreatingPlayableAreas-Intro2.png new file mode 100644 index 00000000..311e9788 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/CreatingPlayableAreas-Intro2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:911e5b07365b5cba381a23e74f9967258067cf24a040fe8d4d1e10cd9c06aa78 +size 602607 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Exterior-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Exterior-1.jpg new file mode 100644 index 00000000..30e9133c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Exterior-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b1fe5a46c913b1fc5cf49f4619e7f7cfef98dd6fb1c514443a33d932d23be39 +size 160023 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Exterior-2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Exterior-2.jpg new file mode 100644 index 00000000..86b84888 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Exterior-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ca65851285212cde35c433a169ea7c166e10bc49b9a4b591019f5999a2d5185 +size 163512 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Exterior-3.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Exterior-3.jpg new file mode 100644 index 00000000..a2b4b3c5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Exterior-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2df4f0fe9cd79cd74c5d9c7fa70526f01dd906c798a91c7ef8c21c6d0fe62348 +size 165705 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Exterior-4.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Exterior-4.jpg new file mode 100644 index 00000000..f9746a0a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Exterior-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:acaf2b219910f886380c42e5a4b57849023a059cbfa3232853fb21ea858c3fcc +size 167262 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Exterior-5.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Exterior-5.jpg new file mode 100644 index 00000000..40529a22 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Exterior-5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95c01637f9fd1c872b217ee8ab5761669557bc9f3495104b7e4859b22f339ce9 +size 167855 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Exterior-Intro.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Exterior-Intro.jpg new file mode 100644 index 00000000..aabe056b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Exterior-Intro.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22bdcfea597de1b1571f5331f78b3e9b28ee4ba399798c69c0e93d502220c9f2 +size 118384 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Floor-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Floor-1.jpg new file mode 100644 index 00000000..a69b856e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Floor-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6feb7402b9e7cb822c84f21695445614cbee04c5b09a72665143814f5b9861c +size 263967 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Floor-2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Floor-2.jpg new file mode 100644 index 00000000..fbe99b53 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Floor-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54dce6af6778ea93274cad46d68b897615e4e3f482e6aa4705dac5a05bef8237 +size 196740 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Floor-3.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Floor-3.jpg new file mode 100644 index 00000000..3d506742 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Floor-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9d7c387ce114186e94c07bf5cbba1619bb4db6219f46afc254f5dab5c609eb3 +size 150509 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Floor-4.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Floor-4.jpg new file mode 100644 index 00000000..b0182d17 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Floor-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec247e64ae6be3bd6b34a2adb6cffdf640b695a5cca14ed03c8adb04c4fafe22 +size 150646 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Floor-5.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Floor-5.jpg new file mode 100644 index 00000000..6848c566 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Floor-5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c15985642bc319bb2abed5c3745d69674102c85242386765fc24825ab46df03a +size 142830 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Floor-Intro.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Floor-Intro.jpg new file mode 100644 index 00000000..b850737f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Floor-Intro.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be9202e10ce4e1e5a964a088fe82092daaa82d38a9bd5e72df90496fe5fe75f2 +size 84287 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/GeneralCombatPockets-2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/GeneralCombatPockets-2.jpg new file mode 100644 index 00000000..5fbd1a4a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/GeneralCombatPockets-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:023fee107daba2e7e24c28abff4985fd376f6b3cb3a1f5b04a1a9e4a0a66222d +size 67530 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/GeneralCombatPockets-3.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/GeneralCombatPockets-3.jpg new file mode 100644 index 00000000..ece074a7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/GeneralCombatPockets-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74c34dbd5d75e371df96e871d4c0b81fcc47ca4cf8ef9247449b6cdd20162081 +size 74561 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/GeneralCombatPockets-4.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/GeneralCombatPockets-4.jpg new file mode 100644 index 00000000..dc1763d4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/GeneralCombatPockets-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:486468d8c357b93440d78d1cfd4048ee9cea8ffcdb70328df0d416169e199414 +size 75818 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/GeneralExterior-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/GeneralExterior-1.jpg new file mode 100644 index 00000000..5e816e8e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/GeneralExterior-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:793df9a4f76a83b44a4ef0271b1e7c1257407353fbc1f65bead1077d2569ca75 +size 90596 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/GeneralFloor-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/GeneralFloor-1.jpg new file mode 100644 index 00000000..a105e335 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/GeneralFloor-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:517a0ecb753532962941cb3e4d85cd667211a554e5266b1d5d279bd1b88bf965 +size 58361 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/GeneralPerimeter-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/GeneralPerimeter-1.jpg new file mode 100644 index 00000000..8a04f94b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/GeneralPerimeter-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b002daded2e673408ac625d0a2d920cec6bfde1dcdf5556202dc775eb5ae15d3 +size 61553 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/GeneralSpawnZone-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/GeneralSpawnZone-1.jpg new file mode 100644 index 00000000..faaf4a51 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/GeneralSpawnZone-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2bcc0c6b943ef2dac824b4b861cdc55e33762d1d2dd5d8555f591c82c06740bd +size 62278 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Perimeter-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Perimeter-1.jpg new file mode 100644 index 00000000..29d4e3fb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Perimeter-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e37d526265035eaedc6a58c5320395974b2cd1f4f9c27069906c475fd17d9536 +size 145275 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Perimeter-2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Perimeter-2.jpg new file mode 100644 index 00000000..6f74a125 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Perimeter-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e4a043745e686850a715abdd97fe3a26b9333d905c123e1e5d28244306d0995 +size 130679 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Perimeter-3.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Perimeter-3.jpg new file mode 100644 index 00000000..6ac49ca6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Perimeter-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc30799165ab2e527b816ba25afc52f7b5e75a3edd2f41f915b197ded90a93ea +size 127434 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Perimeter-4.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Perimeter-4.jpg new file mode 100644 index 00000000..3ff3bd3a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Perimeter-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05c3c006ff6726ad7f085ec96bb26de3c862374c5cc29ec3db5002db843c2c4f +size 130732 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Perimeter-Intro.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Perimeter-Intro.jpg new file mode 100644 index 00000000..17a773c7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Perimeter-Intro.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a79b9cd79c83a80cc758c7bf366b43ce0c5f75f35a985c84b45ee599c3ca7728 +size 84456 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Placeholder-Left.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Placeholder-Left.jpg new file mode 100644 index 00000000..a7b4d64a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Placeholder-Left.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:001069be1ca65257c1e739d04176d1315818617e03eeb68869cb1e63b2e5b7ae +size 100857 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Placeholder-Right.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Placeholder-Right.jpg new file mode 100644 index 00000000..91e3513c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/Placeholder-Right.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f81402ef6f1a40a4fabc0bd3582e2fc2861097a240f3dbd6390f651e172d867 +size 117824 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/PlaceholderMaterials.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/PlaceholderMaterials.jpg new file mode 100644 index 00000000..93e5214a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/PlaceholderMaterials.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36158f2a44cdd597ad33081cf02dd231eec6adee65d39be1194cc150c683ac49 +size 243093 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/SpawnZone-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/SpawnZone-1.jpg new file mode 100644 index 00000000..f70a89a6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/SpawnZone-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79dacd14193fbfb32f70aada6e418633864a3605ea998759c5240cbb6a153a80 +size 130617 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/SpawnZone-2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/SpawnZone-2.jpg new file mode 100644 index 00000000..826e8550 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/SpawnZone-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:abd07ce33617cd77af71673e6ed73ac719cbbb04a4a0590098993af5a5adcb2f +size 138043 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/SpawnZone-3.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/SpawnZone-3.jpg new file mode 100644 index 00000000..9b337e77 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/SpawnZone-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f4c487ac9177100ae7b60d6702d9132947a27acdee151bb6c1fb28bb92b64af +size 137717 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/SpawnZone-ExitPoints.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/SpawnZone-ExitPoints.jpg new file mode 100644 index 00000000..b1c1d0f9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/SpawnZone-ExitPoints.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3cef7a9a51b2f951f23524b5e0a075def3b87e86c5f5c1ed3d082fc838189863 +size 220676 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/SpawnZone-Intro.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/SpawnZone-Intro.jpg new file mode 100644 index 00000000..3f1e116e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/SpawnZone-Intro.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ccb6b5f4fade43d4b1eab9f7d74946577367b516dfdbfe9a76bd593f0e2a8b34 +size 81535 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/ThreeLaneLayout-CrossLanes.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/ThreeLaneLayout-CrossLanes.jpg new file mode 100644 index 00000000..17d45132 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/ThreeLaneLayout-CrossLanes.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07938a18cf3613c7a6029d45a12247242075e213cab58fa6724659b45c360ba0 +size 93887 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/ThreeLaneLayout-IntersectingPoints.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/ThreeLaneLayout-IntersectingPoints.jpg new file mode 100644 index 00000000..b5d4c55c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/ThreeLaneLayout-IntersectingPoints.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c503a17bed443541a5a7bddbf31c19127142fbf28c5231fef6b4ab64dc68eb7 +size 88658 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/ThreeLaneLayout-PrimaryLanes.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/ThreeLaneLayout-PrimaryLanes.jpg new file mode 100644 index 00000000..d03dcb97 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/ThreeLaneLayout-PrimaryLanes.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6164db53fc99b6fa65172614275fe54da9ee744f740e72b859dfefa9fcee69e9 +size 99397 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/ThreeLaneLayout-SpawnZones.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/ThreeLaneLayout-SpawnZones.jpg new file mode 100644 index 00000000..c75e4696 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section1/ThreeLaneLayout-SpawnZones.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:287bdba5123cbf06fe63b18b0498421a2b13f4fd7e9d0bcdfc8139bd01e54b3e +size 78927 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/Art-Style.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/Art-Style.png new file mode 100644 index 00000000..06c8f574 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/Art-Style.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a04f9263ce6bf9ca9d8d881070d43a186714b840c51aeba565aac833e587430 +size 3564195 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/DesigningModularKits-ModularKit.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/DesigningModularKits-ModularKit.jpg new file mode 100644 index 00000000..773a9688 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/DesigningModularKits-ModularKit.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c325aafe8ca6448b5c04e6884cc24371e8f4e35ae2e40160c92daa4d3bbc3cd +size 195982 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/DesigningModularKits-Snapping.mp4 b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/DesigningModularKits-Snapping.mp4 new file mode 100644 index 00000000..30a476e8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/DesigningModularKits-Snapping.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d45c25b0b2974187b0419f353bb77e040b4b8145515d4b2f1b0dae35f04d5d5 +size 3868774 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/DesigningProps-PropsKit.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/DesigningProps-PropsKit.png new file mode 100644 index 00000000..ef758317 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/DesigningProps-PropsKit.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1257b1cd04fa86dae2c9deef20fe48ab3f713553fd67fd17a7c874bb1916d57 +size 1200429 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/DesigningProps-Scale.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/DesigningProps-Scale.jpg new file mode 100644 index 00000000..f9bb7eef --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/DesigningProps-Scale.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbd9c50419cb1cfc050c06d590cbc4098f18ed34dd3679210954f603aacb46b1 +size 119993 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/Overview.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/Overview.png new file mode 100644 index 00000000..32a3994c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/Overview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55a84e2afed025fb1067e5b9dc8bd20912a522fcab0e19855a1c2db184b8ad3c +size 935593 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TileableTextures-Moss.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TileableTextures-Moss.png new file mode 100644 index 00000000..515c7c60 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TileableTextures-Moss.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4131c42b16d7932b461c322cda4775585b1f9a06577fc306c5eeee1a4df59377 +size 1071273 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TileableTextures-MossFlowers.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TileableTextures-MossFlowers.png new file mode 100644 index 00000000..584f45f5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TileableTextures-MossFlowers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41d98e36113382934abc7fd9ad199d7a8aa8b418bad6e0208155e1bc7dc7114f +size 1398820 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TileableTextures-MossStones.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TileableTextures-MossStones.png new file mode 100644 index 00000000..db07fbe9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TileableTextures-MossStones.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3250ab89f75a84cd74e68642d344144e5d957eca922190f0a1d691b348eb890d +size 1060649 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TileableTextures-NoElement.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TileableTextures-NoElement.jpg new file mode 100644 index 00000000..380dfa50 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TileableTextures-NoElement.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e927791d28bebf64880ba20406297bfa6b38f0b694b08575e9b3fc8278ce513 +size 139194 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TileableTextures-Part.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TileableTextures-Part.png new file mode 100644 index 00000000..1bbedd6d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TileableTextures-Part.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2264981b0238fa8cd6a164c9de1e357414a4a4218cf5369c932356842a52fa21 +size 645045 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TileableTextures-Stones.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TileableTextures-Stones.png new file mode 100644 index 00000000..9673a93a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TileableTextures-Stones.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9701580ec1d7814e10adf1fc97d278c5dbf804c1b26cc693932b63a3c3e76f19 +size 804299 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TileableTextures-WithElement.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TileableTextures-WithElement.jpg new file mode 100644 index 00000000..8af0d878 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TileableTextures-WithElement.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:019072fadfaddcb7820c1f5b510b55b3a2adee6e4757ff2636dba2c034e830a8 +size 151022 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheetTextureMaps.zip b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheetTextureMaps.zip new file mode 100644 index 00000000..00e63cd3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheetTextureMaps.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd34e14edbaf9bd720b906d2244bfa99c3a23cb0c0c6c91da68ce6795fd34f16 +size 30412070 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheets-Albedo.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheets-Albedo.png new file mode 100644 index 00000000..18a3c2e5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheets-Albedo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8fac920fce2ee00d6c97b0847640796aa46ea5f9b70ebecacceeb5a7d4c1c15f +size 2566938 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheets-Ceiling.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheets-Ceiling.jpg new file mode 100644 index 00000000..5aac4cc4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheets-Ceiling.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3204cfd1b1ce5ac41808ec2647413e89f812b539d46ebdc6339f99832b47f52 +size 123139 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheets-Doorway.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheets-Doorway.jpg new file mode 100644 index 00000000..14880da1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheets-Doorway.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b416eae3ad83764fa6ca710e310e254784355f8483a0fe4741e2676c75e4e26 +size 195674 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheets-Metalness.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheets-Metalness.png new file mode 100644 index 00000000..865c1fa2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheets-Metalness.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:428357348ec0c99bbf3c1f1915d94d408e63e63fbcff2153021aa93b75533500 +size 2950 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheets-Normal.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheets-Normal.png new file mode 100644 index 00000000..451e7bb8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheets-Normal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cfffa9bab55f8d7f1f314132c762f845d5852a4b5766f6fd66dd90bc50a409fc +size 790995 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheets-Reader.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheets-Reader.jpg new file mode 100644 index 00000000..11c540b9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheets-Reader.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d16064874a6406db9cef8e05ef88f3836b236101c78e271479705066c1d94952 +size 21244 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheets-Roughness.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheets-Roughness.png new file mode 100644 index 00000000..3a190400 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/TrimSheets-Roughness.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d878813f90006ba1d2bd2a333e89b676a4a6067c7964e8395138f391157b56b4 +size 49373 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/Trimsheet.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/Trimsheet.png new file mode 100644 index 00000000..2e1ed100 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section2/Trimsheet.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c718abef221f8b457f89bc2caeaff94e4e6bc99e2977337f615237ceb5c44d5 +size 2738527 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CastShadow-Disabled.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CastShadow-Disabled.jpg new file mode 100644 index 00000000..ecde7329 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CastShadow-Disabled.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18db96b1f98551f6a8990f9cdc89cda6445e2b28d7b114c0a29822c78846850d +size 225379 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CastShadow-Enabled.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CastShadow-Enabled.jpg new file mode 100644 index 00000000..d6846e6c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CastShadow-Enabled.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70b0b8dcfef391e1b91ad331113d9a38c6d2c3432c7d834e53ae1a75448c4df1 +size 766279 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CollisionFidelity-Box.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CollisionFidelity-Box.jpg new file mode 100644 index 00000000..9d9f230c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CollisionFidelity-Box.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:254fe7d30ffc1212a2748f2f48299d4859ac3054d43a24ae8fd31b02cda93c6c +size 52562 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CollisionFidelity-BoxTop.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CollisionFidelity-BoxTop.jpg new file mode 100644 index 00000000..16c1a633 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CollisionFidelity-BoxTop.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7ad5aff21580549184605b8bf1432440ca256aa29207ea2bb78639a57be3a43 +size 68308 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CollisionFidelity-Default.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CollisionFidelity-Default.jpg new file mode 100644 index 00000000..879ede68 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CollisionFidelity-Default.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9dba7079e0ca42c5a16be818fc977b8f2bef98277d3da7211f63c16478a8eee2 +size 60569 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CollisionFidelity-Doorway.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CollisionFidelity-Doorway.png new file mode 100644 index 00000000..3e9f1329 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CollisionFidelity-Doorway.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:120e826822f8a30d82495ecbc025e531ae53bcb01b653dc2b04f11cd89f6feff +size 109103 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CollisionFidelity-Hull.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CollisionFidelity-Hull.jpg new file mode 100644 index 00000000..96ccd805 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CollisionFidelity-Hull.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e17da2a5361e6fd0dc3cb221fd26be4e9a55c10d8242404f43cd0a9ebfd5adff +size 51537 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CollisionFidelity-WallMesh.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CollisionFidelity-WallMesh.jpg new file mode 100644 index 00000000..e3428743 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CollisionFidelity-WallMesh.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b3682d64bb6d49d4d4620d7b7493e60ef1fcf7b431d564bbef0f2c30cfde4e8 +size 84928 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/ConvertingAssets-2.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/ConvertingAssets-2.png new file mode 100644 index 00000000..1f3e81a1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/ConvertingAssets-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4eff1a2a4759dfcf85b8ac469ce737eb5a81191e73445043793a0c87a77293ba +size 4668 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/ConvertingAssets-Intro.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/ConvertingAssets-Intro.png new file mode 100644 index 00000000..666880ef --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/ConvertingAssets-Intro.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4aca9a2022d60040cb3dfe78c80a1cfbd3cb36cfd45e73146619402ccc879d12 +size 44305 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CustomMaterials-4.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CustomMaterials-4.jpg new file mode 100644 index 00000000..d25881c5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CustomMaterials-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee205f6cee0c457f0e20931ee0e4b384d93da7714d19c75b3f25efbb78fe4906 +size 34898 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CustomMaterials-5.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CustomMaterials-5.jpg new file mode 100644 index 00000000..bc1499bd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CustomMaterials-5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:984eee7d3d7dd14809620fac3069d0144c22411315994b9e664f8702be050d17 +size 22163 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CustomMaterials-7a.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CustomMaterials-7a.jpg new file mode 100644 index 00000000..569939fd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CustomMaterials-7a.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e57023eca6080420251030abbf79c1115b45aba02c4c9cf25d3f39c9fb82aad7 +size 81150 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CustomMaterials-7b.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CustomMaterials-7b.jpg new file mode 100644 index 00000000..c5782c83 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CustomMaterials-7b.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff87666636ae989dc6b90499e16e0b463f9347fa1e936c33dba2c9ce8d72494e +size 244944 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CustomMaterials-8.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CustomMaterials-8.jpg new file mode 100644 index 00000000..c03165f8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CustomMaterials-8.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1bc0d6eaf9ad40e9f1b57496151de287c19ef8836824e3a5d4b26fc688cab3ba +size 11129 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CustomMaterials-9.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CustomMaterials-9.jpg new file mode 100644 index 00000000..75936334 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/CustomMaterials-9.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fce0e668c17ab6e7cfdce6ea165ee1d3f2cc92da3107e67571f38f1cb9505a8 +size 13545 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/DoubleSided-Disabled.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/DoubleSided-Disabled.png new file mode 100644 index 00000000..0698be03 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/DoubleSided-Disabled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89a1515d1c5517bf2413d4254f582e066f269b0f51e5f700b9c3b4cc72b3602a +size 272792 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/DoubleSided-Enabled.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/DoubleSided-Enabled.png new file mode 100644 index 00000000..1dfe634a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/DoubleSided-Enabled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a75521936c0077454cf23ba727e0ee6203e253173afd9406c2d09e497ec9a8e4 +size 287347 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/Importing-3.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/Importing-3.jpg new file mode 100644 index 00000000..71113348 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/Importing-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c93d9cde8f6142813a1effd003dc3ed00aa5b715649817dfdd4248e3538d124 +size 135575 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/Importing-Intro.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/Importing-Intro.png new file mode 100644 index 00000000..a275a7cf --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/Importing-Intro.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2fd171a9bf9af9c319712cafd00a78d85ae557f409f7615727d63f670628f6f +size 9799 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/Overview.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/Overview.png new file mode 100644 index 00000000..120e2fe1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/Overview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8459778d446f0de4fe4d5965c9a08337fe8ba4948583bcc153a25f10739c4a32 +size 734039 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/SAPackages-3.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/SAPackages-3.jpg new file mode 100644 index 00000000..52eb90af --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/SAPackages-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b066085e62c41b8962d901b0db587fcc6642d427d04fefa7b2d77aa05208a638 +size 13485 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/SAPackages-7.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/SAPackages-7.jpg new file mode 100644 index 00000000..a0652a52 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/SAPackages-7.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7eadc16a07342db1ae2172f21a211bc3d97e1f70450d9ed0201fee5bbdcb354e +size 5646 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/SAPackages-8.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/SAPackages-8.jpg new file mode 100644 index 00000000..a89d26e6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/SAPackages-8.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6707f45df115a61caab6a673083b589e1a2725c15d376adc82a1019c5370d7f +size 7782 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/SAPackages-Intro.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/SAPackages-Intro.jpg new file mode 100644 index 00000000..32320165 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/SAPackages-Intro.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b3cf45519ca765647b4df4232e1044cb0d61e223c70f7dde697b1233730d19b +size 281111 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/SettingParameters-CanCollide.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/SettingParameters-CanCollide.png new file mode 100644 index 00000000..c723315a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/SettingParameters-CanCollide.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:640f67fa4d630e4e4a30dcb8b8f19228b1182d2f69c287a6549eb96c4c3f2666 +size 1515608 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/SettingParameters-CanTouch.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/SettingParameters-CanTouch.png new file mode 100644 index 00000000..7ee8209d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/SettingParameters-CanTouch.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6db0e23543cbbf4ec7f9aeb6b314aad94838558aca6e468dbf6722959d68829d +size 17223 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/SettingParameters-CastShadow1.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/SettingParameters-CastShadow1.png new file mode 100644 index 00000000..d6ad2277 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section3/SettingParameters-CastShadow1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83971ac0dfaae364b029cc83647bbec16fb29498d308589a2dd65d9093d44354 +size 578080 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/ApplyingLibraryDiagram.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/ApplyingLibraryDiagram.png new file mode 100644 index 00000000..86b6984c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/ApplyingLibraryDiagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8768ef7f2994a9e18f15b48cb8617801c357166912f6f5cfcb5ae834c4be6813 +size 27594 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/BackgroundClouds-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/BackgroundClouds-1.jpg new file mode 100644 index 00000000..64eae365 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/BackgroundClouds-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d80dd184da107f790b57bf0b06cb870e6c230a2c8a9883a10b434d657404f97a +size 13611 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/BackgroundClouds-2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/BackgroundClouds-2.jpg new file mode 100644 index 00000000..00500c40 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/BackgroundClouds-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0021b3a3bea98ad4934dbf73addd6f8c5bbd2302a2e6f036ce080d33ce992ea2 +size 519883 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/BackgroundClouds-Intro1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/BackgroundClouds-Intro1.jpg new file mode 100644 index 00000000..8147145a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/BackgroundClouds-Intro1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d14d296b450e4e2d3c7dd2f58f87fcf2d3c04faf0293fdca340f4165034546b6 +size 488102 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/BackgroundClouds-Intro2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/BackgroundClouds-Intro2.jpg new file mode 100644 index 00000000..31f314ab --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/BackgroundClouds-Intro2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a023c91cbb9080384e05eb75f7847ea92cb298e115f93112bea70ef1585437d +size 507158 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Ceiling-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Ceiling-1.jpg new file mode 100644 index 00000000..acf4d6fe --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Ceiling-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cea3c260db9e4f82739864fa895a9f53c4da0d682c22f1223180668594c1e24a +size 179583 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Ceiling-3.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Ceiling-3.jpg new file mode 100644 index 00000000..f0a4f1f4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Ceiling-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0d7a7ddda7c34d0de9fb6439195fcc0ec7fe248452bf966e2d12b860059cdf2 +size 173684 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CloudVid1.mp4 b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CloudVid1.mp4 new file mode 100644 index 00000000..10009994 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CloudVid1.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63252eaab62b36ea83ef14c264d029c80629a11276c5392c8b6a9b0a2b346714 +size 1918365 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CloudVid2.mp4 b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CloudVid2.mp4 new file mode 100644 index 00000000..5031c33d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CloudVid2.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:801b893e18b4d1ebbaab614058b85f856e4857bd6f0d1891c13956c80ee71452 +size 4121840 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Columns-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Columns-1.jpg new file mode 100644 index 00000000..a2371867 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Columns-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf8ff9eefcda91ca0609d1739ee7ea86ac636ace7d0e0aae9a4cdd172e2e1b2e +size 184675 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Columns-2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Columns-2.jpg new file mode 100644 index 00000000..c712a13d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Columns-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b56ab9be55e77362510abdff56a3a830823dc66338b67847cb38f827b868a2f +size 188430 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Columns-4.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Columns-4.jpg new file mode 100644 index 00000000..9cd752af --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Columns-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8af31a48c3ee556869e77e4cb97548715474bfbf764e0f07434b8b91f4675f27 +size 188615 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Columns-5.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Columns-5.jpg new file mode 100644 index 00000000..526e20f5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Columns-5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8378455311012db02a4caf14f72f9b321b59c6c8a663be9cb578156ff379b26e +size 188999 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-1.jpg new file mode 100644 index 00000000..40c54992 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c06b3b1bdc1d8ed6db066e5667a6cf335ffc05a6252bc252bc056a0b776a2caa +size 337450 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-10.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-10.jpg new file mode 100644 index 00000000..0d00c043 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-10.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60fc7867c7793ed2e04f0b12ae6362b2f36fdff7aa1c129702141d48073b76e0 +size 343202 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-11.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-11.jpg new file mode 100644 index 00000000..25f34c86 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-11.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc6f84fb43a3632d53216e4aae9c8809f38e341ed515684c330b52e046bcedad +size 344278 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-12.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-12.jpg new file mode 100644 index 00000000..b7021347 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-12.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5985ac258faef07286e414b7bddfb5bb8182d51eec61eb929c2ae517498838e4 +size 341531 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-13.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-13.jpg new file mode 100644 index 00000000..abd10f00 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-13.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6478fb48f87d18b86d15090dfd1c4cf2c891821eeea373eaf12b32ed1f37816 +size 345708 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-14.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-14.jpg new file mode 100644 index 00000000..e4f1081a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-14.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ea019ddb23a53d6f68a27656d9e74aae7ccaf75d8796b3b72911ef00ef33d84 +size 345748 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-15.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-15.jpg new file mode 100644 index 00000000..41853257 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-15.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:abea9b633bc4b4a6663497cd0c4ebc26968835ed55e7a0a5b6444a0f5dd3950a +size 347254 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-16.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-16.jpg new file mode 100644 index 00000000..9a5ab72e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-16.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b35fcd4c27ee4d5f2cfad1c5e2ba61f03b70dfca767fc377b070b75fabee6482 +size 344659 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-2.jpg new file mode 100644 index 00000000..fbd66311 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bf6b42dc305ac0f4dbd3aa2e639e7fdfb3e42438444961f373c81d68b1ed04a +size 335968 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-3.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-3.jpg new file mode 100644 index 00000000..26187138 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2219fb7066e151942b7ae1ef9eadbdf440ad4a3606ecdceddd81310a10c55036 +size 335034 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-4.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-4.jpg new file mode 100644 index 00000000..e5f620c9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a3cde3223992f472ad9d24ed26e231231684fa1f3dd380ec2827d0a25ed1cc7 +size 330971 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-5.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-5.jpg new file mode 100644 index 00000000..5827b1f5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f5b7053c6a1c473f54640c8db92030fd9c2a39eda77ceaa141af95a5bdf1d88 +size 336628 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-6.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-6.jpg new file mode 100644 index 00000000..f185df07 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-6.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c90ec854b6bde994dc0379807118c881b9facb7dc2978030af544f4973daa3e8 +size 336512 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-7.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-7.jpg new file mode 100644 index 00000000..76e1bfba --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-7.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54584b769d7dfc392ba1b141a2d642063ed2413fcc5620e806f6e07b298248df +size 337678 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-8.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-8.jpg new file mode 100644 index 00000000..ffbe65b9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-8.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1e92c6df5f79696c3ce1b3b1c041d0ca1bba2832b80beea8600e6d209be4df7 +size 339197 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-9.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-9.jpg new file mode 100644 index 00000000..316cf755 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-9.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:efc4af2de19d633f8e042eb0218dda6c6371129376f990715ed67f3a824107e8 +size 344661 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-Intro1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-Intro1.jpg new file mode 100644 index 00000000..5d3b6b45 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-Intro1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df3ba8b2abc7229c837909fbb0def352936d29e2d1f4a2ae0823ab790712eddb +size 112460 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-Intro2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-Intro2.jpg new file mode 100644 index 00000000..0d49db96 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-Intro2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f8649e3fda8abeb545aeb1943d8726a9baabf6aa1f0611af49e42ec5d2c732c +size 156100 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-Intro3.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-Intro3.jpg new file mode 100644 index 00000000..c6678b4f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/CombatPockets-Intro3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2148f3276796221defb9e09ad365824f6505702fd184bebed29f68e6015037da +size 77267 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/ContainingPlayableArea-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/ContainingPlayableArea-1.jpg new file mode 100644 index 00000000..cadb9b9c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/ContainingPlayableArea-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dae4cffbc85d77b27df2a36bea9f229cb62dd56e17e441666bf5f44862e548b1 +size 232134 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/DeletingGeo-1.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/DeletingGeo-1.png new file mode 100644 index 00000000..d8b2d6e4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/DeletingGeo-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d328319fffbdfe2e01a1d76406814883441fd368c8230f95662d87d900432578 +size 557761 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/DeletingGeo-2.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/DeletingGeo-2.png new file mode 100644 index 00000000..065d0a3f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/DeletingGeo-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2ea95369f0c75a0605bfd17c99c0e1fdeab0f47b7c7d49451ba32b06e0f1195 +size 486954 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Doors-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Doors-1.jpg new file mode 100644 index 00000000..14d256ba --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Doors-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e344b66cd1ef3dc59782b7bfba202ad8c4024ef445a270c77ca95a4ebaed5a1 +size 230264 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Doors-2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Doors-2.jpg new file mode 100644 index 00000000..561929a6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Doors-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:94b9a2416cb7749f5f703cf3237d5dd7d6eacec6df51c33d207cc753321093da +size 228881 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/DustParticles-4b.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/DustParticles-4b.png new file mode 100644 index 00000000..e3df8c16 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/DustParticles-4b.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63a1ec6d2dac271c80940d9c034aec9fca433b57b5109111a51e808428cd348f +size 9319 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/DustParticles-4d.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/DustParticles-4d.png new file mode 100644 index 00000000..b3ae48b3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/DustParticles-4d.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7079f359293791d232866e8196ce29c4105aeb17548da5eb27446018ae7af5cd +size 15353 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/DustParticlesVid-1.mp4 b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/DustParticlesVid-1.mp4 new file mode 100644 index 00000000..fb35e26f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/DustParticlesVid-1.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8732fcb0682971980f6e1b719d9e8e5e1b75666efb7b4355e2572704a1f040f +size 954102 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-1.jpg new file mode 100644 index 00000000..655d9aaa --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c66a9c679e95f50bd4b54c292cc223724eb19ae429334dad5de02232970cf4dc +size 303814 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-2.jpg new file mode 100644 index 00000000..49c4a8d1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:623383eae59d137988fda6add8d32dadf4e63009938c9080744b71f255464dc8 +size 317904 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-3.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-3.jpg new file mode 100644 index 00000000..50d2b872 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ea7924d8e1f0ccd992b1f40bf27e85d666792c3d78b91dd7241c9ea5c80c1f9 +size 324455 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-4.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-4.jpg new file mode 100644 index 00000000..4db84fbd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a89912b562e53d853682d2827812175912343d77950dc610999877dc35f3ed4 +size 331079 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-5.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-5.jpg new file mode 100644 index 00000000..50ac8ef2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c628d17f8a6c67f6d406fb3a04e41c3a4630824b582fe82a871864f71a7b27e +size 329036 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-6.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-6.jpg new file mode 100644 index 00000000..a88da5a8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-6.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5d12a2ae0684dc6c0e40474481cc2796fe4f4a9815981022f2be0984481f8e0 +size 201445 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-7.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-7.jpg new file mode 100644 index 00000000..99b30bf8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-7.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96f3c2657bd3e9bcae77031e9480e966440b5d12b5fe4fb43fcf3bb84e66257c +size 198249 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-Intro.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-Intro.jpg new file mode 100644 index 00000000..7fa39b20 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Floors-Intro.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5deb2974bf30d758a2840b03e69ebe9af73a7170b4f488a4146c37822d562f6 +size 51171 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/ForegroundClouds-4a.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/ForegroundClouds-4a.png new file mode 100644 index 00000000..b14dfdee --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/ForegroundClouds-4a.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93b677088a5d0e9383b076fb150987abfcf5b6440206a7660d99b4f056b1a02a +size 4587 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/ForegroundClouds-4b.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/ForegroundClouds-4b.png new file mode 100644 index 00000000..69e9bb07 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/ForegroundClouds-4b.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b65472a3436c65fa7319955ff72e0970596687c8535954044a3b335074e0112 +size 13313 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/ForegroundClouds-5.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/ForegroundClouds-5.jpg new file mode 100644 index 00000000..d9fa7144 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/ForegroundClouds-5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6838d03a8ba5d44d31ed18cc5a2466cc07a435d91e792024ff8e4787ae6c261 +size 203529 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralColumns-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralColumns-1.jpg new file mode 100644 index 00000000..d9aba941 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralColumns-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eac21f8e785e6f8ec8aea257e3b7f329f534cee4d012132b00194174674ff4fc +size 290370 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralCombatPockets-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralCombatPockets-1.jpg new file mode 100644 index 00000000..e22de086 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralCombatPockets-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc7467996d15f04fadacc369a2607b304184b2d09bc1da4636ec27e274f996cd +size 274812 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralCombatPockets-2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralCombatPockets-2.jpg new file mode 100644 index 00000000..6653e102 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralCombatPockets-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0191e431231d41cbe7e5be3e1f594ee308896c71bc98c35bbabb8b7fc17864ad +size 274585 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralFloors-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralFloors-1.jpg new file mode 100644 index 00000000..34ce27f6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralFloors-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e9ff0e74e047d1cc261f04394f605d6bcf874ac805c75142f78a80b3964d891 +size 235824 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralFloors-2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralFloors-2.jpg new file mode 100644 index 00000000..ef3374cb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralFloors-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a50c4b24ef58a3533dd4e920cf833f96cd313013b24242a7ea7e02924a79d940 +size 250608 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralFloors-3.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralFloors-3.jpg new file mode 100644 index 00000000..ddd62f4b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralFloors-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48ba18caee7d57ce070c003bdd1c542a55b4ad99c0022a94eb2b7b5ce8e882ef +size 248732 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralFloors-4.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralFloors-4.jpg new file mode 100644 index 00000000..39dfbced --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralFloors-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1599bd18e5f5211ed79dc4b43ca9dce4ef4198710beeefdf0e6d1a0f95120628 +size 250240 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralFloors-5.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralFloors-5.jpg new file mode 100644 index 00000000..e72872e4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralFloors-5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0179044636bed7869783de231f192e9cc4732192982c5070d4257df6286e5210 +size 249335 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralFloors-6.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralFloors-6.jpg new file mode 100644 index 00000000..d725a5c4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralFloors-6.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5732b04be66048b28d90f6ebf2a2ea2292db8736ade6296c09fccc2103d730ab +size 262635 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralTowers-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralTowers-1.jpg new file mode 100644 index 00000000..161c8f15 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GeneralTowers-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:746a024ad22be3b14a38e66b3c39e5c8d3b9ec12a6f8aa6b379f90486e3bf80b +size 281415 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GlobalLighting-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GlobalLighting-1.jpg new file mode 100644 index 00000000..a88dfa36 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GlobalLighting-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27cd2626dedd0dc4e171bbbd10a59e9882fb2516547a3c7b237f45dbf549efcb +size 234609 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GlobalLighting-2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GlobalLighting-2.jpg new file mode 100644 index 00000000..85bf7fd4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GlobalLighting-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4b6dc262f58f91bc2db5f344de892d4133a4a78501d305a22f6b1bbc707f082 +size 225712 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GlobalLighting-3.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GlobalLighting-3.jpg new file mode 100644 index 00000000..20c6034b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GlobalLighting-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a97130e520f4660cf50181d062e3b1ba6180adeb13ac3a27188ae6a7589af65 +size 227638 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GlobalLighting-4.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GlobalLighting-4.jpg new file mode 100644 index 00000000..3adfda1a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/GlobalLighting-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b439993ef271e13c1b5c5552475baa7e4503e2f16ebd03a036e24661d7447a4 +size 236763 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/LocalLighting-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/LocalLighting-1.jpg new file mode 100644 index 00000000..b93f24b0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/LocalLighting-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:525fde2ee2d748960e3eae2991135bae3f1d5f639a95c5b2f2ad144ded3203a1 +size 234055 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/LocalLighting-2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/LocalLighting-2.jpg new file mode 100644 index 00000000..05521093 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/LocalLighting-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a59ae400363cd0a5db59ccde2387856374b21bf9558696e776058104e45e6bd2 +size 240032 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/LocalLighting-3B.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/LocalLighting-3B.jpg new file mode 100644 index 00000000..14b3855d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/LocalLighting-3B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93c6e6e7ddd5a0ee55a5560c0a1bcdf3123343dea03a24e809e9f711417333de +size 227450 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/LocalLighting-3a.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/LocalLighting-3a.jpg new file mode 100644 index 00000000..8eb951fb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/LocalLighting-3a.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f13ff8885f190edc651f2392a28d8593cd5cfdba8d3548fb4460a07dd183dadc +size 233158 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/LocalLighting-4.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/LocalLighting-4.jpg new file mode 100644 index 00000000..ac0a09bd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/LocalLighting-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bdbbae9c01aca59676f7e99606ba0a6ba8080c787051a6f39f455f06d65ef0d8 +size 227055 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/LocalLighting-Intro.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/LocalLighting-Intro.jpg new file mode 100644 index 00000000..69e1d748 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/LocalLighting-Intro.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4877c870bbc40f9db5fe994e63b1d9152de67d0a4f8a4d7080ed5d4509063d2 +size 254926 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Overhang-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Overhang-1.jpg new file mode 100644 index 00000000..83078edb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Overhang-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb342e471e3c81cb5a145b32774ca9534f4359eef24261935fc6207ee376f68c +size 152633 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Overhang-2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Overhang-2.jpg new file mode 100644 index 00000000..dc899f46 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Overhang-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33046b2a27b6fbca63fb5c424d64cd0d64efc298ff7188977f833e089af77cb9 +size 154516 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Overhang-3.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Overhang-3.jpg new file mode 100644 index 00000000..1cd20518 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Overhang-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:994f3359684ad5a70e9bbb47a3a14b2a8c44eca739c84e2e85bed142f3a17cb6 +size 150591 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Overhang-4.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Overhang-4.jpg new file mode 100644 index 00000000..b7450fc5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Overhang-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af7856b0080631de1d6bda2036b6335e018ca89c5c590c1d1ee1a8397ae4ec24 +size 153326 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Overview.png b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Overview.png new file mode 100644 index 00000000..5529dcdf --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Overview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e9096414d74263c916a17a9ad720fc15e354ce9364b73e9750690a2241ee78a +size 948549 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-1.jpg new file mode 100644 index 00000000..4e78c3f4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:139c07660c854a638d50c684e24effcc8b372af4d69913f9cca8e85898305ec7 +size 335031 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-2.jpg new file mode 100644 index 00000000..e714a452 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1f7b6c7cd0190586bb7cc5c6aa133f99a52f617441073ef05d2364272be29b4 +size 651890 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-3.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-3.jpg new file mode 100644 index 00000000..d0520bec --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bae0878d65439bcfec2af671aee06861754acb89da3bc93da2e69fa1d90a717a +size 343449 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-4.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-4.jpg new file mode 100644 index 00000000..f27b598f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30c24bf10adbc6e3e8a2b3ab8472aed1931f9033eba096eaaf63e03d6b55b240 +size 350512 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-5.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-5.jpg new file mode 100644 index 00000000..a80176d3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66be7bf7c47efc1bd9fad1bbdb5dfb3e65bc0e5638835b7cd9dbfe7be3249641 +size 349771 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-6.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-6.jpg new file mode 100644 index 00000000..5b7d845c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-6.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ffd213528661d578dcf082a605218a935c70835fd55347b7c22a20ca9aa2808 +size 348612 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-Intro1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-Intro1.jpg new file mode 100644 index 00000000..882939f5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-Intro1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6cc1992932275dfc6e5fd691babe73ff969e55a8de2af2b4adf29c71953040b2 +size 172594 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-Intro2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-Intro2.jpg new file mode 100644 index 00000000..5d877f20 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Perimeter-Intro2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f545780a91c57a0fac0dfb48f17cf97cc9a81c81bcfe318e2ed09cb94efb067c +size 135807 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-1.jpg new file mode 100644 index 00000000..7f34ae83 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:765ca2e04c043e6c9a341b70a3fc150f3339bca350613a94f164c8b076787c68 +size 195978 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-10.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-10.jpg new file mode 100644 index 00000000..feceee55 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-10.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3dc4da1f8e6236d923fb0be5ecec1c1ea6f80685acd2ab32db760bdabf3f90ba +size 309370 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-11.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-11.jpg new file mode 100644 index 00000000..ab4a082c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-11.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af9ee01118798bacd109d5b73d114168dda9d318de7986a2698bf5d319536aa1 +size 196117 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-3.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-3.jpg new file mode 100644 index 00000000..3f4ca109 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04cc73304b4c585a6566be36e0a5cc7f6fe72ca21d964b6b7241c7de747c56c5 +size 194864 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-5.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-5.jpg new file mode 100644 index 00000000..41aa777e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f8399cc5730b13e2b9c1a5eb433b19777e9113ec562e8aef034262d9a3f3f8e +size 196470 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-6.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-6.jpg new file mode 100644 index 00000000..49764d66 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-6.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a573555ae6d5a6e450d0fcfa258643a4e85a1ffb5955ceefc202eb513e78a01 +size 174920 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-7.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-7.jpg new file mode 100644 index 00000000..fa6ad8c2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-7.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8a33f19a70471130883c7a0fe986b26874a5c820fc41566a06771478986f93d +size 179867 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-8.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-8.jpg new file mode 100644 index 00000000..30f9c394 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-8.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8166510afac9d9a71644487cf71e64e2039dedf9fb64054a2d833f40ffe5a9d1 +size 189442 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-9.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-9.jpg new file mode 100644 index 00000000..8edd6736 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Planters-9.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a3862588c1906d0e13cbd26fd1a2741f3065219bea99a9ee61168d077f8c1d6 +size 288348 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Roof-Intro.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Roof-Intro.jpg new file mode 100644 index 00000000..8be32d4e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Roof-Intro.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:056a9b5f8cbd9726c15d55ac57ea65fbf88146b084ed189f2ccad8c8f092d814 +size 172413 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-1.jpg new file mode 100644 index 00000000..d6dd3a52 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:794e54f48bf48112adec15415a8eef552f6d101bb4ef990b945a288432738c7b +size 196337 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-2.jpg new file mode 100644 index 00000000..3c4c5650 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:372ed2c6182d55ce7b7fba746ef7f28cec79f1ace4ae9212e67166e3ef774d60 +size 195842 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-3.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-3.jpg new file mode 100644 index 00000000..e138b236 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9bfa763da79aeeff52712ec34e94cd36fb49f911fea57ef7a651520f56ac5ff +size 197917 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-4.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-4.jpg new file mode 100644 index 00000000..55645d9d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a82876471279a70f2dcc0664be58865a0b46fc9a1173370bb8e00f83716dd0fd +size 198681 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-5.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-5.jpg new file mode 100644 index 00000000..8b4dd0d7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3dd874d6c0e79729dc690fecbbdffb5663d590f80ab6607c7aa8d2cfacf75df4 +size 198049 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-6.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-6.jpg new file mode 100644 index 00000000..63286f0b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-6.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac712615acf5ba1763e4a292e37bdb0255d8d8001f6ad27eccda46bf020104d9 +size 197794 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-7.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-7.jpg new file mode 100644 index 00000000..348e04e9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-7.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a89b824e471a38dfb9b4800f705a5cf5dc186808aa37efb6329f7cdcf0e3c05 +size 197433 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-8.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-8.jpg new file mode 100644 index 00000000..84ac1b8d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Skylight-8.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:296a3799f2e87014428fc7c08e2f255e55419f9262dce466f56dbb4a1ecfe174 +size 196720 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/SpawnZones-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/SpawnZones-1.jpg new file mode 100644 index 00000000..9134c778 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/SpawnZones-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8407907b093f61e0832149d08b2e1852cb5796f7c3b4f0e7cbfd8bde879615f7 +size 328268 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/SpawnZones-2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/SpawnZones-2.jpg new file mode 100644 index 00000000..a1f7ddad --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/SpawnZones-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4406b2ffd566c6aa3d8d08fae972d189ed6dc4896fec5bcc0c43db1272b4649e +size 326668 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/SpawnZones-3.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/SpawnZones-3.jpg new file mode 100644 index 00000000..489b4135 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/SpawnZones-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:713117e2b25b8cb7fd9672e35ee971d524ff504c1b25c06437b1a98d7e58ed49 +size 332561 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/SpawnZones-4.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/SpawnZones-4.jpg new file mode 100644 index 00000000..adb16e35 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/SpawnZones-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4bd8bd77c9f7d30e1fba526e674773519ff75f31caadb0aa6a5cce209062314 +size 332427 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/SpecialEffects-Intro.mp4 b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/SpecialEffects-Intro.mp4 new file mode 100644 index 00000000..b66f90f4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/SpecialEffects-Intro.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:676b003e789eb84fd32d1d2d30645ff7d00d808d084c34451708907977aef4a9 +size 4636810 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Terrain-10.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Terrain-10.jpg new file mode 100644 index 00000000..ecaaa818 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Terrain-10.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e92d8586343ee13d92d812181cad76d1b80b9c394630ca58a8eac372707cc5a +size 174533 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Terrain-3.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Terrain-3.jpg new file mode 100644 index 00000000..2ee17ada --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Terrain-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cfef0ed29a68006b1372455e8a49bb319055c942e703fbeeb9bb88442bb0a2da +size 25175 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Terrain-4.mp4 b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Terrain-4.mp4 new file mode 100644 index 00000000..0c301c58 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Terrain-4.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1fc0b70b24c1107d53bd2981db1b8c0c95b4bb73a20763ba1444d5ef22ac5541 +size 23373100 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Terrain-6.mp4 b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Terrain-6.mp4 new file mode 100644 index 00000000..64f06bad --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Terrain-6.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:260f4dc916a946454e7bd184e396c9ca20061ac5da6ff3c5d676ba12e1bf63b3 +size 43178132 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Terrain-9.mp4 b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Terrain-9.mp4 new file mode 100644 index 00000000..95498b9f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Terrain-9.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cdddb66f807e32bf42bb86b18f2f2b819eea30c79f067f42421f0ee567bee4b +size 41884001 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-1.jpg new file mode 100644 index 00000000..efc71c2c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0407d1b3c6e5d71266626210ec9071a9f0946b1ca483bfc278c2586fd947c159 +size 145769 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-2.jpg new file mode 100644 index 00000000..17338e55 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34af5cf37bc64d49572e8d0af380685d1624cb735b1acefba91d9658705772fa +size 140754 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-3.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-3.jpg new file mode 100644 index 00000000..77872516 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25f0d54b2fc1377402b3d44f74dbd2600cb2eab3c93ed06e37e80bd4cc1c68ed +size 126925 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-4.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-4.jpg new file mode 100644 index 00000000..a0d763c2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df07b79d3b144c015487f0af82a35c186178c5861b5d135b44ff4b1cd95bd9a1 +size 137709 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-5.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-5.jpg new file mode 100644 index 00000000..5e0da9f5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e927f3b27712ed161679a47fef22e4a1a23374b99a669f226c9c2beddbf287d +size 223104 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-6.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-6.jpg new file mode 100644 index 00000000..0086f9f6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-6.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad45d9b2f372cd329287e65fc0cc2233f2509179b4f8b04d45bfa277d607ddc3 +size 231298 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-7.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-7.jpg new file mode 100644 index 00000000..25daedf3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-7.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33805461e9eeaa33ab52bf64c4c4f66ddacf5ae7e1daac94a885b1e6427c669b +size 220268 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-8.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-8.jpg new file mode 100644 index 00000000..3a3ff5c8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-8.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09eccce1e65e5e8da22b85b82d2865b76709ec4bb2b7063583ef485377fbc451 +size 225190 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-9.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-9.jpg new file mode 100644 index 00000000..eec61579 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/TopRoof-9.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23b6157735fff5c54049d135ac2c4345eccd946e22903ed44b6ec44605c59bfe +size 224212 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Towers-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Towers-1.jpg new file mode 100644 index 00000000..c56917ae --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Towers-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e69b82d5541896801ab101c6a1457a2590b7f2ff01b962b2a62905188baea09 +size 183501 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Towers-3.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Towers-3.jpg new file mode 100644 index 00000000..35d07d8d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Towers-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28bc5755ca76630079997bdf5e1450ae6a69ad94019b64f5e8917a6e13e82d01 +size 187937 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Trim-1.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Trim-1.jpg new file mode 100644 index 00000000..b705c5a8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Trim-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f56b3db6cb662d59cdbee7312fe66103882d55a3399e6886af66d438b6d035c +size 151488 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Trim-2.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Trim-2.jpg new file mode 100644 index 00000000..c25d754a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Trim-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4f6766959d1f39f35c46fa3df65aa2fed432dde39357a1e7ea9206a891f5cb0 +size 152209 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Trim-3.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Trim-3.jpg new file mode 100644 index 00000000..fd9553a1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Trim-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a02cdff1115dd294c096c0cc6fd02db808a0df381f1230d1d10a781c64e3cef3 +size 158450 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Trim-4.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Trim-4.jpg new file mode 100644 index 00000000..f65021fe --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Trim-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c3c0f301bf150c6e419fb0f6b46e08101ef7b74496a889f87661dcbe97ca754 +size 157016 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Trim-5.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Trim-5.jpg new file mode 100644 index 00000000..3a1f7d96 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section4/Trim-5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49803876c8de8b3398ba368af98d6a1c26e7024f99d760eeb433a371644e5351 +size 158525 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section5/LayeredTransparencies-Left.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section5/LayeredTransparencies-Left.jpg new file mode 100644 index 00000000..4649c085 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section5/LayeredTransparencies-Left.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2dd7786f7763b3c50e0cb73fd3244916ddd156d497ab70378869f148f59adfa6 +size 239056 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section5/LayeredTransparencies-Right.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section5/LayeredTransparencies-Right.jpg new file mode 100644 index 00000000..b9bf67ea --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section5/LayeredTransparencies-Right.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:847aa9812eb34612850e5b3d80d0d41243eb4d020582a299e04254f46b7e865f +size 524870 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section5/OptimizingGeo-Towers.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section5/OptimizingGeo-Towers.jpg new file mode 100644 index 00000000..30716c76 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section5/OptimizingGeo-Towers.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b0331dd5e5cceb100c42f56565efd5572b0663d766a0a8c575ecce2421638701 +size 280896 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section5/Overview.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section5/Overview.jpg new file mode 100644 index 00000000..9f141b97 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section5/Overview.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1663c9caaa5ad9477884c14276212168aef506f26da7ad9f7f33c2994b8ff928 +size 87204 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section5/RemovingTextures-Firehydrants.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section5/RemovingTextures-Firehydrants.jpg new file mode 100644 index 00000000..9c87b3b8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section5/RemovingTextures-Firehydrants.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af29f637a5a36f7f59d0e0821abbb6b034dc119350145dce30b465350961e4d1 +size 102972 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section5/ReviewingParameters-Disabled.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section5/ReviewingParameters-Disabled.jpg new file mode 100644 index 00000000..3419abac --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section5/ReviewingParameters-Disabled.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fcd95b4b5156a21c91dcf35a3c3b0cb3af95fc5bc7dcda3d3c62913374a4a247 +size 514572 diff --git a/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section5/ReviewingParameters-Enabled.jpg b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section5/ReviewingParameters-Enabled.jpg new file mode 100644 index 00000000..c5d93494 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/environmental-art-curriculum/Section5/ReviewingParameters-Enabled.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e70066630b3e8d3e10ee9ba256dcebd3ca1ea780449aeb3168a2f5fda46b9b33 +size 512398 diff --git a/.cursor/rules/roblox/assets/tutorials/fading-trap/completedFadingTrap.mp4 b/.cursor/rules/roblox/assets/tutorials/fading-trap/completedFadingTrap.mp4 new file mode 100644 index 00000000..c01fac26 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/fading-trap/completedFadingTrap.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:770b0440d096b1c66a0edf82e7c553aef116916f555c6ec7e8764db135d9b75d +size 572771 diff --git a/.cursor/rules/roblox/assets/tutorials/fading-trap/forLoop.jpg b/.cursor/rules/roblox/assets/tutorials/fading-trap/forLoop.jpg new file mode 100644 index 00000000..b04e8bf8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/fading-trap/forLoop.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e552343b6355dc830ffdb7518768e8642751003c39d13235dfb54ace1b349a71 +size 73698 diff --git a/.cursor/rules/roblox/assets/tutorials/fading-trap/multipleFadingTraps.mp4 b/.cursor/rules/roblox/assets/tutorials/fading-trap/multipleFadingTraps.mp4 new file mode 100644 index 00000000..5d2cc9c1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/fading-trap/multipleFadingTraps.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6d0401295d3d18f2fb9b6bcd4b7e13c3a4c9b5df0a8ebbc1541a42c77c37195 +size 1304119 diff --git a/.cursor/rules/roblox/assets/tutorials/fading-trap/partInPlace.jpg b/.cursor/rules/roblox/assets/tutorials/fading-trap/partInPlace.jpg new file mode 100644 index 00000000..47bc29a8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/fading-trap/partInPlace.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:862176cb1091c75c7f80ad0666e11a3b37790c1b7f3f55dfd5a6f6e524c50478 +size 340662 diff --git a/.cursor/rules/roblox/assets/tutorials/fading-trap/scriptInPlace.png b/.cursor/rules/roblox/assets/tutorials/fading-trap/scriptInPlace.png new file mode 100644 index 00000000..7ceefe8c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/fading-trap/scriptInPlace.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7cb77b5cb21937a625a23d12841a31fcecd3f9d45f6b5f3c475bc5ae426178c +size 6220 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Adding-Rounds/Defeat-UI.mp4 b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Adding-Rounds/Defeat-UI.mp4 new file mode 100644 index 00000000..e194ab25 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Adding-Rounds/Defeat-UI.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca9b7eee6d023e98f758cd2c2d0767dcd2cd8aca32cc0b97007f766e320a3424 +size 490713 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Adding-Rounds/Large-Prompt.jpg b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Adding-Rounds/Large-Prompt.jpg new file mode 100644 index 00000000..b9d31703 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Adding-Rounds/Large-Prompt.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:384dd9fc862de2a58726f75b92c196a6e5fc87111d9613504057f1ae4a48dba0 +size 176533 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Adding-Rounds/Placeholder-Prompt.jpg b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Adding-Rounds/Placeholder-Prompt.jpg new file mode 100644 index 00000000..b562949c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Adding-Rounds/Placeholder-Prompt.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d77df43c4006cea9550e2ca93321be975a62bba81084142fa4fda0d493a728c +size 173832 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Adding-Rounds/Rounds-Diagram.png b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Adding-Rounds/Rounds-Diagram.png new file mode 100644 index 00000000..4e202cc3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Adding-Rounds/Rounds-Diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ea61c8bf077b7e5cc088d6e399eeeee1c6175631e8bb5057ef1338c17218cdc +size 105457 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Adding-Rounds/Victory-UI.mp4 b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Adding-Rounds/Victory-UI.mp4 new file mode 100644 index 00000000..5af7142d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Adding-Rounds/Victory-UI.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7441cb3c9f905e56e80fe1c88bec2887947f09211da2864f9208b1a19265cd98 +size 484440 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Blaster-Behavior/Custom-BlastState.mp4 b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Blaster-Behavior/Custom-BlastState.mp4 new file mode 100644 index 00000000..9c5b61b8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Blaster-Behavior/Custom-BlastState.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e59a24bbb4eae7407e78f7a4728967c864dc3d3df763d2d37dae70aaf7d034d +size 1387729 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Blaster-Behavior/Normal-BlastState.mp4 b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Blaster-Behavior/Normal-BlastState.mp4 new file mode 100644 index 00000000..42387ee4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Blaster-Behavior/Normal-BlastState.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:819b1eee7ee662a2e9011731545d8d1b74286ab3173a06d216876e1d6af2171d +size 1002904 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Green-Team-Players.jpg b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Green-Team-Players.jpg new file mode 100644 index 00000000..1760c0a3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Green-Team-Players.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c29bdadd02887d462e3fc0f212f2740c3618c554136eb98a2e109591868abe0 +size 200661 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Green-Team-Properties.png b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Green-Team-Properties.png new file mode 100644 index 00000000..0ddc80eb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Green-Team-Properties.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:161491f94b94f90aad40f9ddd1a67758da2edc610433558f106137b5a936612f +size 34377 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Green-Team.jpg b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Green-Team.jpg new file mode 100644 index 00000000..895d48ca --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Green-Team.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d498161b62e03fa814cf7bc19d9919e1213e13643f584d989fef59bf50d34c2 +size 23390 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Intro.png b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Intro.png new file mode 100644 index 00000000..54dae5b3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Intro.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6e3c9a68ad68cac93f318c670a66c93c80c4a0418f73d3e0f181d29bedacdbd +size 1269969 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Leaderboard-Indicator.jpg b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Leaderboard-Indicator.jpg new file mode 100644 index 00000000..657e3c18 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Leaderboard-Indicator.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14b6253c4b737bdea02a02ef77dbb779cdd0f6da3a11e8acdaceb0217ba63880 +size 104147 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Name-Tint.jpg b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Name-Tint.jpg new file mode 100644 index 00000000..730fce5f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Name-Tint.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cbed6b1a123d4857e97314e105d33ae2c4b90a131df9fc7afd85954e77bede9 +size 254498 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Objective-UI.jpg b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Objective-UI.jpg new file mode 100644 index 00000000..7481c5d0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Objective-UI.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f754fac53bb1266863c645fa679e7797d52e6e0cbecd6d7617ffd63c684c22e +size 175765 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Pink-Team-Players.jpg b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Pink-Team-Players.jpg new file mode 100644 index 00000000..b5510e55 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Pink-Team-Players.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2584d7b7ba53e42322db21e21dcf3615e1363070a682e1e670ddcd3afa0df8ae +size 455450 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Pink-Team-Properties.png b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Pink-Team-Properties.png new file mode 100644 index 00000000..2e165786 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Pink-Team-Properties.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c264695107cbf19e4d5c163af40acf726ecb8495ec5863285762cb7214741c49 +size 34553 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Pink-Team.jpg b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Pink-Team.jpg new file mode 100644 index 00000000..e6bc26df --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Pink-Team.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89225126d841b44cfc0c65cae747860abf8f2b99ad917c6dec06cc64b7808edf +size 26417 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Player-Indicator.jpg b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Player-Indicator.jpg new file mode 100644 index 00000000..944ea358 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Player-Indicator.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0039c6d4b7b50cc338731c0453c9267ab6c873743b70410f809a74a5de14178a +size 62366 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Team-Indicator.jpg b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Team-Indicator.jpg new file mode 100644 index 00000000..c8067037 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Creating-Teams/Team-Indicator.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72b4aba049f85b438fe3422aee13166d5afb1f6ffff4aa0a26a92502516fb4be +size 255873 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Detecting-Hits/Reduce-Player-Health.png b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Detecting-Hits/Reduce-Player-Health.png new file mode 100644 index 00000000..eadaebb5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Detecting-Hits/Reduce-Player-Health.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3e6d4f50631ec4170de891cca526d5e156bc7203e03a7aeb3fd61060229ff41 +size 1036086 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Detecting-Hits/Two-Rays.png b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Detecting-Hits/Two-Rays.png new file mode 100644 index 00000000..62309d84 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Detecting-Hits/Two-Rays.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bcfcdb671569b46b8779b25484697cc8a9da20ccf6e1f8a70e1c7477bc1d1480 +size 759900 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/Find-All.png b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/Find-All.png new file mode 100644 index 00000000..f4afb551 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/Find-All.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b7bac2927301a4ee3af93c3a9bcc58506b8bdfaf78326d29d477122ac2cb317 +size 146991 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/First-Person-Visuals.png b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/First-Person-Visuals.png new file mode 100644 index 00000000..dbced655 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/First-Person-Visuals.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c69b0e50a0d287117e1de73711c123534ddc7b465c4fb81adc49b0ef0d1861fb +size 949284 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/Neutral.jpg b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/Neutral.jpg new file mode 100644 index 00000000..56f5fb4a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/Neutral.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa21fc16805c4284522e4318149a051b7cfaa43ac78e509c16f0dbc1b5488a54 +size 1161714 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/Reset-Character-Button.png b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/Reset-Character-Button.png new file mode 100644 index 00000000..ada8c122 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/Reset-Character-Button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e972afe91dab243279a6a21e1d192738258c542e70be2c92923a507ee03b25a5 +size 263691 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/Respawn-Screen.png b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/Respawn-Screen.png new file mode 100644 index 00000000..9840251f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/Respawn-Screen.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b3a6a84d66515faf9132399b726bddf5c297d676549ae3c70ab2638d402a9ab +size 700388 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/TeamASpawn.jpg b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/TeamASpawn.jpg new file mode 100644 index 00000000..e86254fd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/TeamASpawn.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9adb5b4677b0b427db50d0f6800aafec9e0ddb1f84c4430aa398a459b6c3b89b +size 1454333 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/TeamBSpawn.jpg b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/TeamBSpawn.jpg new file mode 100644 index 00000000..2844a39e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/TeamBSpawn.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b93877354bd13241662d1278b94955578bba5f09f8fe9f9543169ba44ec823a +size 1465475 diff --git a/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/Third-Person-Visuals.png b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/Third-Person-Visuals.png new file mode 100644 index 00000000..b1e1bbe7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/gameplay-scripting/Spawn-Respawn/Third-Person-Visuals.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ca4a35aa7c21b9346b36a4b992e5b5f208e2324f13907ca71120b61e6821700 +size 506854 diff --git a/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/CFrame-Render.png b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/CFrame-Render.png new file mode 100644 index 00000000..48846485 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/CFrame-Render.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35fef379791d4066cfb293954949ba3e107f4527311536ec11b7c3c1c4e38ec9 +size 304235 diff --git a/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Client-Laser-Communication-Video.mp4 b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Client-Laser-Communication-Video.mp4 new file mode 100644 index 00000000..f6ee09a5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Client-Laser-Communication-Video.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2928e54772a35e13ae6ce38df6f69deb512019270187de30205e1540d9bcefd8 +size 2891900 diff --git a/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-Character-Hierarchy.png b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-Character-Hierarchy.png new file mode 100644 index 00000000..e08efaf7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-Character-Hierarchy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7664e35a39c7f72ae205a45241518185bc5df3c7cfd6c83789c6677a6aa8bd26 +size 14811 diff --git a/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-ClientLaserManager.png b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-ClientLaserManager.png new file mode 100644 index 00000000..fd7cae52 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-ClientLaserManager.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df2fcbdae68eb9371512015d5940adc4256abf669fd2dade85016816351a1e2a +size 6220 diff --git a/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-Damage-Character.png b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-Damage-Character.png new file mode 100644 index 00000000..69417803 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-Damage-Character.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3db8878c93624cd1ae27c377e7fd071d38676f6ff3551244f9730efc89ac3aa8 +size 3929 diff --git a/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-Events-Folder.png b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-Events-Folder.png new file mode 100644 index 00000000..e8287f5d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-Events-Folder.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d5412544169890e12b4fd9e5c7a55af8673d0a2fcdf51204267861352e7ceda +size 3578 diff --git a/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-LaserFired.png b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-LaserFired.png new file mode 100644 index 00000000..968ccaa7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-LaserFired.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e090b9d982198b62c9902c2751b3840cb90bdd6e1ccaa59f8bdec908844e7fd +size 4473 diff --git a/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-LaserRenderer.png b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-LaserRenderer.png new file mode 100644 index 00000000..f25c79b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-LaserRenderer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b229dd9c3ee01f2c9e7d20a8d896abdcc020b0ad73d318b13ed770f65e8a4bde +size 4789 diff --git a/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-ServerLaserManager.png b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-ServerLaserManager.png new file mode 100644 index 00000000..448c3abd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-ServerLaserManager.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f17694f5abc6d6ecfe3c9952a37b62f85469894bd9494dcc295449196a914384 +size 4777 diff --git a/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-ToolController.png b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-ToolController.png new file mode 100644 index 00000000..1af4d4f2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Explorer-ToolController.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8c1cf6fb0dfc9bca5c720a0a077454d46068a52c96461402cce371b95903c81 +size 4597 diff --git a/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Introduction-Video.mp4 b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Introduction-Video.mp4 new file mode 100644 index 00000000..294343ea --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Introduction-Video.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9f7e42c71fcfe5ea2d5989b59789efc65bf5f032d64abd64aa5f4d826121e1e +size 6698912 diff --git a/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Laser-Render-Video.mp4 b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Laser-Render-Video.mp4 new file mode 100644 index 00000000..247cbe8a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Laser-Render-Video.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e26533b9a6b4332b1ecd35adbc271c2768c7d5dac8f3e3a5887973fe12b22101 +size 887057 diff --git a/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Output-Video.mp4 b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Output-Video.mp4 new file mode 100644 index 00000000..10882d36 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Output-Video.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65293489128e2c9bbca74dd1792c4b93c1ed1ae3eb6d84b2d5b068392838bf7c +size 3215705 diff --git a/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Ray-Diagram.png b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Ray-Diagram.png new file mode 100644 index 00000000..7daa2cde --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/hit-detection-with-lasers/Ray-Diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4bb5e0b78cfd36838c5bf8c7351c36c44b838aba01e2dda82b0ad02fdb80cdb +size 84611 diff --git a/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-collectablePage.png b/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-collectablePage.png new file mode 100644 index 00000000..77e147fe --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-collectablePage.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5599372f72be868e78973c0912af0b8d7f174556619b4a44f4f111d3b8959e88 +size 9324 diff --git a/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-collectables.mp4 b/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-collectables.mp4 new file mode 100644 index 00000000..3ca8547c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-collectables.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2df347cbe7750e19ad6fca9b42c4d832bc3f0dcfb9d4ba83e87b66ae7e4991c5 +size 441619 diff --git a/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-createFeedbackSound.png b/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-createFeedbackSound.png new file mode 100644 index 00000000..427bc51d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-createFeedbackSound.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9720c3b452cbaeceff3a574bfc49de9a08cb72fe84f15f80a0ed85a959bf18d4 +size 6676 diff --git a/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-looping.png b/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-looping.png new file mode 100644 index 00000000..93caaf85 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-looping.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ba399645fbcde41ed00958a474a05c1cf65a5a8f95e0c2b2f8bba49b4b09447 +size 6101 diff --git a/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-rollOffDistance.png b/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-rollOffDistance.png new file mode 100644 index 00000000..b806d897 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-rollOffDistance.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4297d944adee352b9fcab2c2d8aca1b77485c33c73cbe7ec4d2e3daeb0fce02e +size 4651 diff --git a/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-rollOffMode.png b/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-rollOffMode.png new file mode 100644 index 00000000..1f961ffd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-rollOffMode.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:350175771408b3e96b019f68cffa13a4de30100e13551887bbcf39be3f26688d +size 5167 diff --git a/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-soundID.png b/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-soundID.png new file mode 100644 index 00000000..b1be7b41 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-soundID.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fed308b0b382ed5f61c144a1e2b1286b417c4367391b58d3a7a6b1045cd8a8f3 +size 4836 diff --git a/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-waterfall-web.mp4 b/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-waterfall-web.mp4 new file mode 100644 index 00000000..a9576dec --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-waterfall-web.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce8649f330091ace2fb55fa4b24be57bc8197e67b7310348d267ae4129647883 +size 8433429 diff --git a/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-waterfallExample.jpg b/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-waterfallExample.jpg new file mode 100644 index 00000000..899d4030 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-waterfallExample.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74eff76213334f9a54ef86a2c2597476272950ce55d361dcdc184e3ce02f3699 +size 465501 diff --git a/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-waterfallSound.png b/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-waterfallSound.png new file mode 100644 index 00000000..b512c9e6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/in-game-sounds/ingameSounds-waterfallSound.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8d08ebf3625d62b2c9e4e742990d6ad5585395f1c23ead57bac9be401085dc0 +size 7577 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Handle-Demo.mp4 b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Handle-Demo.mp4 new file mode 100644 index 00000000..b9a5ab45 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Handle-Demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a2308cee0704e81c667a0884100297122b480ef286d4b907f2d91e1dee8e527 +size 2278985 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Interactive-UI-Final.mp4 b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Interactive-UI-Final.mp4 new file mode 100644 index 00000000..81e95ef1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Interactive-UI-Final.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d868feebfb87c9798f9862da6154a11b3e9ba2124f00c6b7fda9c8d9af6b321 +size 8631576 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Intro.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Intro.png new file mode 100644 index 00000000..6e1d8829 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Intro.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2390d6b7c481cf136bf74aacebd1727e54edd102291a4458aedaa7b5b2312ea +size 225664 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Link-UIDragDetector-BoundingUI.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Link-UIDragDetector-BoundingUI.png new file mode 100644 index 00000000..7a08c9e4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Link-UIDragDetector-BoundingUI.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8839d0cfab4477361194817e09014d3cd36a066e4b9c07aaefa50a7aceeca4d3 +size 94883 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/ReplicatedStorage-SliderController.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/ReplicatedStorage-SliderController.png new file mode 100644 index 00000000..d73eb081 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/ReplicatedStorage-SliderController.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2aa86d779b8b774eafcf19fc8085b9e6b82e0790f17354142469f5a12f23419 +size 50588 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/ReplicatedStorage-StatefulObjectController.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/ReplicatedStorage-StatefulObjectController.png new file mode 100644 index 00000000..ab9600ec --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/ReplicatedStorage-StatefulObjectController.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1730ad5890f9fb7e9b9d2ba5ca3dcd74c63b86b8935508962c2d25b95d2f4ebb +size 50039 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Button-Design-Components.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Button-Design-Components.png new file mode 100644 index 00000000..43a18538 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Button-Design-Components.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:821d4fadee3c1d5fb18c0366d303733983bed530f952637a6aaf68e19423c957 +size 240692 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Button-Design-Finalized.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Button-Design-Finalized.png new file mode 100644 index 00000000..c99d9e9a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Button-Design-Finalized.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82240cfb8e90748438dd27611a6d449d94da9d083fb2fc1789f6aa084eb04de7 +size 235256 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Button-Design-Initial.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Button-Design-Initial.png new file mode 100644 index 00000000..f77b14a1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Button-Design-Initial.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b21d274d17c21ce85b4b98b08cd829d312ba0c6b84159a28faf952018ee3e1b +size 210251 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-BackgroundVolumeSlider-Handle.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-BackgroundVolumeSlider-Handle.png new file mode 100644 index 00000000..2f615b4d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-BackgroundVolumeSlider-Handle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32adfe5b7c0968906edbea7e0b7994810a68ec9a8b7bf3dfa6c7aeab0e1476a6 +size 188118 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-BackgroundVolumeSlider-Icon.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-BackgroundVolumeSlider-Icon.png new file mode 100644 index 00000000..7c62ea37 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-BackgroundVolumeSlider-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6744c9792fcc0a22a8c8a7e3d73f0004bbe99c850141ee68a479b755f29ffced +size 182449 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-BackgroundVolumeSlider-Initial.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-BackgroundVolumeSlider-Initial.png new file mode 100644 index 00000000..f2fa7c08 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-BackgroundVolumeSlider-Initial.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0fd4abacef36739120d2267075aa0e886c6d3d86b9cf54e01f45c110d23417ac +size 190133 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-BackgroundVolumeSlider-Inner-Fill.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-BackgroundVolumeSlider-Inner-Fill.png new file mode 100644 index 00000000..bb20eb7a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-BackgroundVolumeSlider-Inner-Fill.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c1f2a1e02cd0d0d19806ce4f999f963ed9c7b2e482ef29fa784cd03d61aa44c +size 187794 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-BackgroundVolumeSlider-Measurements.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-BackgroundVolumeSlider-Measurements.png new file mode 100644 index 00000000..ab6b21f5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-BackgroundVolumeSlider-Measurements.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce17da28ef6602e7d4cd6a551cd46b8f7b238845192a3afb5df8c646823eb185 +size 153674 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Close-Button-Finalized.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Close-Button-Finalized.png new file mode 100644 index 00000000..84a434e3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Close-Button-Finalized.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98f4968e1af0ec6b2b423139739f4a424dc291677cd7ecb76f38e6337b0b3200 +size 153565 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Close-Button-Initial.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Close-Button-Initial.png new file mode 100644 index 00000000..f376c072 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Close-Button-Initial.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:661279a946dc933509d9cc6cd029c88e3cc75c1a3cc3664331895a36f23a0c79 +size 175451 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Close-Button.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Close-Button.png new file mode 100644 index 00000000..076467dc --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Close-Button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab091e6aa2f54cab6289ca9e4a2e086b450eb2efedec9759eb78b6a3d7e0e280 +size 152777 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Components.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Components.png new file mode 100644 index 00000000..f33634eb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Components.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86c734657d80b54e0ae663ba98bd7fb90dc8d07ea3d3dcd06ff3c81066e77fc4 +size 153164 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Parent-Frame-Finalized.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Parent-Frame-Finalized.png new file mode 100644 index 00000000..ed8978c7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Parent-Frame-Finalized.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:571da30eda5990c63323097cdeb2b2bb2fc3664c8eb11cadb30d22284ee445df +size 157790 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Parent-Frame.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Parent-Frame.png new file mode 100644 index 00000000..15899dc1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Parent-Frame.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ceb886421d6579ee396727f5554aee03af9e6f69148ee31b34cca94f9325e2c0 +size 157772 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Range-Frame-Measurements.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Range-Frame-Measurements.png new file mode 100644 index 00000000..3a2fe605 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Range-Frame-Measurements.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65e5430547670b797d393259a9b7169064469fdca3691cc950145d07a312c05f +size 155452 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Range-Frame-Outline.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Range-Frame-Outline.png new file mode 100644 index 00000000..143bed33 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Range-Frame-Outline.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7948298753c55301dbbb63ec26bd5601e2caa7614b3db4b3feef6f437fce076a +size 180382 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Slider-Frame-Measurements.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Slider-Frame-Measurements.png new file mode 100644 index 00000000..d0e49513 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Slider-Frame-Measurements.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a43981be2c4761e00feb28122a5f9dac0d5c1cd38b1b8aa8ff3be7d63d8d7db +size 156088 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Slider-Handle.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Slider-Handle.png new file mode 100644 index 00000000..a9b0028a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Slider-Handle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6dbf57b6bd3402eaa1fce82dddc76da5cc0f2f553f46f819498d8e28ee289f23 +size 154630 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Slider-Icon-Finalized.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Slider-Icon-Finalized.png new file mode 100644 index 00000000..f0232faa --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Slider-Icon-Finalized.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad6c5bb21367ee1d046118404319469e7f6d99f8e53c194ab0f3a83785ccd0c8 +size 192442 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Slider-Icon.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Slider-Icon.png new file mode 100644 index 00000000..32279e81 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Slider-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d77cfb3add6b7ff2d9778455fb9f6b033e096ba9d5b2536312ad165223d6a7db +size 154212 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Slider-Inner-Fill-Finalized.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Slider-Inner-Fill-Finalized.png new file mode 100644 index 00000000..08373ba3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Slider-Inner-Fill-Finalized.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0198de3559e95b30257e15ad35b06238d019937f38a0b9224cbc22807e70bce3 +size 174278 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Slider-Inner-Fill.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Slider-Inner-Fill.png new file mode 100644 index 00000000..1f94b6e9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Settings-Menu-Design-Slider-Inner-Fill.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:789918e38d6a146d2b1c46cb2c137071af7d29e5e3ce6fe0e817d86906fbd418 +size 154269 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/Sliders-Demo.mp4 b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Sliders-Demo.mp4 new file mode 100644 index 00000000..32ffc3aa --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/Sliders-Demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d67a8d2d5f64fd55902f5174bf3076fa5455cdbd0d93d306ca0376be91193d13 +size 3286447 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsButton-UIAspectRatioConstraint.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsButton-UIAspectRatioConstraint.png new file mode 100644 index 00000000..c7949378 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsButton-UIAspectRatioConstraint.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31019daa9fcb75dbf408f84316624920028f24b2144ba50673e3c260936b6643 +size 39839 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsButton-UISizeConstraint-Values.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsButton-UISizeConstraint-Values.png new file mode 100644 index 00000000..3e98347e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsButton-UISizeConstraint-Values.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ca15fc346dfe1970c2743099bd53cd8c6c10f855f72bd86576ebc51081e6bf8 +size 32712 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsButton-UISizeConstraint.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsButton-UISizeConstraint.png new file mode 100644 index 00000000..81ba1b95 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsButton-UISizeConstraint.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd90af6d37e6b5aaec9d2ac9bf9c46eb47722bb9acacce65fc871f45e640b59f +size 42243 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsButton.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsButton.png new file mode 100644 index 00000000..13fec199 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsButton.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af66e5bb775eb5c17704d60e339edef8c2aa97775b4741c9b327f4811dbdcc66 +size 34198 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-BackgroundVolumeSlider-Icon-Values.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-BackgroundVolumeSlider-Icon-Values.png new file mode 100644 index 00000000..01f0d692 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-BackgroundVolumeSlider-Icon-Values.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4363c8eef11ceba73dc3d05af6fedebd341696da1934522fe61dcc1702201396 +size 28324 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-BackgroundVolumeSlider-Icon.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-BackgroundVolumeSlider-Icon.png new file mode 100644 index 00000000..cf51db61 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-BackgroundVolumeSlider-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0adbf2c210dc722ce7e655b7ce72458fea2b7edab34fa9c7acafd403fbe0ef33 +size 26880 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-BackgroundVolumeSlider-SliderFrame-Handle-UIStroke-Values.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-BackgroundVolumeSlider-SliderFrame-Handle-UIStroke-Values.png new file mode 100644 index 00000000..9e56bb25 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-BackgroundVolumeSlider-SliderFrame-Handle-UIStroke-Values.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:569bed0b9760a61f74b9a9b48bb832592907fe169f1c23e076b4e7cb4d15c43a +size 35691 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-BackgroundVolumeSlider-SliderFrame-Handle-UIStroke.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-BackgroundVolumeSlider-SliderFrame-Handle-UIStroke.png new file mode 100644 index 00000000..d8bfda81 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-BackgroundVolumeSlider-SliderFrame-Handle-UIStroke.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a25edc6c13cf5773a36396f93edd1ade7861b1b7441c40911553b63c1a4fca0 +size 48987 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-BackgroundVolumeSlider-SliderFrame-InnerFill-Values.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-BackgroundVolumeSlider-SliderFrame-InnerFill-Values.png new file mode 100644 index 00000000..7bfdfd21 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-BackgroundVolumeSlider-SliderFrame-InnerFill-Values.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bbf97d252f7be2ae9ed6209f194aa67a616da9d55732e72459631203028fdbe +size 40397 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-BackgroundVolumeSlider-SliderFrame-InnerFill.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-BackgroundVolumeSlider-SliderFrame-InnerFill.png new file mode 100644 index 00000000..1072de61 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-BackgroundVolumeSlider-SliderFrame-InnerFill.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef7ac518d9b89bc37b04c66162ca30b1de3b2e96cd6d5ee2bd763d32190a7ab7 +size 49065 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-BackgroundVolumeSlider.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-BackgroundVolumeSlider.png new file mode 100644 index 00000000..d48ec1f0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-BackgroundVolumeSlider.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f3ea43ef870273b037f91b12e7964373cdd0dc1a4c3c2bc3affea0154831d3a +size 35481 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-CloseButton-UIAspectRatioConstraint.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-CloseButton-UIAspectRatioConstraint.png new file mode 100644 index 00000000..10f91b47 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-CloseButton-UIAspectRatioConstraint.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4aebb45392cd4e7517f6b8dff886d27a2b69799c7526771911aff98a9529c9fd +size 32104 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-CloseButton.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-CloseButton.png new file mode 100644 index 00000000..2f049f81 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-CloseButton.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c5f27a6c94ea8cdc4289b91560cebb4ed78c34dcb54bdb43510dae20ec79485 +size 57095 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-Full.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-Full.png new file mode 100644 index 00000000..d8ea1b94 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-Full.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a4e8eb4b7341c5c4ebf7e6ae424c9664a9a35915aaedede3e1582180dcf2328 +size 48566 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-Icon-UIAspectRatioConstraint.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-Icon-UIAspectRatioConstraint.png new file mode 100644 index 00000000..31d308a1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-Icon-UIAspectRatioConstraint.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57afd266089ee6fb1ccf2de1db8a24110008cc84494727269a002a92b2f9a3fa +size 45946 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-Icon.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-Icon.png new file mode 100644 index 00000000..5bcac5ac --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-Icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39d20fa6cc80a2b65621016c127b8f0cfa042e2dd3badb106f8821f7df4b0671 +size 43987 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-SliderFrame-Handle-UIDragDetector-Values.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-SliderFrame-Handle-UIDragDetector-Values.png new file mode 100644 index 00000000..732b0bbf --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-SliderFrame-Handle-UIDragDetector-Values.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef47e83ca87946e5d4406b3c406abeb9e9bb1e05f88a6178e9b08a17cef1cac3 +size 38411 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-SliderFrame-Handle-UIDragDetector.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-SliderFrame-Handle-UIDragDetector.png new file mode 100644 index 00000000..7f3fa2f6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-SliderFrame-Handle-UIDragDetector.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3101fc259839770d50c0302d91b4277df92a56223aa4ae8d4ba2ec0ce6fb2506 +size 43818 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-SliderFrame-Handle.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-SliderFrame-Handle.png new file mode 100644 index 00000000..61700cb9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-SliderFrame-Handle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3950e7e799d1f66e93858594fae057c0ab278eb4ec45d298dbaeb00cc3fa1a6a +size 37486 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-SliderFrame-InnerFill-UICorner-Values.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-SliderFrame-InnerFill-UICorner-Values.png new file mode 100644 index 00000000..c7ed95ef --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-SliderFrame-InnerFill-UICorner-Values.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2dd41f3e73d51813c690b338df2830f83d36b39470416dbeb5178da620c9b78 +size 27895 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-SliderFrame-InnerFill-UICorner.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-SliderFrame-InnerFill-UICorner.png new file mode 100644 index 00000000..22eba2b1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-SliderFrame-InnerFill-UICorner.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:374e9aa8b51aa535d27449b05c8af97c9abce0be60daad36aa6118fcb990c739 +size 27803 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-SliderFrame-InnerFill.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-SliderFrame-InnerFill.png new file mode 100644 index 00000000..10eb019e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-SliderFrame-InnerFill.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ea36f65299952d5bf0cd057790b5d493f9efc20a2a8b0571383291e0e9504ba +size 46477 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-SliderFrame.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-SliderFrame.png new file mode 100644 index 00000000..6ebe869f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-SliderFrame.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a1fa038469dc8669ac38fa61c49a2abcf2267148e2a7226b5a15580ce9ec84f +size 44512 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-UIListLayout.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-UIListLayout.png new file mode 100644 index 00000000..12014687 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider-UIListLayout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce86ea7a327f00160f092701541716e2d553d9f93e3b8a31ff983f72d5c9a8b6 +size 44434 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider.png new file mode 100644 index 00000000..3e8ec707 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-EffectsVolumeSlider.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b09564e454d0dc8c7bf4b3845a650ad56170005c7205bcd49b16b39c0470715e +size 41940 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-UIAspectRatioConstraint-Values.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-UIAspectRatioConstraint-Values.png new file mode 100644 index 00000000..dd1bca60 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-UIAspectRatioConstraint-Values.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb6a957a2d817b21ebb257ad3bedd4c5712615854eabc057e0c06ad96e39d4c0 +size 36068 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-UIAspectRatioConstraint.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-UIAspectRatioConstraint.png new file mode 100644 index 00000000..038c1f63 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-UIAspectRatioConstraint.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dadd9f5310290fb80f202f83e4617e85af1b8b4d64fc9226e5f5823bb6831b4f +size 43628 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-UICorner-Values.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-UICorner-Values.png new file mode 100644 index 00000000..747b7eaa --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-UICorner-Values.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01a06abb702bf198afff3231ea13363ff208e25bac13aea36b1b3595181b84a7 +size 30610 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-UICorner.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-UICorner.png new file mode 100644 index 00000000..f63eaf89 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-UICorner.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b10143f329c8540681b36fd9d7f28869f5997506b70192fa76c133c59565e354 +size 41072 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-UISizeConstraint-Values.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-UISizeConstraint-Values.png new file mode 100644 index 00000000..248a4b5d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-UISizeConstraint-Values.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a73604307d72718a2cb8b66ea65a252f146e8e17b1ee40a92e927336a585181 +size 48523 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-UISizeConstraint.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-UISizeConstraint.png new file mode 100644 index 00000000..c2be38e2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu-UISizeConstraint.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:745ddbe36ab1176a89835576edc714002343ce8cb4dab0a83c6059c7803e6b8a +size 44515 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu.png new file mode 100644 index 00000000..effe2a3a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsMenu.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7ced231567632d2740b603d76286316b0810f39b987ca76bac0a5cbc949ac6e +size 37998 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsScript.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsScript.png new file mode 100644 index 00000000..d9ef81c7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer-SettingsScript.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bb0f3d83dd5625b633d037238c61677a9b110e43b0d71958fcf9efdf0bb1e96 +size 46385 diff --git a/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer.png b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer.png new file mode 100644 index 00000000..86ee67b8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/interactive-ui/StarterGui-HUDContainer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca8f34cea0e5bb4959817212a9836bbea15842fd450bb3b29fbb537720db2775 +size 29897 diff --git a/.cursor/rules/roblox/assets/tutorials/intro-to-saving-data/ServerScriptService-GoldManager.png b/.cursor/rules/roblox/assets/tutorials/intro-to-saving-data/ServerScriptService-GoldManager.png new file mode 100644 index 00000000..e710eab6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/intro-to-saving-data/ServerScriptService-GoldManager.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e5c1722419d94c7ae5651c9245dffefabfe115c4905a76a8f5c8ae55030da10 +size 37508 diff --git a/.cursor/rules/roblox/assets/tutorials/intro-to-scripting/alternatingPlatforms.mp4 b/.cursor/rules/roblox/assets/tutorials/intro-to-scripting/alternatingPlatforms.mp4 new file mode 100644 index 00000000..fdd5f6d0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/intro-to-scripting/alternatingPlatforms.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e3ec3eb8b0114b6f39696ae85e5ca6d041ea45f605c09fe3b58d53b83af06b0 +size 63811 diff --git a/.cursor/rules/roblox/assets/tutorials/intro-to-scripting/anchoredProperty.png b/.cursor/rules/roblox/assets/tutorials/intro-to-scripting/anchoredProperty.png new file mode 100644 index 00000000..f19554af --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/intro-to-scripting/anchoredProperty.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4279605fe9fe7315c716ac6eff7694ebffd1f347c5ed41fb2b342be8be739807 +size 31879 diff --git a/.cursor/rules/roblox/assets/tutorials/intro-to-scripting/canCollide.mp4 b/.cursor/rules/roblox/assets/tutorials/intro-to-scripting/canCollide.mp4 new file mode 100644 index 00000000..b842f62d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/intro-to-scripting/canCollide.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91428789d247f2dadf808fce249bd0f745d3eb9066ac772584060237f03da136 +size 49446 diff --git a/.cursor/rules/roblox/assets/tutorials/intro-to-scripting/finishedSinglePlatformShort.mp4 b/.cursor/rules/roblox/assets/tutorials/intro-to-scripting/finishedSinglePlatformShort.mp4 new file mode 100644 index 00000000..8a46c6bb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/intro-to-scripting/finishedSinglePlatformShort.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:675ddd99e8fcb0983c0d6f4dc3c865bd75ac6bdd372e516140e22dc9340b754a +size 798287 diff --git a/.cursor/rules/roblox/assets/tutorials/intro-to-scripting/partInPlace.jpg b/.cursor/rules/roblox/assets/tutorials/intro-to-scripting/partInPlace.jpg new file mode 100644 index 00000000..0db210e0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/intro-to-scripting/partInPlace.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eaeadb1155afdf77c5b005a65c5dc8bf320f491f824fc3b743ef60ec4eeeb2ec +size 305667 diff --git a/.cursor/rules/roblox/assets/tutorials/intro-to-scripting/scriptInPlace.jpg b/.cursor/rules/roblox/assets/tutorials/intro-to-scripting/scriptInPlace.jpg new file mode 100644 index 00000000..e5eb5e7e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/intro-to-scripting/scriptInPlace.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79ece68219cb6d27424db430d1073be278b090d7658ccc1cad1879622599c1b1 +size 56175 diff --git a/.cursor/rules/roblox/assets/tutorials/intro-to-scripting/transparency.mp4 b/.cursor/rules/roblox/assets/tutorials/intro-to-scripting/transparency.mp4 new file mode 100644 index 00000000..3fd26b8f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/intro-to-scripting/transparency.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2b9a1de8a694e5b4ccef82c3c03d97474a6bec2f6e47b764e13b47f9fd6318e +size 446321 diff --git a/.cursor/rules/roblox/assets/tutorials/landing/Animation.png b/.cursor/rules/roblox/assets/tutorials/landing/Animation.png new file mode 100644 index 00000000..dedfee79 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/landing/Animation.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4afabe31cb845cdbac0cd6bb3c8190ccadb3a24fa95bd64005ecf19666e7b50 +size 361024 diff --git a/.cursor/rules/roblox/assets/tutorials/landing/AnimationThumbnail.png b/.cursor/rules/roblox/assets/tutorials/landing/AnimationThumbnail.png new file mode 100644 index 00000000..4e5e826d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/landing/AnimationThumbnail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:984d55f32eafc4237518e45b97fdda86c0a477fb76dfc74627e3e86b9a697d46 +size 597110 diff --git a/.cursor/rules/roblox/assets/tutorials/landing/BuildingThumbnail.png b/.cursor/rules/roblox/assets/tutorials/landing/BuildingThumbnail.png new file mode 100644 index 00000000..cba502f7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/landing/BuildingThumbnail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f15727ed7b2573d1023cda6b7cb8b3a79858aec78e2d9dc611b496afa6582f7e +size 346465 diff --git a/.cursor/rules/roblox/assets/tutorials/landing/Camera.jpg b/.cursor/rules/roblox/assets/tutorials/landing/Camera.jpg new file mode 100644 index 00000000..ffb15ec2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/landing/Camera.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3fc24d8a0548019950f156bffd41f26309fa1d9e46b84d422d2cc0737d4eddb4 +size 34840 diff --git a/.cursor/rules/roblox/assets/tutorials/landing/CodingThumbnail.png b/.cursor/rules/roblox/assets/tutorials/landing/CodingThumbnail.png new file mode 100644 index 00000000..99d84076 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/landing/CodingThumbnail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2961042968f39538842a34f8ad3ef4f5648436e01737198c667f7f15573b1b0 +size 410233 diff --git a/.cursor/rules/roblox/assets/tutorials/landing/Effects.png b/.cursor/rules/roblox/assets/tutorials/landing/Effects.png new file mode 100644 index 00000000..9458d858 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/landing/Effects.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfa19767a7dc1a8d6b1eaebbfd132e40a7dcda60a0c3661bf41adb60f716ac4c +size 169225 diff --git a/.cursor/rules/roblox/assets/tutorials/landing/Physics.jpg b/.cursor/rules/roblox/assets/tutorials/landing/Physics.jpg new file mode 100644 index 00000000..a7dff062 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/landing/Physics.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ac6e8395ccc5986adea12f44ffa7e3d914970afcb5305f054d993e5ce0da11d +size 149809 diff --git a/.cursor/rules/roblox/assets/tutorials/landing/Physics.png b/.cursor/rules/roblox/assets/tutorials/landing/Physics.png new file mode 100644 index 00000000..468c2666 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/landing/Physics.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ded5703469d139cd6cf0b16ce480aa261cf623ea204c5b5e8a45abc873576d38 +size 1040766 diff --git a/.cursor/rules/roblox/assets/tutorials/landing/Scripting.jpg b/.cursor/rules/roblox/assets/tutorials/landing/Scripting.jpg new file mode 100644 index 00000000..47fde9a6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/landing/Scripting.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7de48f541d91ee72b313c5485a6e5e5ec8d4aa5ec3e4f03bd87a11d0bfdf506 +size 162971 diff --git a/.cursor/rules/roblox/assets/tutorials/landing/StudioThumbnail.png b/.cursor/rules/roblox/assets/tutorials/landing/StudioThumbnail.png new file mode 100644 index 00000000..eaee7a90 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/landing/StudioThumbnail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12c1dcb4e306d2a5caabbf081448726dc13d552eeb8443afbb7fce6553e6f999 +size 292063 diff --git a/.cursor/rules/roblox/assets/tutorials/landing/UI.png b/.cursor/rules/roblox/assets/tutorials/landing/UI.png new file mode 100644 index 00000000..de78b2d5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/landing/UI.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6f6f4369322ad388bfd829c21706eb9e6887c0ae4f0717d6d4d1330819bee2e +size 148678 diff --git a/.cursor/rules/roblox/assets/tutorials/landing/VFXArtThumbnail.png b/.cursor/rules/roblox/assets/tutorials/landing/VFXArtThumbnail.png new file mode 100644 index 00000000..a40abe50 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/landing/VFXArtThumbnail.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6cba92cf1524e299573eb1d20dab991e87e7298a3095c3a1238b4d9958f4794 +size 1335131 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/Attachments-1.png b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/Attachments-1.png new file mode 100644 index 00000000..5f5eb1b9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/Attachments-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6d4ead53f3b75f0c1f0785f04c36105da5e190234877a2b4136bbd30dbe9d46 +size 17349 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/Attachments-2.jpg b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/Attachments-2.jpg new file mode 100644 index 00000000..4df131d9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/Attachments-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:355e4c5cc19a0cef790934aaec2e43ac99303d8bee0bf6a19c8e93bf62740ce1 +size 234795 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/Attachments-3.jpg b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/Attachments-3.jpg new file mode 100644 index 00000000..4de34155 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/Attachments-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e83cb80cfcd8ea4c0b14a42056b752e0583c205f5af191785985ab5535766a7 +size 229613 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/Attachments-4.jpg b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/Attachments-4.jpg new file mode 100644 index 00000000..2f0c0bb0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/Attachments-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:916353577b107deb3274e223b8c440c44779ffd649f318a9aeca94ec5c920b0c +size 216320 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/Beam-2.jpg b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/Beam-2.jpg new file mode 100644 index 00000000..baea36f5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/Beam-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c56daf7efc8ec872831bfa8313597d007ac8d2c90824be12b162f0da4f5299d +size 209825 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/Beam-3.mp4 b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/Beam-3.mp4 new file mode 100644 index 00000000..49912e4e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/Beam-3.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22f7630af2c7a496b41cf4090318968472fb64f351cbb49e1827a43bcab3fd6d +size 1742813 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/CollisionBox-1.jpg b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/CollisionBox-1.jpg new file mode 100644 index 00000000..f71811a6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/CollisionBox-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05845a4766368cbc74b249105b06438d0a49b0abf973dc97f7563d2115a12e9b +size 209871 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/CollisionBox-2.jpg b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/CollisionBox-2.jpg new file mode 100644 index 00000000..23e521fe --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/CollisionBox-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bbc96c621a213c4d2513b0a47bc06b0b77f65cd62293c5d8d3ff3150dbae8d89 +size 211093 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/CollisionBox-3.jpg b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/CollisionBox-3.jpg new file mode 100644 index 00000000..5a1ce10f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/CollisionBox-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d82f759a356ca928a73c05bd3f3ac8df8bab914a5b3427488f5db79ad652c661 +size 213668 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/LaserBlasterAsset.png b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/LaserBlasterAsset.png new file mode 100644 index 00000000..b00ff19d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/LaserBlasterAsset.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0844cd0df809fbcffd943e8b02ac7db9d81104ab2f71588ba46efc13c0733d2f +size 1770913 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/Script.mp4 b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/Script.mp4 new file mode 100644 index 00000000..73c004b4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/Script.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2433411bf2a44fbb1fbbf887296d4b1b4d3b7250ad6f24e0af25a72d9a123ddc +size 533450 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/beam6060542021.png b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/beam6060542021.png new file mode 100644 index 00000000..b797a5d7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/beam6060542021.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac58349c0909184742ac688959b37491c1d29e43f7033f6b2b7a0d4effcd9f97 +size 24157 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/beam6060542158.png b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/beam6060542158.png new file mode 100644 index 00000000..071f31de --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/beam6060542158.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fd31570cff7b5705006c8ce2679fbf0c462231089db5e726a2befb68f2df043 +size 16114 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/beam6060542252.png b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/beam6060542252.png new file mode 100644 index 00000000..78a78033 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/beam6060542252.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50b0678b1ffccb93395af1b0da88f81d84c5cf4f7a7d58c07c5bda498f00f9ce +size 21231 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/laserTrap_beamExamples.mp4 b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/laserTrap_beamExamples.mp4 new file mode 100644 index 00000000..bad98e53 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/laserTrap_beamExamples.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9b6a2559838fa8b235857bc2897178180ae26a0510e8a8ca6922ee6f32b58ce +size 2144248 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/laserTrap_setAttachment0.mp4 b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/laserTrap_setAttachment0.mp4 new file mode 100644 index 00000000..af395ca9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/laserTrap_setAttachment0.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59b18b5b483df134d77a5efd13330fa92a1d3a1d8c3d827a10a58eb1691bd93c +size 99689 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/laserTrap_testFinalLaser.mp4 b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/laserTrap_testFinalLaser.mp4 new file mode 100644 index 00000000..cb316182 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/laserTrap_testFinalLaser.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d13cdb2e9229cf68ced3967ae34cb39596d9dd36ddb43fb44d25b93734137a9 +size 342084 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_addBeamObject.jpg b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_addBeamObject.jpg new file mode 100644 index 00000000..21b1a086 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_addBeamObject.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbe6f6b1a1fc7ba9e29f1f21e40c9490c022447d2ff0f287770669d9d7508e12 +size 20511 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_anchorPart.png b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_anchorPart.png new file mode 100644 index 00000000..86c8782f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_anchorPart.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68c866f229bead25b04df0f58e32e42cf230be2f623610e8961f159c21e332ef +size 4207 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_beamColor.jpg b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_beamColor.jpg new file mode 100644 index 00000000..f3ffed7f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_beamColor.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e821c33e9286916635a737612d1a16e67086d68e265db0f20e65e5538f4949a +size 57066 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_beamDifferentAngles_left.jpg b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_beamDifferentAngles_left.jpg new file mode 100644 index 00000000..934043d1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_beamDifferentAngles_left.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bb2057339eb04e8320aff60eaace5432b25b528c119b6f24dca66d29ab92646 +size 30975 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_beamDifferentAngles_top.jpg b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_beamDifferentAngles_top.jpg new file mode 100644 index 00000000..8cdb52b5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_beamDifferentAngles_top.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:886b856b12ef02ce278ab1be7b9172cd595ee3d97b9529997ae2de399d762619 +size 31365 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_beamWidthLarger.jpg b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_beamWidthLarger.jpg new file mode 100644 index 00000000..df81e185 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_beamWidthLarger.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1081d444e499d177cdf6e39e58ac8dad16263760db3eeef84c6ff7c55e58e57 +size 53567 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_changeColor.png b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_changeColor.png new file mode 100644 index 00000000..4eb1c0a4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_changeColor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:614b7bcbe2e00a59e293c9d9f48ff84ed7ef2d2edb8a3d726e83bb58e6af64a4 +size 6779 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_collisionBox.jpg b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_collisionBox.jpg new file mode 100644 index 00000000..366a84a2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_collisionBox.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5aa6956e58d6c771d69646e9b5c39dcf4ec0526d66ab3faf0167e2ee8267c09f +size 90974 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_constraintDetails.png b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_constraintDetails.png new file mode 100644 index 00000000..24f59aa3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_constraintDetails.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d64826252d9b410609d03ff46f11cab22544871e717e9f0c42919521cdc402c +size 5688 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_createCollisionBox.png b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_createCollisionBox.png new file mode 100644 index 00000000..ca1dfdea --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_createCollisionBox.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79823727940152d1eb8c131dc0260f6ed3164d7876fda1356028a2ab5c75ead6 +size 5404 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_drawOnTop.png b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_drawOnTop.png new file mode 100644 index 00000000..a6da8c73 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_drawOnTop.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:382f63bff962afcf24fac257e444616288d76b76aa04bc2e3dd75a76470db274 +size 5881 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_pasteTextureID.png b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_pasteTextureID.png new file mode 100644 index 00000000..cd702025 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_pasteTextureID.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e575de5c9d2571c454147c4a9275697b6bba84fad0bf3a46f237eff9ce481fbe +size 6786 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_setWidth.png b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_setWidth.png new file mode 100644 index 00000000..e1913ba8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_setWidth.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38b630e1602167f34a91cd254728b99a9718f201920005dacc23bdb7229d5fd1 +size 3950 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_showAttachments.jpg b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_showAttachments.jpg new file mode 100644 index 00000000..83452313 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_showAttachments.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb82bd5c364cecb1a1c023d342ed604599511c27731fd3f43d9f1de60a995147 +size 27665 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_showAttachmentsSet.png b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_showAttachmentsSet.png new file mode 100644 index 00000000..7d6f5bf0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_showAttachmentsSet.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d128bc91dcb32966e7b7ef14da68d6f4f9c8a3a3ade95e83545f01c05d05730d +size 4798 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_showBeamLightEmission.jpg b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_showBeamLightEmission.jpg new file mode 100644 index 00000000..dd82bed4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_showBeamLightEmission.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a1853a199d597b9bd5291a28e570a565e677ac3f29e58e3c21ffc12abfa8292 +size 49569 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_showBeamWithTexture.jpg b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_showBeamWithTexture.jpg new file mode 100644 index 00000000..8bb80461 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_showBeamWithTexture.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:607e18044f1b120a1326d646bfce9af75738943a4d56936d8895a73f679346b5 +size 48103 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_showPartsCreated.png b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_showPartsCreated.png new file mode 100644 index 00000000..025353ef --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_showPartsCreated.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:020eddec8f494070154bc7ae6f7339bc23df77d6a1759765e2994a35f2773ca9 +size 5863 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_showSetup_alt.png b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_showSetup_alt.png new file mode 100644 index 00000000..13256826 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_showSetup_alt.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e11480a8c186d7b259d2afc1681cdf8fb3632cd4c0835a5cc515ab59e520034 +size 161573 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_showTrapPart.jpg b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_showTrapPart.jpg new file mode 100644 index 00000000..52c65178 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_showTrapPart.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a2e53ed30dfa6f69a567bc0d8aae83fee7b27aeb9ebe99bb2c5dd457c06e214 +size 57337 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_toggleFaceCamera.png b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_toggleFaceCamera.png new file mode 100644 index 00000000..2b269f15 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_toggleFaceCamera.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfa2a7d19eea85c11f544ae74b20ba8b575967d6fe486d1a5ef5e171bc2b53e5 +size 4622 diff --git a/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_transparencyLightEmission.png b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_transparencyLightEmission.png new file mode 100644 index 00000000..3ff31e5b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/laser-traps-with-beams/lasertrap_transparencyLightEmission.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79bf67668092dbc5e057ae593114731ac2617f883e0be7e14bbd565c12f8cb38 +size 6180 diff --git a/.cursor/rules/roblox/assets/tutorials/lighting-with-props/Billboard-Select-Model.jpg b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/Billboard-Select-Model.jpg new file mode 100644 index 00000000..847a9816 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/Billboard-Select-Model.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c57e02a42d76c2f96ad1a731c6b6c3c0c2c860e97664f3ed900d1ee7268dd6ca +size 209911 diff --git a/.cursor/rules/roblox/assets/tutorials/lighting-with-props/Billboard-Select-SurfaceLight.png b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/Billboard-Select-SurfaceLight.png new file mode 100644 index 00000000..347a0e91 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/Billboard-Select-SurfaceLight.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99800f2ff757fbaa0f40015207eab281e439139b46df720bc07d2f51af77b33e +size 17958 diff --git a/.cursor/rules/roblox/assets/tutorials/lighting-with-props/LightCasing-Material-Property.png b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/LightCasing-Material-Property.png new file mode 100644 index 00000000..9b1ad1fe --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/LightCasing-Material-Property.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:471ce389f6104f0a597634b788c559b6e460655a2e7a364266f762d9a81af35b +size 23449 diff --git a/.cursor/rules/roblox/assets/tutorials/lighting-with-props/LightCasing-Material.jpg b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/LightCasing-Material.jpg new file mode 100644 index 00000000..b2a28598 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/LightCasing-Material.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:899b26ad34a37f963526d8e07c4d96ebe6775c8369778d1446f06f4042aa1f6e +size 74848 diff --git a/.cursor/rules/roblox/assets/tutorials/lighting-with-props/LightPole-Add-Light.jpg b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/LightPole-Add-Light.jpg new file mode 100644 index 00000000..64022159 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/LightPole-Add-Light.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21bd6e543420ce5af9f9d248d97413ca290ced5789409e25773ca89c4c537994 +size 82625 diff --git a/.cursor/rules/roblox/assets/tutorials/lighting-with-props/LightPole-Add-Light.png b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/LightPole-Add-Light.png new file mode 100644 index 00000000..c595e0d6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/LightPole-Add-Light.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb50a0333d80ceb6bceb163ffafa9f45bd3d8336e3ff2b2b874530fa4e348e9d +size 13047 diff --git a/.cursor/rules/roblox/assets/tutorials/lighting-with-props/LightPole-Select-LightCasing.png b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/LightPole-Select-LightCasing.png new file mode 100644 index 00000000..2b3d0aa0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/LightPole-Select-LightCasing.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57bfbc5638961412a3e27b48cac804451e2216831b6ee8bd1ab97d84de83f1a6 +size 10346 diff --git a/.cursor/rules/roblox/assets/tutorials/lighting-with-props/LightPole-Select-Model.jpg b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/LightPole-Select-Model.jpg new file mode 100644 index 00000000..99a73cf9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/LightPole-Select-Model.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e3398f8e13f777c20d5d5e889b03e6301b63ac05989f6e84df91751a46e2ebe +size 126308 diff --git a/.cursor/rules/roblox/assets/tutorials/lighting-with-props/Misty-Harbor-Banner.jpg b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/Misty-Harbor-Banner.jpg new file mode 100644 index 00000000..6f12d221 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/Misty-Harbor-Banner.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a25888b081d2754d8cc5e09965e49e0ccb5e28ab7023ef2a09d39801a1d114b +size 175281 diff --git a/.cursor/rules/roblox/assets/tutorials/lighting-with-props/Misty-Harbor-Edit-Place.png b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/Misty-Harbor-Edit-Place.png new file mode 100644 index 00000000..e9b18fdd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/Misty-Harbor-Edit-Place.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:810e770af56a239c6da37c05ae684bc278a4c95b403d92eec820f5264561f2a5 +size 43953 diff --git a/.cursor/rules/roblox/assets/tutorials/lighting-with-props/PointLight-Brightness.jpg b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/PointLight-Brightness.jpg new file mode 100644 index 00000000..8c147562 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/PointLight-Brightness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2df4c1ea7dbab16848dca198b068ff43f3f1a7a1627f77e6f4ea82dc35a6ea33 +size 93450 diff --git a/.cursor/rules/roblox/assets/tutorials/lighting-with-props/PointLight-Color.jpg b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/PointLight-Color.jpg new file mode 100644 index 00000000..07dabfbf --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/PointLight-Color.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44199b1dc45db588333e4e7fa71f31c96deac0cd4e63c6afa52d0cd08bbec2b3 +size 97097 diff --git a/.cursor/rules/roblox/assets/tutorials/lighting-with-props/PointLight-Range-12.jpg b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/PointLight-Range-12.jpg new file mode 100644 index 00000000..6f85c48c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/PointLight-Range-12.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:787fb20bce23b720eb991aa57ce4edcdaf0acd678e6d81ad5a863a15b9dcd386 +size 94284 diff --git a/.cursor/rules/roblox/assets/tutorials/lighting-with-props/PointLight-Range-8.jpg b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/PointLight-Range-8.jpg new file mode 100644 index 00000000..04989073 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/PointLight-Range-8.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd2717036957dc682ef7d2b004990eba84bc96fe3695931ee6ca4c1a554589fd +size 92779 diff --git a/.cursor/rules/roblox/assets/tutorials/lighting-with-props/SpotLight-Angle-30.jpg b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/SpotLight-Angle-30.jpg new file mode 100644 index 00000000..f3aa98f8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/SpotLight-Angle-30.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:789b4ec717a2185242f5eb37605051f8fcb99880420e77770cd0cdccc5afc881 +size 117995 diff --git a/.cursor/rules/roblox/assets/tutorials/lighting-with-props/SpotLight-Angle-75.jpg b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/SpotLight-Angle-75.jpg new file mode 100644 index 00000000..474c0d03 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/SpotLight-Angle-75.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae07c393f7436e4782312ca12db34333d901e00ef6b76da671107c94017b4fb2 +size 137915 diff --git a/.cursor/rules/roblox/assets/tutorials/lighting-with-props/SpotLight-Face-Bottom.jpg b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/SpotLight-Face-Bottom.jpg new file mode 100644 index 00000000..c355dcc3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/SpotLight-Face-Bottom.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e26aec888d33ee60221e08a29fdecb50b234b3f28fddf141fa63265cff46ae90 +size 123644 diff --git a/.cursor/rules/roblox/assets/tutorials/lighting-with-props/SpotLight-Face-Left.jpg b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/SpotLight-Face-Left.jpg new file mode 100644 index 00000000..864e6dd1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/SpotLight-Face-Left.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41f190045c7e639d51db2f60728ce493287f13b842b25591f313444295dc26ea +size 112842 diff --git a/.cursor/rules/roblox/assets/tutorials/lighting-with-props/StreetLight-Select-Model.jpg b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/StreetLight-Select-Model.jpg new file mode 100644 index 00000000..71669606 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/StreetLight-Select-Model.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbe5f0f62f04ac4b7a0a52197f862cba65b58e293626842f0b426df105238e6d +size 173039 diff --git a/.cursor/rules/roblox/assets/tutorials/lighting-with-props/StreetLight-Select-SpotLight.png b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/StreetLight-Select-SpotLight.png new file mode 100644 index 00000000..a647f14c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/StreetLight-Select-SpotLight.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:135e826b0290a6317ad67efb740aa131656423b901b01b35de649d2961efba9f +size 13597 diff --git a/.cursor/rules/roblox/assets/tutorials/lighting-with-props/SurfaceLight-Angle-0.jpg b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/SurfaceLight-Angle-0.jpg new file mode 100644 index 00000000..39bb7f06 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/SurfaceLight-Angle-0.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:819af0255dea337366734dfc2aacbce51a23fa110293795685afe4beb8f8171a +size 133326 diff --git a/.cursor/rules/roblox/assets/tutorials/lighting-with-props/SurfaceLight-Angle-60.jpg b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/SurfaceLight-Angle-60.jpg new file mode 100644 index 00000000..120730fc --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/SurfaceLight-Angle-60.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cd9bb15486aa1f9d17afb7a68a86a944dcd99d7a240d0641ae4921fb2c94dc5 +size 151285 diff --git a/.cursor/rules/roblox/assets/tutorials/lighting-with-props/SurfaceLight-Face-Bottom.jpg b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/SurfaceLight-Face-Bottom.jpg new file mode 100644 index 00000000..4a266416 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/lighting-with-props/SurfaceLight-Face-Bottom.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5cd6fb5c986e777a03d8e49e32784d0e5abb45c4f37389b329bdfa7f0da30a9e +size 133786 diff --git a/.cursor/rules/roblox/assets/tutorials/playing-background-music/introToSound_bgMusic_web.mp4 b/.cursor/rules/roblox/assets/tutorials/playing-background-music/introToSound_bgMusic_web.mp4 new file mode 100644 index 00000000..665f9518 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/playing-background-music/introToSound_bgMusic_web.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95e9aab17e84001832e1d2a90758074f893755cb2d1b57b3ca9c14d2c900183a +size 5539022 diff --git a/.cursor/rules/roblox/assets/tutorials/playing-background-music/playingBGMusic_changeProperties_looped.png b/.cursor/rules/roblox/assets/tutorials/playing-background-music/playingBGMusic_changeProperties_looped.png new file mode 100644 index 00000000..07f87239 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/playing-background-music/playingBGMusic_changeProperties_looped.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3b6aec02a5c138335eb4db7e2ec3670eb1aa7f259522b0a5b1b2b773ebfa9f5 +size 4626 diff --git a/.cursor/rules/roblox/assets/tutorials/playing-background-music/playingBGMusic_changeProperties_volume.png b/.cursor/rules/roblox/assets/tutorials/playing-background-music/playingBGMusic_changeProperties_volume.png new file mode 100644 index 00000000..0ae212cc --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/playing-background-music/playingBGMusic_changeProperties_volume.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f4b3be78dfed43c2ffe26dc073170f95a9526db7ba60d954c67c013a906848f +size 4708 diff --git a/.cursor/rules/roblox/assets/tutorials/playing-background-music/playingBGMusic_createSoundInSoundService.png b/.cursor/rules/roblox/assets/tutorials/playing-background-music/playingBGMusic_createSoundInSoundService.png new file mode 100644 index 00000000..573fc235 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/playing-background-music/playingBGMusic_createSoundInSoundService.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b0e61731dc8369c669954281145400fdfa24e41cb618b099da61886233ac16af +size 7061 diff --git a/.cursor/rules/roblox/assets/tutorials/playing-background-music/playingBGMusic_pressPreview.png b/.cursor/rules/roblox/assets/tutorials/playing-background-music/playingBGMusic_pressPreview.png new file mode 100644 index 00000000..65f4917f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/playing-background-music/playingBGMusic_pressPreview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9aeb7dc1e61642fcce3b3793346777956c462593bb347c6e5445d188f034e6e3 +size 4775 diff --git a/.cursor/rules/roblox/assets/tutorials/playing-background-music/playingBGMusic_soundID.png b/.cursor/rules/roblox/assets/tutorials/playing-background-music/playingBGMusic_soundID.png new file mode 100644 index 00000000..fdf66612 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/playing-background-music/playingBGMusic_soundID.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e05c461a7a808174bf6a01e45c62b1b07a28edf4cf3ad537c5eaa1fb19f91233 +size 4820 diff --git a/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Add-Animation-3.mp4 b/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Add-Animation-3.mp4 new file mode 100644 index 00000000..0a271263 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Add-Animation-3.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4e2061104f23b86587a557cef9206d18e0b31cf7979e378a65dc506eb6897fb +size 1294657 diff --git a/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Custom-Walk-Animation.mp4 b/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Custom-Walk-Animation.mp4 new file mode 100644 index 00000000..616269eb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Custom-Walk-Animation.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae30d27b1096fc53406bd7ba7492ef3c799ce6215e03e4417182e62777969efc +size 1331339 diff --git a/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Default-Climb-Animation.mp4 b/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Default-Climb-Animation.mp4 new file mode 100644 index 00000000..0f4716e7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Default-Climb-Animation.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7eb1389889ddbd27081c63c5d7170a29b9e1a93cf1e3c94b6a791dcb2fd63111 +size 749655 diff --git a/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Default-Fall-Animation.mp4 b/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Default-Fall-Animation.mp4 new file mode 100644 index 00000000..58dee261 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Default-Fall-Animation.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:10bb772180ba33ea85c82bd536f8c1e3a12822655ac7786213173578ff715783 +size 775889 diff --git a/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Default-Swim-Animation.mp4 b/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Default-Swim-Animation.mp4 new file mode 100644 index 00000000..2d42516c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Default-Swim-Animation.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0de0f88f49092ba662867b35578d39ff03f5adf1f2b7b2d4df104c6ea14a2e9c +size 629866 diff --git a/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Default-Walk-Animation.mp4 b/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Default-Walk-Animation.mp4 new file mode 100644 index 00000000..1c45cc76 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Default-Walk-Animation.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eea28938da913b9fce3502c6eeec76f3b149948632d513b5d016d7e9e85379eb +size 1280775 diff --git a/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Insert-Volume-3.jpg b/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Insert-Volume-3.jpg new file mode 100644 index 00000000..6ee59277 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Insert-Volume-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74ed015159a60968dfea8b141675e5ad5b4826b1428ec25bc7e5e4f396d32c48 +size 367626 diff --git a/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Pose-Example.mp4 b/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Pose-Example.mp4 new file mode 100644 index 00000000..4c991a3a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Pose-Example.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:566d4b45f1bcd22363619b0b2920fc132f153622bb44b3a29807072c72ed521a +size 1038921 diff --git a/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Replace-AssetID-2B.mp4 b/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Replace-AssetID-2B.mp4 new file mode 100644 index 00000000..20a19091 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Replace-AssetID-2B.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fca79b2faef8bc32a9e6bb50bfb4ecf74f167f839496f0b0a0da78944b3b8254 +size 5123072 diff --git a/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Volume-Example.jpg b/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Volume-Example.jpg new file mode 100644 index 00000000..f39a75fb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/playing-character-animations/Volume-Example.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ef2765bb947b2b34cac1f35380f05943c6970b57de3b28eb4985eded811bc46 +size 954164 diff --git a/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Dungeon-Delve-Edit-Place.png b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Dungeon-Delve-Edit-Place.png new file mode 100644 index 00000000..b47cdd08 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Dungeon-Delve-Edit-Place.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7c9e9d7819eca6824433005288227ac47c2838c2f23346aa7a72dbf60f826a0 +size 140233 diff --git a/.cursor/rules/roblox/assets/tutorials/proximity-prompts/HoldDuration.mp4 b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/HoldDuration.mp4 new file mode 100644 index 00000000..11610fe9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/HoldDuration.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c69bc44a600ddfa649ebc3cba32a35aafbb41fffd46ea9ebd85ab908a99ba5db +size 551161 diff --git a/.cursor/rules/roblox/assets/tutorials/proximity-prompts/PromptsShowcase.mp4 b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/PromptsShowcase.mp4 new file mode 100644 index 00000000..736df452 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/PromptsShowcase.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa338ed39ed53efafc4ac0e2b140d458e9e5cdd33b08045bb661abd41cf11d3e +size 3200944 diff --git a/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-Insert-PromptAttachment.png b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-Insert-PromptAttachment.png new file mode 100644 index 00000000..112e42a1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-Insert-PromptAttachment.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3090181b3b96d4a913e21cd837507be0ce87d5926267c6dd8b70f139a82ae726 +size 27898 diff --git a/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-Insert-ProximityPrompt.png b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-Insert-ProximityPrompt.png new file mode 100644 index 00000000..d869e593 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-Insert-ProximityPrompt.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:296604c73a6899d5f85a59b6263b731fa5c7c27004d0e750754db8f90c0820d4 +size 22907 diff --git a/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-MaxActivationDistance-View.jpg b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-MaxActivationDistance-View.jpg new file mode 100644 index 00000000..198516c8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-MaxActivationDistance-View.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f41cad8852d8526df6c6d5986a1eb267763463edec419938101d912a7be8c2a0 +size 228999 diff --git a/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-PromptAttachment-Position.png b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-PromptAttachment-Position.png new file mode 100644 index 00000000..1175bab7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-PromptAttachment-Position.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa2a8860a3a2c83b0a5c0b2d472f679db3ff890054031ffd763368ff40643337 +size 11531 diff --git a/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-PromptAttachment-View.jpg b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-PromptAttachment-View.jpg new file mode 100644 index 00000000..ae0a4a0d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-PromptAttachment-View.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:930fccaa803041dbbe6085605ba0d5af6fd972ac07bd5df0502e29991f8896a1 +size 116043 diff --git a/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-PromptEvents-Script.png b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-PromptEvents-Script.png new file mode 100644 index 00000000..6f7d588b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-PromptEvents-Script.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3dd18d5da76565f99766353487a3d6d24335c2f3e264e40d4355a79935d166c9 +size 20662 diff --git a/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-Select-Door-View.jpg b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-Select-Door-View.jpg new file mode 100644 index 00000000..c2ddd503 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-Select-Door-View.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f5360a8f7fd74749e0a9e0e237edbf50f106e5fc1a6602e52c290606a0d6948 +size 157084 diff --git a/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-Select-Door.png b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-Select-Door.png new file mode 100644 index 00000000..d0f3749e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-Select-Door.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8e48b1c16156c7e716bcbfac606c4534c6c788f95b4455a77debee1e2cfcd9f +size 15862 diff --git a/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-Select-PrisonDoor.png b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-Select-PrisonDoor.png new file mode 100644 index 00000000..f00dc886 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/Proximity-Prompts-Select-PrisonDoor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2b638c1cf070739f12e4e202b86a4e6d8d86660a6525c813687d7ff477b0349 +size 44330 diff --git a/.cursor/rules/roblox/assets/tutorials/proximity-prompts/ProximityPrompt-ActionText.png b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/ProximityPrompt-ActionText.png new file mode 100644 index 00000000..2792b797 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/ProximityPrompt-ActionText.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c3e209ad11cf14988b2d25055c30d5c3d1c2abbddc139a853f1b252bb217f26 +size 14460 diff --git a/.cursor/rules/roblox/assets/tutorials/proximity-prompts/ProximityPrompt-Diagram.png b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/ProximityPrompt-Diagram.png new file mode 100644 index 00000000..6786e0b0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/ProximityPrompt-Diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:714efd400a5782068b43432efb06ad27db73f01dafe7dba890d46404529b533d +size 12212 diff --git a/.cursor/rules/roblox/assets/tutorials/proximity-prompts/ProximityPrompt-HoldDuration.png b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/ProximityPrompt-HoldDuration.png new file mode 100644 index 00000000..40f227aa --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/ProximityPrompt-HoldDuration.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca6499cb5063f3e57ca39e8c3f10b5d221183afa76cc8e18e5e865264a360aa0 +size 16588 diff --git a/.cursor/rules/roblox/assets/tutorials/proximity-prompts/ProximityPrompt-MaxActivationDistance.png b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/ProximityPrompt-MaxActivationDistance.png new file mode 100644 index 00000000..c9c6f6f7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/ProximityPrompt-MaxActivationDistance.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e62ed04c4bac470e7595600a86a436a2ad4848aa8edae06a0b17f72dd60c422f +size 16676 diff --git a/.cursor/rules/roblox/assets/tutorials/proximity-prompts/ProximityPrompt-ObjectText.png b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/ProximityPrompt-ObjectText.png new file mode 100644 index 00000000..d5a20da6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/proximity-prompts/ProximityPrompt-ObjectText.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1cf60c1c6f8400d083cd056d409f442b2570a25399b117e95bf354be0feffbc2 +size 16904 diff --git a/.cursor/rules/roblox/assets/tutorials/record-and-display-player-data/Insert-ModuleScript.png b/.cursor/rules/roblox/assets/tutorials/record-and-display-player-data/Insert-ModuleScript.png new file mode 100644 index 00000000..c6557f83 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/record-and-display-player-data/Insert-ModuleScript.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c3e48ef39029c976743e8234e8d727136c7fdb323783fc476328fb21d4f44a3 +size 48175 diff --git a/.cursor/rules/roblox/assets/tutorials/record-and-display-player-data/ModuleScript-Renamed-Leaderboard.png b/.cursor/rules/roblox/assets/tutorials/record-and-display-player-data/ModuleScript-Renamed-Leaderboard.png new file mode 100644 index 00000000..1d5a79bb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/record-and-display-player-data/ModuleScript-Renamed-Leaderboard.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a918a708daa05df0e69a33932d73f08d311f07f24810d57478fb29d74f094eb +size 21490 diff --git a/.cursor/rules/roblox/assets/tutorials/record-and-display-player-data/ModuleScript-Renamed-PlayerData.png b/.cursor/rules/roblox/assets/tutorials/record-and-display-player-data/ModuleScript-Renamed-PlayerData.png new file mode 100644 index 00000000..736a934e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/record-and-display-player-data/ModuleScript-Renamed-PlayerData.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8f019b3d76b1301d959d868df25e8f74db2a1814d18724ea8531b1418c1112e +size 21927 diff --git a/.cursor/rules/roblox/assets/tutorials/record-and-display-player-data/record-and-display-player-data-example.mp4 b/.cursor/rules/roblox/assets/tutorials/record-and-display-player-data/record-and-display-player-data-example.mp4 new file mode 100644 index 00000000..55650cde --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/record-and-display-player-data/record-and-display-player-data-example.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3eefc417adc337e899788ca9113b2b7599b7eec3232694b5834f927d18cdc264 +size 20015434 diff --git a/.cursor/rules/roblox/assets/tutorials/scoring-points/finishedScoringPointsSolo.mp4 b/.cursor/rules/roblox/assets/tutorials/scoring-points/finishedScoringPointsSolo.mp4 new file mode 100644 index 00000000..05fc69ed --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/scoring-points/finishedScoringPointsSolo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70ab50cd9ffa6c40c5123e2eacbe8f1a1911e51f8988fb30644b713546921d2c +size 1716720 diff --git a/.cursor/rules/roblox/assets/tutorials/scoring-points/leaderboard.jpg b/.cursor/rules/roblox/assets/tutorials/scoring-points/leaderboard.jpg new file mode 100644 index 00000000..0e52db05 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/scoring-points/leaderboard.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01bacce232b42104bd991169806dfde0e75e8d6ee7211be5da3ee318f40ed1bc +size 23810 diff --git a/.cursor/rules/roblox/assets/tutorials/scoring-points/leaderboardCounting.mp4 b/.cursor/rules/roblox/assets/tutorials/scoring-points/leaderboardCounting.mp4 new file mode 100644 index 00000000..2b8bb509 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/scoring-points/leaderboardCounting.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:753d236634bfbd38354fb1fafb5a6d60f5b897794198849ef8da53e47e9ef95e +size 1419297 diff --git a/.cursor/rules/roblox/assets/tutorials/scoring-points/sceneInPlace.jpg b/.cursor/rules/roblox/assets/tutorials/scoring-points/sceneInPlace.jpg new file mode 100644 index 00000000..c44d2408 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/scoring-points/sceneInPlace.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a081c4c04f88d8a6d4798342f2794d32802db2717149ab6e0a9ccb2d37195666 +size 414753 diff --git a/.cursor/rules/roblox/assets/tutorials/scoring-points/setupPointsScript.jpg b/.cursor/rules/roblox/assets/tutorials/scoring-points/setupPointsScript.jpg new file mode 100644 index 00000000..0bb69080 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/scoring-points/setupPointsScript.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9278fe90f1c2d32ec1a2e985e29baf37191ef80cef1ab38d17bd40e3392fbe1b +size 54485 diff --git a/.cursor/rules/roblox/assets/tutorials/script-an-upgrade-button/Insert-RemoteFunction.png b/.cursor/rules/roblox/assets/tutorials/script-an-upgrade-button/Insert-RemoteFunction.png new file mode 100644 index 00000000..3593ad5d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/script-an-upgrade-button/Insert-RemoteFunction.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8999964fe3077596864fb4dda7cbc5bbc0f623612695c4dceeddfa7904f38295 +size 31315 diff --git a/.cursor/rules/roblox/assets/tutorials/script-an-upgrade-button/script-an-upgrade-button-example.mp4 b/.cursor/rules/roblox/assets/tutorials/script-an-upgrade-button/script-an-upgrade-button-example.mp4 new file mode 100644 index 00000000..b62bb124 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/script-an-upgrade-button/script-an-upgrade-button-example.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c2797f058fccb6ddcb49341db7b65f246c8229be153bb0646fbbbbedbaaaf08 +size 8901733 diff --git a/.cursor/rules/roblox/assets/tutorials/script-game-behavior/Duplicated-Coins.png b/.cursor/rules/roblox/assets/tutorials/script-game-behavior/Duplicated-Coins.png new file mode 100644 index 00000000..5353d40f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/script-game-behavior/Duplicated-Coins.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf870a007f4fa9b7231bd349e36b31696be1fcc98ba13e3592e3e0c60f9de4bf +size 28271 diff --git a/.cursor/rules/roblox/assets/tutorials/script-game-behavior/Insert-Script.png b/.cursor/rules/roblox/assets/tutorials/script-game-behavior/Insert-Script.png new file mode 100644 index 00000000..1cc33a69 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/script-game-behavior/Insert-Script.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6d5844b07efbe7d59f152e43abd078a5f0007f80bbb4e62f9f43e58f2cef0fa +size 47812 diff --git a/.cursor/rules/roblox/assets/tutorials/script-game-behavior/Multiple-Coins-In-Level.jpg b/.cursor/rules/roblox/assets/tutorials/script-game-behavior/Multiple-Coins-In-Level.jpg new file mode 100644 index 00000000..2ce87920 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/script-game-behavior/Multiple-Coins-In-Level.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5bb6d1faed3e6101fda015b3da4624bcf65fae7f4ac315240e34b251f9522b8 +size 189935 diff --git a/.cursor/rules/roblox/assets/tutorials/script-game-behavior/New-Single-Coin.png b/.cursor/rules/roblox/assets/tutorials/script-game-behavior/New-Single-Coin.png new file mode 100644 index 00000000..60581b79 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/script-game-behavior/New-Single-Coin.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48062b08eabedddfa97cb5e1e259202cf34fca992a7d8435821c7f25fae22474 +size 26711 diff --git a/.cursor/rules/roblox/assets/tutorials/script-game-behavior/Output-Collect-Coin.png b/.cursor/rules/roblox/assets/tutorials/script-game-behavior/Output-Collect-Coin.png new file mode 100644 index 00000000..3bf42e25 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/script-game-behavior/Output-Collect-Coin.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a222e401b2a0df91a1108303eae2de72fae0bccf2cd9fed33f7fd5b51e6b76d7 +size 18736 diff --git a/.cursor/rules/roblox/assets/tutorials/script-game-behavior/Rename-New-Script.png b/.cursor/rules/roblox/assets/tutorials/script-game-behavior/Rename-New-Script.png new file mode 100644 index 00000000..98b68bb8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/script-game-behavior/Rename-New-Script.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd368e5c4cb4970e843ea022b45bf691355306e7cad04d89607f9bc562e20835 +size 21452 diff --git a/.cursor/rules/roblox/assets/tutorials/script-game-behavior/Single-Coin-In-Viewport.jpg b/.cursor/rules/roblox/assets/tutorials/script-game-behavior/Single-Coin-In-Viewport.jpg new file mode 100644 index 00000000..cd00f389 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/script-game-behavior/Single-Coin-In-Viewport.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ef6ebbed64b202d27d90721732f288186063619896fc477a5344c0b3dbcfa6a +size 150090 diff --git a/.cursor/rules/roblox/assets/tutorials/script-game-behavior/script-game-behavior-coin-collection.mp4 b/.cursor/rules/roblox/assets/tutorials/script-game-behavior/script-game-behavior-coin-collection.mp4 new file mode 100644 index 00000000..c240611e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/script-game-behavior/script-game-behavior-coin-collection.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db196348cafde174419e544b5b45ce5cfd0eabff140ff102755b5914373d0348 +size 36454818 diff --git a/.cursor/rules/roblox/assets/tutorials/scripting-avatar-animations/Using-Animations-FinalDefaultRunExample.mp4 b/.cursor/rules/roblox/assets/tutorials/scripting-avatar-animations/Using-Animations-FinalDefaultRunExample.mp4 new file mode 100644 index 00000000..e5a78ed1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/scripting-avatar-animations/Using-Animations-FinalDefaultRunExample.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b64bcf4fd5dae6f9816ab55b9d6467af30de048a02e558f5eaed1af549caed4 +size 609795 diff --git a/.cursor/rules/roblox/assets/tutorials/scripting-avatar-animations/Using-Animations-FinalEventAnimation.mp4 b/.cursor/rules/roblox/assets/tutorials/scripting-avatar-animations/Using-Animations-FinalEventAnimation.mp4 new file mode 100644 index 00000000..9073f0fe --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/scripting-avatar-animations/Using-Animations-FinalEventAnimation.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05b5aac33e0e97b24571e101495adde1f58565faee5b181c6e413ef50a4aeccc +size 708305 diff --git a/.cursor/rules/roblox/assets/tutorials/scripting-avatar-animations/Using-Animations-FinalExamples-default.jpg b/.cursor/rules/roblox/assets/tutorials/scripting-avatar-animations/Using-Animations-FinalExamples-default.jpg new file mode 100644 index 00000000..48402d70 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/scripting-avatar-animations/Using-Animations-FinalExamples-default.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ce4193d3f4126631ae431d67a385602f3745da50866666822b3466204c11438 +size 110891 diff --git a/.cursor/rules/roblox/assets/tutorials/scripting-avatar-animations/Using-Animations-FinalExamples-event.jpg b/.cursor/rules/roblox/assets/tutorials/scripting-avatar-animations/Using-Animations-FinalExamples-event.jpg new file mode 100644 index 00000000..29dc2e98 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/scripting-avatar-animations/Using-Animations-FinalExamples-event.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8770cb3823d07ae19bf9e8f6d5fe5268984fea233a891ec6ac75259d7742f8b6 +size 181487 diff --git a/.cursor/rules/roblox/assets/tutorials/scripting-avatar-animations/Using-Animations-ServerScriptChangeDefault.png b/.cursor/rules/roblox/assets/tutorials/scripting-avatar-animations/Using-Animations-ServerScriptChangeDefault.png new file mode 100644 index 00000000..f9fd2d8e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/scripting-avatar-animations/Using-Animations-ServerScriptChangeDefault.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7eff440e0346a2aed25c4c7561c82025bf663cc852727d6feda9ab7d66b546f7 +size 6387 diff --git a/.cursor/rules/roblox/assets/tutorials/scripting-avatar-animations/Using-Animations-ShockButtonModel.jpg b/.cursor/rules/roblox/assets/tutorials/scripting-avatar-animations/Using-Animations-ShockButtonModel.jpg new file mode 100644 index 00000000..93fc54b2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/scripting-avatar-animations/Using-Animations-ShockButtonModel.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec96214deeb4ea09049a8a8f3c320a6d20d24d91850b211533a50c3719f6c376 +size 150431 diff --git a/.cursor/rules/roblox/assets/tutorials/scripting-avatar-animations/Using-Animations-ShockPlayerScript.png b/.cursor/rules/roblox/assets/tutorials/scripting-avatar-animations/Using-Animations-ShockPlayerScript.png new file mode 100644 index 00000000..36825c0b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/scripting-avatar-animations/Using-Animations-ShockPlayerScript.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0bfd8e0bc63bcdfc2ef8622dae95f067431d60670c68522cc2c2547de4444871 +size 6619 diff --git a/.cursor/rules/roblox/assets/tutorials/studio-lesson/3D-Viewport.jpg b/.cursor/rules/roblox/assets/tutorials/studio-lesson/3D-Viewport.jpg new file mode 100644 index 00000000..6c0bb6e0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/studio-lesson/3D-Viewport.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9a6855e4f41b47851158975beed7e709909e17cbdb63bdbde401a825a0781f4 +size 258209 diff --git a/.cursor/rules/roblox/assets/tutorials/studio-lesson/Explorer.jpg b/.cursor/rules/roblox/assets/tutorials/studio-lesson/Explorer.jpg new file mode 100644 index 00000000..15887dee --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/studio-lesson/Explorer.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60e661a90cc02a391c0223f9ef1e05f2565e20f999cbfd262e12f54edf0956c0 +size 251731 diff --git a/.cursor/rules/roblox/assets/tutorials/studio-lesson/Mezzanine.jpg b/.cursor/rules/roblox/assets/tutorials/studio-lesson/Mezzanine.jpg new file mode 100644 index 00000000..d068071e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/studio-lesson/Mezzanine.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c11e4003c1eea5e0e6002e6d89fa982cf6c6e6d211bc0cf22fb058005f6441f7 +size 258545 diff --git a/.cursor/rules/roblox/assets/tutorials/studio-lesson/Properties.jpg b/.cursor/rules/roblox/assets/tutorials/studio-lesson/Properties.jpg new file mode 100644 index 00000000..6bddf572 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/studio-lesson/Properties.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70a73f383acb4a029ad7cb06393c9d3f57d7981f6818540173dc244d962abdc7 +size 253836 diff --git a/.cursor/rules/roblox/assets/tutorials/studio-lesson/Toolbar.jpg b/.cursor/rules/roblox/assets/tutorials/studio-lesson/Toolbar.jpg new file mode 100644 index 00000000..1ee9012a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/studio-lesson/Toolbar.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d846076f66555cdb866b5d3a877748f1712780335b1cddc80c8774f028ce4682 +size 263321 diff --git a/.cursor/rules/roblox/assets/tutorials/studio-lesson/Toolbox.jpg b/.cursor/rules/roblox/assets/tutorials/studio-lesson/Toolbox.jpg new file mode 100644 index 00000000..e05dd348 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/studio-lesson/Toolbox.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:593eb2f4cd5031684043d818ad16ee9d9de0e26557f0565ed7a8c0f7330c130c +size 251583 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/BlasterFlow.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/BlasterFlow.png new file mode 100644 index 00000000..d516e7ef --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/BlasterFlow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90ee89bd0ed61330f9d59959129da45282abafb0d2842e27ee1c3b617810ce99 +size 86282 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/BlasterInteractionOrder.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/BlasterInteractionOrder.png new file mode 100644 index 00000000..eae08bf3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/BlasterInteractionOrder.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b18ce4dd7d8e3e09e01181b37a1ea35561ce0b9d9c436638f7ae2eafc084c510 +size 182465 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/GreenLeft.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/GreenLeft.jpg new file mode 100644 index 00000000..5f8676df --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/GreenLeft.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb259025694fccadedd68c24f73b4e6749edbf0bbe2ecb95b3a23679dedd2c73 +size 484612 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/Intro.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/Intro.jpg new file mode 100644 index 00000000..5e8aa9c5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/Intro.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25199aabfb6554d1dc9d4254ab65c99baac7b7ee058cebf04c74b56a945d03a4 +size 167372 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/ObjectivePromptPreview.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/ObjectivePromptPreview.png new file mode 100644 index 00000000..791b67c9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/ObjectivePromptPreview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0528ffe75da4f9833984976ca8b8cd1436817a4ffee8b28645f29231bbe43de +size 194823 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/PinkRight.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/PinkRight.jpg new file mode 100644 index 00000000..670611ab --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/PinkRight.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59ef9711626a6f5bccd0f191c1f4af2efa8ff5bf5f2c85e2903f526308942a25 +size 316114 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/PlayerInfoPreview.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/PlayerInfoPreview.png new file mode 100644 index 00000000..b0760a47 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/PlayerInfoPreview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9c284a18867ca555727d36890278105328f5102695cef3be4dca2ac52e8e0b1 +size 38673 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/RespawningPreview.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/RespawningPreview.png new file mode 100644 index 00000000..9f8b2d0f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section1/RespawningPreview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1daf074ea64e4c70faee7a6efcf07e7416c96baa0f252a8c72dda1971b64601f +size 88878 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section2/MobileBlockIn.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section2/MobileBlockIn.png new file mode 100644 index 00000000..4c3a70d2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section2/MobileBlockIn.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a3036fa2ba4458746954beacb973e3b3f6abbb3345380c7f581812cf62605e2 +size 498602 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section2/PCBlockIn.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section2/PCBlockIn.png new file mode 100644 index 00000000..56e8dba4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section2/PCBlockIn.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae54b7461249fb99839f8903efe243eddbc4bf586196747e39a64c9fb3163695 +size 516384 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section2/UserFlowChart.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section2/UserFlowChart.jpg new file mode 100644 index 00000000..cf573f02 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section2/UserFlowChart.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5fee895421df7fc91d009c95ad7d7e0bc88b74bba8e595355ef4326749df53f9 +size 140588 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section2/VisualHierarchy.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section2/VisualHierarchy.png new file mode 100644 index 00000000..6e2ae0bf --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section2/VisualHierarchy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:defdbb958eaa7a49b670e2c27574aed6d77d63dd49278aead43755ee8becf4aa +size 110592 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-1A.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-1A.png new file mode 100644 index 00000000..32b11eb8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-1A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00496264e422f0c6a5714728ef9a2688ca6c57d258f4130225c1a31b1d843734 +size 6093 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-1B.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-1B.png new file mode 100644 index 00000000..3ec64a44 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-1B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a35f14c37c508bc918e5b56904cea24105d50e637afe458f52d9ab125cd7fcc7 +size 695733 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-2B.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-2B.png new file mode 100644 index 00000000..90af392b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-2B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e897bb3602cfd8af4742cbe33f3c7a360ff304cb2d43b6b1e785a279ec75bbc +size 673274 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-3B.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-3B.png new file mode 100644 index 00000000..a9a86758 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-3B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:046614cd32df476de4f46bb24ead964875dc5336c22bd9864e15df77d5de7a23 +size 673731 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-3E.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-3E.png new file mode 100644 index 00000000..25f04724 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-3E.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e33274e8e643a11c7b10f0de48e4a4a668246931a43fba38c95cfa57f33a675 +size 672342 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-4B.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-4B.png new file mode 100644 index 00000000..606eff13 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-4B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d92b0b5449117c262c7cd336d1c55a061639549fa0cc354386e06041c244edb9 +size 608776 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-4C.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-4C.png new file mode 100644 index 00000000..1e4743c2 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-4C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af03c5efd75dd1aaa541b0777d758857d81fda54825f2559c46410cb8e9f158b +size 610703 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-5E.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-5E.png new file mode 100644 index 00000000..ee78e9f7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-5E.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:935370a33f7326efb5623ff0e2682fc4cd48d941dae29c82a83eafd6e7cc97da +size 1169721 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-7B.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-7B.png new file mode 100644 index 00000000..d4ab94cf --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-7B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33426a41182871a70818fdd7c794e4d6fb360cd0b26f039e6df7d387eb8703e5 +size 611507 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-7C.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-7C.png new file mode 100644 index 00000000..b9866098 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-7C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d2fd58ddb48dd36c10e46907ca1520c14d4b22a13eaa94d6cf21094dcdca6ac +size 369372 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-7E.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-7E.png new file mode 100644 index 00000000..c2ef9ec3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-7E.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85397f979b10ba853bcfce90b4e3b4f0d477925d6c9d29edb558ba98e4f14322 +size 613971 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-8C.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-8C.png new file mode 100644 index 00000000..5dd1aab8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-8C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2371566c24a3b7849575e20391d3a25ee9d705f1dbe46022632e7303da25ea0d +size 613361 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-9B.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-9B.png new file mode 100644 index 00000000..bba0410f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-9B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed733078cfa8ff73b5beaad6163620abb9f06b7b89b0c433ebf4f963d4c68742 +size 383921 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-9C.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-9C.png new file mode 100644 index 00000000..a9726aba --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-9C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:787a5689e1198f20087e1921d381dfed1cb91301cd18ae9b277358f6b322d1b8 +size 617183 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-9E.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-9E.png new file mode 100644 index 00000000..89f2e611 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-9E.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2587685196fe1550e713775551dd8265e5323afd5ae50edb4f286ece5c4081c0 +size 639999 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-Intro.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-Intro.png new file mode 100644 index 00000000..a55e7884 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BS-Intro.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bdac054fe6b12cb89ee3e999f97c5ab845729b7a83b4e2c73c03981f51c8856f +size 544373 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BlastButtonComponent.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BlastButtonComponent.jpg new file mode 100644 index 00000000..9e3a569f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BlastButtonComponent.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07b625fd25e59e5b219e84e5586111c3f84f33b93ad29578bb42197915f950be +size 4373 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BlastButtonIcon-Default.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BlastButtonIcon-Default.jpg new file mode 100644 index 00000000..96a13ffa --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BlastButtonIcon-Default.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be5bbc21bc08f6155896fa43bed57290e9c8547149aecc246b76f2e20c33ce4d +size 13923 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BlastButtonIcon-Pressed.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BlastButtonIcon-Pressed.jpg new file mode 100644 index 00000000..235ad4a4 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BlastButtonIcon-Pressed.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee8111249c68bd5db4f50b60a86d25a6acbe6b6e81f727ffddc2db0f7da2a0a1 +size 11599 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BlasterButton-1C.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BlasterButton-1C.png new file mode 100644 index 00000000..38e24a3f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BlasterButton-1C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a26b5f2f04fdf2e67ba0fec376276b904a4344fd4a671cb2960e28797952ca80 +size 18574 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BlasterButton-Intro.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BlasterButton-Intro.jpg new file mode 100644 index 00000000..6d3259d7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BlasterButton-Intro.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a70cfdf634297574e7a3bdf38dd0527df4fb5f0f279e6c8369b14af2d65b5521 +size 573950 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BlasterButton-Intro.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BlasterButton-Intro.png new file mode 100644 index 00000000..37e719bc --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BlasterButton-Intro.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c320e7a07641916b1f27dfe89a470529f2d183ed68738ba64783de2f2d5ee56 +size 693270 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BlasterUI-Intro.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BlasterUI-Intro.png new file mode 100644 index 00000000..37260e16 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/BlasterUI-Intro.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58e1fa391df0ee02ea3335fa4dfb2fb127ba79b9966d7a50dc57133246debf08 +size 105271 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Border-Fade.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Border-Fade.jpg new file mode 100644 index 00000000..3687672c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Border-Fade.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef7731022bead41466bb9e978028a0ce623522b4e58d21df0219366eca7efdcb +size 1873 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/CooldownMeter-2D.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/CooldownMeter-2D.png new file mode 100644 index 00000000..635b722a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/CooldownMeter-2D.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aba38a91cebb2d21bb1dd7ba8cfe10f4f9e5924e997783c99579400e7be0e6e4 +size 690288 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/CooldownMeter-3C.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/CooldownMeter-3C.png new file mode 100644 index 00000000..9f9938f7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/CooldownMeter-3C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8fb2549c9c7224544ab1115e43d2257ce09dba72c055a4ccc76f7de6c9ff395b +size 691701 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/CooldownMeter-4B.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/CooldownMeter-4B.png new file mode 100644 index 00000000..a6574031 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/CooldownMeter-4B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f450b9fdf6fa07728f39c555ab653f41323264109793a6af5a8662905a58a5b0 +size 692017 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/CooldownMeter-5B.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/CooldownMeter-5B.png new file mode 100644 index 00000000..b1e43916 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/CooldownMeter-5B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba9ebb2aeeca1204958919e462c991b96df73a0fea9187b3559c8f21d39ae446 +size 694157 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/CooldownMeter-9A.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/CooldownMeter-9A.png new file mode 100644 index 00000000..20797fb5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/CooldownMeter-9A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad895ffc767450cfd2d872b34e26f8b72773b08835b1d3ac08461f9a93454193 +size 9500 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/CooldownMeter-Intro.mp4 b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/CooldownMeter-Intro.mp4 new file mode 100644 index 00000000..8b998af8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/CooldownMeter-Intro.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd53e6c17a2199e8ec1454aa5a23f45365933d51975f45c9aac366a0ff51f1bc +size 1034922 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Crosshair-1C.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Crosshair-1C.png new file mode 100644 index 00000000..5ac2d3b8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Crosshair-1C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbffc7189f05f034b644bb17d5c466cd94e3b24ffb497176c2f97b57faa9412b +size 6683 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Crosshair-2F.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Crosshair-2F.png new file mode 100644 index 00000000..24395c84 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Crosshair-2F.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e172ac27ab6e80bc5668e8c863b5c102d99dbde1964007e2c44fa0148793da2 +size 603801 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/CrosshairIcon.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/CrosshairIcon.jpg new file mode 100644 index 00000000..eea9359f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/CrosshairIcon.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5411c70fdb3dc3a6feea8f19938651b1830627f86ba456a861a74118436d7f44 +size 5667 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Device-Emulator-Preview.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Device-Emulator-Preview.png new file mode 100644 index 00000000..4303a472 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Device-Emulator-Preview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a46fbb9e4747099a93d4aa5082b42ce4ea88454d4f8d484555204d33f8c909d8 +size 158005 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Device-Emulator-Setup.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Device-Emulator-Setup.png new file mode 100644 index 00000000..35e37727 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Device-Emulator-Setup.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53c00cc48c6a321b90c43bbd30d44c1395879e3f01721191ea07843a4e1199ee +size 50589 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Fade.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Fade.jpg new file mode 100644 index 00000000..5a518459 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Fade.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1575fd9f87f4f8b352e2045067c63ec82a87630f27ebb85822ad9d484adf680 +size 5630 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/GreenTeamIcon.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/GreenTeamIcon.jpg new file mode 100644 index 00000000..368cc258 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/GreenTeamIcon.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6840f697ef98b498e994f4c448b39ca37986b84d41bebc3cb554d97f4e7c9316 +size 1997 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Hexagon.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Hexagon.jpg new file mode 100644 index 00000000..71dd6d66 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Hexagon.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:325ccca0527eb764a968839140d413e55979c95e7fcd2319ba577fed3d69b28e +size 4992 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/HitMarker-Icon.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/HitMarker-Icon.jpg new file mode 100644 index 00000000..2a572c45 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/HitMarker-Icon.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e14c9d75cb7f652f2c94ad6a0d8863002a2273cf42c32c17c1381967812feee7 +size 1813 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Hitmarker-1C.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Hitmarker-1C.png new file mode 100644 index 00000000..398251a6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Hitmarker-1C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19f64d61a900ef4033ca2177f34586ef164bbad31817bf619b6136adbb40a2e9 +size 15722 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Hitmarker-2F.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Hitmarker-2F.png new file mode 100644 index 00000000..93ec0c05 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Hitmarker-2F.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:88fa5506b810a042476dc6a940b15ca79bf84f911142ce62cc1d7c8611287d13 +size 606600 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-1C.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-1C.png new file mode 100644 index 00000000..76f24ca6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-1C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:835105f98851d33ee1cdc49b1d87d0b4d2410868a6ee11b78ec10766744bdfdb +size 18057 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-2E.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-2E.png new file mode 100644 index 00000000..7a7d1395 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-2E.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e50c137726d97c9b843f3e588ea62128f63a5f7ff391119736da129f88f2f946 +size 731975 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-4Ai.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-4Ai.png new file mode 100644 index 00000000..5678eae8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-4Ai.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:247a15cca71d07f8d4a3771a2a3ba00a3d95dcde4c85715e3e637546407b7024 +size 12935 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-4Av1.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-4Av1.png new file mode 100644 index 00000000..60470eed --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-4Av1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a71434189b610e7d2a715dc831a5b2f853c2a60d00ae6f5d14e28a17b39717c1 +size 15158 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-4Av2.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-4Av2.png new file mode 100644 index 00000000..52f7c872 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-4Av2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8e8323defc0eb630ec013d5b55f052632f8ac45f49962a98eb1139dda50f7c8 +size 766942 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-4B.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-4B.png new file mode 100644 index 00000000..29f0d9fb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-4B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ddbd5371d0a4556cbe08c6793a4b4b32f3cf1890adb23e356893f05ed76e30c +size 766707 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-4Cii1.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-4Cii1.png new file mode 100644 index 00000000..91daf6e7 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-4Cii1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f278dccc8a7da3fbaf94fd6325fd0a1618b9f7ecbd5111cc2221152664d143a +size 49920 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-4Cii2.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-4Cii2.png new file mode 100644 index 00000000..a37f1fcf --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-4Cii2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5878c21d3c1fa218c7186db2dc80d68a366893ef14da2896b496113bc3a4e539 +size 771946 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-6A.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-6A.png new file mode 100644 index 00000000..e6c35650 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-6A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:745d372933004250d70f602e38c8b12c5e3d5eb9bb1504048bb19c0ea1812b3f +size 899820 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-6C.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-6C.png new file mode 100644 index 00000000..316bf942 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-6C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0883f15153d81958371f9388f56e1c72a49f78ab160307998b528bf669c4843c +size 39894 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-Complete.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-Complete.png new file mode 100644 index 00000000..ef3df790 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Join-Complete.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76539fd173170c645040d76a5d153884ef00766237fa273d7be7c7915534eed9 +size 892958 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Multi-Directional-Fade.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Multi-Directional-Fade.jpg new file mode 100644 index 00000000..99b4d8bc --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Multi-Directional-Fade.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:956ba140d75d8bd5693739cbe1d706b6b5fdf808ee743669fe474233ea59ca9f +size 13540 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/MultiBlasterConfiguration.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/MultiBlasterConfiguration.png new file mode 100644 index 00000000..4d5b9202 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/MultiBlasterConfiguration.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1bcbd6901603c49f170c4f032a918976da8e2e35b7b11a5e946a6ea8100379cc +size 66401 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/MultiBlasterIcon.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/MultiBlasterIcon.jpg new file mode 100644 index 00000000..470ac09a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/MultiBlasterIcon.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87fbadd2eae4aa0b643c6512621c3d133d4b188e9fc03b94cb5fb70797dbc400 +size 4576 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/MultiBlasterIcon2.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/MultiBlasterIcon2.jpg new file mode 100644 index 00000000..3f50b2dc --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/MultiBlasterIcon2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a4f49f9cb610f9cc4fd121186c99747a844ff82a466b47d9a4d067b5056b619 +size 6067 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-1.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-1.jpg new file mode 100644 index 00000000..7fc49550 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89a23bcfbd698ef0cc4cb01c714629757200c9b5c4764745d0e90d14aa7bf5c0 +size 379053 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-2.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-2.jpg new file mode 100644 index 00000000..344b3b9a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dcb726e5376b0c63766bb24a340b280da4c1149dd66c62d42c8c788303fe04e9 +size 416183 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-3B.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-3B.jpg new file mode 100644 index 00000000..9d5c342f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-3B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02ba46504b579e9d013e2dc252f9e057e96eb8919586e9178bfd52dc51c3cd69 +size 411973 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-3E.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-3E.jpg new file mode 100644 index 00000000..92b7f7d9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-3E.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e734a9e7f9e75b073582d2c86619735585ead48e10cd304b9dc71b48b6933bd +size 405479 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-4B.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-4B.jpg new file mode 100644 index 00000000..8ae4ebb5 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-4B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bbfaff26812e3a33b91dcfcea684ce0fc7e8c5c5de1596e095b2f8c3e96993d4 +size 414926 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-4E.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-4E.jpg new file mode 100644 index 00000000..ed65e17e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-4E.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0898f18019d1c3125ac772ebbfd96a791cdb3577ae1837eaf9e33bda44d5e103 +size 420502 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-5.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-5.jpg new file mode 100644 index 00000000..034b8e53 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e519b3baafda4aa69815b252fc9979b2b9a3dd33c6aa2c5e7708711bac7ce5c +size 431033 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-7B.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-7B.jpg new file mode 100644 index 00000000..d5453682 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-7B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f376a8e80c6b95e00257cc1d5645bdf5be34bcff798edd046fe5950b45847432 +size 428465 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-7E.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-7E.jpg new file mode 100644 index 00000000..8aacd079 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-7E.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:413d01932cd979da28a617f717a3ed2844eceae447b41f8165c90fe042c16c55 +size 422340 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-7F.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-7F.jpg new file mode 100644 index 00000000..848dbef6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-7F.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6b4530b3eaab01dec2ad7dec92d672d6bc39316d69281afb69cd0613a59303d +size 424407 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-8.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-8.jpg new file mode 100644 index 00000000..8b59fe77 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-8.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f076e0e499822cb4847d1fbf45859ce08c7635066a8c186b37ab9eb241f86bd1 +size 425675 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-Intro.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-Intro.jpg new file mode 100644 index 00000000..27f04aba --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Objective-Intro.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d486ec2dbb07cb15d7dd0b1a2065d2ad7da4dfdeed157642ed535403b77b4265 +size 416733 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/ObjectiveComponent.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/ObjectiveComponent.jpg new file mode 100644 index 00000000..5ad50d3d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/ObjectiveComponent.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93303d25fb15141d802818e8b320f5d8c2495aa7f3eae14fb0085463c975a540 +size 11550 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/ObjectiveUI-Intro.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/ObjectiveUI-Intro.png new file mode 100644 index 00000000..56069f85 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/ObjectiveUI-Intro.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ffbb4d2270f4d08d1bef271ed5b7008e55531fa624a1b345f3a408179359fcbd +size 104423 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-2.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-2.jpg new file mode 100644 index 00000000..ae06eb11 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0279d959e7ff4f07e1d6d20593dc8eb5a08e718455c56c6b187f41521561a5d +size 421000 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-3.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-3.jpg new file mode 100644 index 00000000..14565327 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fcc4b67b3d0a8aec07aa7315ccecc0c637a40e018ab1f6d9c3650ccc2e729e22 +size 411048 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-4B.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-4B.jpg new file mode 100644 index 00000000..8c827b57 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-4B.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3eb852aadfb0ebf222fa1516dc613b44f101145c5207b4194be824f64839bc1a +size 410642 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-4D.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-4D.jpg new file mode 100644 index 00000000..918aca13 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-4D.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b2f1f6b3fc7627733913b05a40c665deb964da883bcb4a13c78a99a02124371 +size 53824 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-5.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-5.jpg new file mode 100644 index 00000000..9a5dd42d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d3dc6fa138a7640e3c8870b80b608f707da574069604c1185785b1e9ad35a5c +size 56713 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-6B1.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-6B1.jpg new file mode 100644 index 00000000..c02ae9f3 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-6B1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d79e5f5675831bdbcbc4bd030965693fe2aa3e77d40ffcb68fa9e2a94e74c0c +size 398485 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-6B2.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-6B2.jpg new file mode 100644 index 00000000..841636ef --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-6B2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5600f624b6459d3a66c28c4f7e327f10fb6fbdb728f6dc6bb71236284d75c96b +size 405851 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-6C.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-6C.jpg new file mode 100644 index 00000000..a8b88c39 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-6C.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5e02ee79a771615b37c00e84fb6f2bdee8ea6686efa3f4057f9b2926ad19d1d +size 405246 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-Intro.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-Intro.jpg new file mode 100644 index 00000000..9b434edc --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PI-Intro.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1a51408d6aa34736740ed98d213f4ccc670783c94274fa11fcc28b000eb97aa +size 402251 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PickABlasterComponent.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PickABlasterComponent.jpg new file mode 100644 index 00000000..488ac4c0 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PickABlasterComponent.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4314f28a7b06e032158b92a084fc2dd20c898ac469e155e31b5b71a0e8a7ef05 +size 22994 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PinkTeamIcon.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PinkTeamIcon.jpg new file mode 100644 index 00000000..266d680b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PinkTeamIcon.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7833a5f5a6ccee70059b9b3a6cfaaf9ce8e8d0a080962f05d1ecc9429f7e5244 +size 2031 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PlayerInfoComponent.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PlayerInfoComponent.jpg new file mode 100644 index 00000000..d91d8486 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PlayerInfoComponent.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a2959d2d60e028c20b98db19faf602e263fcdfaae828d4eb0b872e6ea61bb96 +size 11269 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PlayerUI-Intro.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PlayerUI-Intro.png new file mode 100644 index 00000000..a0f56c44 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/PlayerUI-Intro.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2b4ed188051c5f551fe5ca919458310ef074b3f516c245b48c0cd48320e315d +size 104981 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/ResolutionDropdown.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/ResolutionDropdown.jpg new file mode 100644 index 00000000..bf925bef --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/ResolutionDropdown.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7630deaf878c7767bf7b6ced9168c7f37eb6079bd54a12743eb311ab8f52dc8f +size 75237 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Respawn-1A.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Respawn-1A.png new file mode 100644 index 00000000..f419c64f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Respawn-1A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e5d83090d47e05f7d5a44e38949fdcdb573defae7cb96904a54ba42db8543cb +size 21792 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Respawn-1B.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Respawn-1B.png new file mode 100644 index 00000000..c84e882e --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Respawn-1B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e0e2639cf9bb7dbe1ac79332a53db3695fecc932df92df7002e552fc2125d4b +size 593197 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Respawn-1F.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Respawn-1F.png new file mode 100644 index 00000000..7827d939 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Respawn-1F.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:887a576e89fe49420c515e824f920ae682e2fd66b3a79595b0f335a02af176f1 +size 597783 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Respawn-2B.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Respawn-2B.png new file mode 100644 index 00000000..aca33d7a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Respawn-2B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b421a7e4827046256bdfe57bf69c1343be4f2b5297b32686eb80b4cc58116bd +size 596654 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Respawn-2D.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Respawn-2D.png new file mode 100644 index 00000000..ff8963e9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Respawn-2D.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c77ada714ba59abfd0d0ff4edb34c48d82b30a6e423a7862033b1f4043216fe +size 601389 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Respawn-Complete.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Respawn-Complete.png new file mode 100644 index 00000000..0d3f653b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Respawn-Complete.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:becaaa22c00b3ff18294622bb46d0c020c71997420650f49cf78a308e051137d +size 408151 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/ScreenGuiContainers.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/ScreenGuiContainers.jpg new file mode 100644 index 00000000..4b38a42c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/ScreenGuiContainers.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cdec6346f377b64c632ce842d41636fbaa124fc5d8ffc8345369ac95195b168e +size 10058 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/ScreenGuiContainers.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/ScreenGuiContainers.png new file mode 100644 index 00000000..ce43bdb9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/ScreenGuiContainers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fbc67cbcc3b9834625de24894c6dcc64e0a459676d00bbffc85376b554dd0ed +size 18188 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/SelectionArrowIcon.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/SelectionArrowIcon.jpg new file mode 100644 index 00000000..5e65cf0f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/SelectionArrowIcon.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f06667bfcb324801577a5b39323e382125a679d63ed59b321ab86624223d60b +size 1627 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/SingleBlasterConfiguration.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/SingleBlasterConfiguration.png new file mode 100644 index 00000000..5f0177df --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/SingleBlasterConfiguration.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58122f7ee76949953dde95345f8daea656edf67abc31b8859d15a703291d27d1 +size 66754 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/SingleBlasterIcon.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/SingleBlasterIcon.jpg new file mode 100644 index 00000000..c07c6f94 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/SingleBlasterIcon.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9245ab8be5649ba4da8e294c8973f00dddad24aad82b97e0484807284eb98b9 +size 5059 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/SurfaceGuiContainers.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/SurfaceGuiContainers.png new file mode 100644 index 00000000..ab2b524b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/SurfaceGuiContainers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4a00584079f1ac342e937a191e5e704b8ababa84a9cd870ed6931b04d4683c1 +size 23783 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TI-1.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TI-1.jpg new file mode 100644 index 00000000..08ab719b --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TI-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82fa701e0a0a291fb9ec1779218c76f8c116508817a6be9ab325cfff9fe2b765 +size 702838 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TI-2.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TI-2.jpg new file mode 100644 index 00000000..802f6ddd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TI-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:124c07018676d2b6b74f0b500d985dcec342f9e252a91ec4bd167da2993be18f +size 700756 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TI-4.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TI-4.jpg new file mode 100644 index 00000000..5d62d891 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TI-4.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86d83fdcb96c0123b47de957a58968f7c9cf322fe223647eeb75a79d28dd02a0 +size 698846 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TI-5.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TI-5.jpg new file mode 100644 index 00000000..197ace96 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TI-5.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d21873653470bd7d51a2ded51a9c284a79adcf0d455a57e67950eef0e3b0785c +size 698467 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TI-6.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TI-6.jpg new file mode 100644 index 00000000..0f62b841 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TI-6.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6dc5a6c2abd627061892b7b7094e41ee2770ecfb701378196b2a50218d4162a +size 701102 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TOI-1.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TOI-1.png new file mode 100644 index 00000000..1421b8f6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TOI-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc654f8b3eae5ec07de66b508c631b33282c6c23d2179e17c4bf392631023f55 +size 1020099 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TOI-2.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TOI-2.png new file mode 100644 index 00000000..ada48680 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TOI-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73e7f923a585dcd2980456faa653adf39b59d348abbcf3a38bd1c686047cc476 +size 1018743 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TOI-4.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TOI-4.png new file mode 100644 index 00000000..f7a7dfbd --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TOI-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60d69b27534d65ad23d8a1e3c21f3addf812e7deec9f6878f0dc0191185393d8 +size 1021296 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TOI-6.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TOI-6.png new file mode 100644 index 00000000..48452e16 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TOI-6.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba9912388ebf32ade4f9a14cb89aab9f67c0687c0aa3f2c7b8d47a055afb0e06 +size 1024882 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TOI-Intro.png b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TOI-Intro.png new file mode 100644 index 00000000..6af534aa --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/TOI-Intro.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a680652f5e4df7d3d8e6e2855100973f19584fca306f424e781747e491d2461 +size 712574 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Team-Indicator-Intro.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Team-Indicator-Intro.jpg new file mode 100644 index 00000000..c9fa7a7a --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Team-Indicator-Intro.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae3a585bfda8eb834415d609ebd5f916ec2c645c9e6fc4c76cffc962cae7315e +size 413988 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Trapezoid-Reverse.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Trapezoid-Reverse.jpg new file mode 100644 index 00000000..680065b8 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Trapezoid-Reverse.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66d7766e4cd7ce953cd8fc6be9a2e7fbe84d6fdfcb3a47b110aa5633ca422344 +size 5669 diff --git a/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Trapezoid.jpg b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Trapezoid.jpg new file mode 100644 index 00000000..b24f7854 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/user-interface-design/Section3/Trapezoid.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d67632008455f8ed770808fb6b6bfaa31e778838301d21b1c8168a6f1154b275 +size 2964 diff --git a/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticle_finalInContext.mp4 b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticle_finalInContext.mp4 new file mode 100644 index 00000000..9d2ab718 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticle_finalInContext.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0165f78a6123ec4e6faf7b585a432a26f127fecd91fd0192324db9fb734130c0 +size 920611 diff --git a/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticle_genericFinal.mp4 b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticle_genericFinal.mp4 new file mode 100644 index 00000000..a35d09f1 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticle_genericFinal.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6a28ad4eb2e7964af043348e9867ddf8784e128c443decde14f532c9f5374b3 +size 356443 diff --git a/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticle_testParticleEmit.mp4 b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticle_testParticleEmit.mp4 new file mode 100644 index 00000000..5054438d --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticle_testParticleEmit.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eff4acd6c66f07bdb86e0f81824c5976cb07b0cea4014d66061e700cf1eba4cd +size 118474 diff --git a/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_colorSequence.png b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_colorSequence.png new file mode 100644 index 00000000..693a5e3f --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_colorSequence.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:699c5bc911ad4e786980de9e4552cbb7cb461651bd5472989923bf69b317ed17 +size 6529 diff --git a/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_confirmPluginInstall.png b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_confirmPluginInstall.png new file mode 100644 index 00000000..25f65444 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_confirmPluginInstall.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd3740e1c66cf12c882a9aee8cdfa6c3edbc29d73b47aa87bf8d627d9f858a26 +size 8789 diff --git a/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_createExplosion.png b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_createExplosion.png new file mode 100644 index 00000000..86ffff76 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_createExplosion.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07dd9ead4d4ff765c2c1611e84de13c30d8732076f0d54867d1e4603747763cb +size 7536 diff --git a/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_enterEmitRate.png b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_enterEmitRate.png new file mode 100644 index 00000000..bfefcf3c --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_enterEmitRate.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf64eb654e6cca759fc73ed60438803c971058cb8a5ce03248b4ba5afb4bf662 +size 5614 diff --git a/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_explorerCreateScript.png b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_explorerCreateScript.png new file mode 100644 index 00000000..6b4b46cb --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_explorerCreateScript.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9779bc0ca6eabd4a10564f218ce97c8f0ed9415ae9816f0a7eeb9affe0199c88 +size 6272 diff --git a/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_partExample.png b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_partExample.png new file mode 100644 index 00000000..a56c2b07 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_partExample.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78d8490b70bf5a44e8e727c178cdc2f21cded123dcfb08c37799bef22bc967fd +size 94669 diff --git a/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_pluginInstall.png b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_pluginInstall.png new file mode 100644 index 00000000..5bdc27e6 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_pluginInstall.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc0771e7985d54bb11592bce8252b9720a7fee10d7aad5ee8ee487f74d769855 +size 10127 diff --git a/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_toggleEnabled.png b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_toggleEnabled.png new file mode 100644 index 00000000..f31dcde9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_toggleEnabled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c48bb9e972f239a770c9b47bdd66ea7eec8443e898c7667adb1b6bbe2eb16cf3 +size 5758 diff --git a/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_transparencyGradient.png b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_transparencyGradient.png new file mode 100644 index 00000000..2f9e2e49 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_transparencyGradient.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46fc20a758054b05889f3d0562f6d6c378df1d51979ba697770dd8b4057d3fca +size 20398 diff --git a/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_transparencyGradientExample.jpg b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_transparencyGradientExample.jpg new file mode 100644 index 00000000..67cb3ec9 --- /dev/null +++ b/.cursor/rules/roblox/assets/tutorials/using-particles-for-explosions/burstParticles_transparencyGradientExample.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ae2f1d94da9200c92ac859cfa13c7d92a5490c77acf3f37fab5adc60de30cdc +size 77962 diff --git a/.cursor/rules/roblox/assets/ui/2D-paths/Control-Point-Relativity.png b/.cursor/rules/roblox/assets/ui/2D-paths/Control-Point-Relativity.png new file mode 100644 index 00000000..1e48cf57 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/2D-paths/Control-Point-Relativity.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4f822babbc8c1a61596ed808bf4409f3c5a356011231ee71ad9957d43056874 +size 64248 diff --git a/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Add-Point-Between.png b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Add-Point-Between.png new file mode 100644 index 00000000..91aa5914 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Add-Point-Between.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac14f62af1e18c23fb38ee989a10581a273e27144813f8ac29c433905298f65d +size 215442 diff --git a/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Add-Point-From-End.png b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Add-Point-From-End.png new file mode 100644 index 00000000..b3e5e44c --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Add-Point-From-End.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40a9c82b8f5f18ca80db845c097d5014dca5f9c91ae38c478133b716fd65133f +size 230567 diff --git a/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Add-Tangent.png b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Add-Tangent.png new file mode 100644 index 00000000..61ecdbd3 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Add-Tangent.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01c5fb837eafa27d0450b616fb27ed66e60c26b644431d8773f2b3bed6a71c0b +size 261330 diff --git a/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Adjust-Tangent.png b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Adjust-Tangent.png new file mode 100644 index 00000000..4bfcce55 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Adjust-Tangent.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:677070cb58881b96e844ae55fb6c424cc0eb287ec3ab2ba10d09d978ec5b4a9f +size 299302 diff --git a/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Break-Tangents.png b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Break-Tangents.png new file mode 100644 index 00000000..d11d00f5 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Break-Tangents.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98688c60fa6df0ac40b514e702b2c2244b2a68c4a5a8357866c111d48908a0f2 +size 295293 diff --git a/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Clear-Tangents.png b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Clear-Tangents.png new file mode 100644 index 00000000..df104964 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Clear-Tangents.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74cde8690848946f27d717430827cd1c76bcf568139d6fefd54173847462adf9 +size 374754 diff --git a/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Create-Basic.png b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Create-Basic.png new file mode 100644 index 00000000..8832a8ee --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Create-Basic.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fb32beb62295dafce043ec82dbe78b25b38a829461ba18b233153abbdd648d5 +size 210321 diff --git a/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Delete-Point.png b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Delete-Point.png new file mode 100644 index 00000000..9331b576 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Delete-Point.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ebb22fb9d5f930aefc0b01b9af8cd76c9eae5319bd9add5dc32b4d3be6754ac5 +size 265583 diff --git a/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Delete-Tangent.png b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Delete-Tangent.png new file mode 100644 index 00000000..ba65e537 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Delete-Tangent.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7df18513ca2d1fc94fbf931f68b04852b56216fc16b7af854bcea66463bea389 +size 333373 diff --git a/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Move-Point.png b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Move-Point.png new file mode 100644 index 00000000..10b45ec1 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Move-Point.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c2e30c9c89b107ff60c4e49c4f7a6be757ea1f46c2835862d7580f1ed681694 +size 254880 diff --git a/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Thick-Red.png b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Thick-Red.png new file mode 100644 index 00000000..80b16268 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Thick-Red.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8afaa8fa74548957f44d98eb316a10b8f5e47ac27c4a123fa34461b89a1e27e +size 205134 diff --git a/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Thin-Grey.png b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Thin-Grey.png new file mode 100644 index 00000000..d78578a3 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-Thin-Grey.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9062783b49981db538fc08375fc5d5e046c0af80e17190a8caaed8e2e2821fb8 +size 203357 diff --git a/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-ZIndex-Layering.png b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-ZIndex-Layering.png new file mode 100644 index 00000000..241f651f --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/2D-paths/Path-Example-ZIndex-Layering.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09883b91208d28a47207f4d36c4024640f79146ef2f30d53370fcad80cb523ba +size 245185 diff --git a/.cursor/rules/roblox/assets/ui/2D-paths/Path2D.mp4 b/.cursor/rules/roblox/assets/ui/2D-paths/Path2D.mp4 new file mode 100644 index 00000000..613e1ae9 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/2D-paths/Path2D.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49d4109afdd79890f886c0ffedf0ffa4e16b269779e4e98db70a7ae90813ca69 +size 2651376 diff --git a/.cursor/rules/roblox/assets/ui/2D-paths/Tangents.png b/.cursor/rules/roblox/assets/ui/2D-paths/Tangents.png new file mode 100644 index 00000000..8a0e5627 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/2D-paths/Tangents.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40577efba1193a86f71fc76b6b71ad0a690ef4419accab0637c30385554048f2 +size 354434 diff --git a/.cursor/rules/roblox/assets/ui/2D-paths/Widget-Add-Point.png b/.cursor/rules/roblox/assets/ui/2D-paths/Widget-Add-Point.png new file mode 100644 index 00000000..507a3273 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/2D-paths/Widget-Add-Point.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9be5a426466c8bd9760e115b028d8841ec71ae329c6cd75f3cf1723b9e5c7de6 +size 15524 diff --git a/.cursor/rules/roblox/assets/ui/2D-paths/Widget-Add-Tangent.png b/.cursor/rules/roblox/assets/ui/2D-paths/Widget-Add-Tangent.png new file mode 100644 index 00000000..4f112461 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/2D-paths/Widget-Add-Tangent.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6ecced5dd3e03ed112ed8ffd21bee8d6c5d1fba1684020bc29a5ae0cc304afc +size 15959 diff --git a/.cursor/rules/roblox/assets/ui/2D-paths/Widget-Select.png b/.cursor/rules/roblox/assets/ui/2D-paths/Widget-Select.png new file mode 100644 index 00000000..46bef128 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/2D-paths/Widget-Select.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a3052cfdfff9310f729bb825f2289142ed2009f6f855275cfd225a17bff9177 +size 15449 diff --git a/.cursor/rules/roblox/assets/ui/3D-drag-detectors/Balance-Tower.mp4 b/.cursor/rules/roblox/assets/ui/3D-drag-detectors/Balance-Tower.mp4 new file mode 100644 index 00000000..9fe64994 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/3D-drag-detectors/Balance-Tower.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e23ad33c24de4664c9687685fdb7ddea29e6d62e686233b4357d814187be683 +size 1525385 diff --git a/.cursor/rules/roblox/assets/ui/3D-drag-detectors/Color-Slider.mp4 b/.cursor/rules/roblox/assets/ui/3D-drag-detectors/Color-Slider.mp4 new file mode 100644 index 00000000..18d514d6 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/3D-drag-detectors/Color-Slider.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0dca122b27439d2fc05c40a8bd62f9af2859f3adeeec775a7224a42def010ec8 +size 1057918 diff --git a/.cursor/rules/roblox/assets/ui/3D-drag-detectors/Desk-Drawers.mp4 b/.cursor/rules/roblox/assets/ui/3D-drag-detectors/Desk-Drawers.mp4 new file mode 100644 index 00000000..273d6b5f --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/3D-drag-detectors/Desk-Drawers.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e1e060060164da2e2c33c0bd9d7426be9fcb2214c52e65e83b1d16425d5293d +size 870877 diff --git a/.cursor/rules/roblox/assets/ui/3D-drag-detectors/Marionette.mp4 b/.cursor/rules/roblox/assets/ui/3D-drag-detectors/Marionette.mp4 new file mode 100644 index 00000000..4722f477 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/3D-drag-detectors/Marionette.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7c8d2f3713a53e89e2957949965cb96999eca03ecba566bdbcd10ddca043ae0 +size 1616974 diff --git a/.cursor/rules/roblox/assets/ui/3D-drag-detectors/Showcase.mp4 b/.cursor/rules/roblox/assets/ui/3D-drag-detectors/Showcase.mp4 new file mode 100644 index 00000000..8422f49c --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/3D-drag-detectors/Showcase.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8adfd218a3bf252623d09ce37b55b235c28d7529b64b2a5b0c5eac6abada8a5e +size 3745419 diff --git a/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Comparison-With.png b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Comparison-With.png new file mode 100644 index 00000000..b589d65e --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Comparison-With.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c418b6aa4a67452e4d65bf04a04cc1a64ae434a5c82310b6e5e5639cb89ea84 +size 76619 diff --git a/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Comparison-Without.png b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Comparison-Without.png new file mode 100644 index 00000000..41d69105 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Comparison-Without.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91ebdd03f6f0afca6cd27af204a427caf38380a7e0376708b57d84fea6980e5d +size 130803 diff --git a/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Concept-Diagram.png b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Concept-Diagram.png new file mode 100644 index 00000000..2a72b7af --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Concept-Diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a14ef3092e5827a65bec10fc28bdc4ca06bce3906e5d52456dd1b36ba0eb7558 +size 113815 diff --git a/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Editor-View.png b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Editor-View.png new file mode 100644 index 00000000..77918834 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Editor-View.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea38965da23d3cca4a1fd5cb91b9eef84a3700eabb628eccc6db1705df8b5f6f +size 99665 diff --git a/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Example-A-Editor.png b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Example-A-Editor.png new file mode 100644 index 00000000..f2381048 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Example-A-Editor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa7ec58b6674a807417bc1b172b70a95221a5fc9140d9f0a85ce8ec3c67d5dc7 +size 24469 diff --git a/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Example-A-ImageLabel.png b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Example-A-ImageLabel.png new file mode 100644 index 00000000..ce2792e4 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Example-A-ImageLabel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:468e0a4ce555682733d5acec5fde8161a6023d01dc2e98c8f75861b636e9f3f4 +size 45000 diff --git a/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Example-B-Editor.png b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Example-B-Editor.png new file mode 100644 index 00000000..4dac6243 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Example-B-Editor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43b78eafe08c7e6d19bb059873e8fd2454f706d815c194ca04a87819a99cc9f0 +size 25492 diff --git a/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Example-B-ImageLabel.png b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Example-B-ImageLabel.png new file mode 100644 index 00000000..6ccf28e4 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Example-B-ImageLabel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98c7ca8782b3168a32bf22b0f5be87395b55a3228e02dd7b453afa25d443f611 +size 52462 diff --git a/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Intro-Examples.png b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Intro-Examples.png new file mode 100644 index 00000000..c7ed8da6 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Intro-Examples.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27c67456a2cd9fefe0af6d26d428b24353f958f37803fe0e5b5a7c1e4d1b6f4a +size 25235 diff --git a/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Offset-Diagram.png b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Offset-Diagram.png new file mode 100644 index 00000000..a55795bb --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Offset-Diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8959fe299d997eaafc22da1cca98e5fe83c34d42feb51458f8687937a29aaae +size 96066 diff --git a/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Properties-Image.png b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Properties-Image.png new file mode 100644 index 00000000..eeb90866 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Properties-Image.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02bb10c3c7a52186e499f902327449b9976439c8e746ab63c268bc001e8fc137 +size 15103 diff --git a/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Properties-ScaleType.png b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Properties-ScaleType.png new file mode 100644 index 00000000..d84471f0 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Properties-ScaleType.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30cde60944d91108fa396ceee6ae5b59d5bd73a09c06a1954f0baf8f31f91336 +size 11430 diff --git a/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Properties-SliceCenter.png b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Properties-SliceCenter.png new file mode 100644 index 00000000..e5ec49a8 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/9-slice/9-Slice-Properties-SliceCenter.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3541dc33a102d090491691e6613e607feb480dbf46d34369e810a67296a2c295 +size 27247 diff --git a/.cursor/rules/roblox/assets/ui/automatic-sizing/Intro-Frame.mp4 b/.cursor/rules/roblox/assets/ui/automatic-sizing/Intro-Frame.mp4 new file mode 100644 index 00000000..9564ea3a --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/automatic-sizing/Intro-Frame.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7374e9df44c84b2aa976c5528f144efc9b32838fee9718d59481e6740f4c8091 +size 2089888 diff --git a/.cursor/rules/roblox/assets/ui/automatic-sizing/customizing-anchorpoint.mp4 b/.cursor/rules/roblox/assets/ui/automatic-sizing/customizing-anchorpoint.mp4 new file mode 100644 index 00000000..85118e8f --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/automatic-sizing/customizing-anchorpoint.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f9e7538965a6b7ea64f3220008d27bbe917c0f1e6ec8b18d75cbd69801202f1 +size 181639 diff --git a/.cursor/rules/roblox/assets/ui/automatic-sizing/customizing-size-0.mp4 b/.cursor/rules/roblox/assets/ui/automatic-sizing/customizing-size-0.mp4 new file mode 100644 index 00000000..4fde0e1b --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/automatic-sizing/customizing-size-0.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bdb6d4126bc86498bfd967d08ae4c42f709e75aa290d33122fa7aca5bd73dea2 +size 37107 diff --git a/.cursor/rules/roblox/assets/ui/automatic-sizing/customizing-size-100.mp4 b/.cursor/rules/roblox/assets/ui/automatic-sizing/customizing-size-100.mp4 new file mode 100644 index 00000000..ebd9f15f --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/automatic-sizing/customizing-size-100.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa8ad7f03c394e61f29c27b52caf203084c176f403bf1f980e38653583f653b1 +size 36276 diff --git a/.cursor/rules/roblox/assets/ui/automatic-sizing/customizing-textwrapping.mp4 b/.cursor/rules/roblox/assets/ui/automatic-sizing/customizing-textwrapping.mp4 new file mode 100644 index 00000000..07534299 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/automatic-sizing/customizing-textwrapping.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a4e652db0d68cdef49e0b6e7ec65e9ed661b063ae4ab23e60dce6395ce1d1a1 +size 86946 diff --git a/.cursor/rules/roblox/assets/ui/button-text-input/ImageButton-Screen-New.jpg b/.cursor/rules/roblox/assets/ui/button-text-input/ImageButton-Screen-New.jpg new file mode 100644 index 00000000..10e75f4b --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/button-text-input/ImageButton-Screen-New.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6131f73adf259653919e1b78eae3e6e8b083057851349c9888e4f8af616bed08 +size 143522 diff --git a/.cursor/rules/roblox/assets/ui/button-text-input/ImageButton-State-Hover.png b/.cursor/rules/roblox/assets/ui/button-text-input/ImageButton-State-Hover.png new file mode 100644 index 00000000..d1561715 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/button-text-input/ImageButton-State-Hover.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a3540e4c8f6d1cd52cf7d796f5c6fde9de41ea000d756f220b3bad7410300ab +size 27919 diff --git a/.cursor/rules/roblox/assets/ui/button-text-input/ImageButton-State-Normal.png b/.cursor/rules/roblox/assets/ui/button-text-input/ImageButton-State-Normal.png new file mode 100644 index 00000000..42242daf --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/button-text-input/ImageButton-State-Normal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bbf87580ad6447848d12e0388a363a7bab47a0b9321c7a3f1196358f8ab4cbe7 +size 27113 diff --git a/.cursor/rules/roblox/assets/ui/button-text-input/ImageButton-State-Pressed.png b/.cursor/rules/roblox/assets/ui/button-text-input/ImageButton-State-Pressed.png new file mode 100644 index 00000000..a790b545 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/button-text-input/ImageButton-State-Pressed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1817a875ef2d4216cc0191a40292023820f55b4f5596ffb30527dd7cd971d84 +size 27386 diff --git a/.cursor/rules/roblox/assets/ui/button-text-input/ImageButton-SurfaceGui-New.jpg b/.cursor/rules/roblox/assets/ui/button-text-input/ImageButton-SurfaceGui-New.jpg new file mode 100644 index 00000000..48a607b9 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/button-text-input/ImageButton-SurfaceGui-New.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52e8c3d8c02c90b59e5b8f5cd2910228b8a86e111f1f7ef1644e210af3ff3abf +size 139168 diff --git a/.cursor/rules/roblox/assets/ui/button-text-input/Sprint-Button.png b/.cursor/rules/roblox/assets/ui/button-text-input/Sprint-Button.png new file mode 100644 index 00000000..a0a62eb5 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/button-text-input/Sprint-Button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7454b4ecd23c6bd21d4b1eeb45d3612a33098351d22db14650a835db423ca146 +size 250048 diff --git a/.cursor/rules/roblox/assets/ui/button-text-input/Sprint-Demo.mp4 b/.cursor/rules/roblox/assets/ui/button-text-input/Sprint-Demo.mp4 new file mode 100644 index 00000000..285bdab6 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/button-text-input/Sprint-Demo.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a88be8f78bfc85dcf3c0f37faab5524e88a2fd87e9fc214339937c7005a61d84 +size 12169498 diff --git a/.cursor/rules/roblox/assets/ui/highlighting-objects/Adding-Highlight.jpg b/.cursor/rules/roblox/assets/ui/highlighting-objects/Adding-Highlight.jpg new file mode 100644 index 00000000..42dd4ac9 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/highlighting-objects/Adding-Highlight.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5267babef88097b2b8f8921dd6ae4a6bf6d94aa42102dd7ef829ff1d027b4b41 +size 206704 diff --git a/.cursor/rules/roblox/assets/ui/highlighting-objects/DepthMode-AlwaysOnTop.jpg b/.cursor/rules/roblox/assets/ui/highlighting-objects/DepthMode-AlwaysOnTop.jpg new file mode 100644 index 00000000..cc8a5927 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/highlighting-objects/DepthMode-AlwaysOnTop.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fcb7d1c66b9a27d37bb39900a0d58a1d674c602432451c79d92bb9996bbd6937 +size 190849 diff --git a/.cursor/rules/roblox/assets/ui/highlighting-objects/DepthMode-Occluded.jpg b/.cursor/rules/roblox/assets/ui/highlighting-objects/DepthMode-Occluded.jpg new file mode 100644 index 00000000..8ba62bdc --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/highlighting-objects/DepthMode-Occluded.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:976d34e6a9b6838d6e1d2dbb50099bf874370bb4c17cfa99548e5000b65b15d2 +size 187602 diff --git a/.cursor/rules/roblox/assets/ui/highlighting-objects/FillColor-Blue.jpg b/.cursor/rules/roblox/assets/ui/highlighting-objects/FillColor-Blue.jpg new file mode 100644 index 00000000..a9af97b8 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/highlighting-objects/FillColor-Blue.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:afc2e7b07b15ae14b7163dc39eddc7c8efd2cebfd1081ecfd510d402d11a5ae6 +size 80034 diff --git a/.cursor/rules/roblox/assets/ui/highlighting-objects/FillColor-Green.jpg b/.cursor/rules/roblox/assets/ui/highlighting-objects/FillColor-Green.jpg new file mode 100644 index 00000000..1cb99920 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/highlighting-objects/FillColor-Green.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df3acc764f48d8149778a43efeb437713239a16d9bf169839dca2393696e4164 +size 85850 diff --git a/.cursor/rules/roblox/assets/ui/highlighting-objects/FillColor-Red.jpg b/.cursor/rules/roblox/assets/ui/highlighting-objects/FillColor-Red.jpg new file mode 100644 index 00000000..47c99d22 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/highlighting-objects/FillColor-Red.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc8479748d6a6b50d56e315e3e37652bd8825b156bbb667518933e32c731e4d4 +size 84785 diff --git a/.cursor/rules/roblox/assets/ui/highlighting-objects/FillTransparency-0.jpg b/.cursor/rules/roblox/assets/ui/highlighting-objects/FillTransparency-0.jpg new file mode 100644 index 00000000..f8cfdc2a --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/highlighting-objects/FillTransparency-0.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02517ccc51fd0a5d803d4eb6bcd7e91defe053d6811c7e4d78ea4043192ecc7e +size 74918 diff --git a/.cursor/rules/roblox/assets/ui/highlighting-objects/FillTransparency-1.jpg b/.cursor/rules/roblox/assets/ui/highlighting-objects/FillTransparency-1.jpg new file mode 100644 index 00000000..5ea9e0a4 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/highlighting-objects/FillTransparency-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a277983bc2933d068860ff317c71456da00d6ce5d19b482b4516c628a6d56c9b +size 189908 diff --git a/.cursor/rules/roblox/assets/ui/highlighting-objects/FillTransparency-Half.jpg b/.cursor/rules/roblox/assets/ui/highlighting-objects/FillTransparency-Half.jpg new file mode 100644 index 00000000..af8a3ef3 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/highlighting-objects/FillTransparency-Half.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77f10fb5c41eefdc74737ee489e8d3ef5bd149c71db9c22f35d529497efa08f8 +size 182132 diff --git a/.cursor/rules/roblox/assets/ui/highlighting-objects/OutlineColor-Blue.jpg b/.cursor/rules/roblox/assets/ui/highlighting-objects/OutlineColor-Blue.jpg new file mode 100644 index 00000000..d3ac2fea --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/highlighting-objects/OutlineColor-Blue.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07ee9e2cec15c26676ab4ba3d0667b0a50d9dfeb4681f83a17f271007d93d94c +size 212447 diff --git a/.cursor/rules/roblox/assets/ui/highlighting-objects/OutlineColor-Green.jpg b/.cursor/rules/roblox/assets/ui/highlighting-objects/OutlineColor-Green.jpg new file mode 100644 index 00000000..badcd500 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/highlighting-objects/OutlineColor-Green.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf28694805bb70ab810c653e3182dd7faf3e6d9e8434a622ce181f08729efb99 +size 212759 diff --git a/.cursor/rules/roblox/assets/ui/highlighting-objects/OutlineColor-Red.jpg b/.cursor/rules/roblox/assets/ui/highlighting-objects/OutlineColor-Red.jpg new file mode 100644 index 00000000..e58c7b64 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/highlighting-objects/OutlineColor-Red.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0aace2cff6477a2fe394e237891e455173bc415a17eab8c885b53c6ca2661e0b +size 218646 diff --git a/.cursor/rules/roblox/assets/ui/highlighting-objects/OutlineTransparency-0.jpg b/.cursor/rules/roblox/assets/ui/highlighting-objects/OutlineTransparency-0.jpg new file mode 100644 index 00000000..6471ca77 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/highlighting-objects/OutlineTransparency-0.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c060d8064eab4e3a47a1f478fd934410a026d2f2059f07bcc09b76d6b77016d +size 204149 diff --git a/.cursor/rules/roblox/assets/ui/highlighting-objects/OutlineTransparency-1.jpg b/.cursor/rules/roblox/assets/ui/highlighting-objects/OutlineTransparency-1.jpg new file mode 100644 index 00000000..4a0ea336 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/highlighting-objects/OutlineTransparency-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5381f069ba6a6057bccf9baf4c8d846af3e9bbc7559b4b5524d4812fc6e7595b +size 188898 diff --git a/.cursor/rules/roblox/assets/ui/highlighting-objects/Overview-Yellow-Interior.jpg b/.cursor/rules/roblox/assets/ui/highlighting-objects/Overview-Yellow-Interior.jpg new file mode 100644 index 00000000..5a4bb6bb --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/highlighting-objects/Overview-Yellow-Interior.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff2c6eb4ab58791564ce93e6a3483d5099ccfb6ff106c58a54106a18bf04ceee +size 102417 diff --git a/.cursor/rules/roblox/assets/ui/highlighting-objects/Overview-Yellow-Outline.jpg b/.cursor/rules/roblox/assets/ui/highlighting-objects/Overview-Yellow-Outline.jpg new file mode 100644 index 00000000..8571ee76 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/highlighting-objects/Overview-Yellow-Outline.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c66346c8baea06a57ecd4a1f55c7419c29760ed02e3792e63b0b9f6e40cdd9c9 +size 114094 diff --git a/.cursor/rules/roblox/assets/ui/in-experience/BillboardGui-Diagram.jpg b/.cursor/rules/roblox/assets/ui/in-experience/BillboardGui-Diagram.jpg new file mode 100644 index 00000000..778880fe --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/in-experience/BillboardGui-Diagram.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b304e5f3f38ba8d8a9afae1542cf338d74d5162f760ad5653a2c88c73726bdf8 +size 276027 diff --git a/.cursor/rules/roblox/assets/ui/in-experience/BillboardGui-LightInfluence-0.jpg b/.cursor/rules/roblox/assets/ui/in-experience/BillboardGui-LightInfluence-0.jpg new file mode 100644 index 00000000..4e363729 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/in-experience/BillboardGui-LightInfluence-0.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f109b60bb1db6f16a70423e98278557b1912c2c1430fb69499a23afdbe1b3835 +size 223582 diff --git a/.cursor/rules/roblox/assets/ui/in-experience/BillboardGui-LightInfluence-1.jpg b/.cursor/rules/roblox/assets/ui/in-experience/BillboardGui-LightInfluence-1.jpg new file mode 100644 index 00000000..c9b0883c --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/in-experience/BillboardGui-LightInfluence-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81e154d53706911f18ff4f6c85cac164580bf7c8b155448aa05b52d71ddaa6d1 +size 219520 diff --git a/.cursor/rules/roblox/assets/ui/in-experience/BillboardGui-Sizing-Positioning.mp4 b/.cursor/rules/roblox/assets/ui/in-experience/BillboardGui-Sizing-Positioning.mp4 new file mode 100644 index 00000000..db00d868 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/in-experience/BillboardGui-Sizing-Positioning.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:841be61c7b0bdc703aacae7bcbe699c74cb6fba1368c5daa7e7f3c6807290086 +size 7444255 diff --git a/.cursor/rules/roblox/assets/ui/in-experience/Showcase.mp4 b/.cursor/rules/roblox/assets/ui/in-experience/Showcase.mp4 new file mode 100644 index 00000000..c29ad564 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/in-experience/Showcase.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45c173911aab56aca26b3b7b8c59af04c2ae60f3501ff2d4d3b575e04170ead1 +size 10256715 diff --git a/.cursor/rules/roblox/assets/ui/in-experience/SurfaceGui-Brightness-0.jpg b/.cursor/rules/roblox/assets/ui/in-experience/SurfaceGui-Brightness-0.jpg new file mode 100644 index 00000000..70f9652b --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/in-experience/SurfaceGui-Brightness-0.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ff592c37fbba81ec0ef58faee83ca8347b3d2eae7aab11a7c701e75973b3132 +size 264120 diff --git a/.cursor/rules/roblox/assets/ui/in-experience/SurfaceGui-Brightness-10.jpg b/.cursor/rules/roblox/assets/ui/in-experience/SurfaceGui-Brightness-10.jpg new file mode 100644 index 00000000..d27af98a --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/in-experience/SurfaceGui-Brightness-10.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ccc248cc57c281d7a356ed5259c930936197646085af27d29ab5b18d5703acb5 +size 283985 diff --git a/.cursor/rules/roblox/assets/ui/in-experience/SurfaceGui-Diagram.jpg b/.cursor/rules/roblox/assets/ui/in-experience/SurfaceGui-Diagram.jpg new file mode 100644 index 00000000..f69a7732 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/in-experience/SurfaceGui-Diagram.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:309c9e7aee332c50611fee43d2cbfd707a4d21c92ceaf52bda316c59a6b81cb7 +size 274200 diff --git a/.cursor/rules/roblox/assets/ui/in-experience/SurfaceGui-Sizing.mp4 b/.cursor/rules/roblox/assets/ui/in-experience/SurfaceGui-Sizing.mp4 new file mode 100644 index 00000000..8598e4be --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/in-experience/SurfaceGui-Sizing.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a828486d40005fd50b04cf76c75b1ee97d0b81d5a507f0d95d256349532405a +size 2125497 diff --git a/.cursor/rules/roblox/assets/ui/misc/Anchor-Point-Scaling.png b/.cursor/rules/roblox/assets/ui/misc/Anchor-Point-Scaling.png new file mode 100644 index 00000000..fe27625e --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/misc/Anchor-Point-Scaling.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db11e9425d9a4e55dcbc895e6fecf4145700cbfd1c47e4bbe7cf716cbec0dceb +size 12021 diff --git a/.cursor/rules/roblox/assets/ui/misc/Anchor-Points.png b/.cursor/rules/roblox/assets/ui/misc/Anchor-Points.png new file mode 100644 index 00000000..71a25061 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/misc/Anchor-Points.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a2bec404630e10edbb7d81ea4f8e14ac950b2816b3c95a9976bbe86ea83b7d1 +size 11348 diff --git a/.cursor/rules/roblox/assets/ui/misc/Contextual-Button.png b/.cursor/rules/roblox/assets/ui/misc/Contextual-Button.png new file mode 100644 index 00000000..3926b813 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/misc/Contextual-Button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:861f32cd60af61786fa5c5dd3eb898918fe32c1e2eaaf1ae6f98a98a4611117c +size 1120316 diff --git a/.cursor/rules/roblox/assets/ui/misc/CoreGui-Elements.jpg b/.cursor/rules/roblox/assets/ui/misc/CoreGui-Elements.jpg new file mode 100644 index 00000000..f5e76c75 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/misc/CoreGui-Elements.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e311460865ea971c1a96a2dacbab71f804ab4257687435bae06acff91e79898e +size 322496 diff --git a/.cursor/rules/roblox/assets/ui/misc/Custom-Buttons-Near-Jump.png b/.cursor/rules/roblox/assets/ui/misc/Custom-Buttons-Near-Jump.png new file mode 100644 index 00000000..1502603e --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/misc/Custom-Buttons-Near-Jump.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12212884cdcbf6bada82292bdf606ca2a6dade73fe6afc564a77a94bb65030af +size 1030535 diff --git a/.cursor/rules/roblox/assets/ui/misc/Loading-Animation.mp4 b/.cursor/rules/roblox/assets/ui/misc/Loading-Animation.mp4 new file mode 100644 index 00000000..d08cca8c --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/misc/Loading-Animation.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22efbfc7e3c548f82acf23ddecc169dc75509aab03089df26edeffb76af2eb0f +size 359841 diff --git a/.cursor/rules/roblox/assets/ui/misc/Roblox-Menu-Button.png b/.cursor/rules/roblox/assets/ui/misc/Roblox-Menu-Button.png new file mode 100644 index 00000000..292078a8 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/misc/Roblox-Menu-Button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5aad5013f37c235865b209c1598375b74a05cb711eed43ce050fd2970fc159d7 +size 221326 diff --git a/.cursor/rules/roblox/assets/ui/misc/Scale-Offset-Positioning.png b/.cursor/rules/roblox/assets/ui/misc/Scale-Offset-Positioning.png new file mode 100644 index 00000000..8317340f --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/misc/Scale-Offset-Positioning.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c27f155f1d3a069c9ee046f3d7473e0ac77a3d2991826f527e6238f74c7d9d7a +size 274701 diff --git a/.cursor/rules/roblox/assets/ui/misc/Scale-Sizing.png b/.cursor/rules/roblox/assets/ui/misc/Scale-Sizing.png new file mode 100644 index 00000000..d04f6aa0 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/misc/Scale-Sizing.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a3923c0db32f45e3686e1ad1f149f5e32f3c9bea36299dff3a6d52fa37cf395 +size 264860 diff --git a/.cursor/rules/roblox/assets/ui/misc/Thumb-Zones-Phone-Non-Reachable.png b/.cursor/rules/roblox/assets/ui/misc/Thumb-Zones-Phone-Non-Reachable.png new file mode 100644 index 00000000..c9213917 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/misc/Thumb-Zones-Phone-Non-Reachable.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6975fd58c5f346e62789d739eb7c00da8e7cf80990ca4c369dceda2a5ebc10a +size 22780 diff --git a/.cursor/rules/roblox/assets/ui/misc/Thumb-Zones-Phone-Reachable.png b/.cursor/rules/roblox/assets/ui/misc/Thumb-Zones-Phone-Reachable.png new file mode 100644 index 00000000..f0a7e331 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/misc/Thumb-Zones-Phone-Reachable.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3720383237fb365156d9e39e0505aae47c2bc40bac81031a1065d80dc2c8fc8a +size 23163 diff --git a/.cursor/rules/roblox/assets/ui/misc/Thumb-Zones-Tablet-Non-Reachable.png b/.cursor/rules/roblox/assets/ui/misc/Thumb-Zones-Tablet-Non-Reachable.png new file mode 100644 index 00000000..e179de4f --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/misc/Thumb-Zones-Tablet-Non-Reachable.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:202abf35cdd663944a388cba7a3678e2231bf6634f7677843bc2658bbbfa5a5f +size 29568 diff --git a/.cursor/rules/roblox/assets/ui/misc/Thumb-Zones-Tablet-Reachable.png b/.cursor/rules/roblox/assets/ui/misc/Thumb-Zones-Tablet-Reachable.png new file mode 100644 index 00000000..e9b692ef --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/misc/Thumb-Zones-Tablet-Reachable.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:876d239605912a41c41575bf4427821c9156987fd27ed2219b17516ccdd9fd5b +size 23932 diff --git a/.cursor/rules/roblox/assets/ui/misc/Touch-Reserved-Zones.png b/.cursor/rules/roblox/assets/ui/misc/Touch-Reserved-Zones.png new file mode 100644 index 00000000..3f246875 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/misc/Touch-Reserved-Zones.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c234efcd0421dc9ee387408df0f92d32835a71c8c3928fb6382adb0de681524 +size 954286 diff --git a/.cursor/rules/roblox/assets/ui/misc/TouchGui-Elements.png b/.cursor/rules/roblox/assets/ui/misc/TouchGui-Elements.png new file mode 100644 index 00000000..7a492466 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/misc/TouchGui-Elements.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68940b7358a1ddbe201630722a4b629fb72d70f6be4ccde347fa816f7e22192f +size 984297 diff --git a/.cursor/rules/roblox/assets/ui/misc/UDim2-Components.png b/.cursor/rules/roblox/assets/ui/misc/UDim2-Components.png new file mode 100644 index 00000000..c3ba566c --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/misc/UDim2-Components.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f775fd3a74455d6622701380d8eabdb0e5aa9e67e0c89e0fa00381fcdad57e81 +size 16898 diff --git a/.cursor/rules/roblox/assets/ui/proximity-prompt/Exclusivity-AlwaysShow.jpg b/.cursor/rules/roblox/assets/ui/proximity-prompt/Exclusivity-AlwaysShow.jpg new file mode 100644 index 00000000..539edce7 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/proximity-prompt/Exclusivity-AlwaysShow.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:458757affcfeddd50078273b35929d37c0d62d6a2c14a2aede88a9689a65538a +size 257376 diff --git a/.cursor/rules/roblox/assets/ui/proximity-prompt/Exclusivity-OneGlobally.jpg b/.cursor/rules/roblox/assets/ui/proximity-prompt/Exclusivity-OneGlobally.jpg new file mode 100644 index 00000000..6e106cde --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/proximity-prompt/Exclusivity-OneGlobally.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea49b99160d996420b4dcd6e8105e10c1d133e14c61624311700df1e818260d4 +size 250950 diff --git a/.cursor/rules/roblox/assets/ui/proximity-prompt/Exclusivity-OnePerButton.jpg b/.cursor/rules/roblox/assets/ui/proximity-prompt/Exclusivity-OnePerButton.jpg new file mode 100644 index 00000000..a17171f6 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/proximity-prompt/Exclusivity-OnePerButton.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a40b7e0e73401a96b517a7120209c5b48ce57b09f89bd2c055bc8b06bd599425 +size 256595 diff --git a/.cursor/rules/roblox/assets/ui/proximity-prompt/HoldDuration.mp4 b/.cursor/rules/roblox/assets/ui/proximity-prompt/HoldDuration.mp4 new file mode 100644 index 00000000..01e906a9 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/proximity-prompt/HoldDuration.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6890ada3d4fe4fee00b99d04a306d5d1be715efe5cd8c73b0e26949450aba17 +size 1469830 diff --git a/.cursor/rules/roblox/assets/ui/proximity-prompt/MaxActivationDistance.jpg b/.cursor/rules/roblox/assets/ui/proximity-prompt/MaxActivationDistance.jpg new file mode 100644 index 00000000..5ebc13d5 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/proximity-prompt/MaxActivationDistance.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6e018e105c67d0063ebcf714dbd5b3594d28be3f8a9b284ec804b9a8051bfc3 +size 261634 diff --git a/.cursor/rules/roblox/assets/ui/proximity-prompt/Prompt-Diagram.png b/.cursor/rules/roblox/assets/ui/proximity-prompt/Prompt-Diagram.png new file mode 100644 index 00000000..14cde1f6 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/proximity-prompt/Prompt-Diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c68171442b67ad82ca41854db24568eb65d15012870e8f3380d2b1f0768a2360 +size 229191 diff --git a/.cursor/rules/roblox/assets/ui/proximity-prompt/ProximityPrompt-New.png b/.cursor/rules/roblox/assets/ui/proximity-prompt/ProximityPrompt-New.png new file mode 100644 index 00000000..cff8402b --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/proximity-prompt/ProximityPrompt-New.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b06be8adb57d95237b83a18034730c9ee548c415ea61b3708871ed2db542c37b +size 19679 diff --git a/.cursor/rules/roblox/assets/ui/proximity-prompt/RequiresLineOfSight.mp4 b/.cursor/rules/roblox/assets/ui/proximity-prompt/RequiresLineOfSight.mp4 new file mode 100644 index 00000000..20340553 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/proximity-prompt/RequiresLineOfSight.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:143803288a856bbb6676bef173f5660b4e211cf70c3cc82b1cf8cfec5c4c595d +size 4509201 diff --git a/.cursor/rules/roblox/assets/ui/proximity-prompt/Showcase.mp4 b/.cursor/rules/roblox/assets/ui/proximity-prompt/Showcase.mp4 new file mode 100644 index 00000000..84a9b148 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/proximity-prompt/Showcase.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a973a49e5cec6da05d8950d4f96f9b9f913a4833d79d4eb120a5ece4c06b41d1 +size 9065522 diff --git a/.cursor/rules/roblox/assets/ui/rich-text/Enable-Rich-Text.png b/.cursor/rules/roblox/assets/ui/rich-text/Enable-Rich-Text.png new file mode 100644 index 00000000..83ae2c2a --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/rich-text/Enable-Rich-Text.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c47271604d9b55aedb4d291a0f68b73d899574a35a59464f56c2cc1b555b20a7 +size 17409 diff --git a/.cursor/rules/roblox/assets/ui/rich-text/Example-Bold.png b/.cursor/rules/roblox/assets/ui/rich-text/Example-Bold.png new file mode 100644 index 00000000..4fe5947d --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/rich-text/Example-Bold.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d7d319d7178e8c66a3ff8cefdff46cd0802b11a728b668cb3012ef23306bbe5 +size 4061 diff --git a/.cursor/rules/roblox/assets/ui/rich-text/Example-Color.png b/.cursor/rules/roblox/assets/ui/rich-text/Example-Color.png new file mode 100644 index 00000000..086ac78e --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/rich-text/Example-Color.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25b31ad03b452b4497d5535a606a300d64aa75f11a35c2ed1be87248d0567582 +size 9018 diff --git a/.cursor/rules/roblox/assets/ui/rich-text/Example-Comment.png b/.cursor/rules/roblox/assets/ui/rich-text/Example-Comment.png new file mode 100644 index 00000000..4e153351 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/rich-text/Example-Comment.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24d1b1245ec36bf66bfca2455d3300e5203188fac9431585ef8ac344fbe2af1c +size 8495 diff --git a/.cursor/rules/roblox/assets/ui/rich-text/Example-Font-Face.png b/.cursor/rules/roblox/assets/ui/rich-text/Example-Font-Face.png new file mode 100644 index 00000000..078b58c6 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/rich-text/Example-Font-Face.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c03a3753e08bf564172216ef50c5caa8d9fde4eada4b9c6353e54003fad88e7 +size 7124 diff --git a/.cursor/rules/roblox/assets/ui/rich-text/Example-Highlighted.png b/.cursor/rules/roblox/assets/ui/rich-text/Example-Highlighted.png new file mode 100644 index 00000000..f2d95007 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/rich-text/Example-Highlighted.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:652bf501a3da94af91df4cdeef67cb1b246b570f83a6627c8c57dee01ed19b66 +size 14990 diff --git a/.cursor/rules/roblox/assets/ui/rich-text/Example-Italic.png b/.cursor/rules/roblox/assets/ui/rich-text/Example-Italic.png new file mode 100644 index 00000000..0137e07f --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/rich-text/Example-Italic.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d3fed0a1509ffecb1fba5f24dac5784a3490c0a01a209973b7c649f548b054e +size 6604 diff --git a/.cursor/rules/roblox/assets/ui/rich-text/Example-Line-Break.png b/.cursor/rules/roblox/assets/ui/rich-text/Example-Line-Break.png new file mode 100644 index 00000000..ce6a5570 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/rich-text/Example-Line-Break.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8e31302d09d851d6dee09b82c913f74c8b6ea9be368cab77d86700075c9d62b +size 11167 diff --git a/.cursor/rules/roblox/assets/ui/rich-text/Example-Size.png b/.cursor/rules/roblox/assets/ui/rich-text/Example-Size.png new file mode 100644 index 00000000..b160489f --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/rich-text/Example-Size.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1bba2fb19fc77458f7639d5a5019019865813fe7d59f8024af7bcd56c898e801 +size 6994 diff --git a/.cursor/rules/roblox/assets/ui/rich-text/Example-Small-Caps.png b/.cursor/rules/roblox/assets/ui/rich-text/Example-Small-Caps.png new file mode 100644 index 00000000..e29f8940 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/rich-text/Example-Small-Caps.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:10e9d15084ebf2837fa267b38c43c94cdac5638f429e083b6f3c118eba05032e +size 9121 diff --git a/.cursor/rules/roblox/assets/ui/rich-text/Example-Strikethrough.png b/.cursor/rules/roblox/assets/ui/rich-text/Example-Strikethrough.png new file mode 100644 index 00000000..c3878bc1 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/rich-text/Example-Strikethrough.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4996c671dcbb91691c9f96484a3dd63f0a54f7fd4c630226a7a3812b96b397d7 +size 7967 diff --git a/.cursor/rules/roblox/assets/ui/rich-text/Example-Stroke.png b/.cursor/rules/roblox/assets/ui/rich-text/Example-Stroke.png new file mode 100644 index 00000000..12a2bb25 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/rich-text/Example-Stroke.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:431acf43ef94842ce76d2bf30055dab53206167e0f2083857aacb8b87c231807 +size 11791 diff --git a/.cursor/rules/roblox/assets/ui/rich-text/Example-Transparency.png b/.cursor/rules/roblox/assets/ui/rich-text/Example-Transparency.png new file mode 100644 index 00000000..6452a93c --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/rich-text/Example-Transparency.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8f042c38e3f76044e78a2b84fafc68d9eda593bb768731485d2cb2cdbc00969 +size 9854 diff --git a/.cursor/rules/roblox/assets/ui/rich-text/Example-Underline.png b/.cursor/rules/roblox/assets/ui/rich-text/Example-Underline.png new file mode 100644 index 00000000..9ad4461f --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/rich-text/Example-Underline.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12a234dfc1618211b22ce8827472c156c12f64d9ed2aac80c840fca9c2299882 +size 3893 diff --git a/.cursor/rules/roblox/assets/ui/rich-text/Example-Uppercase.png b/.cursor/rules/roblox/assets/ui/rich-text/Example-Uppercase.png new file mode 100644 index 00000000..65dfb39f --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/rich-text/Example-Uppercase.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:421e9a443760f56289873696ee8614e72c394acafc02367c36c54ee52f26ac48 +size 10170 diff --git a/.cursor/rules/roblox/assets/ui/rich-text/Example-Weight.png b/.cursor/rules/roblox/assets/ui/rich-text/Example-Weight.png new file mode 100644 index 00000000..3ea45ea2 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/rich-text/Example-Weight.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53816b26892fc27cad0a3d4cff5bdc93e86ef329279ff8fcfb6fba5923a93e57 +size 7804 diff --git a/.cursor/rules/roblox/assets/ui/ui-animation/Easing-Direction.mp4 b/.cursor/rules/roblox/assets/ui/ui-animation/Easing-Direction.mp4 new file mode 100644 index 00000000..15cfcd19 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-animation/Easing-Direction.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:196865e042bdfcac55e936cedfd733bdaaa2a6ef0ae0f9e3b3513e3bcdd22de9 +size 670931 diff --git a/.cursor/rules/roblox/assets/ui/ui-animation/Easing-Style.mp4 b/.cursor/rules/roblox/assets/ui/ui-animation/Easing-Style.mp4 new file mode 100644 index 00000000..4262ca84 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-animation/Easing-Style.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ecb363c83074f21916bad02c4ffc81c1a6eb58a22bc64386a2b1794e0a07a31 +size 769722 diff --git a/.cursor/rules/roblox/assets/ui/ui-animation/ModuleScript-AnimateUI.png b/.cursor/rules/roblox/assets/ui/ui-animation/ModuleScript-AnimateUI.png new file mode 100644 index 00000000..387eaaa1 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-animation/ModuleScript-AnimateUI.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d17142ee558eefc3e3d65897640464354a7d75c21057d5631803eefb79d4f7e8 +size 29429 diff --git a/.cursor/rules/roblox/assets/ui/ui-animation/Text-Typewriter.mp4 b/.cursor/rules/roblox/assets/ui/ui-animation/Text-Typewriter.mp4 new file mode 100644 index 00000000..e653748e --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-animation/Text-Typewriter.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5b93e7549e55b32719a62832298a242ccf2008fe6b603cdb93487499afc1859 +size 3472056 diff --git a/.cursor/rules/roblox/assets/ui/ui-drag-detectors/Grid-Drag.mp4 b/.cursor/rules/roblox/assets/ui/ui-drag-detectors/Grid-Drag.mp4 new file mode 100644 index 00000000..a85efcbc --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-drag-detectors/Grid-Drag.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d992479bec85a1f3130fdd51e303e827c57ce69637fb27c759cdfd39f0a8b63 +size 1411236 diff --git a/.cursor/rules/roblox/assets/ui/ui-drag-detectors/GridDrag.rbxm b/.cursor/rules/roblox/assets/ui/ui-drag-detectors/GridDrag.rbxm new file mode 100644 index 00000000..e8ac2852 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-drag-detectors/GridDrag.rbxm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d372e8ca85b14954c9ed8f7f3e7669207777624c2bd2085188375a756c7be963 +size 6595 diff --git a/.cursor/rules/roblox/assets/ui/ui-drag-detectors/Hue-Rotator.mp4 b/.cursor/rules/roblox/assets/ui/ui-drag-detectors/Hue-Rotator.mp4 new file mode 100644 index 00000000..e666859a --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-drag-detectors/Hue-Rotator.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12c248ae37c82c577177ec336c8b8390471921c84e7cd83c6109460551c97b0b +size 2024062 diff --git a/.cursor/rules/roblox/assets/ui/ui-drag-detectors/HueRotator.rbxm b/.cursor/rules/roblox/assets/ui/ui-drag-detectors/HueRotator.rbxm new file mode 100644 index 00000000..ed898a1c --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-drag-detectors/HueRotator.rbxm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:448c62e7878e84e5ae727d4399c553bd99d81bee496a8d3b919f277df06e0171 +size 7893 diff --git a/.cursor/rules/roblox/assets/ui/ui-drag-detectors/Showcase.mp4 b/.cursor/rules/roblox/assets/ui/ui-drag-detectors/Showcase.mp4 new file mode 100644 index 00000000..d28f7939 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-drag-detectors/Showcase.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6e0fb06eafb46d3f1258f153636797deae6ba8247eed53ce297fc8d670ef735 +size 5346748 diff --git a/.cursor/rules/roblox/assets/ui/ui-drag-detectors/Transparency-Slider.mp4 b/.cursor/rules/roblox/assets/ui/ui-drag-detectors/Transparency-Slider.mp4 new file mode 100644 index 00000000..3a5b72e3 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-drag-detectors/Transparency-Slider.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b7027ea4061018d755299fb71d86882b098564656ea7482432a05ebc164cfcc +size 1957486 diff --git a/.cursor/rules/roblox/assets/ui/ui-drag-detectors/TransparencySlider.rbxm b/.cursor/rules/roblox/assets/ui/ui-drag-detectors/TransparencySlider.rbxm new file mode 100644 index 00000000..052ef948 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-drag-detectors/TransparencySlider.rbxm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b42c9c73443e97043a7989760e6e336a2aa12e1949e8b627ab3005eb7c6a98fc +size 8061 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/Frame-Example.jpg b/.cursor/rules/roblox/assets/ui/ui-objects/Frame-Example.jpg new file mode 100644 index 00000000..d192dcf4 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/Frame-Example.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91a8d000db2ed4a37ad59ca77aefa2687f87a923a7f629399de08c4987e49ae0 +size 404375 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/ScreenGui-Example.jpg b/.cursor/rules/roblox/assets/ui/ui-objects/ScreenGui-Example.jpg new file mode 100644 index 00000000..3b627981 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/ScreenGui-Example.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f9eedb4365f028c4ef5e119a60135fdcbccb390d9cedac6cefec25cd8976b71 +size 399856 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/ScreenGuis-Enabled.png b/.cursor/rules/roblox/assets/ui/ui-objects/ScreenGuis-Enabled.png new file mode 100644 index 00000000..5d7c7e9f --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/ScreenGuis-Enabled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:094991874ae343bafd68833016857769a27ff5678e52c91846f2659c23e35ab3 +size 161136 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/ScrollingFrame-Canvas-Inset.png b/.cursor/rules/roblox/assets/ui/ui-objects/ScrollingFrame-Canvas-Inset.png new file mode 100644 index 00000000..fde5ce00 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/ScrollingFrame-Canvas-Inset.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb39546e8bbd6447933593e33dcfefa61ff5ece01714d1189ff79578b8059bef +size 480280 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/ScrollingFrame-Canvas-No-Inset.png b/.cursor/rules/roblox/assets/ui/ui-objects/ScrollingFrame-Canvas-No-Inset.png new file mode 100644 index 00000000..d935ce11 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/ScrollingFrame-Canvas-No-Inset.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66a491d3e0f22ffe28780bd1200e803f314cc9c234c8615bba7cdf25f6f3a40a +size 481735 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/ScrollingFrame-Example.jpg b/.cursor/rules/roblox/assets/ui/ui-objects/ScrollingFrame-Example.jpg new file mode 100644 index 00000000..5441ba7d --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/ScrollingFrame-Example.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa8eb2a6ac19f0f07f1faf4a80ddadd69fe1859a2a5d4ae8693851c1cf960c23 +size 406720 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/ScrollingFrame-Scroll-Bar-Elements.png b/.cursor/rules/roblox/assets/ui/ui-objects/ScrollingFrame-Scroll-Bar-Elements.png new file mode 100644 index 00000000..d321df57 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/ScrollingFrame-Scroll-Bar-Elements.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4f19fbfb2581b1491474883de1727c6f93719eee780e368108605b6a68d55d6 +size 374559 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/StarterGui-To-PlayerGui.png b/.cursor/rules/roblox/assets/ui/ui-objects/StarterGui-To-PlayerGui.png new file mode 100644 index 00000000..2a87c7e3 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/StarterGui-To-PlayerGui.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9e5f857b48803264db11e06a3ba281f1f4c7946d56ba16f22cbfbc6c7851f3f +size 161547 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/TextBox-Example.jpg b/.cursor/rules/roblox/assets/ui/ui-objects/TextBox-Example.jpg new file mode 100644 index 00000000..0d3adf4a --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/TextBox-Example.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16362c7c05cfc1f5caf564dcffa424d4caeff12b2163fb5afe7e0b74188a906c +size 381201 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UICorner-CornerRadius-Properties.png b/.cursor/rules/roblox/assets/ui/ui-objects/UICorner-CornerRadius-Properties.png new file mode 100644 index 00000000..ea7b65ad --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UICorner-CornerRadius-Properties.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e49f27dba8630224116c720d0fe97ac5a376bfbd00d363c9e7c99d6c0c8c044 +size 11835 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UICorner-Offset-32.png b/.cursor/rules/roblox/assets/ui/ui-objects/UICorner-Offset-32.png new file mode 100644 index 00000000..d474dcc3 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UICorner-Offset-32.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aaf4e9a0e8b46a90f68817c017f40bc1c9972b638e2d34f483ef8126ff879dd3 +size 10010 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UICorner-Offset-64.png b/.cursor/rules/roblox/assets/ui/ui-objects/UICorner-Offset-64.png new file mode 100644 index 00000000..b28f47e2 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UICorner-Offset-64.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c4a4f3bb960353df519fdc7511fc5fb5a131cd682fb66a85edca7f3c4ceb7fb +size 11755 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UICorner-Scale-0.25.png b/.cursor/rules/roblox/assets/ui/ui-objects/UICorner-Scale-0.25.png new file mode 100644 index 00000000..cdccdc0d --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UICorner-Scale-0.25.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d7ddb35ac24db946d5215f33a77479c30e76299e17093719d6cff8a81f26494 +size 11985 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UICorner-Scale-0.5.png b/.cursor/rules/roblox/assets/ui/ui-objects/UICorner-Scale-0.5.png new file mode 100644 index 00000000..f2fe4344 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UICorner-Scale-0.5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f433bd4c73d62bfffff6c7a01e52d616323cfd998534e63e7d84839796d83ae2 +size 14287 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIFlexItem-Example.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIFlexItem-Example.png new file mode 100644 index 00000000..0035872c --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIFlexItem-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:456b9cd54b832f5091a05d8cd2e74f58901b895db7c395646ccb29e350ad1e9b +size 27718 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIFlexItem-Hierarchy.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIFlexItem-Hierarchy.png new file mode 100644 index 00000000..c1eb81bb --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIFlexItem-Hierarchy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d108bba946a2cef2f789c1bfb2e6df7d22168b36b7f405a932e4bf8353d746f +size 58943 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIGradient-Example.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIGradient-Example.png new file mode 100644 index 00000000..42e0e01f --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIGradient-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0bc83c9de107a5bfc17c22c8f2d2edac7130968b21b6318f4b78ae576f8519e7 +size 427621 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIGradient-Offset-X-0.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIGradient-Offset-X-0.png new file mode 100644 index 00000000..47878328 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIGradient-Offset-X-0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:242a662cb8d55de3ee76226eae55a21a89f0ac0859acfd4e29b8b50e1a3790a7 +size 108172 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIGradient-Offset-X-Neg-0.25.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIGradient-Offset-X-Neg-0.25.png new file mode 100644 index 00000000..a12a82e1 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIGradient-Offset-X-Neg-0.25.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76b004c5236002d7ec7ed8db3bd783b66a5ff2bf322af4f2ce3fb49c876c6930 +size 79575 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIGradient-Offset-X-Pos-0.25.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIGradient-Offset-X-Pos-0.25.png new file mode 100644 index 00000000..84018254 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIGradient-Offset-X-Pos-0.25.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7204f99fe6c9b9780c28b76bb556ae1e4908f16739a152b7980cf6b15454afca +size 85691 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIGradient-Rotation-0.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIGradient-Rotation-0.png new file mode 100644 index 00000000..da53b3c0 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIGradient-Rotation-0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c40390cc58aa8dda813d6758e650df7b74f017b1c2cb2a7c5fd9c084ec254a00 +size 105244 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIGradient-Rotation-Neg-90.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIGradient-Rotation-Neg-90.png new file mode 100644 index 00000000..e77dd828 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIGradient-Rotation-Neg-90.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ad382f9af4ee55a370b2ea5bd5b3999ca9d6aeb87ecb70d146bfa2e6271960a +size 65445 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIGradient-Rotation-Pos-45.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIGradient-Rotation-Pos-45.png new file mode 100644 index 00000000..9fc66512 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIGradient-Rotation-Pos-45.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23f738259191142ffc3d420112cd8f22138e56e3e74f3c9368435c119266303a +size 116231 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIGridLayout-Example.jpg b/.cursor/rules/roblox/assets/ui/ui-objects/UIGridLayout-Example.jpg new file mode 100644 index 00000000..f639b762 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIGridLayout-Example.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28a2d9426cf07c4382f7e9db57f730ac824439bca62cd63a49ad7e4e819caaaa +size 176425 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIListLayout-Example.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIListLayout-Example.png new file mode 100644 index 00000000..0756beab --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIListLayout-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37b31bb88197d0b92e31ad48a3952ceb42c80ee3f0bcfc8a7c93128a6b7ae1b2 +size 177211 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIPadding-PaddingBottom-Default.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIPadding-PaddingBottom-Default.png new file mode 100644 index 00000000..b1544ac5 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIPadding-PaddingBottom-Default.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3497a051dce56c1b21401055a0f43de90527ffd93388e41fe784bbd49f34de1 +size 4384 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIPadding-PaddingBottom-Offset-Negative.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIPadding-PaddingBottom-Offset-Negative.png new file mode 100644 index 00000000..2ddbf60f --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIPadding-PaddingBottom-Offset-Negative.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc5df1f56d04d37210fcd1614616406b73e30ac7003f59aff2162e64c6c812a1 +size 5390 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIPadding-PaddingBottom-Offset-Positive.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIPadding-PaddingBottom-Offset-Positive.png new file mode 100644 index 00000000..60474bc5 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIPadding-PaddingBottom-Offset-Positive.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:556f543904f8dfd12f60cc06c10fc13f60f7a110bf90d81cadd52472c3489f26 +size 5295 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIScale-Example.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIScale-Example.png new file mode 100644 index 00000000..33db9492 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIScale-Example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec44a74534a3a09ae958172b503c9f72b431c0ab73ec464279cd37271a768fbb +size 35357 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-As-Border.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-As-Border.png new file mode 100644 index 00000000..bcc3dc9e --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-As-Border.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e59528dce1a7392a429f53edf369e11d0065ec99d7c9241fb161184113b3adb8 +size 3817 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-As-Text-Outline.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-As-Text-Outline.png new file mode 100644 index 00000000..128b78e3 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-As-Text-Outline.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1c4709cab3a1a004ebce81c3141a973b4b317bb89d051e72ab20760965964d7 +size 25072 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-BorderOffset-In.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-BorderOffset-In.png new file mode 100644 index 00000000..8702d1f0 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-BorderOffset-In.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a177f1ead2aecd779ccca55c1ca4d87e2982fb4f0321dd0953ad8e24632e747f +size 4498 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-BorderOffset-Out.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-BorderOffset-Out.png new file mode 100644 index 00000000..b446a9f3 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-BorderOffset-Out.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49394ea3cab8e171f86a9a74652a9fe3b67b8ce6bfd1572baf4feecde2c658cf +size 7137 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-BorderStrokePosition-Center.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-BorderStrokePosition-Center.png new file mode 100644 index 00000000..bac5e2d5 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-BorderStrokePosition-Center.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20b2ab1c40279b86036d255ea22c1d9154835b813c2576a599c9159448ee74ce +size 4509 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-BorderStrokePosition-Inner.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-BorderStrokePosition-Inner.png new file mode 100644 index 00000000..7592833e --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-BorderStrokePosition-Inner.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d34e87f7a0eb4cb4ef8e7010244862fddc9b31f333dbf06d21292d28fa3d8778 +size 3473 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-BorderStrokePosition-Outer.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-BorderStrokePosition-Outer.png new file mode 100644 index 00000000..f51128e9 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-BorderStrokePosition-Outer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fffb4cf5248035fc99270260052065f075ad39590ea5d061645fd2663d6d16bf +size 4659 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-Color-Gradient.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-Color-Gradient.png new file mode 100644 index 00000000..b787026c --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-Color-Gradient.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6f71cf1f4c561d695622cce375b087cf5093765fb99217301bc0a89bf3cfcac +size 33477 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-Color-Solid.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-Color-Solid.png new file mode 100644 index 00000000..15393e85 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-Color-Solid.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad33bab40d86de70f4997ed12b02e3ac043b18d62ed8ccc1e828741416af8d67 +size 20024 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-LineJoinMode-Bevel.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-LineJoinMode-Bevel.png new file mode 100644 index 00000000..52c30499 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-LineJoinMode-Bevel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56bb70cbdb35dfcb56c8aec69e3a0e612da48e3306da4bc9845e29306c8c49e7 +size 12381 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-LineJoinMode-Miter.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-LineJoinMode-Miter.png new file mode 100644 index 00000000..2f638c92 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-LineJoinMode-Miter.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03bff5ea0d1284ff81f8fbf80c89573640a3cbdbde7b9159c0a4dc56d3e476fe +size 10057 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-LineJoinMode-Round.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-LineJoinMode-Round.png new file mode 100644 index 00000000..7a8f8bae --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-LineJoinMode-Round.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69752127da51f91041834a21ed6fbb7edc9e39e3a5b310df64fcf7efef40fe4d +size 12770 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-Stroke-Mode-Border.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-Stroke-Mode-Border.png new file mode 100644 index 00000000..5c1db76a --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-Stroke-Mode-Border.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3597d00f7f10bcc8b51c30e02a52900eeb37b831efde61154be4640e13c78afe +size 14708 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-Thickness-12.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-Thickness-12.png new file mode 100644 index 00000000..c073631d --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-Thickness-12.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20832c122337330a28183134e8c4074aff32ff8d1263e948f38cb87aa478de6e +size 12730 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-Thickness-4.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-Thickness-4.png new file mode 100644 index 00000000..7837667e --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-Thickness-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84c78f189ecd7597395fa61cb8edf35bef56987f20b545839bb0555d155f3a12 +size 6876 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-Transparency-A.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-Transparency-A.png new file mode 100644 index 00000000..ddfcf262 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-Transparency-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc8e065794138a181abf3fea28acb68a3e421a8ba1f9c87e6fb6b1e41de475ed +size 14556 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-Transparency-B.png b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-Transparency-B.png new file mode 100644 index 00000000..73dd7da7 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UIStroke-Transparency-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e5903b185046ae74bc2cc1df7686a3834c8ee790776037faf7bd4728e437f4b +size 13154 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UITableLayout-Example.jpg b/.cursor/rules/roblox/assets/ui/ui-objects/UITableLayout-Example.jpg new file mode 100644 index 00000000..a1bb9167 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UITableLayout-Example.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78d5ec47235e53a75b1dde82cff2d750311311363efe5332fe95417843482ebd +size 185644 diff --git a/.cursor/rules/roblox/assets/ui/ui-objects/UITextSizeConstraint.mp4 b/.cursor/rules/roblox/assets/ui/ui-objects/UITextSizeConstraint.mp4 new file mode 100644 index 00000000..cd20029d --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-objects/UITextSizeConstraint.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4465d4928faf5b61d6c0ad528a1437413918193e17afef724b6fd436430cd8e7 +size 2133116 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Class-Rule-Configure.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Class-Rule-Configure.png new file mode 100644 index 00000000..14251bfd --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Class-Rule-Configure.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a86c1b43528e2428e89e033311d5060a1c00ac0ace50512462725e063e641db0 +size 8695 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Class-Rule-New-Class.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Class-Rule-New-Class.png new file mode 100644 index 00000000..4d0930da --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Class-Rule-New-Class.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02020776a1d64773a5b0dd7e81186f317631ea2a2e1117c4e43171623f49e514 +size 28607 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Class-Rule-Result.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Class-Rule-Result.png new file mode 100644 index 00000000..9c31fe4a --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Class-Rule-Result.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f083e3e905eb7ac7ab9cdc30fb7fb591923d70bed987f052afd876a1f8d03c87 +size 247172 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Class-Rule-Tokens.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Class-Rule-Tokens.png new file mode 100644 index 00000000..4f30cc39 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Class-Rule-Tokens.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c6e5c2847c46796300768fe293c22ad2d9ef1237aada1368c8974cf5a0b322e +size 15393 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Create-Design-Entry.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Create-Design-Entry.png new file mode 100644 index 00000000..bfc25945 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Create-Design-Entry.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bcdcc581586217164df8cc4b027f4c98d44e09a57f8733c2af762dd416641c72 +size 23142 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Initial-Config.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Initial-Config.png new file mode 100644 index 00000000..a615b403 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Initial-Config.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3750fcad26d6c96e46cbb3c9690bf2fe1aacadb129260da9393c9b2173cf4002 +size 36405 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Modifier-Rule-Configure.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Modifier-Rule-Configure.png new file mode 100644 index 00000000..a39f644a --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Modifier-Rule-Configure.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1034811be8d4bb97b608bd6989e8d119c32ec794f18b392d3daa6cdfc5f40db +size 9365 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Modifier-Rule-New-Class.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Modifier-Rule-New-Class.png new file mode 100644 index 00000000..ffda27e9 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Modifier-Rule-New-Class.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65beb4ea85a4b69acd5a770ff21f5a8b21ab321d01d093f979a6817130ac7f55 +size 29860 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Modifier-Rule-Pseudo-Instance-Created.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Modifier-Rule-Pseudo-Instance-Created.png new file mode 100644 index 00000000..822f8c64 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Modifier-Rule-Pseudo-Instance-Created.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0195c0f79e219bf6a7cee330feab98f0f5bb72b5518c4f1459e3a6a211ef69c8 +size 16318 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Modifier-Rule-Pseudo-Instance-New.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Modifier-Rule-Pseudo-Instance-New.png new file mode 100644 index 00000000..99a386cc --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Modifier-Rule-Pseudo-Instance-New.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c758780c30f8ac1faf62c3c08dee648d1342842cda0fc351b51ebf1b744519c6 +size 65241 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Modifier-Rule-Pseudo-Instance-Tokens.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Modifier-Rule-Pseudo-Instance-Tokens.png new file mode 100644 index 00000000..ee110b3d --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Modifier-Rule-Pseudo-Instance-Tokens.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05996337bb6c05c2937acd722daa88e63b8a639b2e46268d3adae0fe6f30adac +size 8542 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Modifier-Rule-Result.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Modifier-Rule-Result.png new file mode 100644 index 00000000..19c80cf9 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Modifier-Rule-Result.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c34a4ede048f3be2b2751198493f51de504259cbda52938cc2be55c9647da43d +size 251463 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Modifier-Rule-Tokens.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Modifier-Rule-Tokens.png new file mode 100644 index 00000000..c0a35db8 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Modifier-Rule-Tokens.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f4749d801105e6fc7b18c811a3b08cceb4975086994c17ebd62d300332890e6 +size 11637 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-State-Rule-Created.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-State-Rule-Created.png new file mode 100644 index 00000000..31417772 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-State-Rule-Created.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:945c2090428b288d293f54b2a7c90af83f9a191331990b864741dd09cc46afcf +size 22092 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-State-Rule-New-Class.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-State-Rule-New-Class.png new file mode 100644 index 00000000..9c91623a --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-State-Rule-New-Class.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7809ee1a958160a20a224d6578c33372db2e9045af66e025214b9cf989b7bb74 +size 31922 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-State-Rule-New.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-State-Rule-New.png new file mode 100644 index 00000000..a3fe51cf --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-State-Rule-New.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ffb543ae074a489eaea71ad845f907310e1aac5157e2ec4030f66923f29dade7 +size 48258 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-State-Rule-Result.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-State-Rule-Result.png new file mode 100644 index 00000000..daf74014 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-State-Rule-Result.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4574f1fbdde70d5c47984a46da5a91ba8b1ff6f5f1b50bb0b36a4a52c2ede945 +size 258964 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-State-Rule-Tokens.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-State-Rule-Tokens.png new file mode 100644 index 00000000..384a6537 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-State-Rule-Tokens.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c3529f5b2c57d82837210ff3913bb8d28552052ad7d9090eb6f613040979b4f +size 6530 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Tag-Rule-Apply-Tag.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Tag-Rule-Apply-Tag.png new file mode 100644 index 00000000..67ec4ec6 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Tag-Rule-Apply-Tag.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:948d86bf222ff42b4bf09b3244dac023256faa2ed3021bf37f12bc22e79a1931 +size 45822 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Tag-Rule-Configure.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Tag-Rule-Configure.png new file mode 100644 index 00000000..2388a9b0 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Tag-Rule-Configure.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:470a7168d1543646cac359109e647094b19a2f495d4011cbc642b018c01367bb +size 9659 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Tag-Rule-New.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Tag-Rule-New.png new file mode 100644 index 00000000..695c8732 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Tag-Rule-New.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e79a1700b927373e45043c81351d1a06bdbf64299110fdcb9052327662125486 +size 50092 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Tag-Rule-Renamed.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Tag-Rule-Renamed.png new file mode 100644 index 00000000..ddb38381 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Tag-Rule-Renamed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a47fafa388e51ceddb7d5606fed1608c4301333059e4cb68f5833dacd7cf313d +size 21953 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Tag-Rule-Result.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Tag-Rule-Result.png new file mode 100644 index 00000000..5bbc494f --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Tag-Rule-Result.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42fc704f4e881b47e4cca5d8eeebfc0aac82e375dc0748f4e70b132cd498dc98 +size 249597 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Tag-Rule-Tokens.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Tag-Rule-Tokens.png new file mode 100644 index 00000000..3ed3e9ca --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Tag-Rule-Tokens.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be8855267ed601269e863ea2df054b1f5c8697c77c76b8266d9fadf540097e7f +size 14760 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-Class-Tokens.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-Class-Tokens.png new file mode 100644 index 00000000..86f325d6 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-Class-Tokens.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c6bc8f6c6bf5dbe4b97d2dc2497e4bfae765e29ae1aa5f0b6a18c6482125384 +size 19244 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-Duplicated-Theme.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-Duplicated-Theme.png new file mode 100644 index 00000000..5efd4232 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-Duplicated-Theme.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8e9d9a42c06fa6e2e8a157325a43224debfdae7ace90c9dd10ff3b6c7bcfa8c +size 11731 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-New-Class.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-New-Class.png new file mode 100644 index 00000000..38b7b56b --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-New-Class.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4ec5dfa12c5819dbf173376331251fae2cc06ee90cd135df980403148370dbd +size 30174 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-New-Folder.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-New-Folder.png new file mode 100644 index 00000000..edbdb463 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-New-Folder.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d962f4bfd2cc126266f089358d58857bce3f7a59e379524db36dd956ae07b9e +size 13201 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-New-Theme.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-New-Theme.png new file mode 100644 index 00000000..a96a8613 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-New-Theme.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ece5467404edc77ddc907e994435eb002f52bcd02a05cd3f17110b0bcc536f6 +size 14966 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-Swapping-ThemeA.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-Swapping-ThemeA.png new file mode 100644 index 00000000..bfc8732c --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-Swapping-ThemeA.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2b98ac51aabe8b6cd8548d6a02138a6ef9e4b39e8bb8ca990538b7b22b25a28 +size 27449 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-Swapping-ThemeB.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-Swapping-ThemeB.png new file mode 100644 index 00000000..61979196 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-Swapping-ThemeB.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e3cb050d9085225d2828a03503b512012cea731fc45e9ef7512fef5f47e85ba +size 27461 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-Theme-Configure.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-Theme-Configure.png new file mode 100644 index 00000000..b5be7278 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-Theme-Configure.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d5769e745fd7938faa7487a9c074d5d8f03b35b76cc249bcda80b0b92d3bfcc +size 9514 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-ThemeA-Result.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-ThemeA-Result.png new file mode 100644 index 00000000..5bbc494f --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-ThemeA-Result.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42fc704f4e881b47e4cca5d8eeebfc0aac82e375dc0748f4e70b132cd498dc98 +size 249597 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-ThemeA-Tokens.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-ThemeA-Tokens.png new file mode 100644 index 00000000..092265e3 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-ThemeA-Tokens.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7e532835f7fa87084dffb99ab296620dd38585c9f0a1aab89b93e63a4d7afc0 +size 14526 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-ThemeB-Result.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-ThemeB-Result.png new file mode 100644 index 00000000..ecc582d3 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-ThemeB-Result.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1360707743c5f821c80f909dd2335523ae6b2d69a9b46d82ff193ec07d910007 +size 249174 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-ThemeB-Tokens.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-ThemeB-Tokens.png new file mode 100644 index 00000000..6b422cf8 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-Themes-ThemeB-Tokens.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f582835953661c302eb34af7d6057028a7f44f2e77472e5a57085af389af31af +size 15573 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-TokenSheet-New.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-TokenSheet-New.png new file mode 100644 index 00000000..ca04e6d6 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-TokenSheet-New.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fa0a850039be14ac3479b36edda661d217ed1486147069933f68998c51d3e5a +size 22146 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/SE-TokenSheet-Tokens.png b/.cursor/rules/roblox/assets/ui/ui-styling/SE-TokenSheet-Tokens.png new file mode 100644 index 00000000..d92c8917 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/SE-TokenSheet-Tokens.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17701e427992c1dd81820547f80ad68ad56696987fc7388c39b91501454056b1 +size 26719 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/Styling-Flowchart-Class.png b/.cursor/rules/roblox/assets/ui/ui-styling/Styling-Flowchart-Class.png new file mode 100644 index 00000000..e8c03431 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/Styling-Flowchart-Class.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44ad34f991b7e6650b59863e190749d0cccf5ac4225700f977cbfef571c7ab52 +size 395156 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/Styling-Flowchart-Modifier.png b/.cursor/rules/roblox/assets/ui/ui-styling/Styling-Flowchart-Modifier.png new file mode 100644 index 00000000..538aa4bc --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/Styling-Flowchart-Modifier.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e0627f836e57049581a4783191f3e9c7d140cc13395aab717247e0b877890d5 +size 416585 diff --git a/.cursor/rules/roblox/assets/ui/ui-styling/Styling-Flowchart-Tag.png b/.cursor/rules/roblox/assets/ui/ui-styling/Styling-Flowchart-Tag.png new file mode 100644 index 00000000..ae649e25 --- /dev/null +++ b/.cursor/rules/roblox/assets/ui/ui-styling/Styling-Flowchart-Tag.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c1d3712b3304dc88bc1c83091f459992736f3e1b98db2cc1c61d63623441b8c +size 396860 diff --git a/.cursor/rules/roblox/assets/workspace/camera/Camera-Occlusion.mp4 b/.cursor/rules/roblox/assets/workspace/camera/Camera-Occlusion.mp4 new file mode 100644 index 00000000..5af0f482 --- /dev/null +++ b/.cursor/rules/roblox/assets/workspace/camera/Camera-Occlusion.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:481c9546515c5ccd4a7c066374fa54d17a11ca976552740384e2763186fe4c9f +size 14397391 diff --git a/.cursor/rules/roblox/assets/workspace/raycasting/Laser-Maze.mp4 b/.cursor/rules/roblox/assets/workspace/raycasting/Laser-Maze.mp4 new file mode 100644 index 00000000..12074bc0 --- /dev/null +++ b/.cursor/rules/roblox/assets/workspace/raycasting/Laser-Maze.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca9193daddfe6ad8e7b752e8e0ef22348934ed85e7f6f1dae313b8eedf2df731 +size 5951504 diff --git a/.cursor/rules/roblox/assistant/guide.md b/.cursor/rules/roblox/assistant/guide.md new file mode 100644 index 00000000..fecc706e --- /dev/null +++ b/.cursor/rules/roblox/assistant/guide.md @@ -0,0 +1,79 @@ +--- +title: Assistant for Studio +description: How to use Assistant to help build, grow, and monetize your creations in Studio. +--- + +import BetaAlert from '../includes/beta-features/beta-alert.md' + +**Assistant** is an AI helper that accelerates content creation by helping you get started, supplementing your skills, and assisting with ongoing development. It can do the following and much more: + +- Answer how to do things on Roblox +- Add and edit objects and scripts directly in your place's data model +- Insert objects from the Creator Store +- "Explain this code" by selecting parts of a script in the Script Editor +- Create materials to restyle your objects +- Generate 3D objects to populate your scene + +## Studio features + +In Studio, Assistant consists of a large language model (LLM) that generates code and a run-command module (similar to the existing [Command Bar](../studio/ui-overview.md#command-bar)) that runs code. As a result, Assistant can act directly on your data model, such as inserting and modifying objects, writing and inserting scripts, and automating repetitive tasks like modifying properties in bulk. + +For a more in-depth look at what Assistant can do and how to use it, see the [Prompt guide and examples](prompt-engineering.md) and the following Roblox Staff livestream for tips, tricks, and inspiration. + + + +### Insert and modify scripts + +Assistant can insert new scripts, modify existing ones, and perform these actions across multiple objects as necessary. For example, if you ask it to create a remote event, it can create a local script, a server script, and the event all at once. + +If you enter a script generation request like "Make the player's character jump when they touch this part," Assistant shows the script's contents and adds the new script instance to the currently selected object in the data model. If nothing is selected, Assistant decides where to place it based on your prompts. + +Requested script inserted into selected part. + +The generated script might not function flawlessly. In these cases, you can either make further edits in the [Script Editor](../studio/script-editor.md) or ask Assistant to edit the script it just created. It can even act on existing scripts that it didn't create if you need help with code that you've written yourself. + +### Insert and modify objects + +Assistant can create, edit, delete and iterate on instances in your data model, including inserting items from the Creator Store. + +Assistant adding objects through the Studio prompt. + +If you examine the code, you can see that Assistant calls `Class.InsertService:GetFreeModels()` to query the Creator Store for a wheelbarrow model and uses `Class.Model:PivotTo()` to place it near a tree. + +### Provide answers and suggestions + +If you need general knowledge or help while creating an experience, you can ask Assistant questions like how to make a team system, how to design a game loop, how to use specific Studio tools, and much more. It can even explain code that it generated or that you wrote yourself. + +Code explanation provided by Assistant in Studio. + +### Generate materials + +When given a request to generate a material, Assistant in Studio can quickly style existing parts through a lightweight implementation of the [Material Generator](../studio/material-generator.md). + +Material variations shown in Assistant for quick styling. + +### Generate 3D models + + + +The `/generate` command enables [mesh generation](https://corp.roblox.com/newsroom/2025/03/introducing-roblox-cube), powered by Roblox's Cube 3D model. + +1. In the Assistant chat window, type a command such as `/generate a red buggy with knobby tires`. +1. Assistant generates the corresponding object and adds it directly to your workspace for further customization. + +A generated green dragon provided by Assistant in Studio. + +## Access Assistant from Studio + +To access Assistant from Studio: + +1. Click **Assistant** on the right side of the mezzanine bar. + + Assistant button indicated on the right side of the mezzanine bar. + +2. Type a request into the field near the bottom of the window, using guidance from the [prompt guide](prompt-engineering.md) to generate improved responses. + + - Click thumbs up or thumbs down to rate the result and improve future results. + - Click the redo icon to process a new result. + + General user interface for Assistant in Studio. diff --git a/.cursor/rules/roblox/assistant/overview.md b/.cursor/rules/roblox/assistant/overview.md new file mode 100644 index 00000000..18abf6c6 --- /dev/null +++ b/.cursor/rules/roblox/assistant/overview.md @@ -0,0 +1,65 @@ +--- +title: Assistant +description: Overview of Assistant, Roblox's AI helper. +hideInPageNavigation: true +--- + +export const sections = [ + { + description: "Assistant is an AI helper that accelerates content creation by helping you get started, supplementing your skills, and assisting with ongoing development.", + content: [ + { + title: "Assistant for Studio", + description: "In Roblox Studio, Assistant can act directly on the data model to write scripts, insert and modify objects, and automate repetitive tasks so that you can focus on creation.", + image: "/assets/assistant/AssistantStudioExample.png", + buttons: [ + { text: "Assistant for Studio guide", href: "assistant/guide"} + ] + }, + { + title: "Assistant in the documentation", + description: "Assistant is available directly from the documentation. Ask it to clarify concepts, provide sample code for a use case, or compare and contrast approaches to a problem.", + image: "/assets/assistant/AssistantDocumentationSite.png" + }, + ] + } +]; + +{sections.map((section, index) => ( + +
    + {section.description && ( +

    {section.description}

    + )} +
    + {section.content.map((section, index) => ( + + +
    +

    {section.title}

    +

    {section.description}

    +
    + {section.buttons && section.buttons.map((button, btnIndex) => ( + + ))} +
    +
    +
    + + {section.title} + +
    + ))} +
    +))} diff --git a/.cursor/rules/roblox/assistant/prompt-engineering.md b/.cursor/rules/roblox/assistant/prompt-engineering.md new file mode 100644 index 00000000..5f10e455 --- /dev/null +++ b/.cursor/rules/roblox/assistant/prompt-engineering.md @@ -0,0 +1,248 @@ +--- +title: Assistant prompt guide and examples +description: Get tips and tricks on how best to prompt Roblox's AI Assistant to get the best results. +--- + + +[Share your prompts and experiences](https://devforum.roblox.com/t/check-out-the-generative-ai-stream-and-let-us-know-your-best-prompts/3215844) in the Roblox forum so that we can make Assistant better! + + +This document gives guidance on prompting Assistant and provides examples and inspiration on what Assistant can do. + +## Be specific + +If Assistant fails, add more details to your prompt and try again. Use instance names exactly as they're spelled, specify which function you want Assistant to use, and tell Assistant which type it's working with, such as a part or a model. + + + + + + + + + + + + + + + + + + +
    **Not specific****More specific**
    Place the trees in a circle.Place 10 copies of the "pine_tree" model in ReplicatedStorage in a 30 stud radius circle around the SpawnLocation.
    Make the part move.Add a script to make "my_part" move up and down 10 studs repeatedly using TweenService.
    How can I design a core loop?Help me design a fun core loop. I want to build a game where players can hunt treasure as pirates. They can also buy and upgrade pirate ships and battle each other.
    + +## Use your selection + +Selection is a great way of specifying an object or set of objects you want to refer to in your prompt. Select multiple objects and ask Assistant to modify them, make duplicates and place them somewhere, or continue a position pattern like maintaining placement in a line. + +## Edit time and run time + +Assistant sometimes confuses the difference between edit time and run time. If you ask Assistant to take an action, it will likely bias towards doing it at edit time. If you want the action to happen during run time, ask Assistant to insert a script that takes the action. For example, tell Assistant "add a script to make the time of day 8:00 AM" instead of "make the time of day 8:00 AM." + +## Keep trying + +Don't get discouraged if Assistant doesn't work exactly the way you want the first time. Often, making small tweaks and trying again can lead to better results. Many AI tools are non-deterministic, meaning they don't create the exact same output each time you ask them to do something. There's some variance, which you can tap into and control using tweaks to your prompt. + +AI in its current state requires work. It takes time to understand how to best speak to Assistant, what it can do, and how to get what you want out of it. + +## Multi-step prompts + +Consider using multi-step prompts to encourage Assistant to think. Instead of asking "Can you explain this script to me?" and pasting in the script, ask it to explain step-by-step by separating the question from the script with `###`. This separation helps Assistant deconstruct and organize the information to provide better answers. + + + +
    + +_Can you explain what this script is doing step by step?_ + +**\###** + +_local part = workspace.Part_ + +_local function onTouched(otherPart)_
    +    _print(part.Name .. " collided with " .. otherPart.Name)_
    +_end_ + +_part.Touched:Connect(onTouched)_ + +**\###** + +
    +
    + +
    + +_Certainly! This script is an example of how to handle collisions between two parts in Roblox. Let's break it down step by step:_ + +1. `local part = workspace.Part`: _This line of code creates a local variable named `part` and assigns it the value of the `Part` object located in the workspace. You can replace `Part` with the name of the specific part you want to detect collisions with._ +2. `local function onTouched(otherPart)`: _This line of code defines a function named `onTouched` that takes in a parameter `otherPart`. This function will be called whenever the part collides with another part._ +3. `print(part.Name .. " collided with " .. otherPart.Name)`: _This line of code prints a message to the output console, indicating that the `part` has collided with `otherPart`. The `part.Name` and `otherPart.Name` are concatenated using the `..` operator to form the message._ +4. `part.Touched:Connect(onTouched)`: _This line of code connects the `onTouched` function to the `Touched` event of `part`. Whenever the part collides with another part, the `onTouched` function will be called._ + +
    +
    +
    + +## Examples + +These examples demonstrate the vast variety of tasks that Assistant can help with today. Some of them might take a few tries for you to reproduce, but give them a try and see what you can come up with yourself. + +### Game mechanics - Shoot fireballs that explode + +**Prompt:** +Propel a fireball away from the player in the direction the player is facing when the player presses "e". +Make the fireball explode when it hits something. + +