<snapdata remixID="13545425"><project name="Change Category Colors" app="Snap! 10, https://snap.berkeley.edu" version="2"><notes></notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAAAXNSR0IArs4c6QAAAnpJREFUeF7t17Fpw1AARdFv7WJN4EVcawrPJZeeR3u4kiGQkCYJaXxBHLUSPHT/AaHTvu/7cCkQFTgBGJU3+1EAQBDSAgCm+Y0DyEBaAMA0v3EAGUgLAJjmNw4gA2kBANP8xgFkIC0AYJrfOIAMpAUATPMbB5CBtACAaX7jADKQFgAwzW8cQAbSAgCm+Y0DyEBaAMA0v3EAGUgLAJjmNw4gA2kBANP8xgFkIC0AYJrfOIAMpAUATPMbB5CBtACAaX7jADKQFgAwzW8cQAbSAgCm+Y0DyEBaAMA0v3EAGUgLAJjmNw4gA2kBANP8xgFkIC0AYJrfOIAMpAUATPMbB5CBtACAaX7jADKQFgAwzW8cQAbSAgCm+Y0DyEBaAMA0v3EAGUgLAJjmNw4gA2kBAH/If7lcxu12G8uypAd09HEAfznh6/X6dXfbtnG/38f5fD66ibe+H4B/5P6O8PPRaZrG8/kcj8fjrYd1xDEAAUxdA/iPT/C6rmOe5/TAjjYOoJ+Q1DSAaX7jADKQFgAwzW8cQAbSAgCm+Y0DyEBaAMA0v3EAGUgLAJjmNw4gA2kBANP8xgFkIC0AYJrfOIAMpAUATPMbB5CBtACAaX7jADKQFgAwzW8cQAbSAgCm+Y0DyEBaAMA0v3EAGUgLAJjmNw4gA2kBANP8xgFkIC0AYJrfOIAMpAUATPMbB5CBtACAaX7jADKQFgAwzW8cQAbSAgCm+Y0DyEBaAMA0v3EAGUgLAJjmNw4gA2kBANP8xgFkIC0AYJrfOIAMpAUATPMbB5CBtACAaX7jADKQFgAwzW8cQAbSAgCm+Y0DyEBaAMA0v3EAGUgLAJjmN/4C1wn8qIbHiI0AAAAASUVORK5CYII=</thumbnail><scenes select="1"><scene name="Change Category Colors"><notes></notes><palette><category name="test" color="0,14,250,1"/></palette><hidden></hidden><headers></headers><code></code><blocks><block-definition s="%&apos;type&apos; of category %&apos;category&apos;" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1">color<options>color&#xD;RGBA</options></input><input type="%s" readonly="true" irreplaceable="true" initial="1">motion<options>function() {&#xD;  var sprite = SpriteMorph.prototype;&#xD;  var opts = [];&#xD;  opts = opts.concat(sprite.categories);&#xD;  opts.push(&apos;&#126;&apos;);&#xD;  opts = opts.concat(Array.from(sprite.customCategories.keys()));&#xD;  return opts.reduce((a,v) =&gt; ({...a, [v]: v}), {});&#xD;}</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>type</l><l>category</l></list><l>if (type != &apos;color&apos; &amp;&amp; type != &apos;RGBA&apos;) return;&#xD;var sprite = SpriteMorph.prototype, color;&#xD;if (sprite.categories.includes(category)) {&#xD;  color = sprite.blockColor[category];&#xD;} else if (sprite.customCategories.has(category)) {&#xD;  color = sprite.customCategories.get(category);&#xD;}&#xD;if (!color) return;&#xD;if (type == &apos;color&apos;) return color;&#xD;return new List([color.r, color.g, color.b, color.a]);</l></block><list><block var="type"/><block var="category"/></list></block></block></script></block-definition><block-definition s="set color of %&apos;category&apos; category to %&apos;color&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1">motion<options>function() {&#xD;  var sprite = SpriteMorph.prototype;&#xD;  var opts = [];&#xD;  opts = opts.concat(sprite.categories);&#xD;  opts.push(&apos;&#126;&apos;);&#xD;  opts = opts.concat(Array.from(sprite.customCategories.keys()));&#xD;  return opts.reduce((a,v) =&gt; ({...a, [v]: v}), {});&#xD;}</options></input><input type="%clr" initial="1"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="color"/><l><option>list</option></l></block><script><block s="doUntil"><block s="reportVariadicGreaterThanOrEquals"><list><block s="reportListAttribute"><l><option>length</option></l><block var="color"/></block><l>3</l></list></block><script><block s="doAddToList"><l>0</l><block var="color"/></block></script></block><block s="doIf"><block s="reportVariadicLessThan"><list><block s="reportListAttribute"><l><option>length</option></l><block var="color"/></block><l>4</l></list></block><script><block s="doAddToList"><l>1</l><block var="color"/></block></script><list></list></block><block s="doSetVar"><l>color</l><block s="evaluate"><block s="reportJSFunction"><list><l>r</l><l>g</l><l>b</l><l>a</l></list><l>function validateChannel(value, def, min, max) {&#xD;  value = +value;&#xD;  if (isNaN(value)) value = def;&#xD;  return Math.max(min, Math.min(max, value));&#xD;}&#xD;r = validateChannel(r, 0, 0, 255);&#xD;g = validateChannel(g, 0, 0, 255);&#xD;b = validateChannel(b, 0, 0, 255);&#xD;a = validateChannel(a, 1, 0, 1);&#xD;return new Color(r, g, b, a);</l></block><block var="color"/></block></block></script><list></list></block><block s="doSetVar"><l>color</l><block s="evaluate"><block s="reportJSFunction"><list><l>color</l></list><l>if (!(color instanceof Color)) return new Color;&#xD;function validateChannel(value, def, min, max) {&#xD;  value = +value;&#xD;  if (isNaN(value)) value = def;&#xD;  return Math.max(min, Math.min(max, value));&#xD;}&#xD;var r = validateChannel(color.r, 0, 0, 255),&#xD;    g = validateChannel(color.g, 0, 0, 255),&#xD;    b = validateChannel(color.b, 0, 0, 255),&#xD;    a = validateChannel(color.a, 1, 0, 1);&#xD;return new Color(r, g, b, a);</l></block><list><block var="color"/></list></block></block><block s="doRun"><block s="reportJSFunction"><list><l>category</l><l>color</l></list><l>var sprite = SpriteMorph.prototype;&#xD;if (sprite.categories.includes(category)) {&#xD;  sprite.blockColor[category] = color;&#xD;} else if (sprite.customCategories.has(category)) {&#xD;  sprite.customCategories.set(category, color);&#xD;} else {&#xD;  return;&#xD;}</l></block><list><block var="category"/><block var="color"/></list></block></script></block-definition><block-definition s="color %&apos;color&apos;" type="reporter" category="pen"><header></header><code></code><translations></translations><inputs><input type="%clr" initial="1"></input></inputs><script><block s="doReport"><block var="color"/></block></script></block-definition><block-definition s="boo" type="command" category="test"><header></header><code></code><translations></translations><inputs></inputs></block-definition><block-definition s="refresh IDE" type="command" category="looks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>world.children[0].refreshIDE()</l></block><list></list></block></script></block-definition><block-definition s="boo $nl" type="reporter" category="test"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><l></l></block></script></block-definition><block-definition s="boo $nl $nl" type="predicate" category="test"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><l></l></block></script></block-definition></blocks><primitives></primitives><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="true" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="128"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAAAXNSR0IArs4c6QAADoVJREFUeF7t1cEJAAAIxDDdf2m3sJ+4wEEQuuMIECBAgACBd4F9XzRIgAABAgQIjAB7AgIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECByxcQFpoRMBzwAAAABJRU5ErkJggg==</pentrails><costumes><list struct="atomic" id="129"></list></costumes><sounds><list struct="atomic" id="130"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="Sprite" idx="1" x="0" y="0" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="135"><costumes><list struct="atomic" id="136"></list></costumes><sounds><list struct="atomic" id="137"></list></sounds><blocks></blocks><variables></variables><scripts><script x="18.18181818181818" y="18.18181818181818"><custom-block s="%s of category %s"><l></l><l></l><comment w="160.9090909090909" collapsed="false">simply returns the color or a list containing the rgba values of the selected category</comment></custom-block></script><script x="18.18181818181818" y="97.8181818181818"><custom-block s="%s of category %s"><l>color</l><l>motion</l><comment w="160.9090909090909" collapsed="true">color</comment></custom-block></script><script x="18.18181818181818" y="131.45454545454547"><custom-block s="color %clr"><color>145,26,68,1</color><comment w="136.36363636363635" collapsed="false">meant to be analogous to returning a color input slot</comment></custom-block></script><script x="18.18181818181818" y="199.09090909090907"><custom-block s="%s of category %s"><l>RGBA</l><l>motion</l><comment w="160.9090909090909" collapsed="true">rgba</comment></custom-block></script><script x="18.18181818181818" y="232.72727272727275"><block s="getPenAttribute"><l><option>r-g-b-a</option></l></block></script><script x="18.18181818181818" y="265.2727272727273"><custom-block s="set color of %s category to %clr"><l></l><color>145,26,68,1</color><comment w="105.45454545454544" collapsed="false">changes the color of the selected category</comment></custom-block></script><script x="18.18181818181818" y="332.90909090909093"><custom-block s="refresh IDE"><comment w="109.09090909090908" collapsed="false">refresh ide to see changes everywhere</comment></custom-block></script><script x="18.18181818181818" y="400.5454545454546"><custom-block s="set color of %s category to %clr"><l>test</l><color>255,32,0,1</color></custom-block><custom-block s="refresh IDE"></custom-block></script><script x="18.18181818181818" y="456.848484848485"><custom-block s="set color of %s category to %clr"><l>test</l><color>0,14,250,1</color></custom-block><custom-block s="refresh IDE"></custom-block></script><script x="18.18181818181818" y="513.1515151515154"><custom-block s="boo"></custom-block></script><script x="18.18181818181818" y="547.5454545454547"><custom-block s="boo %br"></custom-block></script><script x="18.18181818181818" y="575.9393939393942"><custom-block s="boo %br %br"></custom-block></script><script x="18.18181818181818" y="604.3333333333336"><custom-block s="set color of %s category to %clr"><l>test</l><block s="reportNewList"><list><l>255</l><l>0</l><l>0</l></list></block><comment w="90" collapsed="false">works with lists</comment></custom-block><custom-block s="refresh IDE"></custom-block></script><script x="18.18181818181818" y="663.7272727272731"><custom-block s="set color of %s category to %clr"><l>test</l><block s="reportNewList"><list><l>0</l><l>0</l><l>255</l></list></block></custom-block><custom-block s="refresh IDE"></custom-block></script><script x="18.18181818181818" y="723.1212121212126"><custom-block s="set color of %s category to %clr"><l>test</l><block s="reportNewList"><list><l>0</l><l>0</l><l>0</l><l>0</l></list></block><comment w="90" collapsed="false">...alpha</comment></custom-block><custom-block s="refresh IDE"></custom-block></script><script x="18.18181818181818" y="782.5151515151522"><block s="doDeclareVariables"><list><l>motion</l><l>operators</l></list><comment w="137.27272727272725" collapsed="false">works for primitives (although changes wont be saved with the project)</comment></block><block s="doSetVar"><l>motion</l><custom-block s="%s of category %s"><l>color</l><l>motion</l></custom-block></block><block s="doSetVar"><l>operators</l><custom-block s="%s of category %s"><l>color</l><l>operators</l></custom-block></block><custom-block s="set color of %s category to %clr"><l>motion</l><block var="operators"/></custom-block><custom-block s="set color of %s category to %clr"><l>operators</l><block var="motion"/></custom-block><custom-block s="refresh IDE"></custom-block></script><script x="18.18181818181818" y="938.1212121212129"><block s="gotoXY"><block s="reportVariadicSum"><list><block s="xPosition"></block><l>0</l></list></block><block s="reportVariadicProduct"><list><block s="yPosition"></block><block s="reportRound"><block s="reportQuotient"><block s="direction"></block><block s="direction"></block></block></block></list></block></block></script></scripts></sprite></sprites></stage><variables></variables></scene></scenes></project><media name="Change Category Colors" app="Snap! 10, https://snap.berkeley.edu" version="2"></media></snapdata>