aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChipRenderer.zipbin0 -> 2510 bytes
-rw-r--r--chips.css218
-rw-r--r--chips.js93
-rw-r--r--circuitsv2.json14248
-rw-r--r--grapher/index.html86
-rw-r--r--grapher/script.js288
-rw-r--r--grapher/style.css184
-rw-r--r--index.html105
-rw-r--r--script.js260
-rw-r--r--style.css235
-rw-r--r--terms.json78
-rw-r--r--util.js5
-rw-r--r--what.html86
13 files changed, 15886 insertions, 0 deletions
diff --git a/ChipRenderer.zip b/ChipRenderer.zip
new file mode 100644
index 0000000..3d40b3c
--- /dev/null
+++ b/ChipRenderer.zip
Binary files differ
diff --git a/chips.css b/chips.css
new file mode 100644
index 0000000..12a3704
--- /dev/null
+++ b/chips.css
@@ -0,0 +1,218 @@
+/*
+Hello! This is a big fat CSS file for rendering CV2 chips, maintained
+by Aleteoryx. If you need help, ask around for me in the #circuits-v2
+discord channel, or just ping me if you want. (Not too much!)
+
+To render a chip, create a .chip <div>. Inside it, put
+.chipheader, .input, and .output divs. In the header, simply put
+your chip's name. Then, in the input and output divs, add divs
+with your chip's ports and types.
+.bool, .int, .float, .string, .exec, and .special are all supported.
+
+A finished chip should look something like this:
+
+<div class="chip">
+ <div class="chipheader">If</div>
+ <div class="input">
+ <div class="exec"></div>
+ <div class="bool">Condition</div>
+ </div>
+ <div class="output">
+ <div class="exec">Then</div>
+ <div class="Exec">Else</div>
+ </div>
+</div>
+
+Currently, only regular chips are supported, though this will change
+soon!
+*/
+@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
+
+@media (orientation: portrait) {
+ body {
+ --chip-scale: 6vw;
+ }
+}
+@media (orientation: landscape) {
+ body {
+ --chip-scale: 2rem;
+ }
+}
+
+body {
+ /*chip bit colors*/
+ --color-top: hsl(300,1%,32%);
+ --color-bottom: hsl(300,0%,50%);
+
+ /*port colors*/
+ --color-float: hsl(215, 80%, 48%);
+ --color-int: hsl(133,73%,23%);
+ --color-exec: hsl(18,92%,53%);
+ --color-string: hsl(290,33%,39%);
+ --color-bool: hsl(349,82%,55%);
+ --color-any: hsl(26,44%,94%);
+ --color-special: hsl(47,91%,54%);
+
+
+ --chipOffsetX: 0;
+ --chipOffsetY: 0;
+}
+
+/*apply colors to classes*/
+.input > .float::before, .output > .float::after {
+ background-color: var(--color-float);
+}
+.input > .int::before, .output > .int::after {
+ background-color: var(--color-int);
+}
+.input > .exec::before, .output > .exec::after {
+ background-color: var(--color-exec);
+}
+.input > .string::before, .output > .string::after {
+ background-color: var(--color-string);
+}
+.input > .bool::before, .output > .bool::after {
+ background-color: var(--color-bool);
+}
+.input > .any::before, .output > .any::after {
+ background-color: var(--color-any);
+}
+.input > .special::before, .output > .special::after {
+ background-color: var(--color-special);
+}
+
+.chip {
+ font-size: calc(var(--chip-scale) * .5);
+ font-family: 'Roboto', sans-serif;
+ color: white;
+ background-color: var(--color-bottom);
+
+ position: relative;
+ display: inline-grid;
+ overflow: visible;
+
+ grid-template-areas: "header header" "input output";
+
+ grid-gap: calc(var(--chip-scale) * .5);
+ margin: calc(var(--chip-scale) * 0.8);
+ padding: calc(var(--chip-scale) / 3);
+ border-radius: calc(var(--chip-scale) / 4);
+ min-width: 0;
+}
+
+.input, .output {
+ display: inline-block;
+ margin-right: calc(var(--chip-scale) / 3);
+ margin-top: calc(var(--chip-scale) / -2);
+ margin-bottom: calc(var(--chip-scale) / -5);
+}
+
+.chipheader {
+ margin: calc(var(--chip-scale) / -3);
+ margin-bottom: 0;
+
+ padding: calc(var(--chip-scale) / 2);
+ text-align: center;
+ background-color: var(--color-top);
+
+ border-top-left-radius: calc(var(--chip-scale) / 4);
+ border-top-right-radius: calc(var(--chip-scale) / 4);
+
+ grid-area: header;
+
+ font-size: calc(var(--chip-scale) * 0.75);
+
+ -ms-high-contrast: white-on-black;
+}
+
+.input {
+ grid-area: input;
+}
+
+.output {
+ grid-area: output;
+ text-align: right;
+}
+
+.type {
+ color: #fff0;
+ background-color: #0000;
+ position: fixed;
+ padding: calc(var(--chip-scale) * 0.1);
+ border: 0 solid #aaa0;
+ top: 0;
+ left: 0;
+ white-space: nowrap;
+}
+
+:is(.exec, .float, .int, .bool, .string, .special, .any):hover + .type {
+ color: #fff;
+ background-color: #000;
+ border: calc(var(--chip-scale) * 0.1) solid #aaa;
+ z-index: 99;
+ top: calc(var(--mouse-y) + 10px - (var(--chipOffsetY) * 1px));
+ left: calc(var(--mouse-x) + 10px - (var(--chipOffsetX) * 1px));
+}
+
+.input > .exec::before,
+.output > .exec::after {
+ height: calc(.75 * var(--chip-scale));
+ width: calc(1 * var(--chip-scale));
+ background-color: var(--color-exec);
+
+ clip-path: polygon(0 0, 62.5% 0, 100% 50%, 62.5% 100%, 0 100%);
+ top: calc(var(--chip-scale) * -0.075);
+}
+
+:is(.exec, .float, .int, .bool, .string, .special, .any) {
+ margin-top: calc(var(--chip-scale) * 0.3);
+ margin-bottom: calc(var(--chip-scale) * 0.3);
+ position: relative;
+ clip-path: none;
+ overflow: visible;
+}
+
+.input > :is(.exec, .float, .int, .bool, .string, .special, .any) {
+ margin-left: calc(var(--chip-scale) * 0.5);
+}
+.output > :is(.exec, .float, .int, .bool, .string, .special, .any) {
+ margin-right: calc(var(--chip-scale) * -0.05);
+}
+
+.input > :is(.exec, .float, .int, .bool, .string, .special, .any)::before,
+.output > :is(.exec, .float, .int, .bool, .string, .special, .any)::after {
+ position: absolute;
+ content: "";
+ overflow: visible;
+}
+
+.input > :is(.float, .int, .bool, .string, .special, .any)::before {
+ left: calc(var(--chip-scale) * -1.1);
+}
+.output > :is(.float, .int, .bool, .string, .special, .any)::after {
+ right: calc(var(--chip-scale) * -0.9);
+}
+
+.input > .exec::before {
+ left: calc(var(--chip-scale) * -1.2);
+}
+.output > .exec::after {
+ right: calc(var(--chip-scale) * -1.2);
+}
+
+.input > .list::before,
+.output > .list::after {
+ color: black;
+ content: "[ ]";
+ font-size: calc(var(--chip-scale) * 0.3);
+ display: flex;
+ align-content: center;
+ justify-content: center;
+}
+
+.input > :is(.float, .int, .bool, .string, .special, .any)::before,
+.output > :is(.float, .int, .bool, .string, .special, .any)::after {
+ height: calc(.5 * var(--chip-scale));
+ width: calc(0.625 * var(--chip-scale));
+ top: 1px;
+} \ No newline at end of file
diff --git a/chips.js b/chips.js
new file mode 100644
index 0000000..686dce0
--- /dev/null
+++ b/chips.js
@@ -0,0 +1,93 @@
+let root = document.documentElement;
+
+if (window.location.pathname != '/grapher/')
+ root.addEventListener("mousemove", e => {
+ root.style.setProperty('--mouse-x', e.clientX + "px");
+ root.style.setProperty('--mouse-y', e.clientY + "px");
+ });
+
+
+const portColors = {
+ float: '#186adc',
+ int: '#0f6522',
+ exec: '#f55b18',
+ string: '#794284',
+ bool: '#ea2e50',
+ any: '#f6eee8',
+ special: '#f4c61e'
+}
+const typeRegex = /(?:^|(?<=<))(?:int|float|bool|string|exec)(?:$|(?=>))/;
+const unionRegex = /^T\d*$|(?<=List<)T\d*(?=>)/;
+
+function computeType(Type, TypeParams, to) {
+ let t = Type;
+ if (to) for (const o of Object.keys(to)) t = t.replace(o, to[o]);
+ let tc = "special"
+ if (typeRegex.test(t)) {
+ tc = t;
+ } else if (unionRegex.test(t)) {
+ let tn = t.match(unionRegex)[0];
+ let ut = TypeParams[tn];
+ t = t.replace(unionRegex, `${tn}: ${ut}`)
+
+ tc = "any";
+ }
+ return {typeclass: tc, type: t};
+}
+
+function generateChipHTML(NodeDescs, typeoverride = undefined) {
+ for (let cur of NodeDescs) {
+ let ins = cur.Inputs;
+ let outs = cur.Outputs;
+
+ const root = newEl('div', 'chip');
+ const header = newEl('div', 'chipheader');
+ header.innerText = cur.Name;
+ const input = newEl('div', 'input');
+ const output = newEl('div', 'output');
+ root.append(header, input, output);
+
+ for (const inp of ins) {
+ //work out the type
+ let {typeclass, type} = computeType(inp.ReadonlyType, cur.ReadonlyTypeParams, typeoverride);
+
+ const port = newEl('div', typeclass);
+ port.innerHTML = inp.Name + "&nbsp;";
+ if (type.includes("List")) port.classList.add("list");
+
+ const tooltip = newEl('div', 'type');
+ tooltip.innerText = type;
+
+ input.append(port, tooltip);
+ }
+
+ for (const out of outs) {
+ //work out the type
+ let {typeclass, type} = computeType(out.ReadonlyType, cur.ReadonlyTypeParams, typeoverride);
+
+ const port = newEl('div', typeclass);
+ port.innerHTML = out.Name + "&nbsp;";
+ if (type.includes("List")) port.classList.add("list");
+
+ const tooltip = newEl('div', 'type');
+ tooltip.innerText = type;
+
+ output.append(port, tooltip);
+ }
+ return root;
+ }
+}
+
+function ListAllTypes(Nodes) {
+ let m = new Set();
+ for (const n of Object.values(Nodes)) {
+ for (const desc of n.NodeDescs) {
+ for (const td of Object.values(desc.ReadonlyTypeParams))
+ if (/^[A-Za-z0-9 ]+$/.test(td)) m.add(td);
+ for (const port of [...desc.Inputs, ...desc.Outputs])
+ if (/^[A-Za-z0-9 ]+$/.test(port.ReadonlyType) && !/^[A-Za-z]\d*$/.test(port.ReadonlyType)) m.add(port.ReadonlyType);
+ }
+ }
+ m.delete('any');
+ return Array.from(m);
+} \ No newline at end of file
diff --git a/circuitsv2.json b/circuitsv2.json
new file mode 100644
index 0000000..eca7882
--- /dev/null
+++ b/circuitsv2.json
@@ -0,0 +1,14248 @@
+{
+ "Nodes": {
+ "98b99011-9be8-43b3-89cc-1e9d55bd8b51": {
+ "ReadonlyName": "Absolute Value",
+ "Description": "Outputs the magnitude of the number. Is always positive.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Absolute Value",
+ "ReadonlyTypeParams": {
+ "T": "(float | int)"
+ },
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Scalar"
+ ]
+ }
+ ]
+ },
+ "46ce50b8-0a20-43d2-9646-484ce2a6752c": {
+ "ReadonlyName": "Acos",
+ "Description": "Computes the arccosine of a number.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Acos",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Trigonometry"
+ ]
+ }
+ ]
+ },
+ "d7ea08ab-aee6-43d0-99e1-54478ac3db7f": {
+ "ReadonlyName": "Consumable Activate",
+ "Description": "Sets the input consumable to active. Use this to confirm a consumable used event. Can also be used independently. Displays the consumable as active in the backback and decreases the number of comsumables the player owns.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Consumable Activate",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Consumable",
+ "ReadonlyType": "Consumable",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Economy",
+ "Consumable"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Economy",
+ "Consumable"
+ ]
+ }
+ ]
+ },
+ "03461631-734f-491b-ab86-6bdf66947556": {
+ "ReadonlyName": "Add Currency",
+ "Description": "Adds some amount to the Player's balance of one room currency. Configure this chip to set the affected currency.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Add Currency",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Run",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Player",
+ "ReadonlyType": "Player",
+ "Description": ""
+ },
+ {
+ "Name": "Amount",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Run",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "On Add Currency Complete",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Success",
+ "ReadonlyType": "bool",
+ "Description": ""
+ },
+ {
+ "Name": "Total Balance",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Economy",
+ "Currency"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Economy",
+ "Currency"
+ ]
+ }
+ ]
+ },
+ "0ccb153c-dd08-4f22-80fd-9d8c5940928c": {
+ "ReadonlyName": "Add",
+ "Description": "Computes the sum of two or more inputs.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Add",
+ "ReadonlyTypeParams": {
+ "T": "(int | float | Vector3)"
+ },
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Sum",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Scalar"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Math",
+ "Vector"
+ ]
+ }
+ ]
+ },
+ "3edc785f-46ef-4f30-b101-a07126d3a370": {
+ "ReadonlyName": "AI Get Line of Sight Parameters",
+ "Description": "Outputs the current line of sight parameters from the input AI.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "AI Get Line of Sight Parameters",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "AI",
+ "ReadonlyType": "AI",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Vision Type",
+ "ReadonlyType": "string",
+ "Description": ""
+ },
+ {
+ "Name": "Vision Range (m)",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Vision Cone Angle",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Hearing Range (m)",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "AI"
+ ]
+ }
+ ]
+ },
+ "1637b250-e497-4f4a-9d5e-64206488391c": {
+ "ReadonlyName": "AI Get Target",
+ "Description": "Outputs the current combat target of an inputted AI.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "AI Get Target",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "AI",
+ "ReadonlyType": "AI",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Combatant",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "AI"
+ ]
+ }
+ ]
+ },
+ "5858a52e-54fb-4bb2-80a0-ec5fce88b3ef": {
+ "ReadonlyName": "AI Has Line of Sight To Target",
+ "Description": "Outputs if the input AI has line of sight to the input target.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "AI Has Line of Sight To Target",
+ "ReadonlyTypeParams": {
+ "T": "(AI | Combatant | Rec Room Object | Patrol Point | Player | Vector3)"
+ },
+ "Inputs": [
+ {
+ "Name": "AI",
+ "ReadonlyType": "AI",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Has LoS",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "AI"
+ ]
+ }
+ ]
+ },
+ "b5badf49-acfe-4a42-80e2-5262878e2d89": {
+ "ReadonlyName": "AI Look At",
+ "Description": "Command an AI to look at the input target. If you want the AI to look in a passed in vector as a direction, set the “Look Target Is Direction” parameter to True. To make an AI stop looking, use the AI Stop Looking node.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "AI Look At",
+ "ReadonlyTypeParams": {
+ "T": "(AI | Combatant | Rec Room Object | Patrol Point | Player | Vector3)"
+ },
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "AI",
+ "ReadonlyType": "AI",
+ "Description": ""
+ },
+ {
+ "Name": "Look Target",
+ "ReadonlyType": "T",
+ "Description": ""
+ },
+ {
+ "Name": "Look Target is Direction",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "AI"
+ ]
+ }
+ ]
+ },
+ "0e92a7fb-fb38-418c-af39-9afec92112ee": {
+ "ReadonlyName": "AI Variable",
+ "Description": "",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [
+ {
+ "Name": "Variable (AI)",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "AI",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "AI",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Variable",
+ "Object"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Object",
+ "AI"
+ ]
+ }
+ ]
+ },
+ "7b05df01-d4c8-490c-9442-55aa3b4975fa": {
+ "ReadonlyName": "AI Path To",
+ "Description": "Commands the AI to path to the input target destination.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "AI Path To",
+ "ReadonlyTypeParams": {
+ "T": "(AI | Combatant | Rec Room Object | Patrol Point | Player | Vector3)"
+ },
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "AI",
+ "ReadonlyType": "AI",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "AI"
+ ]
+ }
+ ]
+ },
+ "c2cb2ea2-f663-4aa6-9394-3b741f6b9064": {
+ "ReadonlyName": "AI Rotate",
+ "Description": "Commands an AI to turn an inputted number of degrees. To command the AI to back to default rotating behavior, use the AI Stop Looking node.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "AI Rotate",
+ "ReadonlyTypeParams": {
+ "T": "(float | int | Vector3)"
+ },
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "AI",
+ "ReadonlyType": "AI",
+ "Description": ""
+ },
+ {
+ "Name": "Rotation (degrees)",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "AI"
+ ]
+ }
+ ]
+ },
+ "02557d1f-2265-4b6d-8177-92f1802dc106": {
+ "ReadonlyName": "AI Set Line of Sight Parameters",
+ "Description": "Sets an AI’s various LoS paramters. The “Cone” setting acts like a vision cone that sits in front of AIs like eyes, where the “Circle” setting acts like a radius around the AI. The Require LoS For Targetting parameter defines if AIs can see you through walls.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "AI Set Line of Sight Parameters",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "AI",
+ "ReadonlyType": "AI",
+ "Description": ""
+ },
+ {
+ "Name": "Vision Type (Cone/Circle)",
+ "ReadonlyType": "string",
+ "Description": ""
+ },
+ {
+ "Name": "Vision Range (m)",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Vision Cone Angle (Cone Type Only)",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Hearing Range (m)",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Require LoS for targeting",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "AI"
+ ]
+ }
+ ]
+ },
+ "cd85a0c7-789b-41a2-aeda-40925b73738c": {
+ "ReadonlyName": "AI Set Pathing Speed",
+ "Description": "Sets the speed for an inputted AI. This same setting can be determined by configuring the AI itself.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "AI Set Pathing Speed",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "AI",
+ "ReadonlyType": "AI",
+ "Description": ""
+ },
+ {
+ "Name": "Speed (m/s)",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "AI"
+ ]
+ }
+ ]
+ },
+ "6370b8d9-8c72-4e6b-a623-acb7202a3110": {
+ "ReadonlyName": "AI Set Patrol Point",
+ "Description": "Set an AIs Path Point.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "AI Set Patrol Point",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "AI",
+ "ReadonlyType": "AI",
+ "Description": ""
+ },
+ {
+ "Name": "Patrol Point",
+ "ReadonlyType": "Patrol Point",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "AI"
+ ]
+ }
+ ]
+ },
+ "73652899-2656-4aa4-a1b0-4de8d8e56095": {
+ "ReadonlyName": "AI Set Target",
+ "Description": "Sets the input AI’s current target.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "AI Set Target",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "AI",
+ "ReadonlyType": "AI",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Combatant",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "AI"
+ ]
+ }
+ ]
+ },
+ "b169c26e-3c2c-4058-bae7-dbbc3ee856a4": {
+ "ReadonlyName": "AI Start Combat Behavior",
+ "Description": "RRO Quest AI black box. This node tells the input AI to start their C# defined combat behavior. Note: this behavior varies per AI.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "AI Start Combat Behavior",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "AI",
+ "ReadonlyType": "AI",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "AI"
+ ]
+ }
+ ]
+ },
+ "6e244bf2-cf71-4baa-912d-3e61c7fcd1be": {
+ "ReadonlyName": "AI Stop Combat Behavior",
+ "Description": "Tells the input AI to stop its C# defined combat behavior.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "AI Stop Combat Behavior",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "AI",
+ "ReadonlyType": "AI",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "AI"
+ ]
+ }
+ ]
+ },
+ "f211a503-a237-41bc-875e-ae3ef62d745b": {
+ "ReadonlyName": "AI Stop Looking",
+ "Description": "Command the input AI to cancel its current Rotate and Look At commands. Call this before telling an AI to path after having it Rotate/Look At so it rotates properly while moving again.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "AI Stop Looking",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "AI",
+ "ReadonlyType": "AI",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "AI"
+ ]
+ }
+ ]
+ },
+ "3fb9fd93-8d45-4395-b9a3-63a99a14442b": {
+ "ReadonlyName": "And",
+ "Description": "Outputs True when all inputs are True. If any input is False, it outputs False.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "And",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Input",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Logic",
+ "Boolean Function"
+ ]
+ }
+ ]
+ },
+ "87f6886f-fa2b-4961-b0ed-c8014aadc56b": {
+ "ReadonlyName": "Angular Velocity Add",
+ "Description": "",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Angular Velocity Add",
+ "ReadonlyTypeParams": {
+ "T": "(Vector3 | Quaternion)"
+ },
+ "Inputs": [
+ {
+ "Name": "Add Velocity",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ },
+ {
+ "Name": "Rotation",
+ "ReadonlyType": "T",
+ "Description": ""
+ },
+ {
+ "Name": "Velocity Multiplier",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Max Angular Velocity Applied (deg/s)",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "98b24bc7-32d8-4386-9348-d44ad00d7702": {
+ "ReadonlyName": "Angular Velocity Set",
+ "Description": "",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Angular Velocity Set",
+ "ReadonlyTypeParams": {
+ "T": "(Vector3 | Quaternion)"
+ },
+ "Inputs": [
+ {
+ "Name": "Set Velocity",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ },
+ {
+ "Name": "Rotation",
+ "ReadonlyType": "T",
+ "Description": ""
+ },
+ {
+ "Name": "Velocity Multiplier",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "aaa4e58f-16df-426a-b7a7-a654eab97037": {
+ "ReadonlyName": "Asin",
+ "Description": "Computes the arcsine of a number.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Asin",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Trigonometry"
+ ]
+ }
+ ]
+ },
+ "02d62908-550d-4f8b-8bc7-0960fb1b547f": {
+ "ReadonlyName": "Atan2",
+ "Description": "Computes the 2-argument arctangent of a number.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Atan2",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Y",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "X",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Trigonometry"
+ ]
+ }
+ ]
+ },
+ "84646ed2-015e-4a8b-9d37-5115cb9ebadc": {
+ "ReadonlyName": "Atan",
+ "Description": "Computes the arctangent of a number.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Atan",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Trigonometry"
+ ]
+ }
+ ]
+ },
+ "28a95bc3-ab08-48ae-b0c0-16b41168bf47": {
+ "ReadonlyName": "Bit And",
+ "Description": "Computes a bitwise AND. The result has a bit set for every bit that is set in both of the inputs.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Bit And",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Bitwise"
+ ]
+ }
+ ]
+ },
+ "d6e62624-06b0-416e-8e3c-ca058efd3c46": {
+ "ReadonlyName": "Bit Leading Zeros",
+ "Description": "Counts the number of zeros at the beginning (most significant side) of the binary representation of an integer.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Bit Leading Zeros",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Leading Zeros",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Bitwise"
+ ]
+ }
+ ]
+ },
+ "05305e33-a809-4751-b928-2c8a5bbc6dc9": {
+ "ReadonlyName": "Bit Nand",
+ "Description": "Computes a bitwise NAND. (NOT AND) The result has a bit set for every bit that is not set in either of the inputs.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Bit Nand",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Bitwise"
+ ]
+ }
+ ]
+ },
+ "ec74ea41-24e5-491c-8919-a502638583f9": {
+ "ReadonlyName": "Bit Not",
+ "Description": "Computes a bitwise NOT. The result has a bit set for every bit that is not set in the input.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Bit Not",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Bitwise"
+ ]
+ }
+ ]
+ },
+ "2c24bc11-9543-4738-8c6c-0c5e3fadd944": {
+ "ReadonlyName": "Bit Or",
+ "Description": "Computes a bitwise OR. The result has a bit set for every bit that is set in either of the inputs.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Bit Or",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Bitwise"
+ ]
+ }
+ ]
+ },
+ "6982e235-5814-4c5a-8bc8-fdbcc9a73eb8": {
+ "ReadonlyName": "Bit Pop Count",
+ "Description": "Counts the number of set bits in the binary representation of an integer.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Bit Pop Count",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Population",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Bitwise"
+ ]
+ }
+ ]
+ },
+ "bd013fe7-3799-46b5-b1f3-66a3f5add5ed": {
+ "ReadonlyName": "Bit Rotate Left",
+ "Description": "Rotates digits in the binary representation of an integer to the left. As the leftmost bits fall off, they are used to fill the rightmost bits.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Bit Rotate Left",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "Shift",
+ "ReadonlyType": "int",
+ "Description": "Number of bits to rotate"
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Bitwise"
+ ]
+ }
+ ]
+ },
+ "b5f36fdf-0a2e-489a-bbdf-f17c50974cc1": {
+ "ReadonlyName": "Bit Rotate Right",
+ "Description": "Rotates digits in the binary representation of an integer to the right. As the rightmost bits fall off, they are used to fill the leftmost bits.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Bit Rotate Right",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "Shift",
+ "ReadonlyType": "int",
+ "Description": "Number of bits to rotate"
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Bitwise"
+ ]
+ }
+ ]
+ },
+ "0a7b4058-b1da-442f-8341-81df66979663": {
+ "ReadonlyName": "Bit Shift Left",
+ "Description": "Shifts a value left by a number of bits. Leftmost bits are discarded, and rightmost bits are filled with zeros.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Bit Shift Left",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "Shift",
+ "ReadonlyType": "int",
+ "Description": "Shift count. The actual shift performed will be this value mod 32."
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Bitwise"
+ ]
+ }
+ ]
+ },
+ "4024b483-ab3d-4fa0-b399-b3350b800081": {
+ "ReadonlyName": "Bit Shift Right",
+ "Description": "Shifts a value right by a number of bits. Rightmost bits are discarded, and leftmost bits are filled with zeros. (Logical shift)",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Bit Shift Right",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "Shift",
+ "ReadonlyType": "int",
+ "Description": "Shift count. The actual shift performed will be this value mod 32."
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Bitwise"
+ ]
+ }
+ ]
+ },
+ "773d361e-3761-497b-9dec-b5e5313a5a2c": {
+ "ReadonlyName": "Bit Trailing Zeros",
+ "Description": "Counts the number of zeros at the end (least significant side) of the binary representation of an integer.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Bit Trailing Zeros",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Trailing Zeros",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Bitwise"
+ ]
+ }
+ ]
+ },
+ "a3899394-1ed9-4d41-a836-22fffaf4e90d": {
+ "ReadonlyName": "Bit Xor",
+ "Description": "Computes a bitwise XOR. The result has a bit set for every bit that is set in exactly one of the inputs.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Bit Xor",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Bitwise"
+ ]
+ }
+ ]
+ },
+ "80955588-7f7a-4f7c-b46f-6d1e9057fba0": {
+ "ReadonlyName": "bool Variable",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [
+ {
+ "Name": "Variable (bool)",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Variable",
+ "Primitive"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Logic",
+ "Variable"
+ ]
+ }
+ ]
+ },
+ "7adc6ab1-fcab-4746-aec6-006352e29cdc": {
+ "ReadonlyName": "If",
+ "Description": "Takes a boolean condition as an input. If True, the \"Then\" exec pin fires. If False, the \"Else\" exec pin fires.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "If",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Condition",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Then",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Else",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Control Flow"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Commonly Used"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Logic",
+ "Control Flow"
+ ]
+ }
+ ]
+ },
+ "9478334a-451d-4802-bab1-4b05f00d45e4": {
+ "ReadonlyName": "Break Tuple",
+ "Description": "",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Break Tuple",
+ "ReadonlyTypeParams": {
+ "T0": "any",
+ "T1": "any"
+ },
+ "Inputs": [
+ {
+ "Name": "Tuple",
+ "ReadonlyType": "(T0, T1)",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Item 0",
+ "ReadonlyType": "T0",
+ "Description": ""
+ },
+ {
+ "Name": "Item 1",
+ "ReadonlyType": "T1",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Utilities"
+ ]
+ }
+ ]
+ },
+ "fe32ba92-9018-4575-92e2-3b0d82c9419b": {
+ "ReadonlyName": "Button Get Is Pressed",
+ "Description": "Outputs a target Button's Pressed property.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Button Get Is Pressed",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Button",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Is Pressed",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Button"
+ ]
+ }
+ ]
+ },
+ "70e7663d-a5fd-435d-8995-942b4babc262": {
+ "ReadonlyName": "Button Get Text",
+ "Description": "Outputs a target Button's Text property.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Button Get Text",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Button",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Text",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Button"
+ ]
+ }
+ ]
+ },
+ "21bbaa09-6bcf-435c-86da-e853a78bc27b": {
+ "ReadonlyName": "Button Set Text",
+ "Description": "Sets an input Button's Text property.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Button Set Text",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Button",
+ "Description": ""
+ },
+ {
+ "Name": "Text",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Button"
+ ]
+ }
+ ]
+ },
+ "f4cbc476-bc98-4cbf-bf47-de4baedddf79": {
+ "ReadonlyName": "Ceil",
+ "Description": "Returns the least integral value greater than or equal to the input value.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Ceil",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Scalar"
+ ]
+ }
+ ]
+ },
+ "38b502dc-dd35-4083-a2b0-8a8e5f69a958": {
+ "ReadonlyName": "Ceil to Int",
+ "Description": "Returns the smallest integer value greater than or equal to the input value.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Ceil to Int",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Scalar"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Conversion"
+ ]
+ }
+ ]
+ },
+ "14ebde7a-76c0-47df-b0dd-01b1daa50821": {
+ "ReadonlyName": "Circuit Board",
+ "Description": "Use as a way to encapsulate your logic. You can have as many inputs and outputs as you like. Use the Edit tool to open up the Circuit Board and add nodes inside it to encapsulate the logic. Hit done editing on your Maker Pen to leave the Circuit Board context.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Utilities"
+ ]
+ }
+ ]
+ },
+ "a542e800-22c8-4e0b-ac4d-ea712875a5f8": {
+ "ReadonlyName": "Clear Current Subtitle",
+ "Description": "Clears any subtitle which is currently being displayed.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Clear Current Subtitle",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Utilities"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Player",
+ "UI"
+ ]
+ }
+ ]
+ },
+ "87a8e178-b15c-4c38-9da0-95ba74f9f4ec": {
+ "ReadonlyName": "Color Constant",
+ "Description": "",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Color Constant",
+ "ReadonlyTypeParams": {},
+ "Inputs": [],
+ "Outputs": [
+ {
+ "Name": "Color",
+ "ReadonlyType": "Color",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Constant"
+ ]
+ }
+ ]
+ },
+ "3d2fd0b5-eeac-45cc-a622-1701710f0792": {
+ "ReadonlyName": "Color Variable",
+ "Description": "",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Color Variable",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "Color",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "Color",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Variable",
+ "Primitive"
+ ]
+ }
+ ]
+ },
+ "8e412141-635d-435c-a900-f40d8a261906": {
+ "ReadonlyName": "Color To Int",
+ "Description": "",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Color To Int",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Color",
+ "ReadonlyType": "Color",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Int",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Conversion"
+ ]
+ }
+ ]
+ },
+ "c0ee02f4-bbab-40ea-88a0-7441d7e7094c": {
+ "ReadonlyName": "Combatant Get Ground Position",
+ "Description": "Outputs the ground position of an input combatant.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Combatant Get Ground Position",
+ "ReadonlyTypeParams": {
+ "T": "(AI | Combatant | Player)"
+ },
+ "Inputs": [
+ {
+ "Name": "Combatant",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Ground Position",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Combatant"
+ ]
+ }
+ ]
+ },
+ "3967a8ad-4237-4ae7-8cbf-850d8e24fe30": {
+ "ReadonlyName": "Combatant Get Health",
+ "Description": "Outputs the Health property of the input combatant.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Combatant Get Health",
+ "ReadonlyTypeParams": {
+ "T": "(AI | Combatant | Player)"
+ },
+ "Inputs": [
+ {
+ "Name": "Object",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Health",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "Shield",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "Max Health",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Combatant"
+ ]
+ }
+ ]
+ },
+ "2a12c389-c3c6-4484-8c63-21cdaf0fac6c": {
+ "ReadonlyName": "Combatant Get Is Alive",
+ "Description": "Outputs True if the input combatant is alive.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Combatant Get Is Alive",
+ "ReadonlyTypeParams": {
+ "T": "(AI | Combatant | Player)"
+ },
+ "Inputs": [
+ {
+ "Name": "Object",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Is Alive",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Combatant"
+ ]
+ }
+ ]
+ },
+ "b4eadbfa-cdbe-42e6-9481-5197de58e272": {
+ "ReadonlyName": "Combatant Get Velocity",
+ "Description": "Outputs the input combatant's current velocity and speed.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Combatant Get Velocity",
+ "ReadonlyTypeParams": {
+ "T": "(AI | Combatant | Player)"
+ },
+ "Inputs": [
+ {
+ "Name": "Combatant",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Velocity",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ },
+ {
+ "Name": "Speed",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Combatant"
+ ]
+ }
+ ]
+ },
+ "cfd8e246-8682-4707-a0ae-da55bacfbf72": {
+ "ReadonlyName": "Combatant Variable",
+ "Description": "",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [
+ {
+ "Name": "Variable (Combatant)",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "Combatant",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "Combatant",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Variable",
+ "Object"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Object",
+ "Combatant"
+ ]
+ }
+ ]
+ },
+ "67aca89c-f753-4f94-87df-1ce1d4fcb8b0": {
+ "ReadonlyName": "Combatant Receive Damage",
+ "Description": "Deals damage to the given target combatant with various parameters.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Combatant Receive Damage",
+ "ReadonlyTypeParams": {
+ "T": "(AI | Combatant | Player)",
+ "U": "(AI | Combatant | Player)"
+ },
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "T",
+ "Description": ""
+ },
+ {
+ "Name": "Damage",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "Ignore Shield",
+ "ReadonlyType": "bool",
+ "Description": ""
+ },
+ {
+ "Name": "Damage Source (Combatant)",
+ "ReadonlyType": "U",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Combatant"
+ ]
+ }
+ ]
+ },
+ "3dc4807f-2acd-446d-928f-5d301d0795d6": {
+ "ReadonlyName": "Combatant Set Health",
+ "Description": "Sets the Health property of an input combatant.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Combatant Set Health",
+ "ReadonlyTypeParams": {
+ "T": "(AI | Combatant | Player)"
+ },
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "T",
+ "Description": ""
+ },
+ {
+ "Name": "Health",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Combatant"
+ ]
+ }
+ ]
+ },
+ "82f71bcc-5e83-4825-8306-6a2bb2a296dd": {
+ "ReadonlyName": "Combatant Set Max Health",
+ "Description": "Sets the Max Health property of the input combatant.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Combatant Set Max Health",
+ "ReadonlyTypeParams": {
+ "T": "(AI | Combatant | Player)"
+ },
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "T",
+ "Description": ""
+ },
+ {
+ "Name": "Max Health",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Combatant"
+ ]
+ }
+ ]
+ },
+ "81b08e44-0a1e-40da-b8a1-79f416691dcf": {
+ "ReadonlyName": "Combatant Split",
+ "Description": "Splits the input Combatant into Player and AI types. Use this off of Combatant outputs to directly access the Player or AI.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Combatant Split",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Combatant",
+ "ReadonlyType": "Combatant",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Is Player",
+ "ReadonlyType": "bool",
+ "Description": ""
+ },
+ {
+ "Name": "Player",
+ "ReadonlyType": "Player",
+ "Description": ""
+ },
+ {
+ "Name": "AI",
+ "ReadonlyType": "AI",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Combatant"
+ ]
+ }
+ ]
+ },
+ "3dc63876-39a9-4828-9967-67821e620cb1": {
+ "ReadonlyName": "Consumable Constant",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Consumable Constant",
+ "ReadonlyTypeParams": {},
+ "Inputs": [],
+ "Outputs": [
+ {
+ "Name": "Consumable",
+ "ReadonlyType": "Consumable",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Economy",
+ "Consumable"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Economy",
+ "Consumable"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Constant"
+ ]
+ }
+ ]
+ },
+ "e8659a59-9e11-4403-8bbc-f4a3961cbf21": {
+ "ReadonlyName": "Cos",
+ "Description": "Computes the cosine of a number.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Cos",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Trigonometry"
+ ]
+ }
+ ]
+ },
+ "1f57e165-dee2-470d-9ab2-9c836aeccccf": {
+ "ReadonlyName": "Costume Equip",
+ "Description": "Equip a Player with a costume.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Costume Equip",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Costume",
+ "Description": ""
+ },
+ {
+ "Name": "Player",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Costume"
+ ]
+ }
+ ]
+ },
+ "f28d1a5e-a08c-471b-89e6-5ee6372d9897": {
+ "ReadonlyName": "Costume Get Wearer",
+ "Description": "Get Player wearing a costume.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Costume Get Wearer",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Costume",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Player",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Costume"
+ ]
+ }
+ ]
+ },
+ "d5070b89-da23-4e4b-848c-07bb22c0420e": {
+ "ReadonlyName": "Costume Unequip",
+ "Description": "Unequip a costume.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Costume Unequip",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Costume",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Player",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Costume"
+ ]
+ }
+ ]
+ },
+ "953fb21b-c9f0-46fc-a0f1-ee1a937854f8": {
+ "ReadonlyName": "Rec Room Object Add Tag",
+ "Description": "Adds a tag to an object.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Rec Room Object Add Tag",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ },
+ {
+ "Name": "Tag",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Rec Room Object"
+ ]
+ }
+ ]
+ },
+ "81939b0e-428f-481c-9fba-453b4c84f01e": {
+ "ReadonlyName": "Rec Room Object Add Tags",
+ "Description": "Adds tags to the input object.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Rec Room Object Add Tags",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ },
+ {
+ "Name": "Tags",
+ "ReadonlyType": "List<string>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Rec Room Object"
+ ]
+ }
+ ]
+ },
+ "02d69553-ae96-4c2d-8477-59ada6a66783": {
+ "ReadonlyName": "Rec Room Object Get All with Tag",
+ "Description": "Searches the room for all objects with a specified tag. Outputs all objects with the input tag as a list.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Rec Room Object Get All with Tag",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Tag",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Objects with Tag",
+ "ReadonlyType": "List<Rec Room Object>",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Rec Room Object"
+ ]
+ }
+ ]
+ },
+ "9e51fcdc-87b4-4eee-a7b1-8d6f86a5fa6b": {
+ "ReadonlyName": "Rec Room Object Get Authority",
+ "Description": "Outputs the authority Player of the input object.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Rec Room Object Get Authority",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Rec Room Object"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Networking"
+ ]
+ }
+ ]
+ },
+ "cb909206-8627-4c66-ac8d-47b1a046ef8b": {
+ "ReadonlyName": "Rec Room Object Get First Tag",
+ "Description": "Gets the first tag of an object.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Rec Room Object Get First Tag",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Tag",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Rec Room Object"
+ ]
+ }
+ ]
+ },
+ "43ff2d3c-c3aa-45bc-a7b7-01587c8a61f6": {
+ "ReadonlyName": "Rec Room Object Get First with Tag",
+ "Description": "Gets the first object with a tag.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Rec Room Object Get First with Tag",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Tag",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Object",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Rec Room Object"
+ ]
+ }
+ ]
+ },
+ "b0497de0-3dd3-470d-a421-8f0d321bfc3e": {
+ "ReadonlyName": "Rec Room Object Get Is Local Player Authority",
+ "Description": "Outputs True on the player's machine who has authority of the input.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Rec Room Object Get Is Local Player Authority",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Rec Room Object"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Networking"
+ ]
+ }
+ ]
+ },
+ "a76a9898-4add-4765-9f5b-f366b586e51c": {
+ "ReadonlyName": "Rec Room Object Get Last Equipping Player",
+ "Description": "Returns the player who last held an object.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Rec Room Object Get Last Equipping Player",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Object",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Player",
+ "ReadonlyType": "Player",
+ "Description": ""
+ },
+ {
+ "Name": "Currently Equipped",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Rec Room Object"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Player",
+ "Equipment"
+ ]
+ }
+ ]
+ },
+ "e67cfcb7-03e8-4152-ba41-af8ca61d93fb": {
+ "ReadonlyName": "Rec Room Object Get Tags",
+ "Description": "Outputs list of tags the input object has.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Rec Room Object Get Tags",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Tags",
+ "ReadonlyType": "List<string>",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Rec Room Object"
+ ]
+ }
+ ]
+ },
+ "bc3011d2-c085-490e-a450-195ff3a27009": {
+ "ReadonlyName": "Rec Room Object Has Tag",
+ "Description": "Outputs True if the input object has the input tag.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Rec Room Object Has Tag",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Object",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ },
+ {
+ "Name": "Tag",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Has Tag",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Rec Room Object"
+ ]
+ }
+ ]
+ },
+ "7077d139-9876-495e-9756-58150fef9f3b": {
+ "ReadonlyName": "Rec Room Object Variable",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [
+ {
+ "Name": "Variable (RecRoomObject)",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Variable",
+ "Object"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Object",
+ "Rec Room Object"
+ ]
+ }
+ ]
+ },
+ "207c6721-b242-4dc2-857d-ebd1ff7c8624": {
+ "ReadonlyName": "Rec Room Object Remove Tag",
+ "Description": "Removes a tag from the object.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Rec Room Object Remove Tag",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ },
+ {
+ "Name": "Tag",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Rec Room Object"
+ ]
+ }
+ ]
+ },
+ "fb368814-daaf-475f-ae08-1d01b9d63b8e": {
+ "ReadonlyName": "Rec Room Object Remove Tags",
+ "Description": "Removes the input list of tags from the input object.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Rec Room Object Remove Tags",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ },
+ {
+ "Name": "Tags",
+ "ReadonlyType": "List<string>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Rec Room Object"
+ ]
+ }
+ ]
+ },
+ "6809978a-e1fc-403a-a41a-d4e94f22281f": {
+ "ReadonlyName": "Consumable Deactivate",
+ "Description": "Sets the input consumable to inactive. Displays the consumable as not active in the backback and allow using another one.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Consumable Deactivate",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Consumable",
+ "ReadonlyType": "Consumable",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Economy",
+ "Consumable"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Economy",
+ "Consumable"
+ ]
+ }
+ ]
+ },
+ "cefee2a5-d4a8-4dff-8c4e-bad684ca8d34": {
+ "ReadonlyName": "Delay",
+ "Description": "Fires outputs based on the inputted time to delay. The Run exec fires as soon as the node is executed. The After Delay exec fires once the input delay duration has completed. After Canceled fires after the delay node’s Cancel exec has been fired. Cancel cancels all current delays running from this node, except for delays scheduled for the next tick.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Delay",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Run",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Delay (s)",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Cancel",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Run",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "After Delay",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Cancel",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Control Flow"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Time"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Commonly Used"
+ ]
+ }
+ ]
+ },
+ "c1fdc4fa-fcb4-4ea4-b505-7b1d15fb8117": {
+ "ReadonlyName": "Dice Get Player Rolled",
+ "Description": "Returns the player who rolled the dice.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Dice Get Player Rolled",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Die",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Player",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Dice"
+ ]
+ }
+ ]
+ },
+ "c80e2979-c672-4e7a-81fb-0ed1964e3ea6": {
+ "ReadonlyName": "Dice Get Result",
+ "Description": "Returns the result of the dice.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Dice Get Result",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Die",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Dice"
+ ]
+ }
+ ]
+ },
+ "b8735ad9-cd89-4d81-ab9b-be3eb50e3b5a": {
+ "ReadonlyName": "Dice Get Roll finished",
+ "Description": "Outputs an exec when the dice finished rolling.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Dice Get Roll finished",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Die",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Roll Finished",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Dice"
+ ]
+ }
+ ]
+ },
+ "182e1ae2-1183-4741-af6e-f307b788a857": {
+ "ReadonlyName": "Distance",
+ "Description": "Outputs the distance between the input objects.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Distance",
+ "ReadonlyTypeParams": {
+ "T1": "(AI | Combatant | Rec Room Object | Patrol Point | Player | Vector3)",
+ "T2": "(AI | Combatant | Rec Room Object | Patrol Point | Player | Vector3)"
+ },
+ "Inputs": [
+ {
+ "Name": "A",
+ "ReadonlyType": "T1",
+ "Description": ""
+ },
+ {
+ "Name": "B",
+ "ReadonlyType": "T2",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Distance",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Vector"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "f2eafd78-5f23-44c9-a271-8ff2f0762e71": {
+ "ReadonlyName": "Divide",
+ "Description": "Find how many times a value contains another.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Divide",
+ "ReadonlyTypeParams": {
+ "T": "(int | float | Vector3)"
+ },
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Quotient",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Scalar"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Math",
+ "Vector"
+ ]
+ }
+ ]
+ },
+ "15e42063-cbae-40f9-a9e4-8226e83217ec": {
+ "ReadonlyName": "Emitter Set Color",
+ "Description": "Sets the color for the particles emitted.",
+ "IsBetaChip": false,
+ "DeprecationStage": 1,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Emitter Set Color",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Emitter",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Emitter"
+ ]
+ }
+ ]
+ },
+ "4263768a-035b-4d8b-b17c-1a7bb0b9b96d": {
+ "ReadonlyName": "Emitter Set Color V2",
+ "Description": "Sets the color for the particles emitted",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Emitter Set Color V2",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Emitter",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "Color",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Emitter"
+ ]
+ }
+ ]
+ },
+ "36881bd0-7da0-44a7-b6ef-8cd3770fed78": {
+ "ReadonlyName": "Emitter Set Looping",
+ "Description": "Makes the emitter emit continuously or not.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Emitter Set Looping",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Emitter",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Emitter"
+ ]
+ }
+ ]
+ },
+ "1fdf4bab-c868-4ffb-8bfc-b2e360450495": {
+ "ReadonlyName": "Emitter Set Size",
+ "Description": "Sets the size of the particles emitted.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Emitter Set Size",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Emitter",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Emitter"
+ ]
+ }
+ ]
+ },
+ "12446960-d971-475f-b64e-b5c7bb422eca": {
+ "ReadonlyName": "Emitter Set Speed",
+ "Description": "Sets the speed particles are emitted.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Emitter Set Speed",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Emitter",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Emitter"
+ ]
+ }
+ ]
+ },
+ "56ebaa0b-256a-40ed-a066-f5663dfa2b59": {
+ "ReadonlyName": "Emitter Start",
+ "Description": "Starts emitting particles.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Emitter Start",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Emitter",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Emitter"
+ ]
+ }
+ ]
+ },
+ "23b278c4-5d3d-439d-afa3-ff30c949df97": {
+ "ReadonlyName": "Emitter Stop",
+ "Description": "Stops emitting particles.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Emitter Stop",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Emitter",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Emitter"
+ ]
+ }
+ ]
+ },
+ "3663225d-e18d-40e6-a234-ef10378528be": {
+ "ReadonlyName": "Equals",
+ "Description": "Compares the two input values and outputs True if they are the same. False if they are different.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Equals",
+ "ReadonlyTypeParams": {
+ "T": "any"
+ },
+ "Inputs": [
+ {
+ "Name": "A",
+ "ReadonlyType": "T",
+ "Description": ""
+ },
+ {
+ "Name": "B",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Equals",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Logic",
+ "Comparison"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Commonly Used"
+ ]
+ }
+ ]
+ },
+ "7d72a1fa-a434-4437-a73a-51f306a3f55f": {
+ "ReadonlyName": "Event Definition",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [
+ {
+ "Name": "Event Definition",
+ "ReadonlyTypeParams": {},
+ "Inputs": [],
+ "Outputs": []
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Commonly Used"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Event"
+ ]
+ }
+ ]
+ },
+ "8b533ccb-643a-491d-982c-94417ce99954": {
+ "ReadonlyName": "Event Receiver",
+ "Description": "Events are the entry points for all circuit graphs. Events are execution hooks for things like a player loading into the room, or knowing when a Button is pressed. After creating this chip, make sure to use the configure tool to choose the event you want to listen for. You can use the Event Defintion chip to create your own events to add to this list and use with the Event Sender chip.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [
+ {
+ "Name": "Event Receiver",
+ "ReadonlyTypeParams": {},
+ "Inputs": [],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Event"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Commonly Used"
+ ]
+ }
+ ]
+ },
+ "96a8fe50-bc37-458b-bac9-582d45314779": {
+ "ReadonlyName": "Event Sender",
+ "Description": "Use the Event Sender to fire your custom events defined in Event Defintions. After creating this chip, make sure to use the configure tool to change the event that you want to fire. You can also change who you want to send the event to from the config menu.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [
+ {
+ "Name": "Event Sender",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Event"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Commonly Used"
+ ]
+ }
+ ]
+ },
+ "04a31ca5-91d2-4a69-bf3d-484d18411cc0": {
+ "ReadonlyName": "float Variable",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [
+ {
+ "Name": "Variable (float)",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Variable",
+ "Primitive"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Math",
+ "Scalar"
+ ]
+ }
+ ]
+ },
+ "c90d9339-cdce-4d22-a885-f142fd5567ab": {
+ "ReadonlyName": "Floor",
+ "Description": "Returns the smallest integral value less than or equal to the input value.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Floor",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Scalar"
+ ]
+ }
+ ]
+ },
+ "bc451cab-2292-4e60-832d-31060eb82bd0": {
+ "ReadonlyName": "Floor to Int",
+ "Description": "Returns the smallest integer value less than or equal to the input value.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Floor to Int",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Scalar"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Conversion"
+ ]
+ }
+ ]
+ },
+ "744e5311-6cc7-4130-962e-fe050a475d43": {
+ "ReadonlyName": "For Each",
+ "Description": "Iterates over the input list. The loop exec fires for each element in the list. The Done exec fires once the end of the list has been reached.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "For Each",
+ "ReadonlyTypeParams": {
+ "T": "any"
+ },
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Items",
+ "ReadonlyType": "List<T>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Loop",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Item",
+ "ReadonlyType": "T",
+ "Description": ""
+ },
+ {
+ "Name": "Done",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Control Flow"
+ ]
+ }
+ ]
+ },
+ "8f945c22-988b-45d2-b7f2-409ba304fef4": {
+ "ReadonlyName": "For",
+ "Description": "Iterates over the \"From\" pin (inclusive) to the \"To\" pin (exclusive).",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "For",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "From (Inclusive)",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "To (Exclusive)",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Loop",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Index",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "Done",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Control Flow"
+ ]
+ }
+ ]
+ },
+ "7ff685a6-f59c-4c6c-b559-f343d81ea1d4": {
+ "ReadonlyName": "From Rec Room Object",
+ "Description": "Converts the input Rec Room Object to the object's subtype.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "From Rec Room Object",
+ "ReadonlyTypeParams": {
+ "T": "Rec Room Object"
+ },
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Rec Room Object"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Conversion"
+ ]
+ }
+ ]
+ },
+ "09b0bf5b-95df-474b-b81a-4e8e2c78ed0a": {
+ "ReadonlyName": "Get All Players",
+ "Description": "Outputs a list of all the players in the room currently.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Get All Players",
+ "ReadonlyTypeParams": {},
+ "Inputs": [],
+ "Outputs": [
+ {
+ "Name": "Players",
+ "ReadonlyType": "List<Player>",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Utilities"
+ ]
+ }
+ ]
+ },
+ "eaf712f8-3257-4415-9f88-ae94e308396e": {
+ "ReadonlyName": "Get Authority",
+ "Description": "Gets the authority player of the chip's current context.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Get Authority",
+ "ReadonlyTypeParams": {},
+ "Inputs": [],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Networking"
+ ]
+ }
+ ]
+ },
+ "a4b0c860-e7f0-4abf-ad7c-9be1805c3d01": {
+ "ReadonlyName": "Get Currency Balance",
+ "Description": "Returns the local players balance of one room currency. Configure this chip to selecht which currency to use.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Get Currency Balance",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Run",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Player",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Run",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "On Get Balance Complete",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Success",
+ "ReadonlyType": "bool",
+ "Description": ""
+ },
+ {
+ "Name": "Total Balance",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Economy",
+ "Currency"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Economy",
+ "Currency"
+ ]
+ }
+ ]
+ },
+ "78f5a9f2-4e3d-4534-aada-4af3a551a953": {
+ "ReadonlyName": "Get Broadcasting Attendance",
+ "Description": "Outputs player counts if you're in an event that's actively broadcasting.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Get Broadcasting Attendance",
+ "ReadonlyTypeParams": {},
+ "Inputs": [],
+ "Outputs": [
+ {
+ "Name": "Audience Count",
+ "ReadonlyType": "int",
+ "Description": "Number of players watching a broadcast at this event"
+ },
+ {
+ "Name": "Broadcaster Count",
+ "ReadonlyType": "int",
+ "Description": "Number of players broadcasting themselves at this event"
+ },
+ {
+ "Name": "Is Broadcast Active",
+ "ReadonlyType": "bool",
+ "Description": "True if anyone is broadcasting. Only active broadcasts will have accurate attendance counts"
+ }
+ ]
+ }
+ ],
+ "NodeFilters": []
+ },
+ "e8c5082f-0a75-4025-9679-293bc8d72989": {
+ "ReadonlyName": "List Get Element",
+ "Description": "Gets a specified element from the input list. The \"Index\" is the location of the element in the list. The first element in the list is at index 0, the second element is at index 1.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "List Get Element",
+ "ReadonlyTypeParams": {
+ "T": "any"
+ },
+ "Inputs": [
+ {
+ "Name": "List",
+ "ReadonlyType": "List<T>",
+ "Description": ""
+ },
+ {
+ "Name": "Index",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Core"
+ ]
+ }
+ ]
+ },
+ "d46f6fdc-480c-41e6-9a27-87fadb0ab0fc": {
+ "ReadonlyName": "Time Get Universal Seconds",
+ "Description": "Gets the number of seconds since 1970. Uses local player's system clock. This is not synchronized between players!",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Time Get Universal Seconds",
+ "ReadonlyTypeParams": {},
+ "Inputs": [],
+ "Outputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Time"
+ ]
+ }
+ ]
+ },
+ "a924cac0-0245-4846-862d-df4092c5e1c2": {
+ "ReadonlyName": "Get Any Player with Role",
+ "Description": "Gets a player with the role. Returns invalid player if no player has the role.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Get Any Player with Role",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Role",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Player",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Role"
+ ]
+ }
+ ]
+ },
+ "88f95338-d1a6-4fad-8424-d714d651f6ac": {
+ "ReadonlyName": "Get Forward Vector",
+ "Description": "Gets the forward direction of a target, output as a vector3.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Get Forward Vector",
+ "ReadonlyTypeParams": {
+ "T": "(Rec Room Object | Player)"
+ },
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Vector",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Physics"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Object"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Player",
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "0493204d-9815-49a9-8c87-4dedf5ccf7e8": {
+ "ReadonlyName": "List Get Count",
+ "Description": "Outputs the number of elements inside the input list.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "List Get Count",
+ "ReadonlyTypeParams": {
+ "T": "any"
+ },
+ "Inputs": [
+ {
+ "Name": "List",
+ "ReadonlyType": "List<T>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Count",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Core"
+ ]
+ }
+ ]
+ },
+ "70c830bb-223a-4a7c-b0ae-df240c6f1f33": {
+ "ReadonlyName": "Get Local Camera Forward",
+ "Description": "Gets the direction your avatar is looking, output as a vector3.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Get Local Camera Forward",
+ "ReadonlyTypeParams": {},
+ "Inputs": [],
+ "Outputs": [
+ {
+ "Name": "Vector",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Physics"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Player",
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "912f0e1b-267d-4424-8002-3f82a2d835fe": {
+ "ReadonlyName": "Get Local Camera Rotation",
+ "Description": "Gets the rotation of your avatar's view, output as a quaternion.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Get Local Camera Rotation",
+ "ReadonlyTypeParams": {},
+ "Inputs": [],
+ "Outputs": [
+ {
+ "Name": "Quaternion",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Physics"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Player",
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "5d9da95f-a64f-4660-a11f-bf0855769659": {
+ "ReadonlyName": "Get Local Camera Up",
+ "Description": "Gets the up direction from the local player's camera, output as a vector3.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Get Local Camera Up",
+ "ReadonlyTypeParams": {},
+ "Inputs": [],
+ "Outputs": [
+ {
+ "Name": "Vector",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Physics"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Player",
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "12cf9781-1e1b-4e59-a783-c7214b66be8a": {
+ "ReadonlyName": "Get Local Player Leaderboard Stat",
+ "Description": "Get leaderboard stat for local player on stat channel 1, 2 or 3.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Get Local Player Leaderboard Stat",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Run",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Channel",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Run",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "On Get Stat Complete",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Leaderboard"
+ ]
+ }
+ ]
+ },
+ "fdf733a8-bdd6-4800-b1d4-95b06b3d6f02": {
+ "ReadonlyName": "Get Local Player",
+ "Description": "Outputs the player running this chip on their machine.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Get Local Player",
+ "ReadonlyTypeParams": {},
+ "Inputs": [],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Networking"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Networking"
+ ]
+ }
+ ]
+ },
+ "975fde92-136c-4ce5-b749-bf149b817695": {
+ "ReadonlyName": "Get New Line",
+ "Description": "Returns a new line string.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Get New Line",
+ "ReadonlyTypeParams": {},
+ "Inputs": [],
+ "Outputs": [
+ {
+ "Name": "New Line",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "String"
+ ]
+ }
+ ]
+ },
+ "c453fa47-d0db-4c4a-a6a1-dac4ebad0aca": {
+ "ReadonlyName": "Get Rotation",
+ "Description": "Outputs the rotation of the target as a quaternion.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Get Rotation",
+ "ReadonlyTypeParams": {
+ "T": "(Rec Room Object | Player)"
+ },
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Quaternion",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Physics"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Player",
+ "Physics"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Object",
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "dcbd4d6a-8f42-48ef-ad66-e1f245228d84": {
+ "ReadonlyName": "Get Party Of Player",
+ "Description": "Returns the party of the input player as List<Player>. If the player is not in a party, it will return a list containing only that player.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Get Party Of Player",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Party",
+ "ReadonlyType": "List<Player>",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Party"
+ ]
+ }
+ ]
+ },
+ "6141ff64-412b-452f-beb0-f338eb6abfb5": {
+ "ReadonlyName": "Get Player Account Name",
+ "Description": "Outputs the player's Account name (e.g Coach) in a form of a string. To get a display name, use To String.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Get Player Account Name",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Player",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Player Name",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Name"
+ ]
+ }
+ ]
+ },
+ "2ee5a268-9d44-4326-8a34-ad126a3218f2": {
+ "ReadonlyName": "Get Player By Account Name",
+ "Description": "Gets a Player based on an Account Name. (E.g. my account name is @Coach and if I input the string \"Coach\", the output would be my Player object.) Outputs an invalid Player if nobody in the room has the given account name.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Get Player By Account Name",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Name",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Player",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Name"
+ ]
+ }
+ ]
+ },
+ "637e07e4-9b93-44b6-bba3-68966080d064": {
+ "ReadonlyName": "Get Player By Display Name",
+ "Description": "Gets a Player based on a display name. (E.g. my display name is Coach and if I input a string \"Coach\", the output would be my Player object.) Outputs an invalid Player if nobody in the room has the given display name.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Get Player By Display Name",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Name",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Player",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Name"
+ ]
+ }
+ ]
+ },
+ "1c0a6bd4-bcac-40a9-8bae-fceff7ff7cff": {
+ "ReadonlyName": "Get All Players With Role",
+ "Description": "Outpus List<Player> that continues every player with the specified role.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Get All Players With Role",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Role Name",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Players",
+ "ReadonlyType": "List<Player>",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Role"
+ ]
+ }
+ ]
+ },
+ "a8c52ef2-17bf-47e6-9084-3e5623584b48": {
+ "ReadonlyName": "Get Position",
+ "Description": "Outputs the position of the input object as a vector3.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Get Position",
+ "ReadonlyTypeParams": {
+ "T": "(AI | Combatant | Rec Room Object | Player)"
+ },
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Position",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Physics"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Player",
+ "Physics"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Object",
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "8722445f-e552-4d4a-bced-8afa63bbf70b": {
+ "ReadonlyName": "Time Get Precise Seconds",
+ "Description": "Gets the amount of seconds since a player launched Rec Room.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Time Get Precise Seconds",
+ "ReadonlyTypeParams": {},
+ "Inputs": [],
+ "Outputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Time"
+ ]
+ }
+ ]
+ },
+ "d7557465-963e-4451-a55a-dea2050e9b74": {
+ "ReadonlyName": "Get Room Authority",
+ "Description": "Returns the player who is the room authority.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Get Room Authority",
+ "ReadonlyTypeParams": {},
+ "Inputs": [],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Networking"
+ ]
+ }
+ ]
+ },
+ "830f781d-2522-4ec0-9d6f-ecfc0bf695f6": {
+ "ReadonlyName": "Get Up Vector",
+ "Description": "Outputs the up direction of the input target, output as a vector3.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Get Up Vector",
+ "ReadonlyTypeParams": {
+ "T": "(Rec Room Object | Player)"
+ },
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Vector",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Physics"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Player",
+ "Physics"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Object",
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "f33e3fb6-79f1-43da-93c1-553d022b9f37": {
+ "ReadonlyName": "Time Get Universal Time",
+ "Description": "Gets the UTC time. Uses local player's system clock. This is not synchronized between players! This is also not guaranteed to be continuous. To measure time, use Time Get Precise Seconds instead.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Time Get Universal Time",
+ "ReadonlyTypeParams": {},
+ "Inputs": [],
+ "Outputs": [
+ {
+ "Name": "Year",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "Month",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "Day",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "Hour",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "Minute",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "Second",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Time"
+ ]
+ }
+ ]
+ },
+ "e9c65fbe-9d0f-4373-bd45-fe620de801b4": {
+ "ReadonlyName": "Get Velocity",
+ "Description": "Returns the velocity of a Player or a Rec Room Object.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Get Velocity",
+ "ReadonlyTypeParams": {
+ "T": "(Rec Room Object | Player)"
+ },
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Velocity",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Physics"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Player",
+ "Physics"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Object",
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "110c29b1-ac90-4a71-b3c0-53372aa134bc": {
+ "ReadonlyName": "Greater Than",
+ "Description": "Returns True if input A is greater than input B.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Greater Than",
+ "ReadonlyTypeParams": {
+ "T": "(int | float)"
+ },
+ "Inputs": [
+ {
+ "Name": "A",
+ "ReadonlyType": "T",
+ "Description": ""
+ },
+ {
+ "Name": "B",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Logic",
+ "Comparison"
+ ]
+ }
+ ]
+ },
+ "a10e7788-f016-4390-a68e-87d93b47edb1": {
+ "ReadonlyName": "Greater or Equal",
+ "Description": "Returns True if input A is greater than or equal to input B.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Greater or Equal",
+ "ReadonlyTypeParams": {
+ "T": "(int | float)"
+ },
+ "Inputs": [
+ {
+ "Name": "A",
+ "ReadonlyType": "T",
+ "Description": ""
+ },
+ {
+ "Name": "B",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Logic",
+ "Comparison"
+ ]
+ }
+ ]
+ },
+ "dc78ca9e-29c4-4cba-a6cb-3ea87ffbe780": {
+ "ReadonlyName": "Ground Vehicle Add Boost Fuel",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Ground Vehicle Add Boost Fuel",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Ground Vehicle",
+ "Description": ""
+ },
+ {
+ "Name": "Boost amount",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Vehicle"
+ ]
+ }
+ ]
+ },
+ "29dd429b-81e5-40c7-b3b6-8d03bcc1eec3": {
+ "ReadonlyName": "Ground Vehicle Apply Boost",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Ground Vehicle Apply Boost",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Ground Vehicle",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Success",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Failure",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Vehicle"
+ ]
+ }
+ ]
+ },
+ "76d46244-7b8e-43de-bd8c-55375411ffe1": {
+ "ReadonlyName": "Ground Vehicle Get Boost Fuel",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Ground Vehicle Get Boost Fuel",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Ground Vehicle",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Boost amount",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Vehicle"
+ ]
+ }
+ ]
+ },
+ "f41ae49a-dbf3-4b4b-87dc-68614da242cc": {
+ "ReadonlyName": "Ground Vehicle Get Driving Enabled",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Ground Vehicle Get Driving Enabled",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Ground Vehicle",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Driving Enabled",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Vehicle"
+ ]
+ }
+ ]
+ },
+ "390257d5-e382-4416-81f7-40562d5473d3": {
+ "ReadonlyName": "Ground Vehicle Get Engine Torque Multiplier",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Ground Vehicle Get Engine Torque Multiplier",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Ground Vehicle",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Torque Multiplier",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Vehicle"
+ ]
+ }
+ ]
+ },
+ "d150c8fa-91fd-4483-a8b5-ca6c62f2c648": {
+ "ReadonlyName": "Ground Vehicle Get Seated Player",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Ground Vehicle Get Seated Player",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Ground Vehicle",
+ "Description": ""
+ },
+ {
+ "Name": "Seat index",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Player",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Vehicle"
+ ]
+ }
+ ]
+ },
+ "0fcc3c15-5ee0-4af9-a4de-94627fbba6ec": {
+ "ReadonlyName": "Ground Vehicle Get Wheel Friction Multiplier",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Ground Vehicle Get Wheel Friction Multiplier",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Ground Vehicle",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Friction Multiplier",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Vehicle"
+ ]
+ }
+ ]
+ },
+ "6c7a86cc-2145-404c-b029-31d22f9811e7": {
+ "ReadonlyName": "Ground Vehicle Set Driving Enabled",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Ground Vehicle Set Driving Enabled",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Ground Vehicle",
+ "Description": ""
+ },
+ {
+ "Name": "Enabled",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Vehicle"
+ ]
+ }
+ ]
+ },
+ "128116c8-591f-44bc-97cd-f787d660cfb5": {
+ "ReadonlyName": "Ground Vehicle Set Engine Torque Multiplier",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Ground Vehicle Set Engine Torque Multiplier",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Ground Vehicle",
+ "Description": ""
+ },
+ {
+ "Name": "Torque multiplier",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Vehicle"
+ ]
+ }
+ ]
+ },
+ "50458d97-a7cf-45e3-892b-fb67c0fbe64b": {
+ "ReadonlyName": "Ground Vehicle Set Seated Player",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Ground Vehicle Set Seated Player",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Ground Vehicle",
+ "Description": ""
+ },
+ {
+ "Name": "Seat index",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "Player",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Success",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Failure",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Vehicle"
+ ]
+ }
+ ]
+ },
+ "d00aed86-97ac-4717-872e-ca6646ee266d": {
+ "ReadonlyName": "Ground Vehicle Set Wheel Friction Multiplier",
+ "Description": "Wheel Friction affects how good the wheels are at gripping the ground - lower values decrease traction and make the wheels slip more and higher values can increase traction and make the wheels slip less. 1 is the default value for Wheel Friction.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Ground Vehicle Set Wheel Friction Multiplier",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Ground Vehicle",
+ "Description": ""
+ },
+ {
+ "Name": "Friction multiplier",
+ "ReadonlyType": "float",
+ "Description": "The lower this value is, the more the tires will slip instead of properly grabbing the ground"
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Vehicle"
+ ]
+ }
+ ]
+ },
+ "4bb12ec4-780e-4186-a597-36bdc5c67b43": {
+ "ReadonlyName": "Ground Vehicle Unseat Player From Seat",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Ground Vehicle Unseat Player From Seat",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Ground Vehicle",
+ "Description": ""
+ },
+ {
+ "Name": "Seat index",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Success",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Failure",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Vehicle"
+ ]
+ }
+ ]
+ },
+ "5815406b-a3f2-471e-88ec-dffc212293be": {
+ "ReadonlyName": "Ground Vehicle Unseat Player",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Ground Vehicle Unseat Player",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Ground Vehicle",
+ "Description": ""
+ },
+ {
+ "Name": "Player",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Success",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Failure",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Vehicle"
+ ]
+ }
+ ]
+ },
+ "a4f8a9a1-fd7b-4702-8345-93ae4d57f333": {
+ "ReadonlyName": "If Expression",
+ "Description": "Outputs one input value based on the input condition. Outputs the \"Then\" input if the input condition is True. Outputs the \"Else\" input if the input condition is False. Only reads one of the inputs, not both.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "If Expression",
+ "ReadonlyTypeParams": {
+ "T": "any"
+ },
+ "Inputs": [
+ {
+ "Name": "If",
+ "ReadonlyType": "bool",
+ "Description": ""
+ },
+ {
+ "Name": "Then",
+ "ReadonlyType": "T",
+ "Description": ""
+ },
+ {
+ "Name": "Else",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Commonly Used"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Logic",
+ "Ternary Operator"
+ ]
+ }
+ ]
+ },
+ "b8b667b9-7b55-4b8d-b116-abef220777e2": {
+ "ReadonlyName": "If Local Player Is Authority",
+ "Description": "I'm Authority exec fires on the player's machine who has authority in the current context. At the room level, this is room authority, inside an object board, this is object authority. I'm Not Authority exec fires for everyone else.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "If Local Player Is Authority",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "I'm Authority",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "I'm Not Authority",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Networking"
+ ]
+ }
+ ]
+ },
+ "5e28057f-214b-4ff8-81bc-512be207c9d7": {
+ "ReadonlyName": "If Local Player Is Room Authority",
+ "Description": "I'm Authority exec fires on the player's machine who has authority over the room. I'm Not Authority exec fires for everyone else.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "If Local Player Is Room Authority",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "I'm Authority",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "I'm Not Authority",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Networking"
+ ]
+ }
+ ]
+ },
+ "6d69bee8-0d77-4d5f-bf35-9794eaaabe81": {
+ "ReadonlyName": "If Local Player Should Run",
+ "Description": "The \"Should Run\" port will exec a) if the input player is local or b) if input player is invalid and the local player has authority of the current context.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "If Local Player Should Run",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Acting Player",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Should Run",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Should Not Run",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Networking"
+ ]
+ }
+ ]
+ },
+ "c7643011-f320-4155-89b8-d693730c1935": {
+ "ReadonlyName": "If Player Is Local",
+ "Description": "Outputs if a player is the local player or not.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "If Player Is Local",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Player",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Is Local",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Is Not Local",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Networking"
+ ]
+ }
+ ]
+ },
+ "1b5eca75-0e7e-4aff-8adc-c5e043cac29e": {
+ "ReadonlyName": "Velocity Add",
+ "Description": "Adds velocity to the input target. The input velocity will be multiplied by the magnitude of the vector provided in the input direction.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Velocity Add",
+ "ReadonlyTypeParams": {
+ "T": "(Player | Rec Room Object)"
+ },
+ "Inputs": [
+ {
+ "Name": "Add Velocity",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "T",
+ "Description": ""
+ },
+ {
+ "Name": "Speed (m/s)",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Direction",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ },
+ {
+ "Name": "Maximum Speed (m/s)",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Physics"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Player",
+ "Physics"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Object",
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "f0137efc-b3b7-4217-ba8b-1d2e78d451bd": {
+ "ReadonlyName": "Velocity Reflect",
+ "Description": "The input target's velocity parallel to the input direction vector is reflected along the input direction and velocities perpendicular to it, are maintained. The input velocity will be multiplied by the magnitude of the vector provided in the input direction.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Velocity Reflect",
+ "ReadonlyTypeParams": {
+ "T": "(Player | Rec Room Object)"
+ },
+ "Inputs": [
+ {
+ "Name": "Reflect Velocity",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "T",
+ "Description": ""
+ },
+ {
+ "Name": "Additional Speed (m/s)",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Speed Multiplier",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Direction",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ },
+ {
+ "Name": "Maximum Speed (m/s)",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Physics"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Player",
+ "Physics"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Object",
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "f97c530d-03bf-498c-8854-33e814d2600b": {
+ "ReadonlyName": "Velocity Set",
+ "Description": "Momentarily sets the velocity of the input target in the input direction. The input velocity will be multiplied by the magnitude of the vector provided in the input direction.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Velocity Set",
+ "ReadonlyTypeParams": {
+ "T": "(Player | Rec Room Object)"
+ },
+ "Inputs": [
+ {
+ "Name": "Set Velocity",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "T",
+ "Description": ""
+ },
+ {
+ "Name": "Speed (m/s)",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Direction",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Physics"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Player",
+ "Physics"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Object",
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "0c351297-db4d-43e7-81a3-95dc5ddde401": {
+ "ReadonlyName": "Interaction Volume Get Interaction Prompt",
+ "Description": "Gets the interaction promt of an Interaction Volume.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Interaction Volume Get Interaction Prompt",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Interaction Volume",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Interaction Prompt",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Interaction Volume"
+ ]
+ }
+ ]
+ },
+ "c536089c-e2c3-4a6a-a4fa-aba8dca6b810": {
+ "ReadonlyName": "Interaction Volume Get Is Locked",
+ "Description": "Returns False if the Interaction Volume is enabled, and True if it is locked.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Interaction Volume Get Is Locked",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Interaction Volume",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Is Locked",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Interaction Volume"
+ ]
+ }
+ ]
+ },
+ "380d8467-bdfa-4724-a62c-1955831f994a": {
+ "ReadonlyName": "Interaction Volume Set Interaction Prompt",
+ "Description": "Sets the interaction promt of an Interaction Volume.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Interaction Volume Set Interaction Prompt",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Interaction Volume",
+ "Description": ""
+ },
+ {
+ "Name": "Interaction Prompt",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Interaction Volume"
+ ]
+ }
+ ]
+ },
+ "a1e57113-f0b5-45c5-b1e0-95163674daa4": {
+ "ReadonlyName": "Interaction Volume Set Locked",
+ "Description": "Disables or enables an Interaction Volume (but reversed).",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Interaction Volume Set Locked",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Interaction Volume",
+ "Description": ""
+ },
+ {
+ "Name": "Locked",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Interaction Volume"
+ ]
+ }
+ ]
+ },
+ "33224907-68ff-4102-802e-7c3eed481d37": {
+ "ReadonlyName": "int Variable",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [
+ {
+ "Name": "Int Variable",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Variable",
+ "Primitive"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Math",
+ "Scalar"
+ ]
+ }
+ ]
+ },
+ "65cfba8a-b5dc-4946-b824-e6efc5719f3a": {
+ "ReadonlyName": "Int to Float",
+ "Description": "Converts the input int to a float.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Int to Float",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Scalar"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Conversion"
+ ]
+ }
+ ]
+ },
+ "24a1be50-ef1b-4e54-836b-4a2a95780b4e": {
+ "ReadonlyName": "Is Valid",
+ "Description": "Returns True if the input variable is not null. Certain variable types must be set before use because they can't have a default value. A Rec Room Object variable that isn't set isn't going to be valid.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Is Valid",
+ "ReadonlyTypeParams": {
+ "T": "any"
+ },
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Is Valid",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Utilities"
+ ]
+ }
+ ]
+ },
+ "91b0ffa8-4eb1-4a30-aaf3-7a049071cb42": {
+ "ReadonlyName": "Lerp",
+ "Description": "Computes a linear interpolation.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Lerp",
+ "ReadonlyTypeParams": {
+ "T": "(float | Quaternion | Vector3)"
+ },
+ "Inputs": [
+ {
+ "Name": "Start",
+ "ReadonlyType": "T",
+ "Description": ""
+ },
+ {
+ "Name": "End",
+ "ReadonlyType": "T",
+ "Description": ""
+ },
+ {
+ "Name": "Progress",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Scalar"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Math",
+ "Vector"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Math",
+ "Quaternion"
+ ]
+ }
+ ]
+ },
+ "7e58b3f4-2694-4ced-b3a8-0fe23f48f60f": {
+ "ReadonlyName": "Less Than",
+ "Description": "Returns True if input A is less than input B.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Less Than",
+ "ReadonlyTypeParams": {
+ "T": "(int | float)"
+ },
+ "Inputs": [
+ {
+ "Name": "A",
+ "ReadonlyType": "T",
+ "Description": ""
+ },
+ {
+ "Name": "B",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Logic",
+ "Comparison"
+ ]
+ }
+ ]
+ },
+ "a027073f-9189-457f-a53d-8562e8829daf": {
+ "ReadonlyName": "Less or Equal",
+ "Description": "Returns True if input A is less than or equal to input B.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Less or Equal",
+ "ReadonlyTypeParams": {
+ "T": "(int | float)"
+ },
+ "Inputs": [
+ {
+ "Name": "A",
+ "ReadonlyType": "T",
+ "Description": ""
+ },
+ {
+ "Name": "B",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Logic",
+ "Comparison"
+ ]
+ }
+ ]
+ },
+ "873d8765-9dc7-41ea-87ef-dd6e32119af8": {
+ "ReadonlyName": "Light Set Angle",
+ "Description": "Sets the angle of the spotlight's cone.",
+ "IsBetaChip": false,
+ "DeprecationStage": 2,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Light Set Angle",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Light",
+ "Description": ""
+ },
+ {
+ "Name": "Angle",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Light"
+ ]
+ }
+ ]
+ },
+ "494ceaa7-3520-4f5b-87e0-7dd08334730c": {
+ "ReadonlyName": "Light Set Angle",
+ "Description": "Sets the angle of the spotlight's cone.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Light Set Angle",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Light",
+ "Description": ""
+ },
+ {
+ "Name": "Angle",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Light"
+ ]
+ }
+ ]
+ },
+ "2b6d9368-2ddc-41fb-ac14-b1a3561b19fc": {
+ "ReadonlyName": "Light Set Color",
+ "Description": "Sets the color for a point light or a spotlight.",
+ "IsBetaChip": false,
+ "DeprecationStage": 1,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Light Set Color",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Light",
+ "Description": ""
+ },
+ {
+ "Name": "Color",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Light"
+ ]
+ }
+ ]
+ },
+ "b2698906-68bd-4ea3-be98-35a23615b522": {
+ "ReadonlyName": "Light Set Color V2",
+ "Description": "Sets the color for a point light or a spotlight",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Light Set Color V2",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Light",
+ "Description": ""
+ },
+ {
+ "Name": "Color",
+ "ReadonlyType": "Color",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Light"
+ ]
+ }
+ ]
+ },
+ "902a47c8-3834-4858-bbae-5357281a507d": {
+ "ReadonlyName": "Light Set Intensity",
+ "Description": "Sets the brightness level for a point light or a spotlight.",
+ "IsBetaChip": false,
+ "DeprecationStage": 2,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Light Set Intensity",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Light",
+ "Description": ""
+ },
+ {
+ "Name": "Intensity",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Light"
+ ]
+ }
+ ]
+ },
+ "aa6dc013-3f5b-45f4-87a2-8aa4d16cc375": {
+ "ReadonlyName": "Light Set Intensity",
+ "Description": "Sets the brightness level for a point light or a spotlight.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Light Set Intensity",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Light",
+ "Description": ""
+ },
+ {
+ "Name": "Intensity",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Light"
+ ]
+ }
+ ]
+ },
+ "c3d0ef1f-921c-4602-a6eb-b03ed46d556f": {
+ "ReadonlyName": "Light Set Range",
+ "Description": "Sets the range of a point light or a spotlight.",
+ "IsBetaChip": false,
+ "DeprecationStage": 2,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Light Set Range",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Light",
+ "Description": ""
+ },
+ {
+ "Name": "Range",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Light"
+ ]
+ }
+ ]
+ },
+ "214bb1b7-f808-4a36-9c10-113045b4fe44": {
+ "ReadonlyName": "Light Set Range",
+ "Description": "Sets the range of a point light or a spotlight.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Light Set Range",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Light",
+ "Description": ""
+ },
+ {
+ "Name": "Range",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Light"
+ ]
+ }
+ ]
+ },
+ "0f96406e-af69-4f6c-a430-c6b004457ef4": {
+ "ReadonlyName": "Light Turn Off",
+ "Description": "Turns off the point light or the spotlight.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Light Turn Off",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Light",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Light"
+ ]
+ }
+ ]
+ },
+ "5452c480-62f9-4d4e-b615-0f59e645d8db": {
+ "ReadonlyName": "Light Turn On",
+ "Description": "Turns on the point light or the spotlight.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Light Turn On",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Light",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Light"
+ ]
+ }
+ ]
+ },
+ "f716c3f3-0c7c-42a4-bf55-12b7e1cd9040": {
+ "ReadonlyName": "List Add",
+ "Description": "Adds a new element to the end of the target list containing the input value.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "List Add",
+ "ReadonlyTypeParams": {
+ "T": "any"
+ },
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "List<T>",
+ "Description": ""
+ },
+ {
+ "Name": "Item",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Core"
+ ]
+ }
+ ]
+ },
+ "7d474bd7-ee53-4e6d-a45f-cd64fce1c0dc": {
+ "ReadonlyName": "List All True",
+ "Description": "If all of the bool values in the list are True then return ture.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "List All True",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "List<bool>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Logic"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Logic",
+ "List"
+ ]
+ }
+ ]
+ },
+ "f9589495-685e-4e14-af2e-5cd45f860021": {
+ "ReadonlyName": "List Any True",
+ "Description": "If any bool value in the list is True then return True.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "List Any True",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "List<bool>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Logic"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Logic",
+ "List"
+ ]
+ }
+ ]
+ },
+ "e0ef8c83-e5a6-4272-a102-07bfc0a40fd5": {
+ "ReadonlyName": "List<bool> Variable",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [
+ {
+ "Name": "Variable (List<bool>)",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "List<bool>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "List<bool>",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Variable",
+ "Primitive"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Variable",
+ "List",
+ "Primitive"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Logic",
+ "List"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Logic",
+ "Variable"
+ ]
+ },
+ {
+ "FilterPath": [
+ "List",
+ "Logic"
+ ]
+ }
+ ]
+ },
+ "9216dded-da74-49a7-a327-5750f4809787": {
+ "ReadonlyName": "List<Color> Variable",
+ "Description": "",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "List<Color> Variable",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "List<Color>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "List<Color>",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Variable",
+ "List",
+ "Primitive"
+ ]
+ },
+ {
+ "FilterPath": [
+ "List",
+ "Variable",
+ "Primitive"
+ ]
+ }
+ ]
+ },
+ "0e2f21e0-bc71-423a-a983-72e27193ca8b": {
+ "ReadonlyName": "List Concat",
+ "Description": "Combine lists together into one list.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "List Concat",
+ "ReadonlyTypeParams": {
+ "T": "any"
+ },
+ "Inputs": [
+ {
+ "Name": "List 1",
+ "ReadonlyType": "List<T>",
+ "Description": ""
+ },
+ {
+ "Name": "List 2",
+ "ReadonlyType": "List<T>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "List<T>",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Core"
+ ]
+ }
+ ]
+ },
+ "73f261e2-d65d-4607-858d-3f4c37c76963": {
+ "ReadonlyName": "List Contains",
+ "Description": "Outputs True if the target list contains the input value.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "List Contains",
+ "ReadonlyTypeParams": {
+ "T": "any"
+ },
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "List<T>",
+ "Description": ""
+ },
+ {
+ "Name": "Item",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Core"
+ ]
+ }
+ ]
+ },
+ "536e376c-087d-4909-9412-3fcee5d6f52b": {
+ "ReadonlyName": "List<Rec Room Object> Variable",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [
+ {
+ "Name": "Variable (List<RecRoomObject>)",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "List<Rec Room Object>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "List<Rec Room Object>",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Variable",
+ "Object"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Variable",
+ "List",
+ "Object"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Object",
+ "Rec Room Object"
+ ]
+ }
+ ]
+ },
+ "7e5af908-533d-4d42-b3c9-0159e2b5fd55": {
+ "ReadonlyName": "List Divide",
+ "Description": "Divides each element in the list by the next element.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "List Divide",
+ "ReadonlyTypeParams": {
+ "T": "(float | int | Vector3)"
+ },
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "List<T>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Math"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Math",
+ "List"
+ ]
+ }
+ ]
+ },
+ "9bcd36e6-c293-432a-8d90-f6391fe06c62": {
+ "ReadonlyName": "List<float> Variable",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [
+ {
+ "Name": "Variable (List<float>)",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "List<float>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "List<float>",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Variable",
+ "Primitive"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Variable",
+ "List",
+ "Primitive"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Math",
+ "List"
+ ]
+ }
+ ]
+ },
+ "09066fc7-c88e-49f2-992c-5ed10f4ee682": {
+ "ReadonlyName": "List Get All Indices Of",
+ "Description": "Returns list of all indices of input item in target list if that list contains one or more instances of the item. Otherwise returns an empty list.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "List Get All Indices Of",
+ "ReadonlyTypeParams": {
+ "T": "any"
+ },
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "List<T>",
+ "Description": ""
+ },
+ {
+ "Name": "Item",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "List<int>",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Core"
+ ]
+ }
+ ]
+ },
+ "d8926108-6c7d-4c78-8fbd-baac2b210e03": {
+ "ReadonlyName": "List Get First Index Of",
+ "Description": "Returns first index of the item in target list if that list contains it. Otherwise returns -1.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "List Get First Index Of",
+ "ReadonlyTypeParams": {
+ "T": "any"
+ },
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "List<T>",
+ "Description": ""
+ },
+ {
+ "Name": "Item",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Core"
+ ]
+ }
+ ]
+ },
+ "592c8aab-9489-492f-a4aa-1e558e6a8ce7": {
+ "ReadonlyName": "List Insert",
+ "Description": "Insert a new element into the target list at the input index. The new element contains the input value.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "List Insert",
+ "ReadonlyTypeParams": {
+ "T": "any"
+ },
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "List<T>",
+ "Description": ""
+ },
+ {
+ "Name": "Item",
+ "ReadonlyType": "T",
+ "Description": ""
+ },
+ {
+ "Name": "Index",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Core"
+ ]
+ }
+ ]
+ },
+ "fe2f9c12-d213-4234-a387-9d2ec1ad7fc1": {
+ "ReadonlyName": "List<int> Variable",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [
+ {
+ "Name": "Variable (List<int>)",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "List<int>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "List<int>",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Variable",
+ "Primitive"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Variable",
+ "List",
+ "Primitive"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Math",
+ "List"
+ ]
+ }
+ ]
+ },
+ "47428133-4492-422a-aeab-82c21667543e": {
+ "ReadonlyName": "List Max",
+ "Description": "Outputs the highest value in the target list.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "List Max",
+ "ReadonlyTypeParams": {
+ "T": "(float | int)"
+ },
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "List<T>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Math"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Math",
+ "List"
+ ]
+ }
+ ]
+ },
+ "73e9cc79-66cc-4526-8ed7-87500e208c6b": {
+ "ReadonlyName": "List Min",
+ "Description": "Outputs the lowest value in the target list.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "List Min",
+ "ReadonlyTypeParams": {
+ "T": "(float | int)"
+ },
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "List<T>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Math"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Math",
+ "List"
+ ]
+ }
+ ]
+ },
+ "585aebe5-5df3-423a-8bc4-66b4e2b8bc5b": {
+ "ReadonlyName": "List Multiply",
+ "Description": "Multiplies each element in the list by the next element.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "List Multiply",
+ "ReadonlyTypeParams": {
+ "T": "(float | int | Quaternion | Vector3)"
+ },
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "List<T>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Math"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Math",
+ "List"
+ ]
+ }
+ ]
+ },
+ "32837e14-12de-465f-89dc-ceddb64cdd6c": {
+ "ReadonlyName": "List<Player> Variable",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [
+ {
+ "Name": "Variable (List<Player>)",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "List<Player>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "List<Player>",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Variable",
+ "Object"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Variable",
+ "List",
+ "Object"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Player",
+ "Variable"
+ ]
+ }
+ ]
+ },
+ "e8cfde19-33a4-4826-a032-4b9bd50aa171": {
+ "ReadonlyName": "List<Quaternion> Variable",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [
+ {
+ "Name": "Variable (List<Quaternion>)",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "List<Quaternion>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "List<Quaternion>",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Variable",
+ "Primitive"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Variable",
+ "List",
+ "Primitive"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Math",
+ "Quaternion"
+ ]
+ }
+ ]
+ },
+ "02774487-d41a-4b59-9aa9-2aeb0aad9e37": {
+ "ReadonlyName": "List Remove At",
+ "Description": "Remove an element in the target list at the input index.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "List Remove At",
+ "ReadonlyTypeParams": {
+ "T": "any"
+ },
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "List<T>",
+ "Description": ""
+ },
+ {
+ "Name": "Index",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Core"
+ ]
+ }
+ ]
+ },
+ "2687fb17-96ea-4106-94d7-be8854cfa978": {
+ "ReadonlyName": "List Remove Last",
+ "Description": "Removes the last element in a list.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "List Remove Last",
+ "ReadonlyTypeParams": {
+ "T": "any"
+ },
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "List<T>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Core"
+ ]
+ }
+ ]
+ },
+ "94fb596f-6b3f-4981-bc2d-1bb693c45ae6": {
+ "ReadonlyName": "List<string> Variable",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [
+ {
+ "Name": "Variable (List<string>)",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "List<string>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "List<string>",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Variable",
+ "Primitive"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Variable",
+ "List",
+ "Primitive"
+ ]
+ }
+ ]
+ },
+ "20f069cb-30e5-4df8-8e2f-d91f322a83dd": {
+ "ReadonlyName": "List Subtract",
+ "Description": "Subtracts each element in the list by the next element.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "List Subtract",
+ "ReadonlyTypeParams": {
+ "T": "(float | int | Vector3)"
+ },
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "List<T>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Math"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Math",
+ "List"
+ ]
+ }
+ ]
+ },
+ "d080c9af-402f-4eb9-91d6-9eee945bf734": {
+ "ReadonlyName": "List Sum",
+ "Description": "Adds each element in the list by the next element.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "List Sum",
+ "ReadonlyTypeParams": {
+ "T": "(float | int | Vector3)"
+ },
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "List<T>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Math"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Math",
+ "List"
+ ]
+ }
+ ]
+ },
+ "35f84cfc-b10e-451e-832e-c6ad8d99685d": {
+ "ReadonlyName": "List<Vector3> Variable",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [
+ {
+ "Name": "Variable (List<Vector3>)",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "List<Vector3>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "List<Vector3>",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Variable",
+ "Primitive"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Variable",
+ "List",
+ "Primitive"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Math",
+ "Vector"
+ ]
+ }
+ ]
+ },
+ "28a105ab-a947-4493-a51d-ced76a9601ee": {
+ "ReadonlyName": "Logarithm",
+ "Description": "Computes a logarithm.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Logarithm",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Base",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Scalar"
+ ]
+ }
+ ]
+ },
+ "4047a8cc-3dcc-4fa8-85a7-41d569b8e547": {
+ "ReadonlyName": "Log String",
+ "Description": "Logs a string to the logging tab of your palette.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Log String",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Text",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Commonly Used"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Utilities"
+ ]
+ }
+ ]
+ },
+ "542d3256-0d51-4c33-a2a1-fbc44b7e1f07": {
+ "ReadonlyName": "List Create",
+ "Description": "Creates a list from input values. Add more inputs by using the configure tool on the node and press \"Add Input\". All items in a list must be of the same type.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "List Create",
+ "ReadonlyTypeParams": {
+ "T": "any"
+ },
+ "Inputs": [
+ {
+ "Name": "Item",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "List",
+ "ReadonlyType": "List<T>",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Core"
+ ]
+ }
+ ]
+ },
+ "bee72c1d-266b-4ea4-b185-7500618030c6": {
+ "ReadonlyName": "Make Tuple",
+ "Description": "",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Make Tuple",
+ "ReadonlyTypeParams": {
+ "T0": "any",
+ "T1": "any"
+ },
+ "Inputs": [
+ {
+ "Name": "Item 0",
+ "ReadonlyType": "T0",
+ "Description": ""
+ },
+ {
+ "Name": "Item 1",
+ "ReadonlyType": "T1",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Tuple",
+ "ReadonlyType": "(T0, T1)",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Utilities"
+ ]
+ }
+ ]
+ },
+ "1cb807b1-85e7-4c14-b3ae-5775b7873b7d": {
+ "ReadonlyName": "Max",
+ "Description": "Returns largest of two or more values.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Max",
+ "ReadonlyTypeParams": {
+ "T": "(int | float)"
+ },
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Max",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Scalar"
+ ]
+ }
+ ]
+ },
+ "bfb1ad17-5ade-4bd8-9c31-6d4b1e47dae3": {
+ "ReadonlyName": "Min",
+ "Description": "Returns smallest of two or more values.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Min",
+ "ReadonlyTypeParams": {
+ "T": "(int | float)"
+ },
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Min",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Scalar"
+ ]
+ }
+ ]
+ },
+ "fe462e79-9e9f-4234-b594-7b6c0a69329b": {
+ "ReadonlyName": "Modulo",
+ "Description": "Outputs the remainder of the first value is divided by the second.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Modulo",
+ "ReadonlyTypeParams": {
+ "T": "(int | float)"
+ },
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Remainder",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Scalar"
+ ]
+ }
+ ]
+ },
+ "4738d696-d05a-42ee-a182-7641c429ae06": {
+ "ReadonlyName": "Multiply",
+ "Description": "Multiplies the two or more input values and outputs the result.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Multiply",
+ "ReadonlyTypeParams": {
+ "T": "(int | float | Quaternion | Vector3)"
+ },
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Product",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Scalar"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Math",
+ "Vector"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Math",
+ "Quaternion"
+ ]
+ }
+ ]
+ },
+ "502e86d1-5b3a-4213-97e2-df25836ffcc4": {
+ "ReadonlyName": "Nand",
+ "Description": "Outputs False only when all inputs are True. If any input is False, it outputs True.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Nand",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Input",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Logic",
+ "Boolean Function"
+ ]
+ }
+ ]
+ },
+ "2891bcb4-a6ab-4a2e-a08d-dd2a55f1cf66": {
+ "ReadonlyName": "Nor",
+ "Description": "Outputs True when all inputs are False. Otherwise, outputs False.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Nor",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Input",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Logic",
+ "Boolean Function"
+ ]
+ }
+ ]
+ },
+ "ff551243-beb4-470e-ab48-9d616818d5e4": {
+ "ReadonlyName": "Not",
+ "Description": "Outputs the opposite of the input boolean.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Not",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Logic",
+ "Boolean Function"
+ ]
+ }
+ ]
+ },
+ "b5dcded0-eb2b-468d-a4b9-ffb1054f6214": {
+ "ReadonlyName": "Or",
+ "Description": "Outputs True if any input is True. Otherwise outputs False.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Or",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Input",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Logic",
+ "Boolean Function"
+ ]
+ }
+ ]
+ },
+ "92c05ebc-1967-49a4-94b5-2d01fe1e6b85": {
+ "ReadonlyName": "Parse Bool",
+ "Description": "Converts the input string to a bool if able.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Parse Bool",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "String",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "bool",
+ "Description": ""
+ },
+ {
+ "Name": "Parse Success",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Conversion"
+ ]
+ },
+ {
+ "FilterPath": [
+ "String"
+ ]
+ }
+ ]
+ },
+ "5e25f40a-2b8c-4327-a89c-7a749838da7d": {
+ "ReadonlyName": "Parse Float",
+ "Description": "Converts the input string to a float if able.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Parse Float",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "String",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Parse Success",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Conversion"
+ ]
+ },
+ {
+ "FilterPath": [
+ "String"
+ ]
+ }
+ ]
+ },
+ "00b49995-a322-47a3-a32b-5530f2ba7fed": {
+ "ReadonlyName": "Parse Int",
+ "Description": "Converts the input string to a integer if able.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Parse Int",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "String",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "Parse Success",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Conversion"
+ ]
+ },
+ {
+ "FilterPath": [
+ "String"
+ ]
+ }
+ ]
+ },
+ "5e002bc3-c667-441c-8098-4df2f956de5b": {
+ "ReadonlyName": "Piston Get Acceleration",
+ "Description": "Gets the acceleration of a piston.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Piston Get Acceleration",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Piston",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Piston"
+ ]
+ }
+ ]
+ },
+ "e503b0e4-d295-48cc-bf95-1f1a8127a009": {
+ "ReadonlyName": "Piston Get Distance",
+ "Description": "Outputs the current distance of the target Piston.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Piston Get Distance",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Piston",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Piston"
+ ]
+ }
+ ]
+ },
+ "639a360e-aeb1-4c5d-8bc1-96bfaea8aef2": {
+ "ReadonlyName": "Piston Get Target Distance",
+ "Description": "Outputs the set distance of the Marker on a target Piston.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Piston Get Target Distance",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Piston",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Piston"
+ ]
+ }
+ ]
+ },
+ "bb702e97-9f40-45cb-b35d-3a2193ab6800": {
+ "ReadonlyName": "Piston Get Max Distance",
+ "Description": "Outputs the max distance of the target Piston.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Piston Get Max Distance",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Piston",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Piston"
+ ]
+ }
+ ]
+ },
+ "1d989cd3-d6ae-4503-b80e-5e630ec3f308": {
+ "ReadonlyName": "Piston Get Speed",
+ "Description": "Returns the speed of a piston.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Piston Get Speed",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Piston",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Piston"
+ ]
+ }
+ ]
+ },
+ "07c316df-cfa1-4ef8-ac3b-d7e9c4795812": {
+ "ReadonlyName": "Piston Set Acceleration",
+ "Description": "Sets the acceleration of the target Piston.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Piston Set Acceleration",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Piston",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Piston"
+ ]
+ }
+ ]
+ },
+ "283cb154-76e8-4d60-9899-2a50b6e4c093": {
+ "ReadonlyName": "Piston Set Distance",
+ "Description": "Moves the target piston to the input distance.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Piston Set Distance",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Piston",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Piston"
+ ]
+ }
+ ]
+ },
+ "bf25fab6-14ef-4815-a7db-92d99fc627d3": {
+ "ReadonlyName": "Piston Set Target Distance",
+ "Description": "Sets the Marker distance of a target Piston.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Piston Set Target Distance",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Piston",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Piston"
+ ]
+ }
+ ]
+ },
+ "95431866-97f3-43b4-91f3-4bd3574b2b02": {
+ "ReadonlyName": "Piston Set Max Distance",
+ "Description": "Sets the max distance of a target Piston.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Piston Set Max Distance",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Piston",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Piston"
+ ]
+ }
+ ]
+ },
+ "419d2d2f-18f8-4223-b2f7-a7d1450c242c": {
+ "ReadonlyName": "Piston Set Speed",
+ "Description": "Sets the speed of a target Piston.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Piston Set Speed",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Piston",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Piston"
+ ]
+ }
+ ]
+ },
+ "7b725036-4996-441d-ac54-91ac2c23d6b3": {
+ "ReadonlyName": "Player Add Role",
+ "Description": "Adds a Role to a Player.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Player Add Role",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Player",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Role"
+ ]
+ }
+ ]
+ },
+ "4c9e7840-0721-4d1c-b334-167f79d3bf40": {
+ "ReadonlyName": "Player Definition Board",
+ "Description": "This is very similar to an object board that you would find on any object, except this is for all players! After placing, make sure to configure it and make sure it is active. Edit into this board and add any other chips you'd like and know that each player will have the same logic on them when you hit done editing.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Utilities"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Player",
+ "Utilities"
+ ]
+ }
+ ]
+ },
+ "f0827a17-7d21-45ba-b302-c2b068bd50ca": {
+ "ReadonlyName": "Player Get Equipped Objects",
+ "Description": "Gets equipped objects from a player.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Player Get Equipped Objects",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Player",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Main-Hand Object",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ },
+ {
+ "Name": "Off-Hand Object",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ },
+ {
+ "Name": "Left Hip Holster Object",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ },
+ {
+ "Name": "Right Hip Holster Object",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ },
+ {
+ "Name": "Shoulder Holster Object",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Equipment"
+ ]
+ }
+ ]
+ },
+ "4646dbed-e616-470e-8e0c-eb446b91838b": {
+ "ReadonlyName": "Player Get Is Local",
+ "Description": "Outputs True if the input player is the local player executing the chip on their machine.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Player Get Is Local",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Networking"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Player",
+ "Networking"
+ ]
+ }
+ ]
+ },
+ "9b39ed47-e9a5-4f04-b4cd-80f5bbaff2f7": {
+ "ReadonlyName": "Player Has Role",
+ "Description": "Outputs True if the input player has the input role.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Player Has Role",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Player",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Role"
+ ]
+ }
+ ]
+ },
+ "c35fe6fe-d231-4ee5-80ff-9e69f24eb29e": {
+ "ReadonlyName": "Player Get Is Authority Of",
+ "Description": "Outputs if a Player is authority of the input object.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Player Get Is Authority Of",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Player",
+ "Description": ""
+ },
+ {
+ "Name": "Object",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Networking"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Player",
+ "Networking"
+ ]
+ }
+ ]
+ },
+ "58c5cab7-ddf7-4de8-86c8-25f3d3c19d98": {
+ "ReadonlyName": "Player Get Is Room Owner",
+ "Description": "Outputs True if the input Player is one of the current room's owners.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Player Get Is Room Owner",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Utilities"
+ ]
+ }
+ ]
+ },
+ "6b5c4b0b-be26-4055-b26f-1e5f061c63ca": {
+ "ReadonlyName": "Player Left Hand Finger Direction",
+ "Description": "Outputs the direction of a Player's left hand finger.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Player Left Hand Finger Direction",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Vector",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "17e61429-059f-4b29-b8b8-f0bf3179f580": {
+ "ReadonlyName": "Player Left Hand Rotation",
+ "Description": "Outputs the rotation of a Player's left hand.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Player Left Hand Rotation",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "619b3bc8-bcb9-4812-86f5-f6442cdbb557": {
+ "ReadonlyName": "Player Left Hand Position",
+ "Description": "Outputs the postion of a Player's left hand in world space.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Player Left Hand Position",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Vector",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "fc2a0141-4997-422c-bdd3-f7ecd7d4c996": {
+ "ReadonlyName": "Player Left Hand Thumb Direction",
+ "Description": "Outputs the direction of a Player's left hand thumb.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Player Left Hand Thumb Direction",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Vector",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "2607a0fe-f200-4f29-83ae-446db4b8e8ce": {
+ "ReadonlyName": "Player Left Hand Velocity",
+ "Description": "Outputs the velocity of a Player's left hand.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Player Left Hand Velocity",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Vector",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "1094590a-ca33-4ca0-8e6b-66d784f4b5d7": {
+ "ReadonlyName": "Player Variable",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [
+ {
+ "Name": "Variable (Player)",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Variable",
+ "Object"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Player",
+ "Variable"
+ ]
+ }
+ ]
+ },
+ "89981fe2-2e27-4b92-b8c2-c0159b62bccc": {
+ "ReadonlyName": "Player Remove Role",
+ "Description": "Removes the input role from a target player.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Player Remove Role",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Player",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Role"
+ ]
+ }
+ ]
+ },
+ "646ff790-c930-4565-ae38-99a798271a50": {
+ "ReadonlyName": "Player Right Hand Finger Direction",
+ "Description": "Outputs the direction of a Player's right hand finger.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Player Right Hand Finger Direction",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Vector",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "0afab661-0870-42bb-9256-891f1a876b3b": {
+ "ReadonlyName": "Player Right Hand Rotation",
+ "Description": "Outputs the rotation of a Player's right hand.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Player Right Hand Rotation",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "e9d3330d-c290-41d5-aa37-cc5e43198836": {
+ "ReadonlyName": "Player Right Hand Position",
+ "Description": "Outputs the postion of a Player's right hand in world space.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Player Right Hand Position",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Vector",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "86e8581c-ddf9-4302-a06f-c451b5055a98": {
+ "ReadonlyName": "Player Right Hand Thumb Direction",
+ "Description": "Outputs the direction of a Player's right hand thumb.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Player Right Hand Thumb Direction",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Vector",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "aba06411-9c8c-477a-bc7f-76ab5605c85d": {
+ "ReadonlyName": "Player Right Hand Velocity",
+ "Description": "Outputs the velocity of a Player's right hand.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Player Right Hand Velocity",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Vector",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "7e321d9b-4500-4917-9361-a32e1463401c": {
+ "ReadonlyName": "Player Subscribes To Room Owner",
+ "Description": "Outputs True if the input Player subscribes to one of the current room's owners.",
+ "IsBetaChip": false,
+ "DeprecationStage": 2,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Player Subscribes To Room Owner",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "bool",
+ "Description": ""
+ },
+ {
+ "Name": "Seconds Until Enabled",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Utilities"
+ ]
+ }
+ ]
+ },
+ "288d4e89-ebed-41ed-a522-4c79bd48471a": {
+ "ReadonlyName": "Power",
+ "Description": "Multiplies a value by itself an input number of times.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Power",
+ "ReadonlyTypeParams": {
+ "T": "(int | float)"
+ },
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Scalar"
+ ]
+ }
+ ]
+ },
+ "46e6b40e-2416-4078-b7dc-a0ecc2c2aa20": {
+ "ReadonlyName": "Prompt Local Player",
+ "Description": "Sends a watch notification to a player. The player which it sends a notification to depends on who's machine fires the exec pin. Once this watch notification is opened, the player can type responses into the text box and send back responses. You can define the prompt title and the prompt itself via inputs, and can also receive the player’s response via an output pin.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Prompt Local Player",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Prompt Title",
+ "ReadonlyType": "string",
+ "Description": ""
+ },
+ {
+ "Name": "Prompt",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Complete",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Response",
+ "ReadonlyType": "string",
+ "Description": ""
+ },
+ {
+ "Name": "Failed",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "UI"
+ ]
+ }
+ ]
+ },
+ "d9096fb3-50c6-42f9-93bb-fc6df63d86a8": {
+ "ReadonlyName": "Quaternion Create Angle Axis",
+ "Description": "Creates a rotation which rotates \"Angle\" degrees around \"Axis\".",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Quaternion Create Angle Axis",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Angle",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Axis",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Quaternion"
+ ]
+ }
+ ]
+ },
+ "e320278c-13f0-4fe3-b838-7e671bdd9b49": {
+ "ReadonlyName": "Quaternion Create Euler Angles",
+ "Description": "Creates a quaternion from an input Vector3.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Quaternion Create Euler Angles",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Angles",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Quaternion"
+ ]
+ }
+ ]
+ },
+ "1069c5de-c7e3-40e0-bd90-52135873b36d": {
+ "ReadonlyName": "Quaternion Create From To",
+ "Description": "Creates a rotation which rotates from \"From\" to \"To\".",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Quaternion Create From To",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "From",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ },
+ {
+ "Name": "To",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Quaternion"
+ ]
+ }
+ ]
+ },
+ "b28f369d-6758-4afc-80e2-8f09ea1df125": {
+ "ReadonlyName": "Quaternion Create Look",
+ "Description": "Creates a rotation with the specified forward and upwards directions.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Quaternion Create Look",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Forward",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ },
+ {
+ "Name": "Upwards",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Quaternion"
+ ]
+ }
+ ]
+ },
+ "cff17d2a-4333-41da-81ac-2825f25bf819": {
+ "ReadonlyName": "Quaternion Create",
+ "Description": "Manually create a quaternion. Congratulations, you have reached peak math.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Quaternion Create",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "X",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Y",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Z",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "W",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Quaternion",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Quaternion"
+ ]
+ }
+ ]
+ },
+ "268d931e-172b-48e8-8eb8-8ec2a9614f0d": {
+ "ReadonlyName": "Quaternion Dot",
+ "Description": "The dot product between two rotations.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Quaternion Dot",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Lhs",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ },
+ {
+ "Name": "Rhs",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Quaternion"
+ ]
+ }
+ ]
+ },
+ "81048ea5-2778-4816-99c5-1c50faad8a87": {
+ "ReadonlyName": "Quaternion Euler Angles",
+ "Description": "Outputs the input quaternion as a vector3.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Quaternion Euler Angles",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Quaternion"
+ ]
+ }
+ ]
+ },
+ "b415c3ce-5f9f-472b-8d70-daeb728b7c2d": {
+ "ReadonlyName": "Quaternion Get Angle Axis",
+ "Description": "Gets the rotation which rotates angle degrees around axis.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Quaternion Get Angle Axis",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Quaternion",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Angle",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Axis",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Quaternion"
+ ]
+ }
+ ]
+ },
+ "2097bef3-9ed1-4601-ab5d-f620654bd1c4": {
+ "ReadonlyName": "Quaternion Inverse",
+ "Description": "Outputs the Inverse of rotation.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Quaternion Inverse",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Quaternion"
+ ]
+ }
+ ]
+ },
+ "18a980ff-9a46-472c-b658-96bf42eb61c2": {
+ "ReadonlyName": "Quaternion Variable",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [
+ {
+ "Name": "Variable (Quaternion)",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Variable",
+ "Primitive"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Math",
+ "Quaternion"
+ ]
+ }
+ ]
+ },
+ "8157b896-fce8-45fc-957a-4407f0d6c42a": {
+ "ReadonlyName": "Quaternion Normalize",
+ "Description": "Outputs the input quaternion with the same rotation but with a magnitude of 1.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Quaternion Normalize",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Quaternion"
+ ]
+ }
+ ]
+ },
+ "edfe7cbb-6973-4489-9b7a-75746243dd6d": {
+ "ReadonlyName": "Quaternion Rotate Towards",
+ "Description": "Rotates a rotation from \"From\" towards \"To\".",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Quaternion Rotate Towards",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "From",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ },
+ {
+ "Name": "To",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ },
+ {
+ "Name": "MaxDegreesDelta",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Quaternion"
+ ]
+ }
+ ]
+ },
+ "02c4048a-5f67-47ea-9f00-692f51c66e65": {
+ "ReadonlyName": "Rotate Vector",
+ "Description": "Rotate a Vector3 with a Quaternion.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Rotate Vector",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Rotation",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ },
+ {
+ "Name": "Point",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Quaternion"
+ ]
+ }
+ ]
+ },
+ "8d5f0586-1ecf-42ba-a34f-c6ccbb0eadb9": {
+ "ReadonlyName": "Quaternion Slerp",
+ "Description": "Spherically interpolates between quaternions \"Start\" and \"End\". Progress is 0 to 1. Also a rare, but refreshing beverage.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Quaternion Slerp",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Start",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ },
+ {
+ "Name": "End",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ },
+ {
+ "Name": "Progress",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Quaternion"
+ ]
+ }
+ ]
+ },
+ "1d2a37e1-428e-4385-bc96-4ad5adff0a05": {
+ "ReadonlyName": "Quaternion Split",
+ "Description": "Split a quaternion into its four float components: x, y, z, and w. Congratulations, you have reached peak math.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Quaternion Split",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Quaternion",
+ "ReadonlyType": "Quaternion",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "X",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Y",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Z",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "W",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Quaternion"
+ ]
+ }
+ ]
+ },
+ "4ecbf247-ab14-4f9e-8094-e40a45d283e6": {
+ "ReadonlyName": "Random Float",
+ "Description": "Generates a random float from [\"Min\" to \"Max\"]. \"Min\" is inclusive, and \"Max\" is also inclusive. For example with a \"Min\" of 0 and a \"Max\" of 1, both 0 and 1 have the possibility of getting output because they are both included in the range.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Random Float",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Min (Inclusive)",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Max (Inclusive)",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Scalar"
+ ]
+ }
+ ]
+ },
+ "0b18cef3-0ea5-4e3c-a0d5-c460f03dbe8c": {
+ "ReadonlyName": "Random From List",
+ "Description": "Outputs a random value from a target list.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Random From List",
+ "ReadonlyTypeParams": {
+ "T": "any"
+ },
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "List",
+ "ReadonlyType": "List<T>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Utilities"
+ ]
+ }
+ ]
+ },
+ "fb2645f0-4042-4ef1-b988-af2f80e651ec": {
+ "ReadonlyName": "Random Int",
+ "Description": "Generates a random integer from [\"Min\" to \"Max\"]. \"Min\" is inclusive, and \"Max\" is also inclusive. For example with a \"Min\" of 0 and a \"Max\" of 1, 0 and 1 will have a chance of being output.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Random Int",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Min (Inclusive)",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "Max (Inclusive)",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Scalar"
+ ]
+ }
+ ]
+ },
+ "af203a1f-f3c9-479b-86f0-72224b094179": {
+ "ReadonlyName": "Raycast",
+ "Description": "Fires an invisible ray from the \"Start Position\", in the \"Direction\" specified. Returns True if any object or player is hit within the target \"Max Distance\". Otherwise, returns False. You can configure the chip itself to ignore players or objects specifically.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Raycast",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Start Position",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ },
+ {
+ "Name": "Direction",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ },
+ {
+ "Name": "Max Distance (m)",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Hit",
+ "ReadonlyType": "bool",
+ "Description": ""
+ },
+ {
+ "Name": "Player",
+ "ReadonlyType": "Player",
+ "Description": ""
+ },
+ {
+ "Name": "Object",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ },
+ {
+ "Name": "Distance",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Hit Position",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ },
+ {
+ "Name": "Surface Normal",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "f8db4ba2-7380-49a0-a0ba-bcdca11fec96": {
+ "ReadonlyName": "Reroute",
+ "Description": "Used to remove spaghetti from your creations. Consumes additional CPU heat.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [
+ {
+ "Name": "",
+ "ReadonlyTypeParams": {
+ "T": "any"
+ },
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Commonly Used"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Utilities"
+ ]
+ }
+ ]
+ },
+ "6ba175cf-493a-4790-b916-57259f94cd98": {
+ "ReadonlyName": "Rec Room Object Reset",
+ "Description": "Resets an object.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Rec Room Object Reset",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Object",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Reset Object",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Rec Room Object"
+ ]
+ }
+ ]
+ },
+ "e921b08d-10c2-4be4-86fe-b8c7155cb97b": {
+ "ReadonlyName": "Reset Room",
+ "Description": "Resets the Room.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Reset Room",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ],
+ "Outputs": []
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Utilities"
+ ]
+ }
+ ]
+ },
+ "5898c7f7-cb5d-4344-a194-bd09260b12dd": {
+ "ReadonlyName": "Respawn",
+ "Description": "Sets the position and rotation of the target player or object. Will fail in the following cases: If the target object is currently held, selected/frozen by the maker pen, or is the child of a gizmo. Will also fail on players that are seated.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Respawn",
+ "ReadonlyTypeParams": {
+ "T": "(Player | Rec Room Object)",
+ "U": "(Vector3 | Quaternion)"
+ },
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "T",
+ "Description": ""
+ },
+ {
+ "Name": "Position",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ },
+ {
+ "Name": "Rotation",
+ "ReadonlyType": "U",
+ "Description": ""
+ },
+ {
+ "Name": "Spawn Radius",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Clear Velocity",
+ "ReadonlyType": "bool",
+ "Description": ""
+ },
+ {
+ "Name": "Use Rez Effects",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Failed",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Physics"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Object",
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "117b8c83-5ada-4665-a0c6-2c6ffdec98b9": {
+ "ReadonlyName": "Rotator Get Target Rotation",
+ "Description": "Outputs the rotation of the Marker on the target Rotator.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Rotator Get Target Rotation",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Rotator",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Rotator"
+ ]
+ }
+ ]
+ },
+ "2d96da47-4d37-4463-a3bd-8f8cd2ab0c58": {
+ "ReadonlyName": "Rotator Get Rotation Acceleration",
+ "Description": "Outputs the acceleration of a target Rotator.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Rotator Get Rotation Acceleration",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Rotator",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Rotator"
+ ]
+ }
+ ]
+ },
+ "30fe0829-2f08-4bd2-b4b1-9a41764e5a76": {
+ "ReadonlyName": "Rotator Get Rotation",
+ "Description": "Outputs the rotation of a target Rotator in degrees.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Rotator Get Rotation",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Rotator",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Rotator"
+ ]
+ }
+ ]
+ },
+ "be834de9-91cb-4588-8988-3a6abfd56573": {
+ "ReadonlyName": "Rotator Get Rotation Speed",
+ "Description": "Outputs the speed of a target Rotator.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Rotator Get Rotation Speed",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Rotator",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Rotator"
+ ]
+ }
+ ]
+ },
+ "0f9da436-0752-422d-8323-fa445a9ca06b": {
+ "ReadonlyName": "Rotator Set Target Rotation",
+ "Description": "Sets the rotation of the Marker on a target Rotator.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Rotator Set Target Rotation",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Rotator",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Rotator"
+ ]
+ }
+ ]
+ },
+ "db29fd41-9fb5-4c2a-8c72-c8d327b0f23f": {
+ "ReadonlyName": "Rotator Set Rotation Acceleration",
+ "Description": "Sets the acceleration of a target Rotator.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Rotator Set Rotation Acceleration",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Rotator",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Rotator"
+ ]
+ }
+ ]
+ },
+ "07ae26b8-e0d7-49c0-bb2c-25d66d31fe3c": {
+ "ReadonlyName": "Rotator Set Rotation",
+ "Description": "Sets the rotation of a target Rotator.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Rotator Set Rotation",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Rotator",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Rotator"
+ ]
+ }
+ ]
+ },
+ "9d0e3cf5-581d-4fb5-8346-c9e7d9877b3f": {
+ "ReadonlyName": "Rotator Set Rotation Speed",
+ "Description": "Sets the speed of a target Rotator.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Rotator Set Rotation Speed",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Rotator",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Rotator"
+ ]
+ }
+ ]
+ },
+ "c6cfe49a-4ffb-4714-9564-8ddda0300676": {
+ "ReadonlyName": "Round",
+ "Description": "Rounds the input float to the nearest integral value.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Round",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Scalar"
+ ]
+ }
+ ]
+ },
+ "0d2a4771-0694-4b84-8e07-2080c26aae22": {
+ "ReadonlyName": "Round to Int",
+ "Description": "Rounds an input value to the nearest integer.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Round to Int",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Scalar"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Conversion"
+ ]
+ }
+ ]
+ },
+ "7fc01b3a-3f44-4cf1-ad2d-d5898fb35f4d": {
+ "ReadonlyName": "Seat Get Seated Player",
+ "Description": "Outputs the currently seated player of a target Seat.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Seat Get Seated Player",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Seat",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Player",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Seats"
+ ]
+ }
+ ]
+ },
+ "af071963-a0df-422e-8372-e561336921db": {
+ "ReadonlyName": "Seat Set Lock Players In",
+ "Description": "Prevents a Seated player from unseating themselves on a target Seat. Use circuits to unseat or unlock.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Seat Set Lock Players In",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Seat",
+ "Description": ""
+ },
+ {
+ "Name": "Lock Players In",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Seats"
+ ]
+ }
+ ]
+ },
+ "face947c-8ac1-4d8e-8318-e7ec98bf466d": {
+ "ReadonlyName": "Seat Set Lock Players Out",
+ "Description": "Prevents players from sitting in a target seat.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Seat Set Lock Players Out",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Seat",
+ "Description": ""
+ },
+ {
+ "Name": "Lock Players Out",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Seats"
+ ]
+ }
+ ]
+ },
+ "d652ebe5-1367-44ed-a352-1e5ab84c32b0": {
+ "ReadonlyName": "Seat Set Seated Player",
+ "Description": "Seats an input player on a target Seat.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Seat Set Seated Player",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Seat",
+ "Description": ""
+ },
+ {
+ "Name": "Player",
+ "ReadonlyType": "Player",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Success",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Fail",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Seats"
+ ]
+ }
+ ]
+ },
+ "70b682f5-5744-4a6a-beaa-a9dcd40066b6": {
+ "ReadonlyName": "Seat Unseat Player",
+ "Description": "Unseats a currently seated player on a target Seat.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Seat Unseat Player",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Seat",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Seats"
+ ]
+ }
+ ]
+ },
+ "3d7d40d6-885a-4fa5-bbaa-b19057291ddb": {
+ "ReadonlyName": "Self",
+ "Description": "Outputs the object of the current context. For example, a self node inside a light outputs that specific light of the light type. This can only be placed inside an object board of a specific object or a player or object definition board.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Self",
+ "ReadonlyTypeParams": {},
+ "Inputs": [],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Utilities"
+ ]
+ }
+ ]
+ },
+ "88daacc5-7652-4d3a-b505-ba256ce3fd9d": {
+ "ReadonlyName": "List Set Element",
+ "Description": "Sets a value at a location in a list.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "List Set Element",
+ "ReadonlyTypeParams": {
+ "T": "any"
+ },
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "List",
+ "ReadonlyType": "List<T>",
+ "Description": ""
+ },
+ {
+ "Name": "Index",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "List",
+ "Core"
+ ]
+ }
+ ]
+ },
+ "57a1553a-ba24-4422-903a-e610a03e7994": {
+ "ReadonlyName": "Leaderboard Set Local Player Stat",
+ "Description": "Set leaderboard stat for the local player on stat channel 1, 2 or 3.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Leaderboard Set Local Player Stat",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Channel",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Leaderboard"
+ ]
+ }
+ ]
+ },
+ "ff1c2a15-4099-4aaa-afe3-c217b2fca15b": {
+ "ReadonlyName": "Set Position",
+ "Description": "Sets the position of the target player or object. Will fail in the following cases: If the target object is currently held, select/frozen by the maker pen, or is the child of a gizmo. Will also fail on players that are seated.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Set Position",
+ "ReadonlyTypeParams": {
+ "T": "(Player | Rec Room Object)"
+ },
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "T",
+ "Description": ""
+ },
+ {
+ "Name": "Position",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Failed",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "Physics"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Object",
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "aaf39143-c5dc-47cd-ad85-c659c3035cab": {
+ "ReadonlyName": "SFX Get Volume",
+ "Description": "Outputs the volume of an SFX object.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "SFX Get Volume",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "SFX",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "SFX"
+ ]
+ }
+ ]
+ },
+ "a0a17fe1-bdb0-4687-81de-141ce97710ed": {
+ "ReadonlyName": "SFX Get Is Playing",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "SFX Get Is Playing",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "SFX",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "SFX"
+ ]
+ }
+ ]
+ },
+ "5f8991bb-d1b8-4c74-a54a-86e7033b53a0": {
+ "ReadonlyName": "SFX Play",
+ "Description": "Plays a sound from an SFX object.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "SFX Play",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "SFX",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "SFX"
+ ]
+ }
+ ]
+ },
+ "d2df4993-d858-4df1-aca2-fc0e7f479668": {
+ "ReadonlyName": "SFX Set Volume",
+ "Description": "Sets the volume for an SFX object.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "SFX Set Volume",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "SFX",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "SFX"
+ ]
+ }
+ ]
+ },
+ "3ad57fda-1fab-4b00-81b3-71d61af37c65": {
+ "ReadonlyName": "SFX Stop",
+ "Description": "Stops the sound currently playing from an SFX object.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "SFX Stop",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "SFX",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "SFX"
+ ]
+ }
+ ]
+ },
+ "61bc2310-69f5-4dfa-b43c-12ae98dd05ab": {
+ "ReadonlyName": "Show Notification",
+ "Description": "Prints the input notification to a player's screen if the node is run on a player's machine.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Show Notification",
+ "ReadonlyTypeParams": {
+ "T": "any"
+ },
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "UI"
+ ]
+ }
+ ]
+ },
+ "abaae687-e943-4534-bb78-2c8d7e17c425": {
+ "ReadonlyName": "Show Local Subtitle",
+ "Description": "Displays a subtitle for a specified duration. If there is already a subtitle showing, it will be replaced only if this subtitle has an equal or higher priority. If the string is more than 200 characters, it will be displayed in multiple subtitles, each lasting a fraction of the total duration. Escape characters are ignored.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Show Local Subtitle",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Subtitle",
+ "ReadonlyType": "string",
+ "Description": ""
+ },
+ {
+ "Name": "Duration",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Priority",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Player",
+ "UI"
+ ]
+ }
+ ]
+ },
+ "ea824326-5061-411d-980c-30031511c821": {
+ "ReadonlyName": "Sin",
+ "Description": "Computes the sine of a number.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Sin",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Trigonometry"
+ ]
+ }
+ ]
+ },
+ "6a669e6e-4ebf-434c-9c23-d2b769d49b47": {
+ "ReadonlyName": "Spawner Reset",
+ "Description": "",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Spawner Reset",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Spawner"
+ ]
+ }
+ ]
+ },
+ "fb6a63b1-3f55-4dcf-9bf0-6ef82e3296d5": {
+ "ReadonlyName": "Spawner Internal Start Spawning",
+ "Description": "",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Spawner Internal Start Spawning",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Spawner",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ },
+ {
+ "Name": "Amount of objects to spawn",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "Time between spawns",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Spawn Position",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Spawner"
+ ]
+ }
+ ]
+ },
+ "0ea23792-e987-459e-8cd7-c0c60f667e08": {
+ "ReadonlyName": "Spherecast",
+ "Description": "Fires an invisible sphere of the specified Radius from the Start Position, in the Direction specified. Returns true if any object or player is hit within the target Max Distance. Otherwise, returns false. You can configure the chip itself to ignore players or objects specifically.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Spherecast",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Start Position",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ },
+ {
+ "Name": "Radius",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Direction",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ },
+ {
+ "Name": "Max Distance (m)",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Hit",
+ "ReadonlyType": "bool",
+ "Description": ""
+ },
+ {
+ "Name": "Player",
+ "ReadonlyType": "Player",
+ "Description": ""
+ },
+ {
+ "Name": "Object",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ },
+ {
+ "Name": "Distance",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Hit Position",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ },
+ {
+ "Name": "Surface Normal",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Physics"
+ ]
+ }
+ ]
+ },
+ "aa24edab-c707-4cff-8c73-07e479b4cd07": {
+ "ReadonlyName": "String Contains",
+ "Description": "Outputs True if the target string contains the input value.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "String Contains",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "String",
+ "ReadonlyType": "string",
+ "Description": ""
+ },
+ {
+ "Name": "Sequence",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "String"
+ ]
+ }
+ ]
+ },
+ "77afc9dd-baa9-4312-b8b8-7ef479c840e6": {
+ "ReadonlyName": "String Format",
+ "Description": "Use this chip to combine multiple strings together into a single string output. The \"Format\" input is part of final string output and can include other string inputs by using this syntax: {input pin # starting at 0}. For example, a \"Format\" input with a default value of “Hello, {0}!” with a single additional input pin with the value \"World\" is fully output as \"Hello, World!\". If you had another input pin you would use {1} to denote the 2nd pin. You can add more string inputs by configuring the chip and pressing \"Add Input\".",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "String Format",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Format",
+ "ReadonlyType": "string",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "String"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Commonly Used"
+ ]
+ }
+ ]
+ },
+ "dcde9345-00f2-41fb-9a2d-5a938f39bfb5": {
+ "ReadonlyName": "String Length",
+ "Description": "Outputs the length of a target string in UTF-16 characters.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "String Length",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "String",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Length",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "String"
+ ]
+ }
+ ]
+ },
+ "66b6ea20-9a00-4f80-9636-2cfb676b3965": {
+ "ReadonlyName": "string Variable",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [
+ {
+ "Name": "Variable (string)",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Variable",
+ "Primitive"
+ ]
+ },
+ {
+ "FilterPath": [
+ "String"
+ ]
+ }
+ ]
+ },
+ "ad169649-1050-48c5-a540-f03a2059bcdb": {
+ "ReadonlyName": "String Split",
+ "Description": "Splits the target string at the input character.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "String Split",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "String",
+ "ReadonlyType": "string",
+ "Description": ""
+ },
+ {
+ "Name": "Divider",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "List",
+ "ReadonlyType": "List<string>",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "String"
+ ]
+ }
+ ]
+ },
+ "6b92c345-e6bc-40d9-aae9-4754e634777c": {
+ "ReadonlyName": "String Split At Index",
+ "Description": "Splits the target string in two at the input index.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "String Split At Index",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "String",
+ "ReadonlyType": "string",
+ "Description": ""
+ },
+ {
+ "Name": "Index",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "List",
+ "ReadonlyType": "List<string>",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "String"
+ ]
+ }
+ ]
+ },
+ "1af21999-38f8-4231-9de9-26b43f47fe0d": {
+ "ReadonlyName": "String Index Of",
+ "Description": "Outputs the index where the substring starts in the target string.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "String Index Of",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "String",
+ "ReadonlyType": "string",
+ "Description": ""
+ },
+ {
+ "Name": "Substring",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Index",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "String"
+ ]
+ }
+ ]
+ },
+ "678f6d33-1e94-4be6-b959-0212c1a2207f": {
+ "ReadonlyName": "String To Lower",
+ "Description": "Outputs the target string in lower case.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "String To Lower",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "String",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "String"
+ ]
+ }
+ ]
+ },
+ "8f5995c7-5af0-4064-9cb7-2b80d75d157f": {
+ "ReadonlyName": "String To Upper",
+ "Description": "Outputs the target string in upper case.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "String To Upper",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "String",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "String"
+ ]
+ }
+ ]
+ },
+ "226fafe2-1ea8-4ae8-861e-ae4b1bd10bfe": {
+ "ReadonlyName": "String Substring",
+ "Description": "Allows you to extract individual parts from a string. You can think of this like a list of characters.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "String Substring",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "String",
+ "ReadonlyType": "string",
+ "Description": ""
+ },
+ {
+ "Name": "Index",
+ "ReadonlyType": "int",
+ "Description": ""
+ },
+ {
+ "Name": "Length",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "String"
+ ]
+ }
+ ]
+ },
+ "1fbb364c-1af0-44bb-a82b-905caeb6819a": {
+ "ReadonlyName": "Subtract",
+ "Description": "Takes one input value away from the other.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Subtract",
+ "ReadonlyTypeParams": {
+ "T": "(int | float | Vector3)"
+ },
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Difference",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Scalar"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Math",
+ "Vector"
+ ]
+ }
+ ]
+ },
+ "13dbbd78-11c0-4b4f-9098-1ef59e584324": {
+ "ReadonlyName": "Tan",
+ "Description": "Computes the tangent of a number.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Tan",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Trigonometry"
+ ]
+ }
+ ]
+ },
+ "3e8fbb88-3179-4a4c-9f8f-d9c2db35b9b5": {
+ "ReadonlyName": "Text Get Text",
+ "Description": "Outputs the visible text for a Text object.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Text Get Text",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Text",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Text",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Text"
+ ]
+ }
+ ]
+ },
+ "20b2528d-96a9-4be8-9782-aa75959f5232": {
+ "ReadonlyName": "Text Set Color",
+ "Description": "Sets the color for a Text object.",
+ "IsBetaChip": false,
+ "DeprecationStage": 1,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Text Set Color",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Text",
+ "Description": ""
+ },
+ {
+ "Name": "Color",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Text"
+ ]
+ }
+ ]
+ },
+ "0bfaa337-46a1-472f-beac-12faa21867d4": {
+ "ReadonlyName": "Text Set Color V2",
+ "Description": "Sets the color for a Text Component",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Text Set Color V2",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Text",
+ "Description": ""
+ },
+ {
+ "Name": "Color",
+ "ReadonlyType": "Color",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Text"
+ ]
+ }
+ ]
+ },
+ "ef6fcf56-1b3f-42bc-af50-019ff0a9cfc5": {
+ "ReadonlyName": "Text Set Material",
+ "Description": "Sets the material for a Text object.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Text Set Material",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Text",
+ "Description": ""
+ },
+ {
+ "Name": "Material",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Text"
+ ]
+ }
+ ]
+ },
+ "c941f3a3-d3f6-49cc-a6a4-b7a4e95fd173": {
+ "ReadonlyName": "Text Set Text",
+ "Description": "Set the visible text for a Text object.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Text Set Text",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Text",
+ "Description": ""
+ },
+ {
+ "Name": "Text",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Text"
+ ]
+ }
+ ]
+ },
+ "75a3a9c2-da17-4762-b87b-1735b44af659": {
+ "ReadonlyName": "To Combatant",
+ "Description": "Covert a player or an AI value into a Combatant value.",
+ "IsBetaChip": true,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "To Combatant",
+ "ReadonlyTypeParams": {
+ "T": "(AI | Player)"
+ },
+ "Inputs": [
+ {
+ "Name": "Player or AI",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Combatant",
+ "ReadonlyType": "Combatant",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Combatant"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Conversion"
+ ]
+ }
+ ]
+ },
+ "315a494e-84cc-4e3c-acff-389bb932b5d0": {
+ "ReadonlyName": "To Rec Room Object",
+ "Description": "Casts a target specific object to a Rec Room Object.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "To Rec Room Object",
+ "ReadonlyTypeParams": {
+ "T": "Rec Room Object"
+ },
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Rec Room Object",
+ "ReadonlyType": "Rec Room Object",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Rec Room Object"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Conversion"
+ ]
+ }
+ ]
+ },
+ "f8a9cb84-dcb1-4a12-ae29-4d7711e14506": {
+ "ReadonlyName": "Toggle Button Get Is Pressed",
+ "Description": "Outputs True if the toggle button is pressed.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Toggle Button Get Is Pressed",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Toggle Button",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Is Pressed",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Toggle Button"
+ ]
+ }
+ ]
+ },
+ "fdfb3857-3d13-4d66-9a05-f88586e9f821": {
+ "ReadonlyName": "Toggle Button Set Is Pressed",
+ "Description": "Sets a Toggle Button state to pressed.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Toggle Button Set Is Pressed",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Toggle Button",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Toggle Button"
+ ]
+ }
+ ]
+ },
+ "74e81edb-84bd-4e52-b2f3-a73a62a6b3aa": {
+ "ReadonlyName": "To String",
+ "Description": "Converts the input value to the string type. Example: the integer input 10 would output \"10\" as a string. Helpful for debugging purposes.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "To String",
+ "ReadonlyTypeParams": {
+ "T": "any"
+ },
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result ",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Utilities"
+ ]
+ },
+ {
+ "FilterPath": [
+ "String"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Commonly Used"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Conversion"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Player",
+ "Name"
+ ]
+ }
+ ]
+ },
+ "b309c032-1bcd-4ca1-83cf-b8871e65fb16": {
+ "ReadonlyName": "Trigger Handle Get Primary Action Held",
+ "Description": "True if the primary action button is down; otherwise, False.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Trigger Handle Get Primary Action Held",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Trigger Handle",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Is Held",
+ "ReadonlyType": "bool",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Trigger Handle"
+ ]
+ }
+ ]
+ },
+ "b49c4e16-93c5-45c3-b457-fb960c661bc5": {
+ "ReadonlyName": "Trigger Volume Get Filter Role",
+ "Description": "Gets the role name that is being used as a filter for a Trigger Volume.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Trigger Volume Get Filter Role",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Trigger Volume",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Trigger Volume"
+ ]
+ }
+ ]
+ },
+ "8f42f9b7-87fb-4f4b-9160-a45baf269650": {
+ "ReadonlyName": "Trigger Volume Get Filter Tags",
+ "Description": "Gets the tags that are being used as a filter for a Trigger Volume.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Trigger Volume Get Filter Tags",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Trigger Volume",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "List<string>",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Trigger Volume"
+ ]
+ }
+ ]
+ },
+ "338c7e0a-fa55-49e1-91e8-1609d00f1fd0": {
+ "ReadonlyName": "Trigger Volume Get Object Count",
+ "Description": "Gets the number of objects currently inside a Trigger Volume. This is not synchronized with the Trigger Volume's events!",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Trigger Volume Get Object Count",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Trigger Volume",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Trigger Volume"
+ ]
+ }
+ ]
+ },
+ "4cbe661b-7053-4c19-9ccf-1600c7a41016": {
+ "ReadonlyName": "Trigger Volume Get Player Count",
+ "Description": "Gets the number of players currently inside a Trigger Volume. This is not synchronized with the Trigger Volume's events!",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Trigger Volume Get Player Count",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Trigger Volume",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "int",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Trigger Volume"
+ ]
+ }
+ ]
+ },
+ "530932a7-8781-4b09-a945-b33af6675809": {
+ "ReadonlyName": "Trigger Volume Get Objects",
+ "Description": "Gets all of the objects currently inside a Trigger Volume. This is not synchronized with the Trigger Volume's events!",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Trigger Volume Get Objects",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Trigger Volume",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "List<Rec Room Object>",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Trigger Volume"
+ ]
+ }
+ ]
+ },
+ "4c23af85-e05c-4be7-a708-c2f0cc67ebec": {
+ "ReadonlyName": "Trigger Volume Get Players",
+ "Description": "Gets all of the players currently inside a Trigger Volume. This is not synchronized with the Trigger Volume's events!",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Trigger Volume Get Players",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Target",
+ "ReadonlyType": "Trigger Volume",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "List<Player>",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Trigger Volume"
+ ]
+ }
+ ]
+ },
+ "55cfecf9-2623-4aad-948c-6ca89f11911b": {
+ "ReadonlyName": "Trigger Volume Set Filter Role",
+ "Description": "Sets the role name that is being used as a filter for a Trigger Volume.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Trigger Volume Set Filter Role",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Trigger Volume",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "string",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Trigger Volume"
+ ]
+ }
+ ]
+ },
+ "6668fd38-076e-4d03-b9a1-02eca5edd0b7": {
+ "ReadonlyName": "Trigger Volume Set Filter Tags",
+ "Description": "Sets the tags that are being used as a filter for a Trigger Volume. An object is considered by the Trigger Volume, if it has any of the tags in this list.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Trigger Volume Set Filter Tags",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "Target",
+ "ReadonlyType": "Trigger Volume",
+ "Description": ""
+ },
+ {
+ "Name": "Value",
+ "ReadonlyType": "List<string>",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Trigger Volume"
+ ]
+ }
+ ]
+ },
+ "6bd92538-6889-41f3-b819-9511e6f81944": {
+ "ReadonlyName": "Vector3 Cross",
+ "Description": "The cross product of two vectors results in a third vector which is perpendicular to the two input vectors.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Vector3 Cross",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Lhs",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ },
+ {
+ "Name": "Rhs",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Vector"
+ ]
+ }
+ ]
+ },
+ "498c4e25-f73b-49a6-912e-ae148ed50dca": {
+ "ReadonlyName": "Vector3 Dot",
+ "Description": "Computes the dot product. Commonly used to determine if the camera is facing a particular direction.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Vector3 Dot",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Lhs",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ },
+ {
+ "Name": "Rhs",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Vector"
+ ]
+ }
+ ]
+ },
+ "fba2accf-44e2-412d-a204-ae3bd04f7dfa": {
+ "ReadonlyName": "Vector3 Variable",
+ "Description": "",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 1,
+ "NodeDescs": [
+ {
+ "Name": "Variable (Vector3)",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "",
+ "ReadonlyType": "exec",
+ "Description": ""
+ },
+ {
+ "Name": "",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Variable",
+ "Primitive"
+ ]
+ },
+ {
+ "FilterPath": [
+ "Math",
+ "Vector"
+ ]
+ }
+ ]
+ },
+ "92ded211-17d6-4c73-b29c-71323c6a40ee": {
+ "ReadonlyName": "Vector3 Normalize",
+ "Description": "Outputs the target vector, but its magnitude is 1.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Vector3 Normalize",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Vector"
+ ]
+ }
+ ]
+ },
+ "87aa17b1-7760-4b07-8c44-a2d530590597": {
+ "ReadonlyName": "Vector3 Scale",
+ "Description": "Multiplies a vector by a scalar.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Vector3 Scale",
+ "ReadonlyTypeParams": {
+ "T": "(int | float)"
+ },
+ "Inputs": [
+ {
+ "Name": "Value",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ },
+ {
+ "Name": "Scalar",
+ "ReadonlyType": "T",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Result",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Vector"
+ ]
+ }
+ ]
+ },
+ "814e9337-7542-4851-9da0-c73885ab0b4f": {
+ "ReadonlyName": "Vector3 Create",
+ "Description": "Creates a new vector from X, Y, Z values.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Vector3 Create",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "X",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Y",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Z",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Vector3",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Vector"
+ ]
+ }
+ ]
+ },
+ "74ba9189-2880-46fa-b4b0-3c9a7152489e": {
+ "ReadonlyName": "Vector Gadget Get Vector",
+ "Description": "Gets the direction and magnitude of the Vector Gadget.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Vector Gadget Get Vector",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Direction",
+ "ReadonlyType": "Vector Gadget",
+ "Description": ""
+ },
+ {
+ "Name": "Magnitude",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Vector",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Object",
+ "Vector Gadget"
+ ]
+ }
+ ]
+ },
+ "c3b9ba98-6c4a-44c2-9125-043314fba4a6": {
+ "ReadonlyName": "Vector Get Magnitude",
+ "Description": "Outputs the length of the input vector.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Vector Get Magnitude",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Vector3",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "Magnitude",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Vector"
+ ]
+ }
+ ]
+ },
+ "2d677241-61b7-45d2-aec2-4a302e3483a0": {
+ "ReadonlyName": "Vector3 Split",
+ "Description": "Breaks the X, Y, and Z values out of the input vector.",
+ "IsBetaChip": false,
+ "DeprecationStage": 0,
+ "NameSource": 0,
+ "NodeDescs": [
+ {
+ "Name": "Vector3 Split",
+ "ReadonlyTypeParams": {},
+ "Inputs": [
+ {
+ "Name": "Vector3",
+ "ReadonlyType": "Vector3",
+ "Description": ""
+ }
+ ],
+ "Outputs": [
+ {
+ "Name": "X",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Y",
+ "ReadonlyType": "float",
+ "Description": ""
+ },
+ {
+ "Name": "Z",
+ "ReadonlyType": "float",
+ "Description": ""
+ }
+ ]
+ }
+ ],
+ "NodeFilters": [
+ {
+ "FilterPath": [
+ "Math",
+ "Vector"
+ ]
+ }
+ ]
+ }
+ }
+} \ No newline at end of file
diff --git a/grapher/index.html b/grapher/index.html
new file mode 100644
index 0000000..e0990b7
--- /dev/null
+++ b/grapher/index.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<html lang="en-us">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width">
+ <meta name="description" content="A simple utility to help you make CV2 graphs, out-of-game.">
+ <meta name="author" content="@✨Aleteoryx✨#1027">
+ <title>CV2 Node Graph Generator</title>
+ <link crossorigin href="style.css" rel="stylesheet" type="text/css" />
+ <link crossorigin href="/chips.css" rel="stylesheet" type="text/css" />
+
+ <link crossorigin href="/util.js" rel="preload" as="script"/>
+ <link crossorigin href="/chips.js" rel="preload" as="script"/>
+ <link crossorigin href="script.js" rel="preload" as="script"/>
+ <link crossorigin href="/chips.css" rel="preload" as="style"/>
+ <link crossorigin href="style.css" rel="preload" as="style"/>
+ <link crossorigin href="/circuitsv2.json" rel="preload" as="fetch"/>
+ <link crossorigin href="https://raw.githubusercontent.com/tyleo-rec/CircuitsV2Resources/master/misc/circuitsv2.json" rel="preload" as="fetch"/>
+
+ <script crossorigin src="/util.js"></script>
+ <script crossorigin src="/chips.js"></script>
+ <script crossorigin src="script.js"></script>
+ <noscript><style> #searcher, #graph, #canvas { display: none } </style></noscript>
+ </head>
+ <body>
+ <noscript>
+ The chip grapher requires JavaScript to function.
+ If you cannot enable it here, you can try using tyleo's
+ <a href="https://www.figma.com/community/file/1070759222767700948">
+ figma templates
+ </a>, although those also need javascript.4
+ </noscript>
+ <details id="searchbox" open>
+ <summary></summary>
+ <iframe id="searcher" src="/"></iframe>
+ </details>
+ <div id="graph">
+
+ </div>
+ <canvas id="canvas"></canvas>
+ <details id="helpbox">
+ <summary>?</summary>
+ <div>
+ <!-- Unused tabbing system. Ignore.
+ <input type="radio" name="test" class="selecttab" checked/>
+ <p class="tab">text for button 1</p>
+ <input type="radio" name="test" class="selecttab"/>
+ <p class="tab">text for button 2</p>
+ <input type="radio" name="test" class="selecttab"/>
+ <p class="tab">text for button 3</p>
+ <input type="radio" name="test" class="selecttab"/>
+ <p class="tab">text for button 4</p>-->
+ <h2>The Basics</h2>
+ <hr/>
+ <p>The chip grapher is a simple program.
+ To get started, use the searcher sidebar to find a chip you want to add.
+ That sidebar is just an embedded version of the main searcher, and all
+ behavior is the same. To learn more, press the '?' button on the sidebar.
+ Once you've decided on a chip, press the '+' button next to it to add it
+ to the graph.</p>
+ <h3>Interacting with existing chips</h3>
+ <hr/>
+ <p>Chips suppport various operations.</p>
+ <h4>Wiring</h4>
+ <hr/>
+ <p>To wire 2 ports to one another, simply click and drag to a port of the same type.
+ All input data ports have a maximum of one connection, as do output execs.
+ To disconnect a wire, simply click on the end with a maxiumum of one connection.
+ </p>
+ <h4>Selecting</h4>
+ <hr>
+ <p>To select a chip, just click on it. If the threshold is too fast, shoot me a message on discord.</p>
+ <h4>Deleting</h4>
+ <hr>
+ <p>Once a chip is selected, press the <kbd>Delete</kbd> key to delete it.</p>
+ <h4>Type Selection</h4>
+ <hr>
+ <p>Some chips have a type union on a port. You can see this union by hovering over any white port.
+ When a chip with a type union is selected, drop down menus will appear to set the actual type.
+ Setting it will unwire all connections to the chip, so be sure to set it first thing!
+ </p>
+ </div>
+ </details>
+
+ </body>
+</html> \ No newline at end of file
diff --git a/grapher/script.js b/grapher/script.js
new file mode 100644
index 0000000..6057220
--- /dev/null
+++ b/grapher/script.js
@@ -0,0 +1,288 @@
+var v2data;
+var graph;
+var searcher;
+const rootel = document.documentElement;
+
+const chips = [];
+
+/*
+[
+ {
+ i: func() -> {x:Number, y:Number} | <div>,
+ o: func() -> {x:Number, y:Number} | <div>
+ }
+]
+*/
+const connections = [];
+
+var mode;
+var targ;
+var start;
+var wirestate;
+const lastmp = {x:0,y:0};
+
+const graphPos = {x:0,y:0};
+
+var canvas,ctx;
+
+const allTypes = [];
+
+function switchID(el, id) {
+ const old = document.getElementById(id);
+ if (old instanceof Element) old.id = '';
+ if (el instanceof Element) el .id = id;
+}
+
+function remtopx(value) {return value * parseFloat( getComputedStyle( document.documentElement ).fontSize )}
+
+function renderCurveBetweenPorts(outx, outy, inx, iny) {
+ var dist = (((outx - inx) ** 2) + ((outy - iny) ** 2)) ** 0.5;
+ var heightOfCurve = Math.abs(iny - outy);
+ var widthOfCurve = Math.abs(inx - outx);
+ var halfWidth = (inx - outx)/2;
+
+ var cpbasex = (Math.abs((widthOfCurve * 2) / dist * 10) + 60) * (heightOfCurve / 150)**0.8;
+
+ var cp1x = outx + cpbasex;
+ var cp2x = inx - cpbasex;
+
+ //point(cp1x, outy);
+ //point(cp2x, iny);
+ //point(inx - outx, outy);
+
+ ctx.beginPath();
+ ctx.moveTo(outx,outy);
+ ctx.bezierCurveTo(cp1x, outy, cp2x, iny, inx, iny);
+ ctx.moveTo(outx,outy);
+ ctx.closePath();
+ ctx.lineWidth = 5;
+ ctx.stroke();
+}
+
+function appendTypeUI(chip) {
+ const data = [];
+
+ for(const key of Object.keys(chip.typeInfo)) {
+ data.push(`${key}: `);
+ let m = newEl('select', 'typeSelect');
+ m.addEventListener('change', e => {
+ if (e.target.value) chip.currentOverrides[key] = e.target.value;
+ else delete chip.currentOverrides[key]
+
+ delConnections(chip.el.children[0].children[0]);
+ chip.el.children[0].children[0].remove();
+ chip.el.children[0].prepend(generateChipHTML(chip.nd, chip.currentOverrides));
+ });
+
+ for(const type of chip.typeInfo[key]) {
+ let opt = newEl('option');
+ opt.value = (type == chip.typeInfo[key][0]) ? '' : type;
+ opt.innerText = type;
+ m.appendChild(opt);
+ }
+ data.push(m, newEl('br'))
+ }
+
+ const ui = newEl('div', 'ui');
+ ui.append(...data);
+ chip.el.append(ui);
+}
+
+
+function delConnections(el) {
+ let tmp = connections.filter(con => !(((con.i instanceof Node) && el.contains(con.i)) ||
+ ((con.o instanceof Node) && el.contains(con.o)) ||
+ (con.i == el) || (con.i == el)));
+ connections.length = 0;
+ connections.push(...tmp);
+}
+
+window.onload = async function() {
+ graph = document.getElementById("graph");
+ searcher = document.getElementById("searcher");
+ v2data = await fetch(/*"https://raw.githubusercontent.com/tyleo-rec/CircuitsV2Resources/master/misc/circuitsv2.json"/*/"/circuitsv2.json")
+ .then(res => res.json());
+
+ allTypes.push(...ListAllTypes(v2data.Nodes).sort((a,b) => (a.toLowerCase() > b.toLowerCase()) ? 1 : -1));
+
+ window.onmessage = function({data}) {
+ if (data.type == 'newChip') {
+ const types = {};
+ const typeParams = v2data.Nodes[data.GUID].NodeDescs[0].ReadonlyTypeParams;
+ for (const desc of Object.keys(typeParams))
+ types[desc] = [
+ `${desc}: ${typeParams[desc]}`,
+ ...(typeParams[desc] == 'any' ? allTypes : typeParams[desc].match(/^\((.+)\)$/)[1].split(' | '))
+ ];
+
+ const ne = newEl('div', 'chipbox');
+ const chipcontainer = newEl('div', 'selUI');
+ chipcontainer.append(generateChipHTML(v2data.Nodes[data.GUID].NodeDescs));
+ ne.append(chipcontainer);
+ graph.append(ne);
+ const chip = {
+ el: ne,
+ typeInfo: types,
+ currentOverrides: [],
+ nd: v2data.Nodes[data.GUID].NodeDescs
+ };
+ appendTypeUI(chip);
+ chips.push(chip);
+ console.log(types);
+ }
+ }
+
+ graph.addEventListener('mousedown', function(e) {
+ if (e.button == 0) {
+ start = performance.now();
+ targ = e.target;
+ if (e.target.parentElement.matches('.input')) {
+ if (!e.target.matches('.exec')) delConnections(e.target);
+ mode = 'wire_i-o';
+ wirestate = {
+ i: e.target,
+ o: lastmp
+ };
+ connections.push(wirestate);
+ }
+
+ else if (e.target.parentElement.matches('.output')) {
+ if (e.target.matches('.exec')) delConnections(e.target);
+ mode = 'wire_o-i';
+ wirestate = {
+ i: lastmp,
+ o: e.target
+ };
+ connections.push(wirestate);
+ }
+
+ else if (targ = (
+ () => {
+ for (const node of chips) if (node.el.contains(e.target)) return node.el;
+ return false;
+ })()
+ )
+ mode = 'drag';
+
+ else if (e.target == graph) switchID(null, 'selected')
+ }
+ });
+
+ rootel.addEventListener("mouseup", e => {
+ if (e.button == 0) {
+ switch (mode) {
+ case 'wire_i-o':
+ if (e.target.matches('.exec')) delConnections(e.target);
+ wirestate.o = e.target;
+ if (!e.target.parentElement.matches('.output'))
+ connections.pop();
+ else if (wirestate.i.nextElementSibling.innerText != wirestate.o.nextElementSibling.innerText)
+ connections.pop();
+ break;
+ case 'wire_o-i':
+ if (!e.target.matches('.exec')) delConnections(e.target);
+ wirestate.i = e.target;
+ if (!e.target.parentElement.matches('.input'))
+ connections.pop();
+ else if (wirestate.i.nextElementSibling.innerText != wirestate.o.nextElementSibling.innerText)
+ connections.pop();
+ break;
+ case 'drag':
+ if ((performance.now() - start) < 150 && !targ.children[0].matches('#selected')) {
+ switchID(targ.children[0], 'selected')
+ }
+ break;
+ }
+ mode = null;
+ }
+ });
+
+ rootel.addEventListener("mousemove", e => {
+ if (e.buttons & 4) {
+ graphPos.x += e.clientX - lastmp.x;
+ graphPos.y += e.clientY - lastmp.y;
+ graph.style.setProperty('--graphOffsetX', graphPos.x);
+ graph.style.setProperty('--graphOffsetY', graphPos.y);
+ }
+ switch (mode) {
+ case 'drag':
+ let newchipx = Number(targ.style.getPropertyValue('--chipOffsetX')) + e.clientX - lastmp.x;
+ let newchipy = Number(targ.style.getPropertyValue('--chipOffsetY')) + e.clientY - lastmp.y;
+ targ.style.setProperty('--chipOffsetX', newchipx);
+ targ.style.setProperty('--chipOffsetY', newchipy);
+ break;
+ }
+ lastmp.x = e.clientX;
+ lastmp.y = e.clientY;
+ });
+
+
+ root.addEventListener("mousemove", e => {
+ root.style.setProperty('--mouse-x', (e.clientX - graphPos.x - searcher.clientWidth) + "px");
+ root.style.setProperty('--mouse-y', (e.clientY - graphPos.y) + "px");
+ });
+
+ function deleteSel() {
+ let sel = document.getElementById("selected").parentElement;
+ if (!sel) return;
+ delConnections(sel);
+ {
+ let tmp = chips.filter(chip => !(chip.el == sel));
+ chips.length = 0;
+ chips.push(...tmp);
+ }
+ sel.remove();
+ }
+
+ root.addEventListener("keydown", e => {
+ switch (e.code) {
+ case 'Delete':
+ deleteSel();
+ break;
+ }
+ });
+
+
+ canvas = document.getElementById('canvas');
+ ctx = canvas.getContext('2d');
+ canvas.width = window.innerWidth;
+ canvas.height = window.innerHeight;
+
+ window.addEventListener("resize", e => {
+ canvas.width = window.innerWidth;
+ canvas.height = window.innerHeight;
+ });
+
+ (async function updateanim(t) {
+
+
+ ctx.clearRect(0,0,window.innerWidth,window.innerHeight);
+ for(const wire of connections) {
+ const points = [];
+
+ for (const point of [wire.o, wire.i]) {
+ if (point instanceof Element) {
+ let rects = point.getClientRects()[0];
+ points.push(point == wire.i ? rects.left - remtopx(2) : rects.right + remtopx(1.5));
+ points.push((rects.top + rects.bottom) / 2);
+ } else {
+ points.push(point.x);
+ points.push(point.y);
+ }
+ }
+
+ if ((((points[0] >= -10) && (points[0] <= window.innerWidth)) &&
+ ((points[1] >= -10) && (points[1] <= window.innerHeight))) ||
+ (((points[2] >= -10) && (points[2] <= window.innerWidth)) &&
+ ((points[3] >= -10) && (points[3] <= window.innerHeight)))) {
+
+ var m = null;
+ for (const cls of (wire.i instanceof Element ? wire.i : wire.o).classList) m = m || portColors[cls];
+ ctx.strokeStyle = m;
+ renderCurveBetweenPorts(...points);
+ }
+ }
+
+ requestAnimationFrame(updateanim);
+ })()
+}
diff --git a/grapher/style.css b/grapher/style.css
new file mode 100644
index 0000000..793d213
--- /dev/null
+++ b/grapher/style.css
@@ -0,0 +1,184 @@
+@import url('https://fonts.googleapis.com/css2?family=Raleway&display=swap');
+
+body, .chipbox *, iframe {
+ margin: 0;
+ padding: 0;
+ border: 0;
+}
+
+html {
+ --foreforeground: #3788ae;
+ --foreground: #082f41;
+ --background: #03141c;
+ color: white;
+ background: var(--background);
+ /*padding: 1cm;*/
+ font-size: 12pt;
+ font-family: 'Raleway', sans-serif;
+ height: 100%;
+}
+
+body {
+ height: 100vh;
+ width: 100vw;
+ overflow: hidden;
+
+ display: grid;
+ grid-template-areas:
+ "searcher graph";
+ grid-column-gap: 0;
+ grid-row-gap: 0;
+}
+
+iframe#searcher {
+ height: 100vh;
+ width: 13cm;
+
+ margin: 0;
+ grid-area: searcher;
+ position: relative;
+}
+
+div#graph {
+ --graphOffsetX: 0;
+ --graphOffsetY: 0;
+ grid-area: graph;
+ width: calc(100vw - 13cm);
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAA3SURBVDhPY2RgYPgPxBQDZhEZMM0EJqkIRg2kHIwaSDkYNZByMGog5YARWNJSpcSGASq7kIEBAL94Aos8Ra5sAAAAAElFTkSuQmCC");
+ background-repeat: repeat;
+ background-position-x: calc(var(--graphOffsetX) * 1px);
+ background-position-y: calc(var(--graphOffsetY) * 1px);
+}
+
+#searchbox:not([open]) + div#graph {
+ width:100vw !important;
+}
+
+#searchbox:not([open]) > summary::marker {
+ content: ">>>";
+}
+#searchbox[open] > summary::marker {
+ content: "<<<";
+}
+
+#searchbox[open] > summary {
+ left: 13cm;
+}
+
+#searchbox > summary::marker {
+ position: absolute;
+}
+
+#searchbox > summary {
+ position: absolute;
+ z-index: 99999;
+ top: 50%;
+ bottom: 50%;
+ padding-left: 1mm;
+ height: calc(1rem + 1mm);
+ border: 1mm solid var(--foreground);
+ border-right: 2mm solid var(--foreground);
+ background: var(--foreground);
+ border-top-right-radius: 2mm;
+ border-bottom-right-radius: 2mm;
+}
+
+#searchbox {
+ border-right: 2mm var(--foreground) solid;
+ z-index: 999999;
+}
+
+div.chipbox {
+ --chipOffsetX: 0;
+ --chipOffsetY: 0;
+ position: absolute;
+ user-select: none;
+ transform: translate(
+ calc((var(--graphOffsetX) + var(--chipOffsetX)) * 1px),
+ calc((var(--graphOffsetY) + var(--chipOffsetY)) * 1px));
+}
+
+div.chipbox > div#selected {
+ padding: -1mm;
+ border: 1mm white solid;
+}
+
+div.chipbox > div#selected + .ui {
+ display: unset;
+}
+div.chipbox > div:not(#selected) + .ui {
+ display: none;
+}
+
+canvas {
+ position:fixed;
+ top:0;
+ bottom:0;
+ left:0;
+ right:0;
+ z-index: 100;
+
+ pointer-events: none;
+}
+
+#helpbox > summary {
+ height: 1.5cm;
+ width: 1.5cm;
+ display: flex;
+ background: #0000;
+ border: #fff7 solid 0.9mm;
+ color: #fff7;
+ border-radius: 1.5cm;
+ padding: 0;
+ font-size: 1.5cm;
+ align-items: center;
+ justify-content: center;
+ float: left;
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ user-select: none;
+}
+#helpbox[open] > summary {
+ margin-bottom: 0;
+ background: #fff7;
+ border: #0000 solid 0.9mm;
+ color: #fff;
+}
+
+#helpbox {
+ position: fixed;
+ bottom: 2rem;
+ right: 2rem;
+ background: #0000;
+ border-radius: 0;
+}
+
+#helpbox > div {
+ background: var(--foreground);
+ border-radius: 0.5cm;
+ height: 60vh;
+ width: 10cm;
+ overflow-x: auto;
+ padding: 1rem;
+ position: relative;
+ bottom: 2cm;
+ box-shadow: black 1mm 1mm 3mm
+}
+
+
+hr {
+ border: 0.5mm solid var(--foreforeground);
+ background: var(--foreforeground);
+ width: 100%;
+ height: 0%;
+
+}
+
+kbd {
+ background: white;
+ color: black;
+ padding: 0.5mm;
+ border-radius: 1mm;
+ box-shadow: inset black -0.25mm -0.25mm 1mm;
+}
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..5ec2753
--- /dev/null
+++ b/index.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html>
+<html lang="en-us">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width">
+ <meta name="description" content="A simple utility to help you work out what chips do.">
+ <meta name="author" content="@✨Aleteoryx✨#1027">
+ <title>CV2 Chip Searcher</title>
+ <link crossorigin href="style.css" rel="stylesheet" type="text/css" />
+ <link crossorigin href="chips.css" rel="stylesheet" type="text/css" />
+
+ <link crossorigin href="util.js" rel="preload" as="script"/>
+ <link crossorigin href="chips.js" rel="preload" as="script"/>
+ <link crossorigin href="script.js" rel="preload" as="script"/>
+ <link crossorigin href="https://cdnjs.cloudflare.com/ajax/libs/fuse.js/6.4.6/fuse.min.js" rel="preload" as="script"/>
+ <link crossorigin href="chips.css" rel="preload" as="style"/>
+ <link crossorigin href="style.css" rel="preload" as="style"/>
+ <link crossorigin href="./terms.json" rel="preload" as="fetch"/>
+ <link crossorigin href="./circuitsv2.json" rel="preload" as="fetch"/>
+ <link crossorigin href="https://raw.githubusercontent.com/tyleo-rec/CircuitsV2Resources/master/misc/circuitsv2.json" rel="preload" as="fetch"/>
+
+ <script crossorigin src="https://cdnjs.cloudflare.com/ajax/libs/fuse.js/6.4.6/fuse.min.js"></script>
+ <script crossorigin src="util.js"></script>
+ <script crossorigin src="chips.js"></script>
+ <script crossorigin src="script.js"></script>
+ <noscript><style> #form, hr, #listcontrols, #helpbox, #resultslist { display: none } </style></noscript>
+ <datalist id="paletteSearch">
+ </datalist>
+ </head>
+ <body>
+ <noscript>
+ The chip searcher requires JavaScript to function.
+ If you cannot enable it, you can try
+ <kbd>Crtl</kbd>+<kbd>F</kbd>ing your way through
+ <a href="https://raw.githubusercontent.com/tyleo-rec/CircuitsV2Resources/master/misc/circuitsv2.json">
+ the actual chip JSON file
+ </a>.
+
+ </noscript>
+ <form id="form" autocomplete="off">
+ <input type="text" id="search" placeholder="Search for a chip." list="paletteSearch"/>
+ <hr/>
+ <details>
+ <summary>Options</summary>
+ <div>
+ <input type="checkbox" name="refresh" id="autorefresh" checked/>
+ <label for="autorefresh">Auto Refresh</label>
+ <input type="checkbox" name="beta" id="beta" checked/>
+ <label for="beta">Show Beta Chips</label>
+ <input type="checkbox" name="depr" id="deprecated"/>
+ <label for="deprecated">Show Deprecated Chips</label>
+ <input type="checkbox" name="filterSug" id="fsug" checked>
+ <label for="fsug">Enable Filter Suggestions</label>
+ </div>
+ <hr/>
+ <div>
+ <p>Fuzzy Finder:</p>
+ <input type="radio" name="fuzziness" value='{"thresh":0,"nummod":1}' id="fuzzy0"/>
+ <label for="fuzzy0">Exact Match</label>
+ <input type="radio" name="fuzziness" value='{"thresh":0.3,"nummod":0.95}' id="fuzzy1" checked/>
+ <label for="fuzzy1">Small Typos</label>
+ <input type="radio" name="fuzziness" value='{"thresh":0.6,"nummod":0.9}' id="fuzzy2"/>
+ <label for="fuzzy2">Loose Match</label>
+ </div>
+ <hr/>
+ <div>
+ <p>Search By:</p>
+ <input type="checkbox" name="ReadonlyName" id="key0" checked/>
+ <label for="key0">Chip Name</label>
+ <input type="checkbox" name="Description" id="key1"/>
+ <label for="key1">Chip Description</label>
+ </div>
+ <hr/>
+ <div>
+ <label for="cfgitems">Items Per Page: </label>
+ <input type="number" name="items" id="cfgitems" value="12" step="1">
+ </div>
+ </details>
+ </form>
+ <hr/>
+ <div id="listcontrols">
+ <button id="first" onclick="first()">&lt;&lt;</button>
+ <button id="prev" onclick="prev()">&lt;</button>
+ <span>Showing page <span id="pagen">0</span>/<span id="of">0</span>.</span>
+ <button id="next" onclick="next()">&gt;</button>
+ <button id="last" onclick="last()">&gt;&gt;</button>
+ </div>
+ <hr/>
+ <div id="resultslist"></div>
+ <p>Maintained by <a href="https://rec.net/user/winrg" target="_blank" rel="noopener noreferrer">@winrg</a>/@✨Aleteoryx✨#1027</p>
+ <details id="helpbox">
+ <summary>?</summary>
+ <div>
+ <!-- Unused tabbing system. Ignore.
+ <input type="radio" name="test" class="selecttab" checked/>
+ <p class="tab">text for button 1</p>
+ <input type="radio" name="test" class="selecttab"/>
+ <p class="tab">text for button 2</p>
+ <input type="radio" name="test" class="selecttab"/>
+ <p class="tab">text for button 3</p>
+ <input type="radio" name="test" class="selecttab"/>
+ <p class="tab">text for button 4</p>-->
+ </details>
+ </body>
+</html> \ No newline at end of file
diff --git a/script.js b/script.js
new file mode 100644
index 0000000..a8088cb
--- /dev/null
+++ b/script.js
@@ -0,0 +1,260 @@
+const isNested = Boolean(window.parent != window);
+
+const deprecationStrings = [
+ {Text: "", Class: "hide"},
+ {Text: "Warning! This chip is being deprecated. It will be broken in the near future, and should not be used.", Class: "depwarn"},
+ {Text: "Warning! This chip is currently deprecated. It is no longer in the palette, and likely does not work.", Class: "depbad"}
+];
+const fusenameopts = {
+ isCaseSensitive: false,
+ minMatchCharLength: 1,
+ ignoreLocation: true,
+ threshold: 0,
+ keys: ["ReadonlyName"]
+};
+const fusedescopts = {
+ isCaseSensitive: false,
+ minMatchCharLength: 1,
+ ignoreLocation: true,
+ threshold: 0,
+ keys: ["Description"]
+};
+
+function genExplanation(name) {
+ return name;
+}
+
+function genSearchPath(path, name) {
+ const ret = document.createElement("li");
+ ret.classList.add("searchpath");
+ ret.innerText = path.join("/") + "/" + name;
+ return ret;
+}
+
+function getChipAddListener(GUID) {
+ return function(e) {
+ window.parent.postMessage(
+ {
+ type: 'newChip',
+ GUID: GUID
+ }
+ );
+ }
+}
+
+var searchresults = [];
+var page = 0
+
+window.addEventListener("load", async (e) => {
+ const search = document.getElementById("search");
+ const form = document.getElementById("form");
+ const suggestions = document.getElementById("paletteSearch");
+
+ if (localStorage.length) {
+ form.depr.checked = localStorage.getItem("depr");
+ form.beta.checked = localStorage.getItem("beta");
+ form.ReadonlyName.checked = localStorage.getItem("ReadonlyName");
+ form.Description.checked = localStorage.getItem("Description");
+ form.refresh.checked = localStorage.getItem("refresh");
+ form.fuzziness.value = localStorage.getItem("fuzz");
+ form.items.value = localStorage.getItem("items");
+ form.filterSug.checked = localStorage.getItem("fsug");
+ }
+
+ let v2pr = fetch(/*"https://raw.githubusercontent.com/tyleo-rec/CircuitsV2Resources/master/misc/circuitsv2.json"/*/"circuitsv2.json")
+ .then(res => res.json());
+ let termspr = fetch("./terms.json")
+ .then(res => res.json());
+
+ [v2json, termsjson] = await Promise.all([v2pr, termspr]);
+ //console.log(v2json, termsjson);
+
+
+ //GUID needs to be in the same object now, because we convert to an array
+ const searchable = Object.entries(v2json.Nodes)
+ .map(pair => {return {GUID: pair[0], ...pair[1]}})
+ searchable.sort((a, b) => (a.ReadonlyName.toLowerCase() > b.ReadonlyName.toLowerCase()) ? 1 : -1);
+
+ const fuses = [new Fuse(searchable, fusenameopts),
+ new Fuse(searchable, fusedescopts)];
+
+ const filterTree = {nodes: searchable};
+ searchable.forEach(chip => {
+ chip.NodeFilters.forEach(filter => {
+ var currentNode = filterTree;
+ filter.FilterPath.forEach(path => {
+ if (!currentNode[path.toUpperCase()]) currentNode[path.toUpperCase()] = {nodes: []};
+ currentNode = currentNode[path.toUpperCase()]
+ if (!currentNode.nodes.includes(chip))currentNode.nodes.push(chip);
+ currentNode.actualname = path;
+ })
+ })
+ })
+
+ //console.log(filterTree);
+
+ const redraw = targ => {
+ const fuseinuse = fuses.filter(fuse => form[fuse.options.keys[0]].checked);
+
+ start = performance.now();
+
+ localStorage.setItem("depr", form.depr.checked ? "set" : "");
+ localStorage.setItem("beta", form.beta.checked ? "set" : "");
+ localStorage.setItem("ReadonlyName", form.ReadonlyName.checked ? "set" : "");
+ localStorage.setItem("Description", form.Description.checked ? "set" : "");
+ localStorage.setItem("refresh", form.refresh.checked ? "set" : "");
+ localStorage.setItem("fsug", form.filterSug.checked ? "set" : "");
+ localStorage.setItem("fuzz", form.fuzziness.value);
+ localStorage.setItem("items", form.items.value);
+
+ suggestions.id = form.filterSug.checked ? "paletteSearch" : ""
+
+ var content2 = filterTree;
+
+ const fullPath = targ.value.replace(/\\+|\/+/, "/")
+ .split("/");
+ const startOfPath = fullPath.slice(0, -1);
+ const endOfPath = fullPath.at(-1);
+ const startOfSuggestion = startOfPath.join('/');
+
+ startOfPath.forEach(path => {
+ try {
+ content2 = content2[path.toUpperCase()]
+ } catch (e) {}
+ });
+
+ if (!content2) content2 = {nodes: []};
+
+ suggestions.innerText = '';
+ suggestions.append(...Object.keys(content2)
+ .filter(i => i.toUpperCase() == i)
+ .sort((a, b) => (a > b) ? 1 : -1)
+ .map(i => {
+ var e = document.createElement('option');
+ e.value = startOfSuggestion + (startOfSuggestion ? '/' : '') + content2[i].actualname + '/';
+ return e;
+ })
+ )
+
+
+ fuseinuse.forEach(fuse => {
+ fuse.options.minMatchCharLength = Math.floor(endOfPath.length * JSON.parse(form.fuzziness.value).nummod);
+ fuse.options.threshold = JSON.parse(form.fuzziness.value).thresh;
+ fuse.setCollection(content2.nodes);
+ });
+
+ var content = endOfPath ? fuseinuse.map(fuse => fuse.search(endOfPath).map(e => e.item)) : content2.nodes;
+ content = Array.from(new Set(content.flat()));
+ content.sort((a, b) => (a.ReadonlyName.toLowerCase() > b.ReadonlyName.toLowerCase()) ? 1 : -1);
+ //console.log(content2.nodes)
+
+ content = content.map(el => {
+ if ((form.depr.checked || el.DeprecationStage == 0) && (form.beta.checked || !el.IsBetaChip)) {
+ const ret = newEl("details", "returnedchip");
+ if (el.IsBetaChip) ret.classList.add("betaChip");
+
+ const iret = newEl("div", "infocontainer");
+
+ const name = document.createElement("summary");
+ name.innerText = el.ReadonlyName;
+
+ const deprinfo = deprecationStrings[el.DeprecationStage];
+ const depr = newEl("div", deprinfo.Class);
+ depr.innerText = deprinfo.Text;
+
+ const desc = newEl("p", "chipdesc")
+ desc.innerText = el.Description == "" ? "No Description!" : el.Description;
+
+ const filters = newEl("ul", "filters")
+ filters.append(...Object.values(el.NodeFilters).map(val => genSearchPath(val.FilterPath, el.ReadonlyName)));
+
+ iret.append(desc, filters);
+
+ const addBtn = newEl('button', 'addBtn');
+ addBtn.innerText = "+";
+ addBtn.setAttribute('title', 'Add to graph');
+ addBtn.onclick = getChipAddListener(el.GUID);
+ if (isNested) name.append(addBtn);
+
+ ret.append(depr, name, iret, generateChipHTML(el.NodeDescs));
+
+ return ret;
+ }
+ }).filter(e => e != undefined);
+ var perfstring = `returned in ${parseInt(performance.now() - start)} ms.`
+ display(perfstring, content);
+ };
+
+ const redrawHandler = e => redraw(search);
+
+ form.addEventListener("submit", e => {console.log(e); e.preventDefault()});
+ search.addEventListener("change", redrawHandler);
+ form.addEventListener("input", redrawHandler);
+
+ form.refresh.addEventListener("change", e => {
+ if (e.target.checked) {
+ form.addEventListener("input", redrawHandler);
+ } else {
+ form.removeEventListener("input", redrawHandler);
+ }
+ });
+
+ try {
+ redraw(search);
+ } catch (error) {
+ setTimeout(() => redraw(search), 1000);
+ }
+});
+
+function display(perf, content) {
+ searchresults = content;
+ page = 0;
+ update();
+}
+
+function first() {
+ page = 0;
+ update();
+}
+function prev() {
+ page = Math.max(page - 1, 0);
+ update();
+}
+
+function next() {
+ const pagesize = parseInt(document.getElementById("cfgitems").value);
+
+ page = (((page + 1) * pagesize) > searchresults.length) ? page : (page + 1);
+ update();
+}
+
+function last() {
+ const pagesize = parseInt(document.getElementById("cfgitems").value);
+
+ page = Math.max(parseInt((searchresults.length - 1) / pagesize), 0);
+ update();
+}
+
+
+function update() {
+ const ndisplay = document.getElementById("pagen");
+ const ofdisplay = document.getElementById("of");
+ const output = document.getElementById("resultslist");
+ const pagesel = document.getElementById("cfgitems");
+
+ //pagesel.value = ;
+
+ const pagesize = pagesel.value == "" ? 1 : Math.max(parseInt(pagesel.value), 1);
+
+ const start = page * pagesize;
+ const end = Math.min(searchresults.length, start + pagesize);
+
+ ndisplay.innerText = page + 1;
+ ofdisplay.innerText = parseInt((searchresults.length - 1) / pagesize) + 1;
+
+ //console.log(start, end);
+
+ output.innerHTML = "";
+ output.append(...searchresults.slice(start, end));
+}
+
diff --git a/style.css b/style.css
new file mode 100644
index 0000000..9cbd04f
--- /dev/null
+++ b/style.css
@@ -0,0 +1,235 @@
+@import url('https://fonts.googleapis.com/css2?family=Raleway&display=swap');
+
+html {
+ --foreforeground: #3788ae;
+ --foreground: #082f41;
+ --background: #03141c;
+ color: white;
+ background: var(--background);
+ /*padding: 1cm;*/
+ font-size: 12pt;
+ font-family: 'Raleway', sans-serif;
+ height: 100%;
+}
+
+hr {
+ border: 0.5mm solid var(--foreforeground);
+ background: var(--foreforeground);
+ width: 100%;
+ height: 0%;
+
+}
+
+.filters::before {
+ content: "Pallette Search paths:";
+}
+
+.hide {display: none;}
+
+input, button, details{
+ color: white;
+ background: var(--foreground);
+ padding: 1rem;
+
+ border: none;
+ border-radius: 0.5cm;
+ font-size: 13pt;
+ margin: 0.5rem;
+}
+
+input::placeholder {
+ color: var(--foreforeground);
+}
+
+details :is(input, button) {
+ background: var(--background);
+}
+
+/*input[type=checkbox] {
+ display: none;
+}
+
+input[type=checkbox] + label {
+ position: relative;
+ padding-left: 2.5rem;
+ padding-right: .5rem;
+}
+
+input[type=checkbox] + label::before {
+ background: var(--foreground);
+ width: 1.5rem;
+ height: 1.5rem;
+ margin: auto;
+ content: "";
+ position: absolute;
+ left: 0;
+ top: -0.33rem;
+ border-radius: 0.25rem;
+ border: 0.25rem var(--foreforeground) solid;
+}
+
+
+input[type=checkbox]:checked + label::before {
+ border-color: var(--foreground);
+ background: var(--foreforeground);
+ color: var(--foreground);
+ font-size: 16pt;
+ /*content: "✓";* /
+ align-content: center;
+}*/
+
+details {
+ padding: 1rem;
+ background: var(--foreground);
+}
+
+details.betaChip > summary::before {
+ content: "β ";
+ color: paleturquoise;
+}
+
+.returnedchip > summary {
+ position: relative;
+}
+
+.returnedchip > summary > button.addBtn {
+ padding: 0rem;
+ margin: 0;
+ height: 2rem;
+ width: 2rem;
+ position: absolute;
+ top: calc(50% - 1rem);
+ right: 0;
+ left: calc(100% - 2rem);
+ bottom: calc(50% - 1rem);
+ text-align: center;
+ background: #0000;
+ font-size: 2rem;
+}
+
+details[open] > summary {
+ border-bottom: 1mm var(--foreforeground) solid;
+ margin-bottom: 0.5rem;
+}
+
+body {
+ display: flex;
+ flex-flow: column;
+ height: calc(100% - 2cm);
+ margin: 1cm;
+}
+
+#resultslist {
+ overflow: auto;
+}
+
+#listcontrols {
+ display: flex;
+ flex-flow: row;
+ align-items: center;
+}
+
+
+#helpbox > summary {
+ height: 1.5cm;
+ width: 1.5cm;
+ display: flex;
+ background: #0000;
+ border: #fff7 solid 0.9mm;
+ color: #fff7;
+ border-radius: 1.5cm;
+ padding: 0;
+ font-size: 1.5cm;
+ align-items: center;
+ justify-content: center;
+ float: left;
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ user-select: none;
+}
+#helpbox[open] > summary {
+ margin-bottom: 0;
+ background: #fff7;
+ border: #0000 solid 0.9mm;
+ color: #fff;
+}
+
+#helpbox {
+ position: fixed;
+ bottom: 2rem;
+ right: 2rem;
+ background: #0000;
+ border-radius: 0;
+}
+
+#helpbox > div {
+ background: var(--foreground);
+ border-radius: 0.5cm;
+ height: 60vh;
+ width: 10cm;
+ overflow-x: auto;
+ padding: 1rem;
+ position: relative;
+ bottom: 2cm;
+ box-shadow: black 1mm 1mm 3mm
+}
+a:link {
+ color: white;
+}
+a:visited {
+ color: var(--foreforeground);
+}
+
+.depbad, .depbad + summary {
+ color: palevioletred;
+}
+.depwarn, .depwarn + summary {
+ color: palegoldenrod;
+}
+
+kbd {
+ background: white;
+ color: black;
+ padding: 0.5mm;
+ border-radius: 1mm;
+ box-shadow: inset black -0.25mm -0.25mm 1mm;
+}
+
+input:not(:checked).selecttab + .tab {
+ display: none;
+}
+
+.tab {
+ position: absolute;
+ top: 2rem;
+}
+
+summary,
+button,
+:is(input[type=radio], input[type=checkbox]),
+:is(input[type=radio], input[type=checkbox]) + label {
+ cursor: pointer;
+}
+
+
+@media (orientation: portrait) {
+ #listcontrols {
+ justify-content: space-between;
+ }
+ #form > details {
+ overflow: auto;
+ max-height: 20vh;
+ }
+ label::after {
+ content: "\a";
+ white-space: pre;
+ }
+ input[type=text] {
+ width: calc(100vw - 3.25cm);
+ }
+ #helpbox > div {
+ width: calc(100vw - 3.5cm);
+ height: 60vh;
+ }
+} \ No newline at end of file
diff --git a/terms.json b/terms.json
new file mode 100644
index 0000000..f21d5d9
--- /dev/null
+++ b/terms.json
@@ -0,0 +1,78 @@
+{
+ "Creation Object":{
+ "term": "Creation Object",
+ "definition": "An Object Made Using Shapes And Tubes From The Makerpen"
+ },
+ "Rec Room Object": {
+ "term": "Rec Room Object",
+ "definition": "Something That Can Be Created/Spawned By The Maker Pen Tools"
+ },
+ "Item": {
+ "term": "Item",
+ "definition": "A Player-Made Object That Uses One Or More Objects To Serve A Purpose"
+ },
+ "Prop": {
+ "term": "Prop",
+ "definition": "An Object Found Under The Props Tab In The Maker Pen Menu That Has Been Pre-Made By Rec Room"
+ },
+ "Tool": {
+ "term": "Tool",
+ "definition": "An Object Used To Manipulate Other Objects"
+ },
+ "Entity": {
+ "term": "Entity",
+ "definition": "Anything That Exists In A Room"
+ },
+ "Client": {
+ "term": "Client",
+ "definition": "The Machine In Which A Player Is Running Rec Room On"
+ },
+ "Localized": {
+ "term": "Localized|Local|Unsynced",
+ "definition": "A Signal That Only Exists In The Executing Clients Instance"
+ },
+ "Synced": {
+ "term": "Synced",
+ "definition": "A Signal That Exists For All Clients In An Instance"
+ },
+ "Global": {
+ "term": "Global",
+ "definition": "The Status Of The World That Is The Same For All Players"
+ },
+ "To Sync": {
+ "term": "To Sync",
+ "definition": "To Transfer A Signal From A Clients Machine Into The Global Network"
+ },
+ "To Localize": {
+ "term": "To Localize",
+ "definition": "To Transfer A Signal From The Global Network Into Select Clients"
+ },
+ "Instance (Rec Room Wise)": {
+ "term": "Instance",
+ "definition": "An Instance (Real World Wise) of a Room Containing Players"
+ },
+ "Player": {
+ "term": "Player",
+ "definition": "The Ingame Character Of A Client"
+ },
+ "To Execute": {
+ "term": "To Execute",
+ "definition": "To Activate A Circuit"
+ },
+ "Signal": {
+ "term": "Signal",
+ "definition": "An Activation That Can Travel To And From Other Chips"
+ },
+ "Chip": {
+ "term": "Chip",
+ "definition": "A Function"
+ },
+ "Circuit": {
+ "term": "Circuit",
+ "definition": "A Group Of Chips That Execute A Specific Command"
+ },
+ "Target": {
+ "term": "Target",
+ "definition": "The Object or value affected by an operation"
+ }
+} \ No newline at end of file
diff --git a/util.js b/util.js
new file mode 100644
index 0000000..fe9e5b7
--- /dev/null
+++ b/util.js
@@ -0,0 +1,5 @@
+function newEl(name, Class) {
+ ret = document.createElement(name);
+ if (Class) ret.classList.add(Class);
+ return ret;
+} \ No newline at end of file
diff --git a/what.html b/what.html
new file mode 100644
index 0000000..29e4f7e
--- /dev/null
+++ b/what.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>Document</title>
+ <script>
+ let root = document.documentElement;
+ var x,y = 0;
+ var canvas,ctx;
+ var offsetx,offsety;
+ var connections = [];
+ //{a: in ports, b: in ports, color: rbga()}
+
+ var ports = [
+ {type: "input"},
+ {type: "input"},
+ {type: "output"},
+ {type: "output"}
+ ]
+
+ window.addEventListener("load", e => {
+ canvas = document.getElementById('canvas');
+ ctx = canvas.getContext('2d');
+ canvas.width = window.innerWidth
+ canvas.height = window.innerHeight
+
+ })
+
+ function point(x, y) {
+ ctx.fillRect(x,y, 1, 1);
+ }
+
+ function drawLines() {
+ var startx = 200;
+ var starty = 200;
+
+ renderCurveBetweenPorts(startx, starty, dims.x, dims.y);
+ }
+ function renderCurveBetweenPorts(outx, outy, inx, iny) {
+ var dist = (((outx - inx) ** 2) + ((outy - iny) ** 2)) ** 0.5;
+ var heightOfCurve = Math.abs(iny - outy);
+ var widthOfCurve = Math.abs(inx - outx);
+ var halfWidth = (inx - outx)/2;
+
+ var cpbasex = (Math.abs((widthOfCurve * 2) / dist * 10) + 60) * (heightOfCurve / 150)**0.8;
+
+ var cp1x = outx + cpbasex;
+ var cp2x = inx - cpbasex;
+
+ ctx.clearRect(0,0,window.innerWidth,window.innerHeight);
+
+ //point(cp1x, outy);
+ //point(cp2x, iny);
+ //point(inx - outx, outy);
+
+ ctx.beginPath();
+ ctx.moveTo(outx,outy);
+ ctx.bezierCurveTo(cp1x, outy, cp2x, iny, inx, iny);
+ ctx.moveTo(outx,outy);
+ ctx.closePath();
+ ctx.lineWidth = 3;
+ ctx.stroke();
+ }
+ </script>
+ <style>
+ canvas {
+ position:fixed;
+ top:0;
+ bottom:0;
+ left:0;
+ right:0;
+ z-index: -20;
+ }
+ .move {
+ position:fixed;
+ height: 10px;
+ width: 10px;
+ background: red;
+ }
+ </style>
+</head>
+<body>
+ <canvas id="canvas"></canvas>
+</body>
+</html> \ No newline at end of file