<snapdata remixID="14379928"><project name="Spiral of Primes v1.0" app="Snap! 10.7.1, https://snap.berkeley.edu" version="2"><notes>run it in the editor !</notes><thumbnail>data:image/png;base64,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</thumbnail><scenes select="1"><scene name="Spiral of Primes v1.0"><notes>run it in the editor !</notes><palette><category name="IDE tools" color="230,230,34,1"/><category name="Local blocks" color="0,116,143,1"/><category name="Design helpers" color="74,108,212,1"/><category name="String" color="98,194,19,1"/></palette><hidden> playSound reportJSFunction receiveMenuRequest receiveSlotEdit doExpandSlot</hidden><headers></headers><code></code><blocks><block-definition s="Delete all clones from this sprite" type="command" category="control"><comment x="0" y="0" w="174.2857142857143" collapsed="false">Delete all clones from the current sprite.&#xD;&#xD;Block by Loucheman</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doForEach"><l>clone</l><block s="reportGet"><l><option>clones</option></l></block><script></script></block></script></block></script></block-definition><block-definition s="Delete all clones from %&apos;sprite&apos;" type="command" category="control"><comment x="0" y="0" w="194.2857142857143" collapsed="false">Delete all clones from a selected sprite.&#xD;&#xD;Block by Loucheman</comment><header></header><code></code><translations></translations><inputs><input type="%s"><options>§_objectsMenu</options></input></inputs><script><block s="doWarp"><script><block s="doForEach"><l>clone</l><block s="reportAskFor"><block var="sprite"/><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>clones</option></l></block></autolambda><list></list></block><list></list></block><script></script></block></script></block></script></block-definition><block-definition s="Delete all clones from all sprites" type="command" category="control"><comment x="0" y="0" w="174.2857142857143" collapsed="false">Delete all clones from all sprites.&#xD;&#xD;Block by Loucheman</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doForEach"><l>clone</l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><block s="reportListItem"><l>2</l><l/></block><block s="reportBoolean"><l><bool>true</bool></l></block></list></block></autolambda><list></list></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportNewList"><list><block var="value"/><block s="reportAskFor"><block var="value"/><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>temporary?</option></l></block></autolambda><list></list></block><list></list></block></list></block></autolambda><list><l>value</l></list></block><block s="reportAskFor"><l>Stage</l><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>other sprites</option></l></block></autolambda><list></list></block><list></list></block></block></block><script></script></block></script></block></script></block-definition><block-definition s="catch %&apos;tag&apos; %&apos;action&apos;" type="command" category="control"><header></header><code></code><translations>de:fange _ _&#xD;ca:agafa _ _&#xD;es:atrapar _ _&#xD;fr:attrape _ _&#xD;pt:captura _ _&#xD;</translations><inputs><input type="%upvar"></input><input type="%cs"></input></inputs><script><block s="doCallCC"><block s="reifyScript"><script><block s="doSetVar"><l>tag</l><block var="cont"/></block><block s="doRun"><block var="action"/><list></list></block></script><list><l>cont</l></list></block></block></script></block-definition><block-definition s="throw %&apos;cont&apos;" type="command" category="control"><header></header><code></code><translations>de:wirf _&#xD;ca:llança _&#xD;es:lanzar _&#xD;fr:lance _&#xD;pt:lança _&#xD;</translations><inputs><input type="%s">catchtag</input></inputs><script><block s="doRun"><block var="cont"/><list></list></block></script></block-definition><block-definition s="catch %&apos;tag&apos; %&apos;value&apos;" type="reporter" category="control"><header></header><code></code><translations>de:fange _ _&#xD;ca:agafa _ _&#xD;es:atrapar _ _&#xD;fr:attrape _ _&#xD;pt:captura _ _&#xD;</translations><inputs><input type="%upvar"></input><input type="%anyUE"></input></inputs><script><block s="doCallCC"><block s="reifyScript"><script><block s="doSetVar"><l>tag</l><block var="cont"/></block><block s="doReport"><block s="evaluate"><block var="value"/><list></list></block></block></script><list><l>cont</l></list></block></block></script></block-definition><block-definition s="throw %&apos;tag&apos; %&apos;value&apos;" type="command" category="control"><header></header><code></code><translations>de:wirf _ _&#xD;ca:llança _ _&#xD;es:lanzar _ _&#xD;fr:lance _ _&#xD;pt:lança _ _&#xD;</translations><inputs><input type="%s">catchtag</input><input type="%s"></input></inputs><script><block s="doRun"><block var="tag"/><list><block var="value"/></list></block></script></block-definition><block-definition s="ignore %&apos;x&apos;" type="command" category="control"><comment x="0" y="0" w="206.66666666666666" collapsed="false">This block does nothing.&#xD;Use it when you are calling a reporter&#xD;for its side effect and don&apos;t care about&#xD;its return value.</comment><header></header><code></code><translations>de:ignoriere _&#xD;ca:ignora _&#xD;es:ignorar _&#xD;fr:ignore _&#xD;pt:ignora _&#xD;</translations><inputs><input type="%s"></input></inputs></block-definition><block-definition s="compose %&apos;f&apos; %&apos;g&apos;" type="reporter" category="control"><comment x="0" y="0" w="151.33333333333334" collapsed="false">Returns the function x↦f(g(x)) where f and g are the two inputs.</comment><header></header><code></code><translations>pt:a composição de _ com _&#xD;ca:composa _ _&#xD;</translations><inputs><input type="%repRing"></input><input type="%repRing"></input></inputs><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="f"/><list><block s="evaluate"><block var="g"/><list><l></l></list></block></list></block></autolambda><list></list></block></block></script></block-definition><block-definition s="repeat %&apos;action&apos; until %&apos;pred&apos;" type="command" category="control"><comment x="0" y="0" w="202.66666666666666" collapsed="false">Like the built-in REPEAT UNTIL block, except that the ending condition is not tested until the script has been run the first time.  So the script is run at least once.</comment><header></header><code></code><translations>pt:repete _ até que _ $loop-0.7&#xD;ca:repeteix _ fins _&#xD;</translations><inputs><input type="%cs"></input><input type="%boolUE"></input></inputs><script><block s="doRun"><block var="action"/><list></list></block><block s="doUntil"><block s="evaluate"><block var="pred"/><list></list></block><script><block s="doRun"><block var="action"/><list></list></block></script></block></script></block-definition><block-definition s="repeat %&apos;num&apos; %&apos;#&apos; %&apos;action&apos;" type="command" category="control"><comment x="0" y="0" w="171" collapsed="false">Runs the script the specified number of times, like the built-in REPEAT block, but this one provides the # variable that can be used inside the script.  Try&#xD;REPEAT (200)&#xD;                MOVE (#) STEPS&#xD;   RIGHT 92&#xD;with the pen down.</comment><header></header><code></code><translations>pt:repete _ vezes _ _ $loop-0.7&#xD;ca:repeteix _ _ _&#xD;</translations><inputs><input type="%n"></input><input type="%upvar"></input><input type="%cs"></input></inputs><script><block s="doSetVar"><l>#</l><l>0</l></block><block s="doRepeat"><block var="num"/><script><block s="doChangeVar"><l>#</l><l>1</l></block><block s="doRun"><block var="action"/><list></list></block></script></block></script></block-definition><block-definition s="for %&apos;i&apos; = %&apos;start&apos; step %&apos;step&apos; to %&apos;end&apos; %&apos;action&apos;" type="command" category="control"><comment x="0" y="0" w="247.33333333333334" collapsed="false">The primitive FOR block uses an implicit step of ±1 depending on which of the starting and ending values is larger.  This version allows you to provide an explicit step value.  If the sign of the step input is incompatible with the ordering of the starting and ending values, the script will not be run at all.</comment><header></header><code></code><translations>pt:para _ de _ com passo _ a _ _ $loop-0.7&#xD;ca:per _ = _ incrementant _ fins _ _&#xD;</translations><inputs><input type="%upvar"></input><input type="%n">1</input><input type="%n">1</input><input type="%n">10</input><input type="%cs"></input></inputs><script><block s="doDeclareVariables"><list><l>test</l></list></block><block s="doSetVar"><l>i</l><block var="start"/></block><block s="doIfElse"><block s="reportVariadicLessThan"><list><block var="step"/><l>0</l></list></block><script><block s="doSetVar"><l>test</l><block s="reifyPredicate"><autolambda><block s="reportVariadicLessThan"><list><block var="i"/><block var="end"/></list></block></autolambda><list></list></block></block></script><script><block s="doSetVar"><l>test</l><block s="reifyPredicate"><autolambda><block s="reportVariadicGreaterThan"><list><block var="i"/><block var="end"/></list></block></autolambda><list></list></block></block></script></block><block s="doUntil"><block s="evaluate"><block var="test"/><list></list></block><script><block s="doRun"><block var="action"/><list></list></block><block s="doChangeVar"><l>i</l><block var="step"/></block></script></block></script></block-definition><block-definition s="xTell %&apos;obj&apos; to %&apos;cmd&apos;" type="command" category="control"><comment x="0" y="0" w="192.61904761904768" collapsed="false">Extended Tell&#xD;===========&#xD;&#xD;Same as tell block, but accept list as input&#xD;&#xD;Avoiding error when object doesn&apos;t exist (like a deleted clone)&#xD;&#xD;Block by Loucheman</comment><header></header><code></code><translations></translations><inputs><input type="%s"><options>§_objectsMenu</options></input><input type="%cmdRing"></input></inputs><script><block s="doIfElse"><block s="reportNot"><block s="reportIsA"><block var="obj"/><l><option>list</option></l></block></block><script></script><script><block s="doWarp"><script><block s="doForEach"><l>item</l><block var="obj"/><script></script></block></script></block></script></block></script></block-definition><block-definition s="multi-ask %&apos;sprites&apos; for %&apos;predicate&apos;" type="reporter" category="control"><comment x="0" y="0" w="188.57142857142858" collapsed="false">Like the ask block, but accept a &#xD;list of sprite as input...&#xD;&#xD;(always report a list)&#xD;&#xD;Example:&#xD;multi-ask MY CLONES for POSITION&#xD;    &#xD;Should return:&#xD;(0,0)&#xD;(100,0)&#xD;(123,123)&#xD;&#xD;Block by Loucheman</comment><header></header><code></code><translations></translations><inputs><input type="%s">myself<options>§_objectsMenu</options></input><input type="%repRing"></input></inputs></block-definition><block-definition s="error %&apos;msg&apos;" type="command" category="control"><comment x="0" y="0" w="268.6666666666667" collapsed="false">Throw an error.&#xD;&#xD;Makes a red halo appear around the script that runs it,&#xD;with the input text shown in a speech balloon next to&#xD;the script, just like any Snap! error.&#xD;&#xD;This is useful to put in the second script of SAFELY TRY&#xD;after some other instructions to undo the partial work of&#xD;the first script.</comment><header></header><code></code><translations>pt:lança o erro _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>msg</l></list><l>throw new Error(msg);</l></block><list><block var="msg"/></list></block></script></block-definition><block-definition s="for %&apos;i&apos; = %&apos;start&apos; to %&apos;end&apos; $nl in %&apos;time&apos; secs easing %&apos;easing&apos; %&apos;action&apos;" type="command" category="control"><header></header><code></code><translations>de:für _ = _ bis _ _ in _ Sek. beschleunigt: _ _&#xD;ca:per _ = _ fins _ _ en _ segons de forma _ _&#xD;pt:para _ de _ a _ _ em _ s de forma _ _&#xD;</translations><inputs><input type="%upvar"></input><input type="%n">0</input><input type="%n">100</input><input type="%n">1</input><input type="%txt" readonly="true">linear<options>linear&#xD;quadratic={&#xD;quadratic-in&#xD;quadratic-out&#xD;quadratic-in-out&#xD;}&#xD;cubic={&#xD;cubic-in&#xD;cubic-out&#xD;cubic-in-out&#xD;}&#xD;quart={&#xD;quart-in&#xD;quart-out&#xD;quart-in-out&#xD;}&#xD;sinusoidal={&#xD;sine-in&#xD;sine-out&#xD;sine-in-out&#xD;}&#xD;elastic</options></input><input type="%ca"></input></inputs><script><block s="doSetVar"><l>i</l><block var="start"/></block><custom-block s="animate setter %cmdRing getter %repRing delta %n over %n secs easing %repRing"><block s="reifyScript"><script><block s="doSetVar"><l>i</l><l></l></block><block s="doRun"><block var="action"/><list></list></block></script><list></list></block><block s="reifyReporter"><autolambda><block var="i"/></autolambda><list></list></block><block s="reportDifference"><block var="end"/><block var="start"/></block><block var="time"/><block s="reportIfElse"><block s="reportIsA"><block var="easing"/><l><option>reporter</option></l></block><block var="easing"/><custom-block s="easing %txt"><block var="easing"/></custom-block></block></custom-block></script></block-definition><block-definition s="$arrowLeftOutline %&apos;NbMove&apos;" type="command" category="Design helpers"><header></header><code></code><translations></translations><inputs><input type="%n">10</input></inputs><script><block s="changeXPosition"><block s="reportMonadic"><l><option>neg</option></l><block var="NbMove"/></block></block></script></block-definition><block-definition s="$arrowRightOutline %&apos;NbMove&apos;" type="command" category="Design helpers"><header></header><code></code><translations></translations><inputs><input type="%n">10</input></inputs><script><block s="changeXPosition"><block var="NbMove"/></block></script></block-definition><block-definition s="$arrowUpOutline %&apos;NbMove&apos;" type="command" category="Design helpers"><header></header><code></code><translations></translations><inputs><input type="%n">10</input></inputs><script><block s="changeYPosition"><block var="NbMove"/></block></script></block-definition><block-definition s="$arrowDownOutline %&apos;NbMove&apos;" type="command" category="Design helpers"><header></header><code></code><translations></translations><inputs><input type="%n">10</input></inputs><script><block s="changeYPosition"><block s="reportMonadic"><l><option>neg</option></l><block var="NbMove"/></block></block></script></block-definition><block-definition s="$arrowLeftOutline" type="command" category="Design helpers"><header></header><code></code><translations></translations><inputs></inputs><script><block s="changeXPosition"><l>-1</l></block></script></block-definition><block-definition s="$arrowRightOutline" type="command" category="Design helpers"><header></header><code></code><translations></translations><inputs></inputs><script><block s="changeXPosition"><l>1</l></block></script></block-definition><block-definition s="$arrowUpOutline" type="command" category="Design helpers"><header></header><code></code><translations></translations><inputs></inputs><script><block s="changeYPosition"><l>1</l></block></script></block-definition><block-definition s="$arrowDownOutline" type="command" category="Design helpers"><header></header><code></code><translations></translations><inputs></inputs><script><block s="changeYPosition"><l>-1</l></block></script></block-definition><block-definition s="$arrowRightOutline center $arrowLeftOutline" type="command" category="Design helpers"><comment x="0" y="0" w="232.39999999999995" collapsed="false">Center this sprite horizontally on the stage&#xD;&#xD;Block by Loucheman v1.0</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="changeXPosition"><block s="reportMonadic"><l><option>neg</option></l><block s="reportQuotient"><block s="reportVariadicSum"><list><block s="reportGet"><l><option>left</option></l></block><block s="reportGet"><l><option>right</option></l></block></list></block><l>2</l></block></block></block></script></block-definition><block-definition s="$arrowUpOutline center $arrowDownOutline" type="command" category="Design helpers"><comment x="0" y="0" w="208.39999999999998" collapsed="false">Center this sprite vertically on the stage&#xD;&#xD;Block by Loucheman v1.0</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="changeYPosition"><block s="reportMonadic"><l><option>neg</option></l><block s="reportQuotient"><block s="reportVariadicSum"><list><block s="reportGet"><l><option>bottom</option></l></block><block s="reportGet"><l><option>top</option></l></block></list></block><l>2</l></block></block></block></script></block-definition><block-definition s="%&apos;alignment&apos; alignement of %&apos;spriteToAlign&apos; with %&apos;sprite2&apos; offset %&apos;offset&apos;" type="command" category="Design helpers"><comment x="0" y="0" w="269" collapsed="false">Do an aligment on sprite1 over sprite 2&#xD;&#xD;left-left mean left of the 1st sprite will be align with left of the 2nd sprite&#xD;&#xD;Block by Loucheman (v1.03)</comment><header></header><code></code><translations></translations><inputs><input type="%txt">left-left<options>left-left&#xD;right-right&#xD;top-top&#xD;bottom-bottom&#xD;center horizontal&#xD;center vertical&#xD;center h &amp; v&#xD;left-right&#xD;right-left&#xD;top-bottom&#xD;bottom-top&#xD;pivot-pivot</options></input><input type="%mult%s">myself<options>§_objectsMenu</options></input><input type="%s">choose...<options>§_objectsMenu</options></input><input type="%n">0</input></inputs><script><block s="doWarp"><script><block s="doSetVar"><l>spriteToAlign</l><block s="reportListAttribute"><l><option>flatten</option></l><block var="spriteToAlign"/></block><comment w="571" collapsed="true">to accept a list into the slot: you can mix list and object (you can use block like &quot;my other sprites&quot; directly into a slot</comment></block><block s="doSetVar"><l>spriteToAlign</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportIsA"><block var="value"/><l><option>sprite</option></l></block><block var="value"/><block s="reportObject"><block var="value"/></block></block></autolambda><list><l>value</l></list></block><block var="spriteToAlign"/></block><comment w="90" collapsed="false">convert descriptions into object if not already an real object: so you can mix real object with sprites names (description)</comment></block><block s="doSetVar"><l>sprite2</l><block s="reportObject"><block var="sprite2"/></block></block><block s="doIf"><block s="reportNot"><block s="reportVariadicAnd"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIsA"><block var="value"/><l><option>sprite</option></l></block></autolambda><list><l>value</l></list></block><block var="spriteToAlign"/></block></block></block><script><custom-block s="error %s"><l>Only sprites are allowed...</l></custom-block></script><list></list></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="sprite2"/><l><option>sprite</option></l></block></block><script><block s="doIf"><block s="reportNot"><block s="reportVariadicEquals"><list><block var="sprite2"/><block s="reportObject"><l>Stage</l></block></list></block></block><script><custom-block s="error %s"><l>Only sprite or stage allowed...</l></custom-block></script><list></list><comment w="118.99999999999999" collapsed="false">the 2nd sprite can be the stage... no error in this case...</comment></block></script><list></list></block><block s="doIf"><block s="reportVariadicGreaterThan"><list><block s="reportListIndex"><block var="sprite2"/><block var="spriteToAlign"/></block><l>0</l></list></block><script><block s="doDeleteFromList"><block s="reportListIndex"><block var="sprite2"/><block var="spriteToAlign"/></block><block var="spriteToAlign"/></block></script><list></list><comment w="90" collapsed="false">can&apos;t align a sprite with itself: remove it from the list...</comment></block><block s="doForEach"><l>sprite1</l><block var="spriteToAlign"/><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="alignment"/><l>left-left</l></list></block><script><block s="doTellTo"><block var="sprite1"/><block s="reifyScript"><script><block s="changeXPosition"><block s="reportVariadicSum"><list><block s="reportDifference"><block s="reportAttributeOf"><l><option>left</option></l><block var="sprite2"/></block><block s="reportAttributeOf"><l><option>left</option></l><block var="sprite1"/></block></block><block var="stepSize"/></list></block></block></script><list></list></block><list></list></block></script><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="alignment"/><l>right-right</l></list></block><script><block s="doTellTo"><block var="sprite1"/><block s="reifyScript"><script><block s="changeXPosition"><block s="reportDifference"><block s="reportDifference"><block s="reportAttributeOf"><l><option>right</option></l><block var="sprite2"/></block><block s="reportAttributeOf"><l><option>right</option></l><block var="sprite1"/></block></block><block var="stepSize"/></block></block></script><list></list></block><list></list></block></script><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="alignment"/><l>top-top</l></list></block><script><block s="doTellTo"><block var="sprite1"/><block s="reifyScript"><script><block s="changeYPosition"><block s="reportDifference"><block s="reportDifference"><block s="reportAttributeOf"><l><option>top</option></l><block var="sprite2"/></block><block s="reportAttributeOf"><l><option>top</option></l><block var="sprite1"/></block></block><block var="stepSize"/></block></block></script><list></list></block><list></list></block></script><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="alignment"/><l>bottom-bottom</l></list></block><script><block s="doTellTo"><block var="sprite1"/><block s="reifyScript"><script><block s="changeYPosition"><block s="reportVariadicSum"><list><block s="reportDifference"><block s="reportAttributeOf"><l><option>bottom</option></l><block var="sprite2"/></block><block s="reportAttributeOf"><l><option>bottom</option></l><block var="sprite1"/></block></block><block var="stepSize"/></list></block></block></script><list></list></block><list></list></block></script><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="alignment"/><l>left-right</l></list></block><script><block s="doTellTo"><block var="sprite1"/><block s="reifyScript"><script><block s="changeXPosition"><block s="reportVariadicSum"><list><block s="reportDifference"><block s="reportAttributeOf"><l><option>right</option></l><block var="sprite2"/></block><block s="reportAttributeOf"><l><option>left</option></l><block var="sprite1"/></block></block><block var="stepSize"/></list></block></block></script><list></list></block><list></list></block></script><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="alignment"/><l>right-left</l></list></block><script><block s="doTellTo"><block var="sprite1"/><block s="reifyScript"><script><block s="changeXPosition"><block s="reportDifference"><block s="reportDifference"><block s="reportAttributeOf"><l><option>left</option></l><block var="sprite2"/></block><block s="reportAttributeOf"><l><option>right</option></l><block var="sprite1"/></block></block><block var="stepSize"/></block></block></script><list></list></block><list></list></block></script><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="alignment"/><l>top-bottom</l></list></block><script><block s="doTellTo"><block var="sprite1"/><block s="reifyScript"><script><block s="changeYPosition"><block s="reportDifference"><block s="reportDifference"><block s="reportAttributeOf"><l><option>bottom</option></l><block var="sprite2"/></block><block s="reportAttributeOf"><l><option>top</option></l><block var="sprite1"/></block></block><block var="stepSize"/></block></block></script><list></list></block><list></list></block></script><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="alignment"/><l>bottom-top</l></list></block><script><block s="doTellTo"><block var="sprite1"/><block s="reifyScript"><script><block s="changeYPosition"><block s="reportVariadicSum"><list><block s="reportDifference"><block s="reportAttributeOf"><l><option>top</option></l><block var="sprite2"/></block><block s="reportAttributeOf"><l><option>bottom</option></l><block var="sprite1"/></block></block><block var="stepSize"/></list></block></block></script><list></list></block><list></list></block></script><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="alignment"/><l>pivot-pivot</l></list></block><script><block s="doTellTo"><block var="sprite1"/><block s="reifyScript"><script><block s="doGotoObject"><block var="sprite2"/></block></script><list></list></block><list></list><comment w="90" collapsed="false">no offset in this case</comment></block></script><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="alignment"/><l>center horizontal</l></list></block><script><block s="doTellTo"><block var="sprite1"/><block s="reifyScript"><script><block s="changeXPosition"><block s="reportDifference"><block s="reportQuotient"><block s="reportVariadicSum"><list><block s="reportAttributeOf"><l><option>left</option></l><block var="sprite2"/></block><block s="reportAttributeOf"><l><option>right</option></l><block var="sprite2"/></block></list></block><l>2</l></block><block s="reportQuotient"><block s="reportVariadicSum"><list><block s="reportAttributeOf"><l><option>left</option></l><block var="sprite1"/></block><block s="reportAttributeOf"><l><option>right</option></l><block var="sprite1"/></block></list></block><l>2</l></block></block></block></script><list></list></block><list></list><comment w="90" collapsed="false">no offset in this case</comment></block></script><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="alignment"/><l>center vertical</l></list></block><script><block s="doTellTo"><block var="sprite1"/><block s="reifyScript"><script><block s="changeYPosition"><block s="reportDifference"><block s="reportQuotient"><block s="reportVariadicSum"><list><block s="reportAttributeOf"><l><option>top</option></l><block var="sprite2"/></block><block s="reportAttributeOf"><l><option>bottom</option></l><block var="sprite2"/></block></list></block><l>2</l></block><block s="reportQuotient"><block s="reportVariadicSum"><list><block s="reportAttributeOf"><l><option>top</option></l><block var="sprite1"/></block><block s="reportAttributeOf"><l><option>bottom</option></l><block var="sprite1"/></block></list></block><l>2</l></block></block></block></script><list></list></block><list></list><comment w="90" collapsed="false">no offset in this case</comment></block></script><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="alignment"/><l>center h &amp; v</l></list></block><script><block s="doTellTo"><block var="sprite1"/><block s="reifyScript"><script><block s="changeXPosition"><block s="reportDifference"><block s="reportQuotient"><block s="reportVariadicSum"><list><block s="reportAttributeOf"><l><option>left</option></l><block var="sprite2"/></block><block s="reportAttributeOf"><l><option>right</option></l><block var="sprite2"/></block></list></block><l>2</l></block><block s="reportQuotient"><block s="reportVariadicSum"><list><block s="reportAttributeOf"><l><option>left</option></l><block var="sprite1"/></block><block s="reportAttributeOf"><l><option>right</option></l><block var="sprite1"/></block></list></block><l>2</l></block></block></block><block s="changeYPosition"><block s="reportDifference"><block s="reportQuotient"><block s="reportVariadicSum"><list><block s="reportAttributeOf"><l><option>top</option></l><block var="sprite2"/></block><block s="reportAttributeOf"><l><option>bottom</option></l><block var="sprite2"/></block></list></block><l>2</l></block><block s="reportQuotient"><block s="reportVariadicSum"><list><block s="reportAttributeOf"><l><option>top</option></l><block var="sprite1"/></block><block s="reportAttributeOf"><l><option>bottom</option></l><block var="sprite1"/></block></list></block><l>2</l></block></block></block></script><list></list><comment w="90" collapsed="false">no offset in this case</comment></block><list></list></block></script><script><custom-block s="error %s"><l>Unknow alignment...</l></custom-block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block></script><scripts><comment x="482" y="260.20000000000005" w="304" collapsed="false">v1.00 : Original block : only left alignment&#xD;v1.01 : Fusion of 4 blocks (left,right,top,bottom) into 1 block&#xD;            Adding alignment parameter (left,right,top,bottom)&#xD;v1.02 : More alignment parameters (now left-left,right-right,&#xD;            top-top,bottom-bottom,center horizontal,center vertical,&#xD;            left-right,right-left,top-bottom,bottom-top,pivot-pivot)&#xD;v1.03 : Adding offset parameter</comment></scripts></block-definition><block-definition s="distribute sprites: %&apos;sprites&apos; %&apos;direction&apos; on the stage ( keep natural order? %&apos;naturalOrder?&apos; )" type="command" category="Design helpers"><comment x="0" y="0" w="260" collapsed="false">Distribute a list of sprite on the stage with the same spacing between sprites&#xD;&#xD;Sprites: Write sprites name into the variadic slot or you can use the helper block (an object picker).&#xD;&#xD;Sprite can be: the name of a sprite, an object (like my self or a clone), a list of object (like&quot;my other sprites&quot; or your own list)&#xD;&#xD;keep natural order : &#xD;    true: display sprites on the screen in natural order&#xD;    (left to right / top to botton) order to&#xD;    false: display sprites on the screen ordered in order&#xD;    of the parameters&#xD;&#xD;See inside the block for an example of how to use the helper block to pick a sprite.&#xD;&#xD;Block by Loucheman v1.1</comment><header></header><code></code><translations></translations><inputs><input type="%mult%txt"></input><input type="%txt" readonly="true">vertically<options>vertically&#xD;horizontally</options></input><input type="%b">true</input></inputs><script><custom-block s="// %mlt"><l>&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;</l></custom-block><block s="doWarp"><script><block s="doSetVar"><l>sprites</l><block s="reportListAttribute"><l><option>flatten</option></l><block var="sprites"/></block><comment w="571" collapsed="true">to accept a list into the slot: you can mix list and object (you can use block like &quot;my other sprites&quot; directly into a slot</comment></block><block s="doSetVar"><l>sprites</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportIsA"><block var="value"/><l><option>sprite</option></l></block><block var="value"/><block s="reportObject"><block var="value"/></block></block></autolambda><list><l>value</l></list></block><block var="sprites"/></block><comment w="90" collapsed="false">convert descriptions into object if not already an real object: so you can mix real object with sprites names (description)</comment></block><block s="doIf"><block s="reportNot"><block s="reportVariadicAnd"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIsA"><block var="value"/><l><option>sprite</option></l></block></autolambda><list><l>value</l></list></block><block var="sprites"/></block></block></block><script><custom-block s="error %s"><l>Only sprites are allowed...</l></custom-block></script><list></list></block><block s="doSetVar"><l>sprites</l><custom-block s="$flash remove duplicates from %l"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportObject"><l></l></block></autolambda><list></list></block><block var="sprites"/></block></custom-block><comment w="81" collapsed="false">no duplicated sprites allowed...</comment></block><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="direction"/><l>vertically</l></list></block><script><custom-block s="// %mlt"><l>vertically</l></custom-block><block s="doIf"><block var="naturalOrder?"/><script><block s="doSetVar"><l>sprites</l><block s="reportListItem"><l>1</l><block s="reportListAttribute"><l><option>columns</option></l><custom-block s="$flash sort %l ordering with %predRing"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportNewList"><list><l></l><block s="reportAttributeOf"><l><option>top</option></l><l></l></block></list></block></autolambda><list></list></block><block var="sprites"/></block><block s="reifyPredicate"><autolambda><block s="reportVariadicGreaterThan"><list><block s="reportListItem"><l>2</l><l/></block><block s="reportListItem"><l>2</l><l/></block></list></block></autolambda><list></list></block></custom-block></block></block></block></script><list></list></block><block s="doSetVar"><l>sprites</l><block s="reportListAttribute"><l><option>reverse</option></l><block var="sprites"/></block><comment w="252.99999999999997" collapsed="true">reverse: because draw botton to top</comment></block><custom-block s="let %upvar be %s"><l>spacing</l><block s="reportQuotient"><block s="reportDifference"><block s="reportAttributeOf"><l><option>height</option></l><l>Stage</l></block><block s="reportVariadicSum"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportAttributeOf"><l><option>height</option></l><block var="value"/></block></autolambda><list><l>value</l></list></block><block var="sprites"/></block></block></block><block s="reportVariadicSum"><list><block s="reportListAttribute"><l><option>length</option></l><block var="sprites"/></block><l>1</l></list></block></block></custom-block><custom-block s="let %upvar be %s"><l>where to left align</l><block s="reportVariadicSum"><list><block s="reportAttributeOf"><l><option>bottom</option></l><l>Stage</l></block><block var="spacing"/></list></block></custom-block><custom-block s="%upvar for each %upvar of %l %ca"><l>#</l><l>item</l><block var="sprites"/><script><block s="doTellTo"><block var="item"/><block s="reifyScript"><script><block s="changeYPosition"><block s="reportDifference"><block var="where"/><block s="reportAttributeOf"><l><option>bottom</option></l><block s="reportGet"><l><option>self</option></l></block></block></block></block></script><list><l>where</l></list></block><list><block var="where to left align"/></list></block><block s="doChangeVar"><l>where to left align</l><block s="reportVariadicSum"><list><block s="reportAttributeOf"><l><option>height</option></l><block var="item"/></block><block var="spacing"/></list></block></block></script></custom-block></script><script><custom-block s="// %mlt"><l>horizontally</l></custom-block><block s="doIf"><block var="naturalOrder?"/><script><block s="doSetVar"><l>sprites</l><block s="reportListItem"><l>1</l><block s="reportListAttribute"><l><option>columns</option></l><custom-block s="$flash sort %l ordering with %predRing"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportNewList"><list><l></l><block s="reportAttributeOf"><l><option>left</option></l><l></l></block></list></block></autolambda><list></list></block><block var="sprites"/></block><block s="reifyPredicate"><autolambda><block s="reportVariadicLessThan"><list><block s="reportListItem"><l>2</l><l/></block><block s="reportListItem"><l>2</l><l/></block></list></block></autolambda><list></list></block></custom-block></block></block></block></script><list></list></block><custom-block s="let %upvar be %s"><l>spacing</l><block s="reportQuotient"><block s="reportDifference"><block s="reportAttributeOf"><l><option>width</option></l><l>Stage</l></block><block s="reportVariadicSum"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportAttributeOf"><l><option>width</option></l><block var="value"/></block></autolambda><list><l>value</l></list></block><block var="sprites"/></block></block></block><block s="reportVariadicSum"><list><block s="reportListAttribute"><l><option>length</option></l><block var="sprites"/></block><l>1</l></list></block></block></custom-block><custom-block s="let %upvar be %s"><l>where to left align</l><block s="reportVariadicSum"><list><block s="reportAttributeOf"><l><option>left</option></l><l>Stage</l></block><block var="spacing"/></list></block></custom-block><custom-block s="%upvar for each %upvar of %l %ca"><l>#</l><l>item</l><block var="sprites"/><script><block s="doTellTo"><block var="item"/><block s="reifyScript"><script><block s="changeXPosition"><block s="reportDifference"><block var="where"/><block s="reportAttributeOf"><l><option>left</option></l><block s="reportGet"><l><option>self</option></l></block></block></block></block></script><list><l>where</l></list></block><list><block var="where to left align"/></list></block><block s="doChangeVar"><l>where to left align</l><block s="reportVariadicSum"><list><block s="reportAttributeOf"><l><option>width</option></l><block var="item"/></block><block var="spacing"/></list></block></block></script></custom-block></script></block></script></block></script><scripts><script x="556.0000000000001" y="570.1666666666664"><custom-block s="distribute free space between sprites: %mult%txt %txt ( keep natural order? %b )"><list><custom-block s="helper: sprite picker %txt"><l>Sprite</l></custom-block><block s="reportGet"><l><option>other sprites</option></l></block></list><l>vertically</l><l><bool>true</bool></l><comment w="90" collapsed="false">you can mix non-object with real object</comment></custom-block></script><script x="554" y="504.88095238095207"><custom-block s="distribute free space between sprites: %mult%txt %txt ( keep natural order? %b )"><list><custom-block s="helper: sprite picker %txt"><l>Sprite</l></custom-block><l></l></list><l>vertically</l><l><bool>true</bool></l><comment w="122.00000000000001" collapsed="false">how to use helper block</comment></custom-block></script><script x="556.4285714285714" y="639.1666666666669"><custom-block s="distribute free space between sprites: %mult%txt %txt ( keep natural order? %b )"><list><custom-block s="helper: sprite picker %txt"><l>Sprite</l></custom-block><l>Sprite2</l></list><l>vertically</l><l><bool>true</bool></l><comment w="90" collapsed="false">you can write the sprite name directely into the slot</comment></custom-block></script><script x="556.2857142857143" y="707.0571428571428"><custom-block s="distribute free space between sprites: %mult%txt %txt ( keep natural order? %b )"><list><custom-block s="helper: sprite picker %txt"><l>Sprite</l></custom-block><block s="reportNewList"><list><custom-block s="helper: sprite picker %txt"><l>Sprite2</l></custom-block><l>Sprite3</l><block s="reportGet"><l><option>other sprites</option></l></block></list></block></list><l>vertically</l><l><bool>true</bool></l><comment w="90" collapsed="false">you can put list directly into a slot</comment></custom-block></script><script x="556.5714285714284" y="797.4619047619046"><custom-block s="distribute free space between sprites: %mult%txt %txt ( keep natural order? %b )"><block s="reportNewList"><list><custom-block s="helper: sprite picker %txt"><l>Sprite2</l></custom-block><l>Sprite3</l><block s="reportGet"><l><option>other sprites</option></l></block></list></block><l>vertically</l><l><bool>true</bool></l><comment w="90" collapsed="false">you can put list into the variadic control</comment></custom-block></script></scripts></block-definition><block-definition s="distribute free space between sprites: %&apos;sprites&apos; %&apos;direction&apos; ( keep natural order? %&apos;naturalOrder?&apos; )" type="command" category="Design helpers"><comment x="0" y="0" w="260" collapsed="false">Distribute a list of sprite on the stage with the same spacing between sprites&#xD;&#xD;Sprites: Write sprites name into the variadic slot or you can use the helper block (an object picker).  You need at least 3 sprite to see an effect...&#xD;&#xD;Sprite can be: the name of a sprite, an object (like my self or a clone), a list of object (like&quot;my other sprites&quot; or your own list)&#xD;&#xD;keep natural order : &#xD;    true: display sprites on the screen in natural order&#xD;    (left to right / top to botton) order to&#xD;    false: display sprites on the screen ordered in order&#xD;    of the parameters&#xD;&#xD;See inside the block for an example of how to use the helper block to pick a sprite.&#xD;&#xD;Block by Loucheman v1.1</comment><header></header><code></code><translations></translations><inputs><input type="%mult%txt"></input><input type="%txt" readonly="true">vertically<options>vertically&#xD;horizontally</options></input><input type="%b">true</input></inputs><script><custom-block s="// %mlt"><l>&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;</l></custom-block><block s="doWarp"><script><block s="doSetVar"><l>sprites</l><block s="reportListAttribute"><l><option>flatten</option></l><block var="sprites"/></block><comment w="571" collapsed="true">to accept a list into the slot: you can mix list and object (you can use block like &quot;my other sprites&quot; directly into a slot</comment></block><block s="doSetVar"><l>sprites</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportIsA"><block var="value"/><l><option>sprite</option></l></block><block var="value"/><block s="reportObject"><block var="value"/></block></block></autolambda><list><l>value</l></list></block><block var="sprites"/></block><comment w="90" collapsed="false">convert descriptions into object if not already an real object: so you can mix real object with sprites names (description)</comment></block><block s="doIf"><block s="reportNot"><block s="reportVariadicAnd"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIsA"><block var="value"/><l><option>sprite</option></l></block></autolambda><list><l>value</l></list></block><block var="sprites"/></block></block></block><script><custom-block s="error %s"><l>Only sprites are allowed...</l></custom-block></script><list></list></block><block s="doSetVar"><l>sprites</l><custom-block s="$flash remove duplicates from %l"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportObject"><l></l></block></autolambda><list></list></block><block var="sprites"/></block></custom-block><comment w="81" collapsed="false">no duplicated sprites allowed...</comment></block><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="direction"/><l>vertically</l></list></block><script><custom-block s="// %mlt"><l>vertically</l></custom-block><block s="doIf"><block var="naturalOrder?"/><script><block s="doSetVar"><l>sprites</l><block s="reportListItem"><l>1</l><block s="reportListAttribute"><l><option>columns</option></l><custom-block s="$flash sort %l ordering with %predRing"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportNewList"><list><l></l><block s="reportAttributeOf"><l><option>top</option></l><l></l></block></list></block></autolambda><list></list></block><block var="sprites"/></block><block s="reifyPredicate"><autolambda><block s="reportVariadicGreaterThan"><list><block s="reportListItem"><l>2</l><l/></block><block s="reportListItem"><l>2</l><l/></block></list></block></autolambda><list></list></block></custom-block></block></block></block></script><list></list><comment w="260" collapsed="true">natural order: order by top of each sprite</comment></block><block s="doSetVar"><l>sprites</l><block s="reportListAttribute"><l><option>reverse</option></l><block var="sprites"/></block><comment w="252.99999999999997" collapsed="true">reverse: because draw botton to top</comment></block><custom-block s="let %upvar be %s"><l>spacing</l><block s="reportQuotient"><block s="reportDifference"><block s="reportDifference"><block s="reportVariadicMax"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportAttributeOf"><l><option>top</option></l><block var="value"/></block></autolambda><list><l>value</l></list></block><block var="sprites"/></block></block><block s="reportVariadicMin"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportAttributeOf"><l><option>bottom</option></l><block var="value"/></block></autolambda><list><l>value</l></list></block><block var="sprites"/></block></block></block><block s="reportVariadicSum"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportAttributeOf"><l><option>height</option></l><block var="value"/></block></autolambda><list><l>value</l></list></block><block var="sprites"/></block></block></block><block s="reportDifference"><block s="reportListAttribute"><l><option>length</option></l><block var="sprites"/></block><l>1</l></block></block></custom-block><custom-block s="let %upvar be %s"><l>where to align</l><block s="reportVariadicMin"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportAttributeOf"><l><option>bottom</option></l><block var="value"/></block></autolambda><list><l>value</l></list></block><block var="sprites"/></block></block><comment w="90" collapsed="false">find the lowest bottom from sprite list, will draw the 1st sprite on the botton from this point</comment></custom-block><custom-block s="%upvar for each %upvar of %l %ca"><l>#</l><l>item</l><block var="sprites"/><script><block s="doTellTo"><block var="item"/><block s="reifyScript"><script><block s="changeYPosition"><block s="reportDifference"><block var="where"/><block s="reportAttributeOf"><l><option>bottom</option></l><block s="reportGet"><l><option>self</option></l></block></block></block></block></script><list><l>where</l></list></block><list><block var="where to align"/></list></block><block s="doChangeVar"><l>where to align</l><block s="reportVariadicSum"><list><block s="reportAttributeOf"><l><option>height</option></l><block var="item"/></block><block var="spacing"/></list></block></block></script></custom-block></script><script><custom-block s="// %mlt"><l>horizontally</l></custom-block><block s="doIf"><block var="naturalOrder?"><comment w="260" collapsed="true">natural order: order by left of each sprite</comment></block><script><block s="doSetVar"><l>sprites</l><block s="reportListItem"><l>1</l><block s="reportListAttribute"><l><option>columns</option></l><custom-block s="$flash sort %l ordering with %predRing"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportNewList"><list><l></l><block s="reportAttributeOf"><l><option>left</option></l><l></l></block></list></block></autolambda><list></list></block><block var="sprites"/></block><block s="reifyPredicate"><autolambda><block s="reportVariadicLessThan"><list><block s="reportListItem"><l>2</l><l/></block><block s="reportListItem"><l>2</l><l/></block></list></block></autolambda><list></list></block></custom-block></block></block></block></script><list></list></block><custom-block s="let %upvar be %s"><l>spacing</l><block s="reportQuotient"><block s="reportDifference"><block s="reportDifference"><block s="reportVariadicMax"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportAttributeOf"><l><option>right</option></l><block var="value"/></block></autolambda><list><l>value</l></list></block><block var="sprites"/></block></block><block s="reportVariadicMin"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportAttributeOf"><l><option>left</option></l><block var="value"/></block></autolambda><list><l>value</l></list></block><block var="sprites"/></block></block></block><block s="reportVariadicSum"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportAttributeOf"><l><option>width</option></l><block var="value"/></block></autolambda><list><l>value</l></list></block><block var="sprites"/></block></block></block><block s="reportDifference"><block s="reportListAttribute"><l><option>length</option></l><block var="sprites"/></block><l>1</l></block></block></custom-block><custom-block s="let %upvar be %s"><l>where to align</l><block s="reportVariadicMin"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportAttributeOf"><l><option>left</option></l><block var="value"/></block></autolambda><list><l>value</l></list></block><block var="sprites"/></block></block><comment w="90" collapsed="false">find the leftiest (?) from sprite list, will draw the 1st sprite on the left from this point</comment></custom-block><custom-block s="%upvar for each %upvar of %l %ca"><l>#</l><l>item</l><block var="sprites"/><script><block s="doTellTo"><block var="item"/><block s="reifyScript"><script><block s="changeXPosition"><block s="reportDifference"><block var="where"/><block s="reportAttributeOf"><l><option>left</option></l><block s="reportGet"><l><option>self</option></l></block></block></block></block></script><list><l>where</l></list></block><list><block var="where to align"/></list></block><block s="doChangeVar"><l>where to align</l><block s="reportVariadicSum"><list><block s="reportAttributeOf"><l><option>width</option></l><block var="item"/></block><block var="spacing"/></list></block></block></script></custom-block></script></block></script></block></script><scripts><script x="569" y="514.1666666666665"><custom-block s="distribute free space between sprites: %mult%txt %txt ( keep natural order? %b )"><list><custom-block s="helper: sprite picker %txt"><l>Sprite</l></custom-block><custom-block s="helper: sprite picker %txt"><l>Sprite2</l></custom-block></list><l>vertically</l><l><bool>false</bool></l><comment w="122.00000000000001" collapsed="false">how to use helper block</comment></custom-block></script><script x="569.5714285714287" y="576.595238095238"><custom-block s="distribute free space between sprites: %mult%txt %txt ( keep natural order? %b )"><list><custom-block s="helper: sprite picker %txt"><l>Sprite</l></custom-block><block s="reportGet"><l><option>other sprites</option></l></block></list><l>vertically</l><l><bool>false</bool></l><comment w="90" collapsed="false">you can mix non-object with real object</comment></custom-block></script><script x="568.5714285714286" y="638.4523809523811"><custom-block s="distribute free space between sprites: %mult%txt %txt ( keep natural order? %b )"><list><custom-block s="helper: sprite picker %txt"><l>Sprite</l></custom-block><l>Sprite2</l></list><l>vertically</l><l><bool>false</bool></l><comment w="90" collapsed="false">you can write the sprite name directely into the slot</comment></custom-block></script><script x="569.1428571428571" y="696.342857142857"><custom-block s="distribute free space between sprites: %mult%txt %txt ( keep natural order? %b )"><list><custom-block s="helper: sprite picker %txt"><l>Sprite</l></custom-block><block s="reportNewList"><list><custom-block s="helper: sprite picker %txt"><l>Sprite2</l></custom-block><l>Sprite3</l><block s="reportGet"><l><option>other sprites</option></l></block></list></block></list><l>vertically</l><l><bool>false</bool></l><comment w="90" collapsed="false">you can put list directly into a slot</comment></custom-block></script><script x="569.4285714285713" y="790.3190476190474"><custom-block s="distribute free space between sprites: %mult%txt %txt ( keep natural order? %b )"><block s="reportNewList"><list><custom-block s="helper: sprite picker %txt"><l>Sprite2</l></custom-block><l>Sprite3</l><block s="reportGet"><l><option>other sprites</option></l></block></list></block><l>vertically</l><l><bool>false</bool></l><comment w="90" collapsed="false">you can put list into the variadic control</comment></custom-block></script></scripts></block-definition><block-definition s="helper: sprite picker %&apos;sprite&apos;" type="reporter" category="Design helpers"><comment x="0" y="0" w="182" collapsed="false">Object name picker&#xD;&#xD;It&apos;s an helper block for the distribute horizontally and vertically blocks&#xD;&#xD;See inside the block for more info...&#xD;&#xD;Block by Loucheman</comment><header></header><code></code><translations></translations><inputs><input type="%txt"><options>§_objectsMenu</options></input></inputs><script><block s="doReport"><block var="sprite"/></block></script><scripts><script x="10" y="264.3666666666666"><custom-block s="distribute sprites: %mult%txt %txt on the stage ( keep natural order? %b )"><list><custom-block s="helper: sprite picker %txt"><l>Sprite</l></custom-block></list><l>vertically</l><l/></custom-block></script><comment x="11.999999999999998" y="162.2" w="293" collapsed="true">How to use it ?</comment><comment x="100" y="196.2" w="95.99999999999999" collapsed="false">Drop it into this slot&#xD;&#xD;             V</comment></scripts></block-definition><block-definition s="set pivot to my center" type="command" category="Design helpers"><comment x="0" y="0" w="163" collapsed="false">Set the pivot (rotation center) in the middle of the costume (x &amp; y) &#xD;&#xD;Block by Loucheman v1.0</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l><option>my rotation x</option></l><custom-block s="average %mult%n"><list><block s="reportGet"><l><option>left</option></l></block><block s="reportGet"><l><option>right</option></l></block></list></custom-block></block><block s="doSetVar"><l><option>my rotation y</option></l><custom-block s="average %mult%n"><list><block s="reportGet"><l><option>bottom</option></l></block><block s="reportGet"><l><option>top</option></l></block></list></custom-block></block></script></block-definition><block-definition s="move horizontal pivot to %&apos;where&apos;" type="command" category="Design helpers"><comment x="0" y="0" w="163" collapsed="false">Set the horizontal pivot (rotation center) to the left, center or right of the sprite.&#xD;&#xD;Block by Loucheman v1.0</comment><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true">left<options>left&#xD;center&#xD;right</options></input></inputs><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="where"/><l>left</l></list></block><script><block s="doSetVar"><l><option>my rotation x</option></l><block s="reportGet"><l><option>left</option></l></block></block></script><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="where"/><l>center</l></list></block><script><block s="doSetVar"><l><option>my rotation x</option></l><custom-block s="average %mult%n"><list><block s="reportGet"><l><option>left</option></l></block><block s="reportGet"><l><option>right</option></l></block></list></custom-block></block></script><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="where"/><l>right</l></list></block><script><block s="doSetVar"><l><option>my rotation x</option></l><block s="reportGet"><l><option>right</option></l></block></block></script><script><custom-block s="error %s"><l>Invalid parameter</l></custom-block></script></block></script></block></script></block></script></block-definition><block-definition s="move vertical pivot to %&apos;where&apos;" type="command" category="Design helpers"><comment x="0" y="0" w="163" collapsed="false">Set the vertical pivot (rotation center) to the top, center or bottom of the sprite.&#xD;&#xD;Block by Loucheman v1.0</comment><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true">top<options>top&#xD;center&#xD;bottom</options></input></inputs><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="where"/><l>top</l></list></block><script><block s="doSetVar"><l><option>my rotation y</option></l><block s="reportGet"><l><option>top</option></l></block></block></script><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="where"/><l>center</l></list></block><script><block s="doSetVar"><l><option>my rotation y</option></l><custom-block s="average %mult%n"><list><block s="reportGet"><l><option>bottom</option></l></block><block s="reportGet"><l><option>top</option></l></block></list></custom-block></block></script><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="where"/><l>bottom</l></list></block><script><block s="doSetVar"><l><option>my rotation y</option></l><block s="reportGet"><l><option>bottom</option></l></block></block></script><script><custom-block s="error %s"><l>Invalid parameter</l></custom-block></script></block></script></block></script></block></script></block-definition><block-definition s="$add-1-0-0-0 $color-1-0-0-0 $color-1-0-0-0 $functionality-1-0-0-0" type="command" category="IDE tools"><comment x="0" y="0" w="90" collapsed="false">by dardoro</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>//Based on Snap! code base with minor modification&#xD;&#xD;if( !InputSlotDialogMorph.prototype._createSlotTypeButtons){&#xD;InputSlotDialogMorph.prototype._createSlotTypeButtons = InputSlotDialogMorph.prototype.createSlotTypeButtons  &#xD;}  &#xD;&#xD;InputSlotDialogMorph.prototype.createSlotTypeButtons = function () {&#xD;  this.addSlotTypeButton(&apos;Color&apos;, &apos;%clr&apos;);&#xD;  this._createSlotTypeButtons();  &#xD;}&#xD;&#xD;InputSlotDialogMorph.prototype.fixSlotsLayout = function () {&#xD;    var slots = this.slots,&#xD;        scale = SyntaxElementMorph.prototype.scale,&#xD;        xPadding = 10 * scale,&#xD;        ypadding = 14 * scale,&#xD;        bh = (fontHeight(10) / 1.2 + 15) * scale, // slot type button height&#xD;        ah = (fontHeight(10) / 1.2 + 10) * scale, // arity button height&#xD;        size = 13, // number slot type radio buttons&#xD;        cols = [&#xD;            slots.left() + xPadding,&#xD;            slots.left() + slots.width() / 3,&#xD;            slots.left() + slots.width() * 2 / 3&#xD;        ],&#xD;        rows = [&#xD;            slots.top() + ypadding,&#xD;            slots.top() + ypadding + bh,&#xD;            slots.top() + ypadding + bh * 2,&#xD;            slots.top() + ypadding + bh * 3,&#xD;            slots.top() + ypadding + bh * 4,&#xD;            slots.top() + ypadding + bh * 5,&#xD;&#xD;            slots.top() + ypadding + bh * 5 + ah,&#xD;            slots.top() + ypadding + bh * 5 + ah * 2&#xD;        ],&#xD;        idx,&#xD;        row = -1,&#xD;        col;&#xD;&#xD;    // slot types:&#xD;&#xD;    for (idx = 0; idx &lt; size; idx += 1) {&#xD;        col = idx % 3;&#xD;        if (idx % 3 === 0) {row += 1; }&#xD;        slots.children[idx].setPosition(new Point(&#xD;            cols[col],&#xD;            rows[row]&#xD;        ));&#xD;    }&#xD;&#xD;    // arity:&#xD;    col = 0;&#xD;    row = 5;&#xD;    for (idx = size; idx &lt; size + 3; idx += 1) {&#xD;        slots.children[idx].setPosition(new Point(&#xD;            cols[col],&#xD;            rows[row + idx - size]&#xD;        ));&#xD;    }&#xD;&#xD;    // default input&#xD;    this.slots.defaultInputLabel.setPosition(&#xD;        this.slots.radioButtonSingle.label.topRight().add(new Point(5, 0))&#xD;    );&#xD;    this.slots.defaultInputField.setCenter(&#xD;        this.slots.defaultInputLabel.center().add(new Point(&#xD;            this.slots.defaultInputField.width() / 2&#xD;                + this.slots.defaultInputLabel.width() / 2 + 5,&#xD;            0&#xD;        ))&#xD;    );&#xD;    this.slots.defaultSwitch.setCenter(&#xD;        this.slots.defaultInputLabel.center().add(new Point(&#xD;            this.slots.defaultSwitch.width() / 2&#xD;                + this.slots.defaultInputLabel.width() / 2 + 5,&#xD;            0&#xD;        ))&#xD;    );&#xD;&#xD;    // loop arrow&#xD;    this.slots.loopArrow.setPosition(this.slots.defaultInputLabel.position());&#xD;    this.slots.settingsButton.setPosition(&#xD;        this.slots.bottomRight().subtract(&#xD;            this.slots.settingsButton.extent().add(&#xD;                this.padding + this.slots.border&#xD;            )&#xD;        )&#xD;    );&#xD;&#xD;    this.slots.changed();&#xD;};&#xD;</l></block><list></list></block></script></block-definition><block-definition s="$add-1-0-0-0 $move-1-128-0-0 $to-1-128-0-0 $top-1-128-0-0 $menu-1-0-0-0 $in-1-0-0-0 $snap-1-0-0-0 $(shift+right-1-0-0-0 $click-1-0-0-0 $on-1-0-0-0 $the-1-0-0-0 $block)-1-0-0-0" type="command" category="IDE tools"><comment x="0" y="0" w="174.2857142857143" collapsed="false">Adding a menu item when you shift+right-click on a custum block to change the displayed order in the palette of this block&#xD;&#xD;v1.1 - move to the top, bottom, move up, move down !&#xD;&#xD;Thk to Dardoro</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIfElse"><custom-block s="is JS enable?"></custom-block><script><block s="doRun"><block s="reportJSFunction"><list></list><l>BlockMorph.prototype._userMenu ??= BlockMorph.prototype.userMenu;&#xD;&#xD;function shiftArrItem( arr, item, shift){&#xD;  let from = arr.indexOf( item);&#xD;  if( from &lt; 0) return;&#xD;  let to = from + shift;&#xD;  to = to &lt; 0 ? 0 : to;&#xD;  arr.splice( to, 0, arr.splice( from, 1)[0]);&#xD;}&#xD;&#xD;function moveBlock( this_block, shift){&#xD; let rcvr = this_block.scriptTarget()&#xD;    ,ide = this_block.parentThatIsA( IDE_Morph)&#xD;    ,def = this_block.isGlobal ? this_block.definition : rcvr.getMethod( self.blockSpec)&#xD;    ,blocks = this_block.isGlobal ? ide.stage.globalBlocks : rcvr.customBlocks&#xD; ;&#xD; &#xD; blocks.sort( (a,b) =&gt; a.category.localeCompare(b.category));//reorder acros categories    &#xD; shiftArrItem( blocks, def, shift);&#xD; // * force refresh *&#xD; ide.recordUnsavedChanges();&#xD; ide.flushPaletteCache();&#xD; ide.refreshPalette();&#xD;}&#xD;&#xD;BlockMorph.prototype.userMenu = function(){&#xD;let menu = this._userMenu()&#xD;   ,shiftClicked = world.currentKey === 16;&#xD;&#xD; if( !(this.isCustomBlock &amp;&amp; shiftClicked)) &#xD;   return menu;&#xD;&#xD; menu.addItem(&#xD;     "move to top ^",&#xD;     ()=&gt;moveBlock( this, Number.MIN_SAFE_INTEGER)&#xD; );&#xD; menu.addItem(&#xD;     "move up",&#xD;     ()=&gt;moveBlock( this, -1)&#xD; );&#xD; menu.addItem(&#xD;     "move down",&#xD;     ()=&gt;moveBlock( this, 1)&#xD; );&#xD; menu.addItem(&#xD;     "move to bottom _",&#xD;     ()=&gt;moveBlock( this, Number.MAX_SAFE_INTEGER)&#xD; );&#xD;&#xD;return menu;&#xD;}&#xD;</l></block><list></list></block></script><script><custom-block s="error %txt"><l>You should enable JS...</l></custom-block></script></block></script><scripts><script x="832" y="139.63333333333327"><block s="doRun"><block s="reportJSFunction"><list></list><l>if( CustomCommandBlockMorph.prototype._userMenu){&#xD;  CustomCommandBlockMorph.prototype.userMenu = CustomCommandBlockMorph.prototype._userMenu;&#xD;  delete CustomCommandBlockMorph.prototype._userMenu&#xD;}</l></block><list></list><comment w="90" collapsed="false">v1.0 - just move to the top</comment></block><block s="doRun"><block s="reportJSFunction"><list></list><l>if( !CustomCommandBlockMorph.prototype._userMenu){&#xD;  CustomCommandBlockMorph.prototype._userMenu = CustomCommandBlockMorph.prototype.userMenu;&#xD;}&#xD;&#xD;&#xD;&#xD;CustomCommandBlockMorph.prototype.userMenu = function(){&#xD;var&#xD; shiftClicked = world.currentKey === 16 &#xD; ,menu = this._userMenu();&#xD;&#xD; menu.addItem(&#xD;     "move block to top",&#xD;     function (){&#xD;       var rcvr = this.scriptTarget(),&#xD;           ide = this.parentThatIsA(IDE_Morph),&#xD;           def = this.isGlobal ? this.definition : rcvr.getMethod(this.blockSpec),&#xD;           spec = def.spec;&#xD;    &#xD;       if (this.isGlobal) {&#xD;          ide.stage.globalBlocks = ide.stage.globalBlocks.filter(item =&gt; item !== def);&#xD;&#xD;          ide.stage.globalBlocks.unshift(def);&#xD;       } else {&#xD;          rcvr.customBlocks = rcvr.customBlocks.filter(item =&gt; item !== def);&#xD;          rcvr.customBlocks.unshift(def);&#xD;&#xD;       }&#xD;&#xD;       ide.flushPaletteCache();&#xD;       ide.refreshPalette();&#xD;       ide.recordUnsavedChanges();&#xD; &#xD;       }&#xD;    );&#xD;&#xD; menu.addItem(&#xD;     "move block up",&#xD;     function (){&#xD;       var rcvr = this.scriptTarget(),&#xD;           ide = this.parentThatIsA(IDE_Morph),&#xD;           def = this.isGlobal ? this.definition : rcvr.getMethod(this.blockSpec),&#xD;           spec = def.spec;&#xD;       if (this.isGlobal) {&#xD;          let newPos = ide.stage.globalBlocks.indexOf(def);&#xD;          ide.stage.globalBlocks = ide.stage.globalBlocks.filter(item =&gt; item !== def);&#xD;          ide.stage.globalBlocks.splice(newPos-1,0,def);&#xD;       } else {&#xD;          let newPos = rcvr.customBlocks.indexOf(def);&#xD;          rcvr.customBlocks = rcvr.customBlocks.filter(item =&gt; item !== def);&#xD;          rcvr.customBlocks.splice(newPos-1,0,def);&#xD;       }&#xD;&#xD;       ide.flushPaletteCache();&#xD;       ide.refreshPalette();&#xD;       ide.recordUnsavedChanges();&#xD; &#xD;       }&#xD;    );&#xD;&#xD; menu.addItem(&#xD;     "move block down",&#xD;     function (){&#xD;       var rcvr = this.scriptTarget(),&#xD;           ide = this.parentThatIsA(IDE_Morph),&#xD;           def = this.isGlobal ? this.definition : rcvr.getMethod(this.blockSpec),&#xD;           spec = def.spec;&#xD;       if (this.isGlobal) {&#xD;          let newPos = ide.stage.globalBlocks.indexOf(def);&#xD;          ide.stage.globalBlocks = ide.stage.globalBlocks.filter(item =&gt; item !== def);&#xD;          ide.stage.globalBlocks.splice(newPos+1,0,def);&#xD;       } else {&#xD;          let newPos = rcvr.customBlocks.indexOf(def);&#xD;          rcvr.customBlocks = rcvr.customBlocks.filter(item =&gt; item !== def);&#xD;          rcvr.customBlocks.splice(newPos+1,0,def);&#xD;          rcvr.customBlocks.shift(def);&#xD;       }&#xD;&#xD;       ide.flushPaletteCache();&#xD;       ide.refreshPalette();&#xD;       ide.recordUnsavedChanges();&#xD; &#xD;       }&#xD;    );&#xD;&#xD;return menu;&#xD;}&#xD;</l></block><list></list></block><block s="doRun"><block s="reportJSFunction"><list></list><l>if( CustomReporterBlockMorph.prototype._userMenu){&#xD;  CustomReporterBlockMorph.prototype.userMenu = CustomReporterBlockMorph.prototype._userMenu;&#xD;  delete CustomReporterBlockMorph.prototype._userMenu&#xD;}</l></block><list></list></block><block s="doRun"><block s="reportJSFunction"><list></list><l>if( !CustomReporterBlockMorph.prototype._userMenu){&#xD;  CustomReporterBlockMorph.prototype._userMenu = CustomReporterBlockMorph.prototype.userMenu;&#xD;}&#xD;&#xD;&#xD;&#xD;CustomReporterBlockMorph.prototype.userMenu = function(){&#xD;var&#xD; shiftClicked = world.currentKey === 16 &#xD; ,menu = this._userMenu();&#xD;&#xD; menu.addItem(&#xD;     "move block to top",&#xD;     function (){&#xD;       var rcvr = this.scriptTarget(),&#xD;           ide = this.parentThatIsA(IDE_Morph),&#xD;           def = this.isGlobal ? this.definition : rcvr.getMethod(this.blockSpec),&#xD;           spec = def.spec;&#xD;    &#xD;       if (this.isGlobal) {&#xD;          ide.stage.globalBlocks = ide.stage.globalBlocks.filter(item =&gt; item !== def);&#xD;          ide.stage.globalBlocks.unshift(def);&#xD;       } else {&#xD;          rcvr.customBlocks = rcvr.customBlocks.filter(item =&gt; item !== def);&#xD;          rcvr.customBlocks.unshift(def);&#xD;&#xD;       }&#xD;&#xD;       ide.flushPaletteCache();&#xD;       ide.refreshPalette();&#xD;       ide.recordUnsavedChanges();&#xD; &#xD;       }&#xD;    );&#xD;&#xD; menu.addItem(&#xD;     "move block up",&#xD;     function (){&#xD;       var rcvr = this.scriptTarget(),&#xD;           ide = this.parentThatIsA(IDE_Morph),&#xD;           def = this.isGlobal ? this.definition : rcvr.getMethod(this.blockSpec),&#xD;           spec = def.spec;&#xD;       if (this.isGlobal) {&#xD;          let newPos = ide.stage.globalBlocks.indexOf(def);&#xD;          ide.stage.globalBlocks = ide.stage.globalBlocks.filter(item =&gt; item !== def);&#xD;          ide.stage.globalBlocks.splice(newPos-1,0,def);&#xD;       } else {&#xD;          let newPos = rcvr.customBlocks.indexOf(def);&#xD;          rcvr.customBlocks = rcvr.customBlocks.filter(item =&gt; item !== def);&#xD;          rcvr.customBlocks.splice(newPos-1,0,def);&#xD;       }&#xD;&#xD;       ide.flushPaletteCache();&#xD;       ide.refreshPalette();&#xD;       ide.recordUnsavedChanges();&#xD; &#xD;       }&#xD;    );&#xD;&#xD; menu.addItem(&#xD;     "move block down",&#xD;     function (){&#xD;       var rcvr = this.scriptTarget(),&#xD;           ide = this.parentThatIsA(IDE_Morph),&#xD;           def = this.isGlobal ? this.definition : rcvr.getMethod(this.blockSpec),&#xD;           spec = def.spec;&#xD;       if (this.isGlobal) {&#xD;          let newPos = ide.stage.globalBlocks.indexOf(def);&#xD;          ide.stage.globalBlocks = ide.stage.globalBlocks.filter(item =&gt; item !== def);&#xD;          ide.stage.globalBlocks.splice(newPos+1,0,def);&#xD;       } else {&#xD;          let newPos = rcvr.customBlocks.indexOf(def);&#xD;          rcvr.customBlocks = rcvr.customBlocks.filter(item =&gt; item !== def);&#xD;          rcvr.customBlocks.splice(newPos+1,0,def);&#xD;          rcvr.customBlocks.shift(def);&#xD;       }&#xD;&#xD;       ide.flushPaletteCache();&#xD;       ide.refreshPalette();&#xD;       ide.recordUnsavedChanges();&#xD; &#xD;       }&#xD;    );&#xD;&#xD;return menu;&#xD;}&#xD;</l></block><list></list></block></script></scripts></block-definition><block-definition s="$find-1-0-0-0 %&apos;search block&apos; $in-1-0-0-0 $project-1-0-0-0" type="reporter" category="IDE tools"><comment x="0" y="0" w="270.75162760416674" collapsed="false">Finds each instance of a block or variable in a project and shows the script(s) it is in (minus any hat block)&#xD;&#xD;If you enter plain text, it will return scripts that contain that text.&#xD;&#xD;Note:  You need to right-click and ringify the block/variable being searched for&#xD;&#xD;Block by Cymplecy</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doIf"><block s="reportNot"><block s="reportVariadicOr"><list><block s="reportIsA"><block var="search block"/><l><option>text</option></l></block><block s="reportIsA"><block var="search block"/><l><option>number</option></l></block></list></block></block><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="search block"/><l><option>blocks</option></l></block></block><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block s="reifyReporter"><autolambda><block var="result"/></autolambda><list></list></block><l><option>blocks</option></l></block></block></list></block><script><block s="doSetVar"><l>search block</l><block s="reportListItem"><l>2</l><block s="reportTextSplit"><block var="search block"/><l><option>blocks</option></l></block></block></block></script><script><block s="doSetVar"><l>search block</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="search block"/><l><option>blocks</option></l></block></block></block></script></block></script><list></list></block><block s="doSetVar"><l>result</l><block s="reportConcatenatedLists"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportNewList"><list><block s="reportListItem"><l>1</l><block var="key"/></block><l></l></list></block></autolambda><list></list></block><block s="reportCDR"><block var="key"/></block></block></autolambda><list><l>key</l></list></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportVariadicGreaterThan"><list><block s="reportListAttribute"><l><option>length</option></l><block var="result"/></block><l>1</l></list></block></autolambda><list><l>result</l></list></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><block s="reportAskFor"><block var="sprite ref"/><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>name</option></l></block></autolambda><list></list></block><list></list></block></list></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportListContainsItem"><block s="reportListAttribute"><l><option>flatten</option></l><block s="reportTextSplit"><block var="value"/><l><option>blocks</option></l></block></block><block var="search block"/></block></autolambda><list><l>value</l></list></block><block s="reportAskFor"><block var="sprite ref"/><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>scripts</option></l></block></autolambda><list></list></block><list></list></block></block></list></block></autolambda><list><l>sprite ref</l></list></block><block s="reportCONS"><block s="reportGet"><l><option>self</option></l></block><block s="reportCONS"><block s="reportGet"><l><option>stage</option></l></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><block s="reportAskFor"><block var="all sprites"/><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>parent</option></l></block></autolambda><list></list></block><list></list></block><l></l></list></block></autolambda><list><l>all sprites</l></list></block><block s="reportGet"><l><option>other sprites</option></l></block></block></block></block></block></block></block></block></block><block s="doReport"><block var="result"/></block></script></block-definition><block-definition s="$flash remove duplicates from %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" w="209" collapsed="false">Reports a new list whose items are the same as in the input list, except that if two or more equal items appear in the input list, only the last one is kept in the result.</comment><header></header><code></code><translations>ca:elimina els duplicats de _&#xD;</translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportListAttribute"><l><option>columns</option></l><block s="reportApplyExtension"><l>dta_analyze(list)</l><list><block var="data"/></list></block></block></block></block></script></block-definition><block-definition s="item at col: %&apos;col&apos; line: %&apos;row&apos; of %&apos;list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="reportListItem"><block var="col"/><block s="reportListItem"><block var="row"/><block var="list"/></block></block></block></script></block-definition><block-definition s="%&apos;#&apos; for each %&apos;item&apos; of %&apos;data&apos; %&apos;action&apos;" type="command" category="lists"><comment x="0" y="0" w="228.57142857142858" collapsed="false">This block carries out the given script for each item of the given list, like the primitive FOR EACH.&#xD;&#xD;What&apos;s different is that it provides the # variable, which will contain the item number in the list of each item in turn, 1 while processing item 1, and so on.</comment><header></header><code></code><translations>ca:_ per cada _ de _ _&#xD;</translations><inputs><input type="%upvar"></input><input type="%upvar"></input><input type="%l"></input><input type="%ca"></input></inputs><script><block s="doForEach"><l>inner item</l><block var="data"/><script><block s="doSetVar"><l>item</l><block var="inner item"/></block><block s="doChangeVar"><l>#</l><l>1</l></block><block s="doRun"><block var="action"/><list></list></block></script></block></script></block-definition><block-definition s="New delete %&apos;recNo&apos; of %&apos;list&apos;" type="command" category="lists"><comment x="0" y="0" w="90" collapsed="false">Delete multiple records from a list&#xD;&#xD;recNo should be greater than 0 otherwise it will be ignored&#xD;&#xD;by Loucheman</comment><header></header><code></code><translations></translations><inputs><input type="%mult%n"></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="recNo"/><l><option>list</option></l></block><script><block s="doWarp"><script><block s="doForEach"><l>record</l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportVariadicGreaterThan"><list><l></l><l>0</l></list></block></autolambda><list></list></block><custom-block s="$flash sort %l ordering with %predRing"><block var="recNo"/><block s="reifyPredicate"><autolambda><block s="reportVariadicGreaterThan"><list><l></l><l></l></list></block></autolambda><list></list></block></custom-block></block><script><block s="doDeleteFromList"><block var="record"/><block var="list"/></block></script></block></script></block></script><list></list></block></script></block-definition><block-definition s="$flash sort %&apos;data&apos; ordering with %&apos;function&apos;" type="reporter" category="lists"><comment x="0" y="0" w="161.14285714285708" collapsed="false">Reports a sorted version of the list in its first input slot, using the comparison function in the second input slot.  For a list of numbers, using &lt; as the comparison function will sort from low to high; using &gt; will sort from high to low.</comment><header></header><code></code><translations>ca:ordena _ segons criteri _&#xD;pl:$flash sortuj _ za pomocą _&#xD;</translations><inputs><input type="%l"></input><input type="%predRing"></input></inputs><script><block s="doReport"><block s="reportApplyExtension"><l>lst_sort(list, fn)</l><list><block var="data"/><block var="function"/></list></block></block></script></block-definition><block-definition s="prev costume" type="command" category="looks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSwitchToCostume"><block s="reportIfElse"><block s="reportVariadicNotEquals"><list><block s="getCostumeIdx"></block><l>1</l></list></block><block s="reportDifference"><block s="getCostumeIdx"></block><l>1</l></block><block s="reportListAttribute"><l><option>length</option></l><block s="reportGet"><l><option>costumes</option></l></block></block></block></block></script></block-definition><block-definition s="add %&apos;cst&apos; to my costumes" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%obj"></input></inputs><script><block s="doAddToList"><block var="cst"/><block s="reportGet"><l><option>costumes</option></l></block></block></script></block-definition><block-definition s="costume from commands (expand stage before? %&apos;expand&apos; ) %&apos;commands&apos;" type="reporter" category="looks"><comment x="0" y="0" w="134.28571428571436" collapsed="false">Return a costume from commands.Last position will be the pivot.&#xD;&#xD;ex:&#xD;goto 0,0&#xD;pen down&#xD;move 10&#xD;rotate 90&#xD;move 10&#xD;&#xD;By Loucheman</comment><header></header><code></code><translations>de:Kostüm aus Text _ Größe _&#xD;pt:um traje com o texto _ de tamanho _&#xD;ca:vestit amb el text _ i mida _&#xD;</translations><inputs><input type="%b" initial="1">true</input><input type="%cs"></input></inputs><script><block s="doDeclareVariables"><list><l>costume</l><l>x</l><l>y</l><l>dir</l><l>cst</l><l>trails</l><l>pen state</l><l>current stage scale</l></list></block><block s="doIf"><block var="expand"/><script><block s="doSetVar"><l>current stage scale</l><custom-block s="setting %s"><l>Stage scale</l></custom-block></block><custom-block s="set value %s to %s"><l>Stage scale</l><l>2</l></custom-block></script><list></list></block><block s="doWait"><l>0.1</l></block><block s="doWarp"><script><block s="doSetVar"><l>x</l><block s="xPosition"></block></block><block s="doSetVar"><l>y</l><block s="yPosition"></block></block><block s="doSetVar"><l>dir</l><block s="direction"></block></block><block s="doSetVar"><l>cst</l><block s="reportGet"><l><option>costume</option></l></block></block><block s="doSetVar"><l>pen state</l><block s="getPenDown"></block></block><block s="up"></block><block s="doGotoObject"><l><option>center</option></l></block><block s="setHeading"><l>90</l></block><block s="doSwitchToCostume"><l><option>Turtle</option></l></block><block s="doSetVar"><l>trails</l><block s="reportPenTrailsAsCostume"></block></block><block s="clear"></block><block s="doRun"><block var="commands"/><list></list></block><block s="doSetVar"><l>costume</l><block s="reportPenTrailsAsCostume"></block></block><block s="clear"></block><block s="doGotoObject"><l><option>center</option></l></block><block s="doSwitchToCostume"><block var="trails"/></block><block s="doStamp"></block><block s="doSwitchToCostume"><block var="cst"/></block><block s="gotoXY"><block var="x"/><block var="y"/></block><block s="setHeading"><block var="dir"/></block><block s="doIf"><block var="pen state"/><script><block s="down"></block></script><list><l><bool>true</bool></l><script><block s="up"></block></script></list></block><block s="doIf"><block var="expand"/><script><custom-block s="set value %s to %s"><l>Stage scale</l><block var="current stage scale"/></custom-block></script><list></list></block><block s="doReport"><block var="costume"/></block></script></block></script></block-definition><block-definition s="export costume list %&apos;costumes&apos; base name %&apos;name&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s">frame</input></inputs><script><block s="doDeclareVariables"><list><l>count</l></list></block><block s="doSetVar"><l>count</l><block s="reportListAttribute"><l><option>length</option></l><block var="costumes"/></block></block><block s="doForEach"><l>item</l><block s="reportListAttribute"><l><option>reverse</option></l><block var="costumes"/></block><script><block s="doApplyExtension"><l>cst_export(cst, name)</l><list><block var="item"/><block s="reportJoinWords"><list><block var="name"/><l> (</l><block var="count"/><l>)</l></list></block></list></block><block s="doChangeVar"><l>count</l><l>-1</l></block><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportModulus"><block var="count"/><l>10</l></block><l>0</l></list></block><script><block s="doWait"><l>1</l></block></script><list></list></block></script></block></script></block-definition><block-definition s="costume from text %&apos;text&apos; size %&apos;size&apos; (center pivot)" type="reporter" category="looks"><header></header><code></code><translations>de:Kostüm aus Text _ Größe _&#xD;pt:um traje com o texto _ de tamanho _&#xD;</translations><inputs><input type="%s">A</input><input type="%n">72</input></inputs><script><block s="doDeclareVariables"><list><l>costume</l><l>x</l><l>y</l><l>dir</l><l>cst</l><l>trails</l></list></block><block s="doSetVar"><l>x</l><block s="xPosition"></block></block><block s="doSetVar"><l>y</l><block s="yPosition"></block></block><block s="doSetVar"><l>dir</l><block s="direction"></block></block><block s="doSetVar"><l>cst</l><block s="getCostumeIdx"></block></block><block s="up"></block><block s="gotoXY"><l>0</l><l>0</l></block><block s="setHeading"><l>90</l></block><block s="doSwitchToCostume"><l><option>Turtle</option></l></block><block s="doSetVar"><l>trails</l><block s="reportPenTrailsAsCostume"></block></block><block s="clear"></block><block s="gotoXY"><block s="reportAttributeOf"><l><option>left</option></l><l>Stage</l></block><l>0</l></block><block s="write"><block var="text"/><block var="size"/></block><block s="gotoXY"><block s="reportQuotient"><block s="reportVariadicSum"><list><block s="reportAttributeOf"><l><option>left</option></l><l>Stage</l></block><block s="xPosition"></block></list></block><l>2</l></block><l>0</l></block><block s="doSetVar"><l>costume</l><block s="reportPenTrailsAsCostume"></block></block><block s="clear"></block><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>name</l></list><l>costume.name = name;</l></block><list><block var="costume"/><block var="text"/></list></block><block s="gotoXY"><l>0</l><l>0</l></block><block s="doSwitchToCostume"><block var="trails"/></block><block s="doStamp"></block><block s="doSwitchToCostume"><block var="cst"/></block><block s="gotoXY"><block var="x"/><block var="y"/></block><block s="setHeading"><block var="dir"/></block><block s="doReport"><block var="costume"/></block></script><scripts><script x="218.57142857142858" y="250.54761904761887"><block s="reportAttributeOf"><l><option>left</option></l><l>Stage</l></block></script></scripts></block-definition><block-definition s="new %&apos;color&apos; costume w %&apos;w&apos; h %&apos;h&apos;" type="reporter" category="looks"><comment x="0" y="0" w="314.65714285714284" collapsed="false">Return a new costume of the color of your choice.&#xD;&#xD;Block by Loucheman</comment><header></header><code></code><translations></translations><inputs><input type="%clr"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doDeclareVariables"><list><l>rgb</l></list></block><block s="doSetVar"><l>rgb</l><block s="reportTextSplit"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block s="reportListItem"><l>2</l><block s="reportTextSplit"><block s="reportJoinWords"><list><block var="color"/></list></block><l>rgba(</l></block></block><l>)</l></block></block><l>,</l></block></block><block s="doReport"><block s="reportNewCostume"><block s="reportReshape"><block s="reportNewList"><list><block s="reportListItem"><l>1</l><block var="rgb"/></block><block s="reportListItem"><l>2</l><block var="rgb"/></block><block s="reportListItem"><l>3</l><block var="rgb"/></block><l>255</l></list></block><list><block s="reportVariadicProduct"><list><block var="w"/><block var="h"/></list></block><l>4</l></list></block><block var="w"/><block var="h"/></block></block></script></block-definition><block-definition s="Show all sprites" type="command" category="looks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doTellTo"><l>Stage</l><block s="reifyScript"><script><block s="doForEach"><l>sprites</l><block s="reportGet"><l><option>other sprites</option></l></block><script><block s="doTellTo"><block var="sprites"/><block s="reifyScript"><script><block s="show"></block></script><list></list></block><list></list></block></script></block></script><list></list></block><list></list></block></script></block-definition><block-definition s="Hide all sprites" type="command" category="looks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doTellTo"><l>Stage</l><block s="reifyScript"><script><block s="doForEach"><l>sprites</l><block s="reportGet"><l><option>other sprites</option></l></block><script><block s="doTellTo"><block var="sprites"/><block s="reifyScript"><script><block s="hide"></block></script><list></list></block><list></list></block></script></block></script><list></list></block><list></list></block></script></block-definition><block-definition s="simple message %&apos;message&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%mlt">This is a message !</input></inputs><script><custom-block s="save all sprite properties"></custom-block><block s="show"></block><block s="setEffect"><l><option>ghost</option></l><l>100</l></block><block s="gotoXY"><l>-60</l><l>-30</l></block><block s="doSwitchToCostume"><l><option>Turtle</option></l></block><block s="bubble"><block s="reportJoinWords"><list><block var="message"/><block s="reportUnicodeAsLetter"><l>10</l></block><block s="reportUnicodeAsLetter"><l>10</l></block><l>(Clic to continue)</l></list></block></block><block s="doWaitUntil"><block s="reportVariadicAnd"><list><block s="reportMouseDown"></block><custom-block s="On Stage position: %l"><block s="reportNewList"><list><block s="reportMouseX"></block><block s="reportMouseY"></block></list></block></custom-block></list></block></block><block s="doWaitUntil"><block s="reportNot"><block s="reportMouseDown"></block></block></block><custom-block s="restore all saved sprite properties keep vars? %b"><l><bool>false</bool></l></custom-block><block s="bubble"><l></l></block></script></block-definition><block-definition s="button costume from text %&apos;text&apos; size %&apos;size&apos; MarX %&apos;MarX&apos; MarY %&apos;MarY&apos; pen size %&apos;PenS&apos; box color %&apos;boxColor&apos; bg color %&apos;BgC&apos; txt color %&apos;TxC&apos; PivotX %&apos;PivotX&apos; PivotY %&apos;PivotY&apos;" type="reporter" category="looks"><comment x="0" y="0" w="155.83333333333334" collapsed="false">Button costume from text v1.1&#xD;By Loucheman&#xD;&#xD;Create a costume for any button you want !&#xD;&#xD;text: text on the button&#xD;Size: size of text &#xD;MarX: left and right margin to increase the width of the button&#xD;MarY: save as MarX but fot height&#xD;pensize: thickness of the line&#xD;&#xD;Thk Dardoro for the color picker functionality.</comment><header></header><code></code><translations></translations><inputs><input type="%txt">Button</input><input type="%n">20</input><input type="%n">20</input><input type="%n">10</input><input type="%n">5</input><input type="%clr"></input><input type="%clr"></input><input type="%clr"></input><input type="%txt" readonly="true">center<options>left&#xD;center&#xD;right</options></input><input type="%txt" readonly="true">center<options>upper&#xD;center&#xD;bottom</options></input></inputs><script><block s="doDeclareVariables"><list><l>costume</l><l>x</l><l>y</l><l>dir</l><l>cst</l><l>trails</l><l>MarginX</l><l>MarginY</l><l>PenSize</l><l>SavePensize</l><l>SavePenColor</l></list></block><block s="doSetVar"><l>MarginX</l><block var="MarX"/></block><block s="doSetVar"><l>MarginY</l><block var="MarY"/></block><block s="doSetVar"><l>PenSize</l><block var="PenS"/></block><block s="doSetVar"><l>x</l><block s="xPosition"></block></block><block s="doSetVar"><l>y</l><block s="yPosition"></block></block><block s="doSetVar"><l>dir</l><block s="direction"></block></block><block s="doSetVar"><l>cst</l><block s="reportGet"><l><option>costume</option></l></block></block><block s="doSetVar"><l>SavePenColor</l><block s="reportNewList"><list><block s="getPenAttribute"><l><option>hue</option></l></block><block s="getPenAttribute"><l><option>saturation</option></l></block><block s="getPenAttribute"><l><option>brightness</option></l></block><block s="getPenAttribute"><l><option>transparency</option></l></block></list></block></block><block s="doSetVar"><l>SavePensize</l><block s="getPenAttribute"><l><option>size</option></l></block></block><block s="setSize"><block var="PenSize"/></block><block s="up"></block><block s="setHeading"><l>90</l></block><block s="doSetVar"><l>trails</l><block s="reportPenTrailsAsCostume"></block></block><block s="clear"></block><block s="doDeclareVariables"><list><l>UpperLeftCorner</l><l>BottomRightCorner</l></list></block><block s="doSetVar"><l>UpperLeftCorner</l><block s="reportNewList"><list><block s="reportVariadicSum"><list><block s="reportAttributeOf"><l><option>left</option></l><l>Stage</l></block><block s="reportRound"><block s="reportQuotient"><block var="PenSize"/><l>2</l></block></block></list></block><block s="reportDifference"><block s="reportAttributeOf"><l><option>top</option></l><l>Stage</l></block><block s="reportRound"><block s="reportQuotient"><block var="PenSize"/><l>2</l></block></block></block></list></block></block><block s="doSetVar"><l>BottomRightCorner</l><block s="reportNewList"><list><block s="reportVariadicSum"><list><block s="reportVariadicSum"><list><block s="reportVariadicSum"><list><block s="reportVariadicSum"><list><block s="reportVariadicSum"><list><block s="reportAttributeOf"><l><option>left</option></l><l>Stage</l></block><block var="PenSize"/></list></block><block var="MarginX"/></list></block><block s="reportVariadicProduct"><list><block s="reportTextAttribute"><l><option>length</option></l><block var="text"/></block><custom-block s="letter width at size %n"><block var="size"/></custom-block></list></block></list></block><block var="MarginX"/></list></block><block s="reportRound"><block s="reportQuotient"><block var="PenSize"/><l>2</l></block></block></list></block><block s="reportDifference"><block s="reportDifference"><block s="reportDifference"><block s="reportDifference"><block s="reportDifference"><block s="reportDifference"><block s="reportAttributeOf"><l><option>top</option></l><l>Stage</l></block><block var="PenSize"/></block><block var="MarginY"/></block><custom-block s="letter height at size %n"><block var="size"/></custom-block></block><block var="MarginY"/></block><block s="reportRound"><block s="reportQuotient"><block var="PenSize"/><l>2</l></block></block></block><l>1</l></block></list></block></block><block s="gotoXY"><block s="reportListItem"><l>1</l><block var="UpperLeftCorner"/></block><block s="reportListItem"><l>2</l><block var="UpperLeftCorner"/></block></block><custom-block s="set pen color to Dardoro color %s"><block var="boxColor"/></custom-block><block s="down"></block><block s="gotoXY"><block s="reportListItem"><l>1</l><block var="BottomRightCorner"/></block><block s="reportListItem"><l>2</l><block var="UpperLeftCorner"/></block></block><block s="gotoXY"><block s="reportListItem"><l>1</l><block var="BottomRightCorner"/></block><block s="reportListItem"><l>2</l><block var="BottomRightCorner"/></block></block><block s="gotoXY"><block s="reportListItem"><l>1</l><block var="UpperLeftCorner"/></block><block s="reportListItem"><l>2</l><block var="BottomRightCorner"/></block></block><block s="gotoXY"><block s="reportListItem"><l>1</l><block var="UpperLeftCorner"/></block><block s="reportListItem"><l>2</l><block var="UpperLeftCorner"/></block></block><block s="up"></block><block s="gotoXY"><custom-block s="average %mult%n"><list><block s="reportListItem"><l>1</l><block var="UpperLeftCorner"/></block><block s="reportListItem"><l>1</l><block var="BottomRightCorner"/></block></list></custom-block><custom-block s="average %mult%n"><list><block s="reportListItem"><l>2</l><block var="UpperLeftCorner"/></block><block s="reportListItem"><l>2</l><block var="BottomRightCorner"/></block></list></custom-block></block><custom-block s="set pen color to Dardoro color %s"><block var="BgC"/></custom-block><block s="floodFill"></block><block s="gotoXY"><block s="reportVariadicSum"><list><block s="reportVariadicSum"><list><block s="reportVariadicSum"><list><block s="reportAttributeOf"><l><option>left</option></l><l>Stage</l></block><block var="MarginX"/></list></block><block s="reportQuotient"><block var="PenSize"/><l>1.5</l></block></list></block><l>0</l></list></block><block s="reportDifference"><block s="reportDifference"><block s="reportDifference"><block s="reportDifference"><block s="reportAttributeOf"><l><option>top</option></l><l>Stage</l></block><block var="MarginY"/></block><block s="reportQuotient"><block var="PenSize"/><l>1</l></block></block><custom-block s="letter height at size %n"><block var="size"/></custom-block></block><l>1</l></block></block><custom-block s="set pen color to Dardoro color %s"><block var="TxC"/></custom-block><block s="write"><block var="text"/><block var="size"/></block><block s="setPenColorDimension"><l><option>hue</option></l><block s="reportListItem"><l>1</l><block var="SavePenColor"/></block></block><block s="setPenColorDimension"><l><option>saturation</option></l><block s="reportListItem"><l>2</l><block var="SavePenColor"/></block></block><block s="setPenColorDimension"><l><option>brightness</option></l><block s="reportListItem"><l>3</l><block var="SavePenColor"/></block></block><block s="setPenColorDimension"><l><option>transparency</option></l><block s="reportListItem"><l>4</l><block var="SavePenColor"/></block></block><block s="setXPosition"><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="PivotX"/><l>left</l></list></block><block s="reportListItem"><l>1</l><block var="UpperLeftCorner"/></block><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="PivotX"/><l>right</l></list></block><block s="reportListItem"><l>1</l><block var="BottomRightCorner"/></block><custom-block s="average %mult%n"><list><block s="reportListItem"><l>1</l><block var="UpperLeftCorner"/></block><block s="reportListItem"><l>1</l><block var="BottomRightCorner"/></block></list></custom-block></block></block><comment w="90" collapsed="false">pivot x</comment></block><block s="setYPosition"><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="PivotY"/><l>upper</l></list></block><block s="reportListItem"><l>2</l><block var="UpperLeftCorner"/></block><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="PivotY"/><l>bottom</l></list></block><block s="reportListItem"><l>2</l><block var="BottomRightCorner"/></block><custom-block s="average %mult%n"><list><block s="reportListItem"><l>2</l><block var="UpperLeftCorner"/></block><block s="reportListItem"><l>2</l><block var="BottomRightCorner"/></block></list></custom-block></block><comment w="90" collapsed="false">pivot y</comment></block></block><block s="doSetVar"><l>costume</l><block s="reportPenTrailsAsCostume"></block></block><block s="clear"></block><block s="gotoXY"><l>0</l><l>0</l></block><block s="doSwitchToCostume"><block var="trails"/></block><block s="doStamp"></block><block s="doSwitchToCostume"><block var="cst"/></block><block s="gotoXY"><block var="x"/><block var="y"/></block><block s="setHeading"><block var="dir"/></block><block s="doReport"><block var="costume"/></block></script><scripts><script x="412" y="903.1999999999999"><block s="setColor"><color>16,4,0,1</color></block></script></scripts></block-definition><block-definition s="glide %&apos;steps&apos; in %&apos;duration&apos; secs easing %&apos;easing&apos;" type="command" category="motion"><header></header><code></code><translations>de:gleite _ in _ Sek. beschleunigt: _&#xD;ca:llisca _ en _ segons de forma _&#xD;fr:glisser _ en _ sec. accélérer _&#xD;pt:desliza _ em _ s de forma _&#xD;</translations><inputs><input type="%n">50</input><input type="%n">1</input><input type="%s" readonly="true">linear<options>linear&#xD;quadratic={&#xD;quadratic-in&#xD;quadratic-out&#xD;quadratic-in-out&#xD;}&#xD;cubic={&#xD;cubic-in&#xD;cubic-out&#xD;cubic-in-out&#xD;}&#xD;quart={&#xD;quart-in&#xD;quart-out&#xD;quart-in-out&#xD;}&#xD;sinusoidal={&#xD;sine-in&#xD;sine-out&#xD;sine-in-out&#xD;}&#xD;elastic</options></input></inputs><script><block s="doDeclareVariables"><list><l>destX</l><l>destY</l><l>end time</l><l>deltaX</l><l>deltaY</l><l>func</l></list></block><block s="forward"><block var="steps"/></block><block s="doSetVar"><l>destX</l><block s="xPosition"></block></block><block s="doSetVar"><l>destY</l><block s="yPosition"></block></block><block s="forward"><block s="reportVariadicProduct"><list><block var="steps"/><l>-1</l></list></block></block><block s="doSetVar"><l>end time</l><block s="reportVariadicSum"><list><block s="reportDate"><l><option>time in milliseconds</option></l></block><block s="reportVariadicProduct"><list><block var="duration"/><l>1000</l></list></block></list></block></block><block s="doSetVar"><l>deltaX</l><block s="reportDifference"><block var="destX"/><block s="xPosition"></block></block></block><block s="doSetVar"><l>deltaY</l><block s="reportDifference"><block var="destY"/><block s="yPosition"></block></block></block><block s="doIfElse"><block s="reportIsA"><block var="easing"/><l><option>reporter</option></l></block><script><block s="doSetVar"><l>func</l><block var="easing"/></block></script><script><block s="doSetVar"><l>func</l><custom-block s="easing %txt"><block var="easing"/></custom-block></block></script></block><block s="doUntil"><block s="reportVariadicGreaterThan"><list><block s="reportDate"><l><option>time in milliseconds</option></l></block><block var="end time"/></list></block><script><block s="setXPosition"><block s="reportDifference"><block var="destX"/><block s="reportVariadicProduct"><list><block var="deltaX"/><block s="evaluate"><block var="func"/><list><block s="reportQuotient"><block s="reportDifference"><block var="end time"/><block s="reportDate"><l><option>time in milliseconds</option></l></block></block><block s="reportVariadicProduct"><list><block var="duration"/><l>1000</l></list></block></block></list></block></list></block></block></block><block s="setYPosition"><block s="reportDifference"><block var="destY"/><block s="reportVariadicProduct"><list><block var="deltaY"/><block s="evaluate"><block var="func"/><list><block s="reportQuotient"><block s="reportDifference"><block var="end time"/><block s="reportDate"><l><option>time in milliseconds</option></l></block></block><block s="reportVariadicProduct"><list><block var="duration"/><l>1000</l></list></block></block></list></block></list></block></block></block></script></block><block s="gotoXY"><block var="destX"/><block var="destY"/></block></script></block-definition><block-definition s="animate %&apos;attribute&apos; by %&apos;delta&apos; in %&apos;duration&apos; secs easing %&apos;easing&apos;" type="command" category="motion"><header></header><code></code><translations>de:animiere _ um _ in _ Sek. beschleunigt: _&#xD;ca:modifica _ amb _ en _ segons de forma _&#xD;pt:anima _ de _ em _ s de forma _&#xD;</translations><inputs><input type="%s" readonly="true">x position<options>x position&#xD;y position&#xD;direction&#xD;size&#xD;ghost effect&#xD;color effect&#xD;saturation effect&#xD;brightness effect&#xD;fisheye effect&#xD;whirl effect&#xD;pixelate effect&#xD;mosaic effect&#xD;negative effect&#xD;tempo&#xD;volume&#xD;balance</options></input><input type="%n">50</input><input type="%n">1</input><input type="%s" readonly="true">linear<options>linear&#xD;quadratic={&#xD;quadratic-in&#xD;quadratic-out&#xD;quadratic-in-out&#xD;}&#xD;cubic={&#xD;cubic-in&#xD;cubic-out&#xD;cubic-in-out&#xD;}&#xD;quart={&#xD;quart-in&#xD;quart-out&#xD;quart-in-out&#xD;}&#xD;sinusoidal={&#xD;sine-in&#xD;sine-out&#xD;sine-in-out&#xD;}&#xD;elastic</options></input></inputs><script><block s="doDeclareVariables"><list><l>accessors</l><l>func</l></list></block><block s="doSetVar"><l>accessors</l><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="attribute"/><l>x position</l></list></block><block s="reportNewList"><list><block s="reifyScript"><script><block s="setXPosition"><l></l></block></script><list></list></block><block s="reifyReporter"><autolambda><block s="xPosition"></block></autolambda><list></list></block></list></block><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="attribute"/><l>y position</l></list></block><block s="reportNewList"><list><block s="reifyScript"><script><block s="setYPosition"><l></l></block></script><list></list></block><block s="reifyReporter"><autolambda><block s="yPosition"></block></autolambda><list></list></block></list></block><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="attribute"/><l>direction</l></list></block><block s="reportNewList"><list><block s="reifyScript"><script><block s="setHeading"><l></l></block></script><list></list></block><block s="reifyReporter"><autolambda><block s="direction"></block></autolambda><list></list></block></list></block><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="attribute"/><l>size</l></list></block><block s="reportNewList"><list><block s="reifyScript"><script><block s="setScale"><l></l></block></script><list></list></block><block s="reifyReporter"><autolambda><block s="getScale"></block></autolambda><list></list></block></list></block><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="attribute"/><l>tempo</l></list></block><block s="reportNewList"><list><block s="reifyScript"><script><block s="doSetTempo"><l></l></block></script><list></list></block><block s="reifyReporter"><autolambda><block s="getTempo"></block></autolambda><list></list></block></list></block><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="attribute"/><l>volume</l></list></block><block s="reportNewList"><list><block s="reifyScript"><script><block s="setVolume"><l></l></block></script><list></list></block><block s="reifyReporter"><autolambda><block s="getVolume"></block></autolambda><list></list></block></list></block><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="attribute"/><l>balance</l></list></block><block s="reportNewList"><list><block s="reifyScript"><script><block s="setPan"><l></l></block></script><list></list></block><block s="reifyReporter"><autolambda><block s="getPan"></block></autolambda><list></list></block></list></block><block s="reportNewList"><list><block s="reifyScript"><script><block s="setEffect"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="attribute"/><l> </l></block></block><l></l></block></script><list></list></block><block s="reifyReporter"><autolambda><block s="getEffect"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="attribute"/><l> </l></block></block></block></autolambda><list></list></block></list></block></block></block></block></block></block></block></block></block><block s="doIfElse"><block s="reportIsA"><block var="easing"/><l><option>reporter</option></l></block><script><block s="doSetVar"><l>func</l><block var="easing"/></block></script><script><block s="doSetVar"><l>func</l><custom-block s="easing %txt"><block var="easing"/></custom-block></block></script></block><custom-block s="animate setter %cmdRing getter %repRing delta %n over %n secs easing %repRing"><block s="reportListItem"><l>1</l><block var="accessors"/></block><block s="reportListItem"><l>2</l><block var="accessors"/></block><block var="delta"/><block var="duration"/><block var="func"/></custom-block></script></block-definition><block-definition s="turn around x %&apos;x&apos; y %&apos;y&apos; radius %&apos;MyRadius&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%n">0</input><input type="%n">0</input><input type="%n">130</input></inputs><script><custom-block s="for %upvar = %n step %n to %n %cs"><l>angle</l><l>0</l><l>2</l><l>359</l><script></script></custom-block></script></block-definition><block-definition s="rotate $turnRight %&apos;degree&apos; ° around x %&apos;x&apos; y %&apos;y&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doDeclareVariables"><list><l>myRadius</l><l>angle</l><l>position relative to 0,0</l></list></block><block s="doSetVar"><l>myRadius</l><custom-block s="distance between %s %s"><block s="getPosition"></block><block s="reportNewList"><list><block var="x"/><block var="y"/></list></block></custom-block></block><block s="doSetVar"><l>angle</l><block s="reportVariadicSum"><list><custom-block s="angle between %s %s"><block s="reportNewList"><list><block var="x"/><block var="y"/></list></block><block s="getPosition"></block></custom-block><block var="degree"/></list></block></block><block s="doSetVar"><l>position relative to 0,0</l><block s="reportNewList"><list><block s="reportVariadicProduct"><list><block var="myRadius"/><block s="reportMonadic"><l><option>sin</option></l><custom-block s="%n radian to degree"><block s="reportQuotient"><block s="reportVariadicProduct"><list><custom-block s="PI"></custom-block><l>2</l><block var="angle"/></list></block><l>360</l></block></custom-block></block></list></block><block s="reportVariadicProduct"><list><block var="myRadius"/><block s="reportMonadic"><l><option>cos</option></l><custom-block s="%n radian to degree"><block s="reportQuotient"><block s="reportVariadicProduct"><list><custom-block s="PI"></custom-block><l>2</l><block var="angle"/></list></block><l>360</l></block></custom-block></block></list></block></list></block></block><block s="doGotoObject"><block s="reportVariadicSum"><list><block var="position relative to 0,0"/><block s="reportNewList"><list><block var="x"/><block var="y"/></list></block></list></block></block></script></block-definition><block-definition s="average %&apos;nums&apos;" type="reporter" category="operators"><header></header><code></code><translations>pt:a soma de _&#xD;</translations><inputs><input type="%mult%n"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="nums"/></block><script><block s="doReport"><l>0</l></block></script><list></list></block><block s="doReport"><block s="reportQuotient"><block s="reportCombine"><block var="nums"/><block s="reifyReporter"><autolambda><block s="reportVariadicSum"><list><l></l><l></l></list></block></autolambda><list></list></block></block><block s="reportListAttribute"><l><option>length</option></l><block var="nums"/></block></block></block></script></block-definition><block-definition s="remap value %&apos;value&apos; from range %&apos;int1a&apos; , %&apos;int1b&apos; to range %&apos;int2a&apos; , %&apos;int2b&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="int1a"/><block var="int1b"/></list></block><script><custom-block s="error %s"><l>Range A : values should be different (not a range !)</l></custom-block></script><list></list></block><block s="doReport"><block s="reportVariadicSum"><list><block var="int2a"/><block s="reportVariadicProduct"><list><block s="reportDifference"><block var="value"/><block var="int1a"/></block><block s="reportQuotient"><block s="reportDifference"><block var="int2b"/><block var="int2a"/></block><block s="reportDifference"><block var="int1b"/><block var="int1a"/></block></block></list></block></list></block></block></script><scripts><comment x="497.77050781250006" y="21.999999999999982" w="424.0000000000001" collapsed="false">Remap a value from a original range of value to another range of value.&#xD;&#xD;example:&#xD;you have a value in a range of 0 to 5 and you want to transpose this value to another range of values 0 -100.&#xD;&#xD;in this case:&#xD;if value = 0 return 0&#xD;if value = 3 return 60&#xD;if value = 5 return 100&#xD;&#xD;another example:&#xD;you want to do 2.5D (size change with y position)&#xD;you can remap the y position of your sprite to obtain the size of your object&#xD;remap &quot;y position&quot; from range -180 to 180 to range 100 to 10&#xD;&#xD;if y position = -180 return 100 (the size)&#xD;if y position = 100 return 30&#xD;if y position = 180 return 10&#xD;use the result to change the size of your sprite !&#xD;&#xD;Block by Loucheman&#xD;&#xD;See example at: https://snap.berkeley.edu/snap/snap.html#present:Username=loucheman&amp;ProjectName=remap%20value&amp;editMode&amp;noRun</comment></scripts></block-definition><block-definition s="%&apos;numerator&apos; div %&apos;denominator&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block var="numerator"/><block var="denominator"/></block></block></block></script></block-definition><block-definition s="%&apos;radians&apos; radian to degree" type="reporter" category="operators"><header></header><code></code><translations>pt:_ radianos em graus&#xD;</translations><inputs><input type="%n">1.5707963267948966</input></inputs><script><block s="doReport"><block s="reportQuotient"><block s="reportVariadicProduct"><list><block var="radians"/><l>180</l></list></block><custom-block s="PI"></custom-block></block></block></script></block-definition><block-definition s="%&apos;degrees&apos; degree to radian" type="reporter" category="operators"><header></header><code></code><translations>pt:_ radianos em graus&#xD;</translations><inputs><input type="%n">90</input></inputs><script><block s="doReport"><block s="reportQuotient"><block s="reportVariadicProduct"><list><block var="degrees"/><custom-block s="PI"></custom-block></list></block><l>180</l></block></block></script></block-definition><block-definition s="pick random odd number %&apos;min&apos; to %&apos;max&apos;" type="reporter" category="operators"><comment x="0" y="0" w="90" collapsed="false">By Loucheman</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doIf"><block s="reportVariadicGreaterThan"><list><block var="min"/><block var="max"/></list></block><script><block s="doDeclareVariables"><list><l>SaveValue</l></list></block><block s="doSetVar"><l>SaveValue</l><block var="min"/></block><block s="doSetVar"><l>min</l><block var="max"/></block><block s="doSetVar"><l>max</l><block var="SaveValue"/></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportModulus"><block var="min"/><l>2</l></block><l>0</l></list></block><script><block s="doChangeVar"><l>min</l><l>2</l></block></script><list></list></block><block s="doIf"><block s="reportVariadicNotEquals"><list><block s="reportModulus"><block var="max"/><l>2</l></block><l>0</l></list></block><script><block s="doChangeVar"><l>max</l><l>1</l></block></script><list></list></block><block s="doReport"><block s="reportDifference"><custom-block s="pick random even number %n to %n"><block var="min"/><block var="max"/></custom-block><l>1</l></block></block></script></block-definition><block-definition s="pick random even number %&apos;min&apos; to %&apos;max&apos;" type="reporter" category="operators"><comment x="0" y="0" w="90" collapsed="false">By Loucheman</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doIf"><block s="reportVariadicGreaterThan"><list><block var="min"/><block var="max"/></list></block><script><block s="doDeclareVariables"><list><l>SaveValue</l></list></block><block s="doSetVar"><l>SaveValue</l><block var="min"/></block><block s="doSetVar"><l>min</l><block var="max"/></block><block s="doSetVar"><l>max</l><block var="SaveValue"/></block></script><list></list></block><block s="doReport"><block s="reportVariadicProduct"><list><block s="reportRandom"><block s="reportRound"><block s="reportQuotient"><block var="min"/><l>2</l></block></block><custom-block s="%n div %n"><block var="max"/><l>2</l></custom-block></block><l>2</l></list></block></block></script></block-definition><block-definition s="pick random %&apos;min&apos; to %&apos;max&apos; with %&apos;NbDecimale&apos; decimals" type="reporter" category="operators"><comment x="0" y="0" w="90" collapsed="false">By Loucheman</comment><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">2.5</input><input type="%n">2</input></inputs><script><block s="doReport"><custom-block s="Round %n to %n decimals"><block s="reportQuotient"><block s="reportRandom"><block s="reportVariadicProduct"><list><block var="min"/><block s="reportMonadic"><l><option>10^</option></l><block s="reportMonadic"><l><option>floor</option></l><block var="NbDecimale"/></block></block></list></block><block s="reportVariadicProduct"><list><block var="max"/><block s="reportMonadic"><l><option>10^</option></l><block s="reportMonadic"><l><option>floor</option></l><block var="NbDecimale"/></block></block></list></block></block><block s="reportMonadic"><l><option>10^</option></l><block s="reportMonadic"><l><option>floor</option></l><block var="NbDecimale"/></block></block></block><block var="NbDecimale"/></custom-block></block></script></block-definition><block-definition s="pick random (decimal) %&apos;n1&apos; to %&apos;n2&apos;" type="reporter" category="operators"><comment x="0" y="0" w="90" collapsed="false">By Loucheman</comment><header></header><code></code><translations></translations><inputs><input type="%n">0</input><input type="%n">1</input></inputs><script><block s="doDeclareVariables"><list><l>a</l></list></block><block s="doIfElse"><block s="reportVariadicAnd"><list><block s="reportVariadicEquals"><list><block s="reportModulus"><block var="n1"/><l>1</l></block><l>.5</l></list></block><block s="reportVariadicEquals"><list><block s="reportModulus"><block var="n2"/><l>1</l></block><l>.5</l></list></block></list></block><script><block s="doSetVar"><l>a</l><l>.6</l></block></script><script><block s="doSetVar"><l>a</l><l>.5</l></block></script><comment w="177.57142857142867" collapsed="false">By adding 0.5 or 0.6, the &quot;pick random&quot; is switching to the decimal world...&#xD;If (n1+.5) and (n2+.5  (2 integers)), adding .6 instead...</comment></block><block s="doReport"><block s="reportDifference"><block s="reportRandom"><block s="reportVariadicSum"><list><block var="n1"/><block var="a"/></list></block><block s="reportVariadicSum"><list><block var="n2"/><block var="a"/></list></block></block><block var="a"/></block></block></script></block-definition><block-definition s="Round %&apos;number&apos; to %&apos;NbDecimals&apos; decimals" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">10.12345</input><input type="%n">2</input></inputs><script><block s="doReport"><block s="reportQuotient"><block s="reportRound"><block s="reportVariadicProduct"><list><block var="number"/><block s="reportMonadic"><l><option>10^</option></l><block var="NbDecimals"/></block></list></block></block><block s="reportMonadic"><l><option>10^</option></l><block var="NbDecimals"/></block></block></block></script></block-definition><block-definition s="insert substring %&apos;substring&apos; to string %&apos;string&apos; str at pos %&apos;pos&apos;" type="reporter" category="String"><comment x="0" y="0" w="90" collapsed="false">by Loucheman&#xD;&#xD;Insert a substring into a string at a defined position</comment><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%txt"></input><input type="%n"></input></inputs><script><block s="doSetVar"><l>pos</l><block s="reportMonadic"><l><option>floor</option></l><block var="pos"/></block></block><block s="doIfElse"><block s="reportVariadicLessThanOrEquals"><list><block var="pos"/><l>1</l></list></block><script><block s="doReport"><block s="reportJoinWords"><list><block var="substring"/><block var="string"/></list></block></block></script><script><block s="doIfElse"><block s="reportVariadicGreaterThan"><list><block var="pos"/><block s="reportTextAttribute"><l><option>length</option></l><block var="string"/></block></list></block><script><block s="doReport"><block s="reportJoinWords"><list><block var="string"/><block var="substring"/></list></block></block></script><script><block s="doReport"><block s="reportJoinWords"><list><block s="reportLetter"><block s="reportNumbers"><l>1</l><block s="reportDifference"><block var="pos"/><l>1</l></block></block><block var="string"/></block><block var="substring"/><block s="reportLetter"><block s="reportNumbers"><block var="pos"/><block s="reportTextAttribute"><l><option>length</option></l><block var="string"/></block></block><block var="string"/></block></list></block></block></script></block></script></block></script><scripts><script x="175.71428571428572" y="269.47619047619116"><block s="reportJoinWords"><list><l>hello </l><l>world</l></list></block></script><script x="303.2857142857142" y="274.45238095238085"><block s="reportVariadicSum"><list><l></l><l>1</l></list></block></script></scripts></block-definition><block-definition s="substring of %&apos;string&apos; after %&apos;marker&apos;" type="reporter" category="operators"><comment x="0" y="0" w="203.33333333333337" collapsed="false">Reports the portion of the first input string starting after the first occurrence of the second string.  If the second string isn&apos;t found in the first string, reports an empty string.</comment><header></header><code></code><translations>pt:o texto de _ depois de _&#xD;</translations><inputs><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l></list></block><block s="doSetVar"><l>index</l><custom-block s="new position of %s in %txt"><block var="marker"/><block var="string"/></custom-block></block><block s="doReport"><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="index"/><l>0</l></list></block><l></l><custom-block s="substring of %txt from position %n to position %n inclusive"><block var="string"/><block s="reportVariadicSum"><list><block var="index"/><block s="reportTextAttribute"><l><option>length</option></l><block var="marker"/></block></list></block><l></l></custom-block></block></block></script><scripts><script x="190.71428571428572" y="190.23809523809553"><block s="reportTextAttribute"><l><option>length</option></l><block var="marker"/></block></script></scripts></block-definition><block-definition s="new position of %&apos;small&apos; in %&apos;large&apos;" type="reporter" category="String"><comment x="0" y="0" w="294" collapsed="false">Reports the character position (starting from 1) of the beginning of the first input string inside the second input string.&#xD;If it&apos;s not found, reports 0.</comment><header></header><code></code><translations>pt:a posição de _ em _&#xD;</translations><inputs><input type="%s"></input><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportVariadicNotEquals"><list><block var="small"/><l></l></list></block><block s="reportIfElse"><custom-block s="use case-independent comparison"></custom-block><block s="reportApplyExtension"><l>txt_indexof(sub, txt)</l><list><custom-block s="to lower case %txt"><block var="small"/></custom-block><custom-block s="to lower case %txt"><block var="large"/></custom-block></list></block><block s="reportApplyExtension"><l>txt_indexof(sub, txt)</l><list><block var="small"/><block var="large"/></list></block></block><l>0</l></block></block></script><scripts><comment x="453.5714285714286" y="85.33333333333339" w="166.42857142857144" collapsed="false">addign the 1st if:&#xD;if small=null return 0&#xD;&#xD;By Loucheman</comment></scripts></block-definition><block-definition s="to lower case %&apos;text&apos;" type="reporter" category="operators"><comment x="0" y="0" w="275.3333333333333" collapsed="false">Reports the input text with lower case letters instead of capital letters in the input.  Uses the user&apos;s locale&apos;s rules for case conversion.</comment><header></header><code></code><translations>pt:em minúsculas _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportApplyExtension"><l>txt_lowercase(txt)</l><list><block var="text"/></list></block></block></script></block-definition><block-definition s="substring of %&apos;string&apos; before %&apos;marker&apos;" type="reporter" category="operators"><comment x="0" y="0" w="175.33333333333334" collapsed="false">Reports the part of the first string up to the first instance of the second string inside it.  If the second string isn&apos;t found, reports the entire first string.</comment><header></header><code></code><translations>pt:o texto de _ antes de _&#xD;</translations><inputs><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l></list></block><block s="doSetVar"><l>index</l><custom-block s="new position of %s in %txt"><block var="marker"/><block var="string"/></custom-block></block><block s="doReport"><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="index"/><l>0</l></list></block><block var="string"/><custom-block s="substring of %txt from position %n to position %n inclusive"><block var="string"/><l>1</l><block s="reportDifference"><block var="index"/><l>1</l></block></custom-block></block></block></script></block-definition><block-definition s="substring of %&apos;str&apos; from position %&apos;start&apos; to position %&apos;end&apos; inclusive" type="reporter" category="operators"><comment x="0" y="0" w="297.3333333333333" collapsed="false">Reports the portion of the first input (string) starting at the position given by the second input (counting from 1, like LETTER n OF) and ending at the position given by the third input (also counting from 1).  If the third input is empty, reports the portion from the first position to the end of the string.&#xD;If a position number is negative, counts from the end backward, so -1 is the last character, -2 is the next to last, etc.</comment><header></header><code></code><translations>pt:o texto de _ entre as posições _ e _ , inclusive&#xD;</translations><inputs><input type="%txt"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="reportJoinWords"><block s="reportLetter"><block s="reportNumbers"><block var="start"/><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="end"/><l>0</l></list></block><block s="reportTextAttribute"><l><option>length</option></l><block var="str"/></block><block var="end"/></block></block><block var="str"/></block></block></block></script></block-definition><block-definition s="insert substring %&apos;substring&apos; to string %&apos;string&apos; at pos %&apos;pos&apos;" type="reporter" category="String"><comment x="0" y="0" w="90" collapsed="false">by Loucheman&#xD;&#xD;Insert a substring into a string at a defined position</comment><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%txt"></input><input type="%n"></input></inputs><script><block s="doSetVar"><l>pos</l><block s="reportMonadic"><l><option>floor</option></l><block var="pos"/></block></block><block s="doIfElse"><block s="reportVariadicLessThanOrEquals"><list><block var="pos"/><l>1</l></list></block><script><block s="doReport"><block s="reportJoinWords"><list><block var="substring"/><block var="string"/></list></block></block></script><script><block s="doIfElse"><block s="reportVariadicGreaterThan"><list><block var="pos"/><block s="reportTextAttribute"><l><option>length</option></l><block var="string"/></block></list></block><script><block s="doReport"><block s="reportJoinWords"><list><block var="string"/><block var="substring"/></list></block></block></script><script><block s="doReport"><block s="reportJoinWords"><list><block s="reportLetter"><block s="reportNumbers"><l>1</l><block s="reportDifference"><block var="pos"/><l>1</l></block></block><block var="string"/></block><block var="substring"/><block s="reportLetter"><block s="reportNumbers"><block var="pos"/><block s="reportTextAttribute"><l><option>length</option></l><block var="string"/></block></block><block var="string"/></block></list></block></block></script></block></script></block></script><scripts><script x="175.7142857142858" y="269.47619047619116"><block s="reportJoinWords"><list><l>hello </l><l>world</l></list></block></script><script x="303.28571428571416" y="274.45238095238085"><block s="reportVariadicSum"><list><l></l><l>1</l></list></block></script></scripts></block-definition><block-definition s="Align this string: %&apos;String&apos; length: %&apos;final length&apos; alignment %&apos;alignment&apos;" type="reporter" category="operators"><comment x="0" y="0" w="255.8333333333334" collapsed="false">Return a fixed length string align on the center,left or right&#xD;&#xD;Hello world,20,left &#xD;  return Hello world_ _ _ _ _ _ _ _ _ (spaces)&#xD;&#xD;Hello world,20,right &#xD;  return _ _ _ _ _ _ _ _ _ Hello world&#xD;&#xD;Hello world,20,center&#xD;  return _ _ _ _ Hello world _ _ _ _ _&#xD;&#xD;Block by Loucheman</comment><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%n"></input><input type="%txt">center<options>center&#xD;left&#xD;right</options></input></inputs><script><block s="doWarp"><script><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportTextAttribute"><l><option>length</option></l><block var="String"/></block><block var="final length"/></list></block><script><block s="doReport"><block var="String"/></block></script><list></list></block><block s="doIfElse"><block s="reportVariadicLessThan"><list><block s="reportTextAttribute"><l><option>length</option></l><block var="String"/></block><block var="final length"/></list></block><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="alignment"/><l>left</l></list></block><script><block s="doRepeat"><block s="reportDifference"><block var="final length"/><block s="reportTextAttribute"><l><option>length</option></l><block var="String"/></block></block><script><block s="doSetVar"><l>String</l><block s="reportJoinWords"><list><block var="String"/><l> </l></list></block></block></script></block></script><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="alignment"/><l>right</l></list></block><script><block s="doRepeat"><block s="reportDifference"><block var="final length"/><block s="reportTextAttribute"><l><option>length</option></l><block var="String"/></block></block><script><block s="doSetVar"><l>String</l><block s="reportJoinWords"><list><l> </l><block var="String"/></list></block></block></script></block></script><script><custom-block s="let %upvar be %s"><l>nbBefore</l><custom-block s="%n div %n"><block s="reportDifference"><block var="final length"/><block s="reportTextAttribute"><l><option>length</option></l><block var="String"/></block></block><l>2</l></custom-block></custom-block><custom-block s="let %upvar be %s"><l>nbAfter</l><block s="reportDifference"><block s="reportDifference"><block var="final length"/><block s="reportTextAttribute"><l><option>length</option></l><block var="String"/></block></block><block var="nbBefore"/></block></custom-block><block s="doRepeat"><block var="nbBefore"/><script><block s="doSetVar"><l>String</l><block s="reportJoinWords"><list><l> </l><block var="String"/></list></block></block></script></block><block s="doRepeat"><block var="nbAfter"/><script><block s="doSetVar"><l>String</l><block s="reportJoinWords"><list><block var="String"/><l> </l></list></block></block></script></block></script></block></script></block></script><script><block s="doSetVar"><l>String</l><custom-block s="substring of %txt from position %n to position %n inclusive"><block var="String"/><l>1</l><block var="final length"/></custom-block></block></script></block><block s="doReport"><block var="String"/></block></script></block></script></block-definition><block-definition s="Add leading %&apos;char&apos; to %&apos;Number&apos; Total length: %&apos;Length&apos;" type="reporter" category="String"><comment x="0" y="0" w="322.8571428571429" collapsed="false">Add leading zeros to a number By Loucheman v1.2&#xD;useful to display the score in a game&#xD;&#xD;example: add leading zeros to (YourNumber) Total length: (5)&#xD;if YourNumber = 123 then the result is 00123&#xD;if YourNumber = 1234 then the result is 01234&#xD;if YourNumber = 12345 then the result is 12345&#xD;if YourNumber = 1234567 then the result is 1234567&#xD;if YourNumber = 12.3 then the result is 012.3&#xD;if YourNumber = -1.2 then the result is -01.2&#xD;&#xD;version 1.0 : a zeros with a for loop: 12.2 seconds to treat 100000 numbers &#xD;&#xD;version 1.1 : almost 2 times faster with the reshape function: 7.3 seconds to treat 100000 numbers &#xD;&#xD;version 1.2 : now accepts negative values&#xD;</comment><header></header><code></code><translations></translations><inputs><input type="%txt">0</input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doIfElse"><block s="reportVariadicGreaterThanOrEquals"><list><block var="Number"/><l>0</l></list></block><script><block s="doReport"><block s="reportJoinWords"><list><block s="reportJoinWords"><list><block s="reportReshape"><block s="reportNewList"><list><block var="char"/></list></block><list><block s="reportDifference"><block var="Length"/><block s="reportTextAttribute"><l><option>length</option></l><block var="Number"/></block></block></list></block></list></block><block var="Number"/></list></block></block></script><script><block s="doReport"><block s="reportJoinWords"><list><l>-</l><block s="reportJoinWords"><list><block s="reportReshape"><block s="reportNewList"><list><block var="char"/></list></block><list><block s="reportDifference"><block var="Length"/><block s="reportTextAttribute"><l><option>length</option></l><block var="Number"/></block></block></list></block></list></block><block s="reportMonadic"><l><option>abs</option></l><block var="Number"/></block></list></block></block></script></block></script></block-definition><block-definition s="Add leading zeros to %&apos;Number&apos; Total length: %&apos;Length&apos;" type="reporter" category="operators"><comment x="0" y="0" w="322.8571428571429" collapsed="false">Add leading zeros to a number By Loucheman v1.2&#xD;useful to display the score in a game&#xD;&#xD;example: add leading zeros to (YourNumber) Total length: (5)&#xD;if YourNumber = 123 then the result is 00123&#xD;if YourNumber = 1234 then the result is 01234&#xD;if YourNumber = 12345 then the result is 12345&#xD;if YourNumber = 1234567 then the result is 1234567&#xD;if YourNumber = 12.3 then the result is 012.3&#xD;if YourNumber = -1.2 then the result is -01.2&#xD;&#xD;version 1.0 : a zeros with a for loop: 12.2 seconds to treat 100000 numbers &#xD;&#xD;version 1.1 : almost 2 times faster with the reshape function: 7.3 seconds to treat 100000 numbers &#xD;&#xD;version 1.2 : now accepts negative values&#xD;</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doIfElse"><block s="reportVariadicGreaterThanOrEquals"><list><block var="Number"/><l>0</l></list></block><script><block s="doReport"><block s="reportJoinWords"><list><block s="reportJoinWords"><list><block s="reportReshape"><block s="reportNewList"><list><l>0</l></list></block><list><block s="reportDifference"><block var="Length"/><block s="reportTextAttribute"><l><option>length</option></l><block var="Number"/></block></block></list></block></list></block><block var="Number"/></list></block></block></script><script><block s="doReport"><block s="reportJoinWords"><list><l>-</l><block s="reportJoinWords"><list><block s="reportReshape"><block s="reportNewList"><list><l>0</l></list></block><list><block s="reportDifference"><block var="Length"/><block s="reportTextAttribute"><l><option>length</option></l><block var="Number"/></block></block></list></block></list></block><block s="reportMonadic"><l><option>abs</option></l><block var="Number"/></block></list></block></block></script></block></script></block-definition><block-definition s="// %&apos;commentaire&apos; %&apos;code&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%mlt"></input><input type="%cs"></input></inputs><script><block s="doRun"><block var="code"/><list></list></block></script></block-definition><block-definition s="// %&apos;rem&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%mlt"></input></inputs></block-definition><block-definition s="dash line %&apos;pos1&apos; %&apos;pos2&apos; dot type %&apos;type&apos; flat line ends: %&apos;flat line ends&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input><input type="%txt" readonly="true">small<options>small&#xD;medium&#xD;large&#xD;x-large</options></input><input type="%b">false</input></inputs><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="type"/><l>x-large</l></list></block><script><block s="doSetVar"><l>type</l><l>4</l></block></script><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="type"/><l>large</l></list></block><script><block s="doSetVar"><l>type</l><l>3</l></block></script><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="type"/><l>medium</l></list></block><script><block s="doSetVar"><l>type</l><l>2</l></block></script><script><block s="doSetVar"><l>type</l><l>1</l></block></script></block></script></block></script></block><block s="doDeclareVariables"><list><l>saveFlatLineEnds</l><l>dist</l><l>dotLength</l><l>spaceLength</l><l>nbSegment</l><l>nbDot</l><l>nbSpace</l></list></block><block s="doSetVar"><l>saveFlatLineEnds</l><block s="reportGlobalFlag"><l><option>flat line ends</option></l></block></block><block s="doSetVar"><l>dist</l><custom-block s="distance between %s %s"><block var="pos1"/><block var="pos2"/></custom-block></block><block s="doSetVar"><l>dotLength</l><block s="reportVariadicProduct"><list><block s="getPenAttribute"><l><option>size</option></l></block><block var="type"/></list></block></block><block s="doSetVar"><l>nbSegment</l><block s="reportIfElse"><block s="reportVariadicEquals"><list><block s="reportModulus"><block s="reportRound"><block s="reportQuotient"><block var="dist"/><block var="dotLength"/></block></block><l>2</l></block><l>1</l></list></block><block s="reportRound"><block s="reportQuotient"><block var="dist"/><block var="dotLength"/></block></block><block s="reportVariadicSum"><list><block s="reportRound"><block s="reportQuotient"><block var="dist"/><block var="dotLength"/></block></block><l>1</l></list></block></block><comment w="90" collapsed="false">should be odd...</comment></block><block s="doSetVar"><l>nbSpace</l><custom-block s="%n div %n"><block var="nbSegment"/><l>2</l></custom-block></block><block s="doSetVar"><l>nbDot</l><block s="reportDifference"><block var="nbSegment"/><block var="nbSpace"/></block></block><block s="doSetVar"><l>spaceLength</l><block s="reportQuotient"><block s="reportDifference"><block var="dist"/><block s="reportVariadicProduct"><list><block var="nbDot"/><block var="dotLength"/></list></block></block><block var="nbSpace"/></block></block><block s="doSetGlobalFlag"><l><option>flat line ends</option></l><block var="flat line ends"/></block><block s="doIfElse"><block var="flat line ends"/><script><block s="doGotoObject"><block var="pos1"/></block><block s="doFaceTowards"><block var="pos2"/></block><block s="down"></block><block s="forward"><block var="dotLength"/></block><block s="up"></block><block s="doRepeat"><block var="nbSpace"/><script><block s="forward"><block var="spaceLength"/></block><block s="down"></block><block s="forward"><block var="dotLength"/></block><block s="up"></block></script></block></script><script><block s="doGotoObject"><block var="pos1"/></block><block s="doFaceTowards"><block var="pos2"/></block><block s="forward"><block s="reportQuotient"><block s="getPenAttribute"><l><option>size</option></l></block><l>2</l></block></block><block s="down"></block><block s="forward"><block s="reportDifference"><block var="dotLength"/><block s="getPenAttribute"><l><option>size</option></l></block></block></block><block s="doRepeat"><block var="nbSpace"/><script><block s="up"></block><block s="forward"><block s="reportVariadicSum"><list><block var="spaceLength"/><block s="getPenAttribute"><l><option>size</option></l></block></list></block></block><block s="down"></block><block s="forward"><block s="reportDifference"><block var="dotLength"/><block s="getPenAttribute"><l><option>size</option></l></block></block></block></script></block><block s="up"></block></script></block><block s="doSetGlobalFlag"><l><option>flat line ends</option></l><block var="saveFlatLineEnds"/></block></script><scripts><script x="435" y="962.2000000000013"><block s="doGotoObject"><block var="pos1"/></block><block s="doFaceTowards"><block var="pos2"/></block><block s="forward"><block s="reportQuotient"><block var="dotLength"/><l>2</l></block></block><block s="down"></block><block s="forward"><l>0</l></block><block s="doRepeat"><block var="nbSpace"/><script><block s="up"></block><block s="forward"><block s="reportVariadicSum"><list><block var="dotLength"/><block var="spaceLength"/></list></block></block><block s="down"></block><block s="forward"><l>0</l></block></script></block><block s="up"></block></script><script x="312" y="1105.333333333335"><block var="dotLength"/></script><script x="309" y="1144.0000000000018"><block s="forward"><l>0</l></block></script><script x="386.00000000000006" y="443.19999999999965"><block s="doIf"><l><bool>false</bool></l><script><block s="doShowVar"><l>dist</l></block><block s="doShowVar"><l>dotLength</l></block><block s="doShowVar"><l>spaceLength</l></block><block s="doShowVar"><l>nbSegment</l></block><block s="doShowVar"><l>nbDot</l></block><block s="doShowVar"><l>nbSpace</l></block><block s="doPauseAll"></block><block s="doHideVar"><l>dist</l></block><block s="doHideVar"><l>dotLength</l></block><block s="doHideVar"><l>spaceLength</l></block><block s="doHideVar"><l>nbSegment</l></block><block s="doHideVar"><l>nbDot</l></block><block s="doHideVar"><l>nbSpace</l></block></script><list></list></block></script><script x="309" y="885.5333333333339"><block s="doGotoObject"><block s="reportNewList"><list><l>80</l><l>0</l></list></block></block></script></scripts></block-definition><block-definition s="line %&apos;pos1&apos; %&apos;pos2&apos; flat line ends: %&apos;flat line ends&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input><input type="%b">false</input></inputs><script><block s="doDeclareVariables"><list><l>saveFlatLineEnds</l><l>saveDir</l><l>savePosition</l></list></block><block s="doSetVar"><l>saveFlatLineEnds</l><block s="reportGlobalFlag"><l><option>flat line ends</option></l></block></block><block s="doSetVar"><l>saveDir</l><block s="direction"></block></block><block s="doSetVar"><l>savePosition</l><block s="getPosition"></block></block><block s="doSetGlobalFlag"><l><option>flat line ends</option></l><block var="flat line ends"/></block><block s="doIfElse"><block var="flat line ends"/><script><block s="up"></block><block s="doGotoObject"><block var="pos1"/></block><block s="down"></block><block s="doGotoObject"><block var="pos2"/></block><block s="up"></block></script><script><block s="up"></block><block s="doGotoObject"><block var="pos1"/></block><block s="doFaceTowards"><block var="pos2"/></block><block s="forward"><block s="reportQuotient"><block s="getPenAttribute"><l><option>size</option></l></block><l>2</l></block></block><block s="down"></block><block s="forward"><block s="reportDifference"><custom-block s="distance between %s %s"><block var="pos1"/><block var="pos2"/></custom-block><block s="getPenAttribute"><l><option>size</option></l></block></block></block><block s="up"></block></script></block><block s="doSetGlobalFlag"><l><option>flat line ends</option></l><block var="saveFlatLineEnds"/></block><block s="setHeading"><block var="saveDir"/></block><block s="doGotoObject"><block var="savePosition"/></block></script></block-definition><block-definition s="letter width at size %&apos;size&apos;" type="reporter" category="pen"><header></header><code></code><translations></translations><inputs><input type="%n">72</input></inputs><script><block s="doReport"><block s="reportQuotient"><block s="reportVariadicProduct"><list><block var="size"/><l>55</l></list></block><l>100</l></block></block></script></block-definition><block-definition s="letter height at size %&apos;size&apos;" type="reporter" category="pen"><header></header><code></code><translations></translations><inputs><input type="%n">72</input></inputs><script><block s="doReport"><block s="reportQuotient"><block s="reportVariadicProduct"><list><block var="size"/><l>360</l></list></block><l>564</l></block></block></script><scripts><script x="121.00000000000007" y="98.66666666666664"><block s="doReport"><block s="reportQuotient"><block s="reportVariadicProduct"><list><block var="size"/><l>133</l></list></block><l>200</l></block></block></script></scripts></block-definition><block-definition s="set pen color to Dardoro color %&apos;color&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>rgb</l></list></block><block s="doSetVar"><l>rgb</l><block s="reportTextSplit"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block s="reportListItem"><l>2</l><block s="reportTextSplit"><block s="reportJoinWords"><list><block var="color"/></list></block><l>rgba(</l></block></block><l>)</l></block></block><l>,</l></block></block><custom-block s="set pen color to r: %n g: %n b: %n"><block s="reportListItem"><l>1</l><block var="rgb"/></block><block s="reportListItem"><l>2</l><block var="rgb"/></block><block s="reportListItem"><l>3</l><block var="rgb"/></block></custom-block></script><scripts><script x="408.99999999999994" y="35.66666666666663"><block s="reportJoinWords"><list><l>hello </l></list></block></script><script x="473.00000000000006" y="126.66666666666663"><block s="doSetVar"><l>rgb</l><block s="reportNewList"><list><block s="reportVariadicProduct"><list><block s="reportTextSplit"><custom-block s="substring of %txt before %txt"><custom-block s="substring of %txt after %txt"><block s="reportJoinWords"><list><block var="color"/></list></block><l>(</l></custom-block><l>)</l></custom-block><l><option>csv</option></l></block><block s="reportNewList"><list><l>1</l><l>1</l><l>1</l></list></block></list></block></list></block></block></script></scripts></block-definition><block-definition s="set pen color to r: %&apos;r&apos; g: %&apos;g&apos; b: %&apos;b&apos;" type="command" category="pen"><comment x="0" y="0" w="220.66666666666663" collapsed="false">Takes three inputs for red, green, and blue&#xD;values, each between 0 and 255.  0,0,0 is black; 255,255,255 is white.  255,255,0 is yellow, and so on.&#xD;&#xD;The SET PEN block in this library lets you set individual red, green, or blue without changing the others, lets you provide a list of three RGB color components, and lets you provide a six-digit hexadecimal number, the form in which RGB color values are usually found online.&#xD;&#xD;See Appendix A of the Snap! Reference Manual for details.</comment><header></header><code></code><translations>pt:altera a cor da tua caneta para vermelho _ , verde _ e azul _ (0 a 255)&#xD;ca:fixa el llapis al color r: _ g: _ b: _&#xD;</translations><inputs><input type="%n">255</input><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doApplyExtension"><l>clr_setpen(clr)</l><list><block s="reportApplyExtension"><l>clr_rgba(r, g, b, a)</l><list><block var="r"/><block var="g"/><block var="b"/><block s="reportApplyExtension"><l>clr_channel(clr, rgba)</l><list><block s="reportApplyExtension"><l>clr_pen</l><list></list></block><l>a</l></list></block></list></block></list></block></script></block-definition><block-definition s="distance between %&apos;param1&apos; %&apos;param2&apos;" type="reporter" category="sensing"><comment x="0" y="0" w="163.57142857142858" collapsed="false">Calculate the distance between 2 positions (x1y1 -&gt; x2y2) or 2 objects.&#xD;&#xD;By Loucheman</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>x1</l><l>y1</l><l>x2</l><l>y2</l></list></block><custom-block s="// %mlt"><l>Determine x1y1</l></custom-block><block s="doIfElse"><block s="reportVariadicAnd"><list><block s="reportIsA"><block var="param1"/><l><option>list</option></l></block><block s="reportVariadicAnd"><list><block s="reportVariadicEquals"><list><block s="reportListAttribute"><l><option>length</option></l><block var="param1"/></block><l>2</l></list></block><block s="reportVariadicAnd"><list><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="param1"/></block><l><option>number</option></l></block><block s="reportIsA"><block s="reportListItem"><l>2</l><block var="param1"/></block><l><option>number</option></l></block></list></block></list></block></list><comment w="90" collapsed="false">if parameter #1 is a coordinate</comment></block><script><block s="doSetVar"><l>x1</l><block s="reportListItem"><l>1</l><block var="param1"/></block></block><block s="doSetVar"><l>y1</l><block s="reportListItem"><l>2</l><block var="param1"/></block></block></script><script><block s="doIfElse"><block s="reportIsA"><block var="param1"/><l><option>sprite</option></l><comment w="90" collapsed="false">if the parameter #1 is a sprite</comment></block><script><block s="doSetVar"><l>x1</l><block s="reportAttributeOf"><l><option>x position</option></l><block var="param1"/></block></block><block s="doSetVar"><l>y1</l><block s="reportAttributeOf"><l><option>y position</option></l><block var="param1"/></block></block></script><script><custom-block s="error %s"><l>Parameter 1 : must be a sprite or a list (x,y)</l></custom-block></script></block></script></block><custom-block s="// %mlt"><l>Determine x2y2</l></custom-block><block s="doIfElse"><block s="reportVariadicAnd"><list><block s="reportIsA"><block var="param2"/><l><option>list</option></l></block><block s="reportVariadicAnd"><list><block s="reportVariadicEquals"><list><block s="reportListAttribute"><l><option>length</option></l><block var="param2"/></block><l>2</l></list></block><block s="reportVariadicAnd"><list><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="param2"/></block><l><option>number</option></l></block><block s="reportIsA"><block s="reportListItem"><l>2</l><block var="param2"/></block><l><option>number</option></l></block></list></block></list></block></list><comment w="90" collapsed="false">if parameter #2 is a coordinate</comment></block><script><block s="doSetVar"><l>x2</l><block s="reportListItem"><l>1</l><block var="param2"/></block></block><block s="doSetVar"><l>y2</l><block s="reportListItem"><l>2</l><block var="param2"/></block></block></script><script><block s="doIfElse"><block s="reportIsA"><block var="param2"/><l><option>sprite</option></l><comment w="90" collapsed="false">if the parameter #2 is a sprite</comment></block><script><block s="doSetVar"><l>x2</l><block s="reportAttributeOf"><l><option>x position</option></l><block var="param2"/></block></block><block s="doSetVar"><l>y2</l><block s="reportAttributeOf"><l><option>y position</option></l><block var="param2"/></block></block></script><script><custom-block s="error %s"><l>Parameter 2 : must be a sprite or a list (x,y)</l></custom-block></script></block></script></block><custom-block s="// %mlt"><l>Pytagore:on trouve la longueur de l&apos;hypoténuse</l></custom-block><block s="doReport"><block s="reportMonadic"><l><option>sqrt</option></l><block s="reportVariadicSum"><list><block s="reportPower"><block s="reportDifference"><block var="x1"/><block var="x2"/></block><l>2</l></block><block s="reportPower"><block s="reportDifference"><block var="y1"/><block var="y2"/></block><l>2</l></block></list></block></block></block></script></block-definition><block-definition s="angle between %&apos;param1&apos; %&apos;param2&apos;" type="reporter" category="sensing"><comment x="0" y="0" w="163.57142857142858" collapsed="false">Calculate the angle between 2 positions (x1y1 -&gt; x2y2) or 2 objects.&#xD;&#xD;By Loucheman</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><custom-block s="// %mlt"><l>#include &lt;cmath&gt;&#xD;&#xD;// Computes the bearing in degrees from the point A(a1,a2) to&#xD;// the point B(b1,b2). Note that A and B are given in terms of&#xD;// screen coordinates.&#xD;double bearing(double a1, double a2, double b1, double b2) {&#xD;    static const double TWOPI = 6.2831853071795865;&#xD;    static const double RAD2DEG = 57.2957795130823209;&#xD;    // if (a1 = b1 and a2 = b2) throw an error &#xD;    double theta = atan2(b1 - a1, a2 - b2);&#xD;    if (theta &lt; 0.0)&#xD;        theta += TWOPI;&#xD;    return RAD2DEG * theta;&#xD;}</l></custom-block><block s="doDeclareVariables"><list><l>a1</l><l>a2</l><l>b1</l><l>b2</l><l>theta</l></list></block><custom-block s="// %mlt"><l>Determine x1y1</l></custom-block><block s="doIfElse"><block s="reportVariadicAnd"><list><block s="reportIsA"><block var="param1"/><l><option>list</option></l></block><block s="reportVariadicAnd"><list><block s="reportVariadicEquals"><list><block s="reportListAttribute"><l><option>length</option></l><block var="param1"/></block><l>2</l></list></block><block s="reportVariadicAnd"><list><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="param1"/></block><l><option>number</option></l></block><block s="reportIsA"><block s="reportListItem"><l>2</l><block var="param1"/></block><l><option>number</option></l></block></list></block></list></block></list><comment w="90" collapsed="false">if parameter #1 is a coordinate</comment></block><script><block s="doSetVar"><l>a1</l><block s="reportListItem"><l>1</l><block var="param1"/></block></block><block s="doSetVar"><l>a2</l><block s="reportListItem"><l>2</l><block var="param1"/></block></block></script><script><block s="doIfElse"><block s="reportIsA"><block var="param1"/><l><option>sprite</option></l><comment w="90" collapsed="false">if the parameter #1 is a sprite</comment></block><script><block s="doSetVar"><l>a1</l><block s="reportAttributeOf"><l><option>x position</option></l><block var="param1"/></block></block><block s="doSetVar"><l>a2</l><block s="reportAttributeOf"><l><option>y position</option></l><block var="param1"/></block></block></script><script><custom-block s="error %s"><l>Parameter 1 : must be a sprite or a list (x,y)</l></custom-block></script></block></script></block><custom-block s="// %mlt"><l>Determine x2y2</l></custom-block><block s="doIfElse"><block s="reportVariadicAnd"><list><block s="reportIsA"><block var="param2"/><l><option>list</option></l></block><block s="reportVariadicAnd"><list><block s="reportVariadicEquals"><list><block s="reportListAttribute"><l><option>length</option></l><block var="param2"/></block><l>2</l></list></block><block s="reportVariadicAnd"><list><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="param2"/></block><l><option>number</option></l></block><block s="reportIsA"><block s="reportListItem"><l>2</l><block var="param2"/></block><l><option>number</option></l></block></list></block></list></block></list><comment w="90" collapsed="false">if parameter #2 is a coordinate</comment></block><script><block s="doSetVar"><l>b1</l><block s="reportListItem"><l>1</l><block var="param2"/></block></block><block s="doSetVar"><l>b2</l><block s="reportListItem"><l>2</l><block var="param2"/></block></block></script><script><block s="doIfElse"><block s="reportIsA"><block var="param2"/><l><option>sprite</option></l><comment w="90" collapsed="false">if the parameter #2 is a sprite</comment></block><script><block s="doSetVar"><l>b1</l><block s="reportAttributeOf"><l><option>x position</option></l><block var="param2"/></block></block><block s="doSetVar"><l>b2</l><block s="reportAttributeOf"><l><option>y position</option></l><block var="param2"/></block></block></script><script><custom-block s="error %s"><l>Parameter 2 : must be a sprite or a list (x,y)</l></custom-block></script></block></script></block><custom-block s="// %mlt"><l>angle calculation</l></custom-block><block s="doSetVar"><l>theta</l><block s="reportAtan2"><block s="reportDifference"><block var="b1"/><block var="a1"/></block><block s="reportDifference"><block var="b2"/><block var="a2"/></block></block></block><block s="doReport"><block var="theta"/></block></script><scripts><script x="214.5" y="980.8333333333314"><custom-block s="// %mlt"><l>#include &lt;cmath&gt;&#xD;&#xD;// Computes the bearing in degrees from the point A(a1,a2) to&#xD;// the point B(b1,b2). Note that A and B are given in terms of&#xD;// screen coordinates.&#xD;double bearing(double a1, double a2, double b1, double b2) {&#xD;    static const double TWOPI = 6.2831853071795865;&#xD;    static const double RAD2DEG = 57.2957795130823209;&#xD;    // if (a1 = b1 and a2 = b2) throw an error &#xD;    double theta = atan2(b1 - a1, a2 - b2);&#xD;    if (theta &lt; 0.0)&#xD;        theta += TWOPI;&#xD;    return RAD2DEG * theta;&#xD;}</l></custom-block></script></scripts></block-definition><block-definition s="is JS enable?" type="predicate" category="sensing"><comment x="0" y="0" w="90" collapsed="false">return is javascript is enable&#xD;&#xD;Thk to Joecooldo </comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>JS?</l></list></block><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block s="reifyScript"><script><block s="doSetVar"><l>JS?</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>return true;</l></block><list></list></block></block></script><list></list></block><block s="reifyScript"><script><block s="doSetVar"><l>JS?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><l></l></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></block><block s="doReport"><block var="JS?"/></block></script></block-definition><block-definition s="MouseCoordinate" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><block s="reportMouseX"></block><block s="reportMouseY"></block></list></block></block></script></block-definition><block-definition s="stage size" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><block s="reportAttributeOf"><l><option>width</option></l><block s="reportGet"><l><option>stage</option></l></block></block><block s="reportAttributeOf"><l><option>height</option></l><block s="reportGet"><l><option>stage</option></l></block></block></list></block></block></script></block-definition><block-definition s="On Stage (pivot)?" type="predicate" category="sensing"><comment x="0" y="0" w="90" collapsed="false">Return true if the pivot (rotation center) is on the stage</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIfElse"><block s="reportIsA"><block s="reportGet"><l><option>self</option></l></block><l><option>sprite</option></l></block><script><block s="doReport"><block s="reportVariadicAnd"><list><block s="reportVariadicGreaterThanOrEquals"><list><block s="xPosition"></block><block s="reportAttributeOf"><l><option>left</option></l><block s="reportGet"><l><option>stage</option></l></block></block></list></block><block s="reportVariadicAnd"><list><block s="reportVariadicLessThanOrEquals"><list><block s="xPosition"></block><block s="reportAttributeOf"><l><option>right</option></l><block s="reportGet"><l><option>stage</option></l></block></block></list></block><block s="reportVariadicAnd"><list><block s="reportVariadicLessThanOrEquals"><list><block s="yPosition"></block><block s="reportAttributeOf"><l><option>top</option></l><block s="reportGet"><l><option>stage</option></l></block></block></list></block><block s="reportVariadicGreaterThanOrEquals"><list><block s="yPosition"></block><block s="reportAttributeOf"><l><option>bottom</option></l><block s="reportGet"><l><option>stage</option></l></block></block></list></block></list></block></list></block></list></block></block></script><script></script></block></script><scripts><script x="256" y="227.2"><block s="reportAttributeOf"><l><option>left</option></l><block s="reportGet"><l><option>stage</option></l></block></block></script></scripts></block-definition><block-definition s="On Stage (sprite)?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIfElse"><block s="reportIsA"><block s="reportGet"><l><option>self</option></l></block><l><option>sprite</option></l></block><script><block s="doReport"><block s="reportVariadicAnd"><list><block s="reportVariadicGreaterThanOrEquals"><list><block s="reportAttributeOf"><l><option>right</option></l><block s="reportGet"><l><option>self</option></l></block></block><block s="reportAttributeOf"><l><option>left</option></l><block s="reportGet"><l><option>stage</option></l></block></block></list></block><block s="reportVariadicAnd"><list><block s="reportVariadicLessThanOrEquals"><list><block s="reportAttributeOf"><l><option>left</option></l><block s="reportGet"><l><option>self</option></l></block></block><block s="reportAttributeOf"><l><option>right</option></l><block s="reportGet"><l><option>stage</option></l></block></block></list></block><block s="reportVariadicAnd"><list><block s="reportVariadicLessThanOrEquals"><list><block s="reportAttributeOf"><l><option>bottom</option></l><block s="reportGet"><l><option>self</option></l></block></block><block s="reportAttributeOf"><l><option>top</option></l><block s="reportGet"><l><option>stage</option></l></block></block></list></block><block s="reportVariadicGreaterThanOrEquals"><list><block s="reportAttributeOf"><l><option>top</option></l><block s="reportGet"><l><option>self</option></l></block></block><block s="reportAttributeOf"><l><option>bottom</option></l><block s="reportGet"><l><option>stage</option></l></block></block></list></block></list></block></list></block></list></block></block></script><script></script></block></script></block-definition><block-definition s="On Stage horizontally (pivot)?" type="predicate" category="sensing"><comment x="0" y="0" w="90" collapsed="false">Return true if the pivot (rotation center) is on the stage (watch only x axis)</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIfElse"><block s="reportIsA"><block s="reportGet"><l><option>self</option></l></block><l><option>sprite</option></l></block><script><block s="doReport"><block s="reportVariadicAnd"><list><block s="reportVariadicGreaterThanOrEquals"><list><block s="xPosition"></block><block s="reportAttributeOf"><l><option>left</option></l><block s="reportGet"><l><option>stage</option></l></block></block></list></block><block s="reportVariadicLessThanOrEquals"><list><block s="xPosition"></block><block s="reportAttributeOf"><l><option>right</option></l><block s="reportGet"><l><option>stage</option></l></block></block></list></block></list></block></block></script><script></script></block></script></block-definition><block-definition s="On Stage vertically (pivot)?" type="predicate" category="sensing"><comment x="0" y="0" w="90" collapsed="false">Return true if the pivot (rotation center) is on the stage (watch only y axis)</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIfElse"><block s="reportIsA"><block s="reportGet"><l><option>self</option></l></block><l><option>sprite</option></l></block><script><block s="doReport"><block s="reportVariadicAnd"><list><block s="reportVariadicLessThanOrEquals"><list><block s="yPosition"></block><block s="reportAttributeOf"><l><option>top</option></l><block s="reportGet"><l><option>stage</option></l></block></block></list></block><block s="reportVariadicGreaterThanOrEquals"><list><block s="yPosition"></block><block s="reportAttributeOf"><l><option>bottom</option></l><block s="reportGet"><l><option>stage</option></l></block></block></list></block></list></block></block></script><script></script></block></script></block-definition><block-definition s="On Stage position: %&apos;position&apos;" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIfElse"><block s="reportVariadicAnd"><list><block s="reportVariadicAnd"><list><block s="reportVariadicGreaterThan"><list><block s="reportListItem"><l>1</l><block var="position"/></block><block s="reportMonadic"><l><option>neg</option></l><block s="reportQuotient"><block s="reportListItem"><l>1</l><custom-block s="stage size"></custom-block></block><l>2</l></block></block></list></block><block s="reportVariadicLessThan"><list><block s="reportListItem"><l>1</l><block var="position"/></block><block s="reportQuotient"><block s="reportListItem"><l>1</l><custom-block s="stage size"></custom-block></block><l>2</l></block></list></block></list></block><block s="reportVariadicAnd"><list><block s="reportVariadicGreaterThan"><list><block s="reportListItem"><l>2</l><block var="position"/></block><block s="reportMonadic"><l><option>neg</option></l><block s="reportQuotient"><block s="reportListItem"><l>2</l><custom-block s="stage size"></custom-block></block><l>2</l></block></block></list></block><block s="reportVariadicLessThan"><list><block s="reportListItem"><l>2</l><block var="position"/></block><block s="reportQuotient"><block s="reportListItem"><l>2</l><custom-block s="stage size"></custom-block></block><l>2</l></block></list></block></list></block></list></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block-definition><block-definition s="key pressed" type="reporter" category="sensing"><variables><list struct="atomic" id="6136">LastKeys</list></variables><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="LastKeys"/><l>0</l></list></block><script><block s="doSetVar"><l>LastKeys</l><block s="reportNewList"><list></list></block></block></script><list></list></block><block s="doWarp"><script><custom-block s="let %upvar be %s"><l>currentKeysPressed</l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportKeyPressed"><l></l></block></autolambda><list></list></block><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><l>control</l><l>shift</l><l>alt</l><l>()lock</l><l>func</l><l>space</l></list></block><block s="reportNewList"><list><l>up arrow</l><l>down arrow</l><l>left arrow</l><l>right arrow</l></list></block><block s="reportUnicodeAsLetter"><block s="reportNumbers"><l>33</l><l>126</l></block></block></list></block></block></custom-block></script></block><block s="doSetVar"><l>LastKeys</l><custom-block s="pipe %s $arrowRight %mult%repRing"><block var="LastKeys"/><list><block s="reifyReporter"><autolambda><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportListContainsItem"><block var="currentKeysPressed"/><block var="value"/></block></autolambda><list><l>value</l><l>index</l><l>list</l></list></block><block var="LastKeys"/></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="reportConcatenatedLists"><list><l/><block var="currentKeysPressed"/></list></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><custom-block s="$flash remove duplicates from %l"><l/></custom-block></autolambda><list></list></block></list></custom-block></block><block s="doReport"><block var="LastKeys"/></block></script></block-definition><block-definition s="right mouse down?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return this.world().hand.mouseButton === "right";</l></block><list></list></block></block></script></block-definition><block-definition s="value %&apos;Value&apos; in range %&apos;Range1&apos; to %&apos;Range2&apos;" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doIfElse"><block s="reportVariadicLessThanOrEquals"><list><block var="Range1"/><block var="Range2"/></list></block><script><block s="doReport"><block s="reportVariadicLessThanOrEquals"><list><block var="Range1"/><block var="Value"/><block var="Range2"/></list></block></block></script><script><block s="doReport"><block s="reportVariadicGreaterThanOrEquals"><list><block var="Range1"/><block var="Value"/><block var="Range2"/></list></block></block></script></block></script><scripts><script x="16" y="206"><custom-block s="value %n in range %n to %n"><l>2</l><l>1</l><l>3</l><comment w="177" collapsed="false">example1: return true</comment></custom-block></script><script x="16.079980468750023" y="259.43333333333334"><custom-block s="value %n in range %n to %n"><l>1</l><l>1</l><l>3</l><comment w="177" collapsed="false">example2: return true</comment></custom-block></script><script x="17.079980468750023" y="315.43333333333334"><custom-block s="value %n in range %n to %n"><l>5</l><l>1</l><l>3</l><comment w="177" collapsed="false">example2: return false</comment></custom-block></script></scripts></block-definition><block-definition s="-- = %&apos;n&apos;" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%anyUE" readonly="true"></input></inputs><script><block s="doRun"><block s="reifyScript"><script><block s="doChangeVar"><l></l><l>-1</l></block></script><list></list></block><list><block var="n"/></list></block><block s="doReport"><block s="evaluate"><block var="n"/><list></list></block></block></script></block-definition><block-definition s="export costume %&apos;costume&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>§_costumesMenu</options></input></inputs><script><block s="doSetVar"><l>costume</l><block s="reportIfElse"><block s="reportIsA"><block var="costume"/><l><option>costume</option></l></block><block var="costume"/><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><block s="reportGetImageAttribute"><l><option>name</option></l><l></l></block><block var="costume"/></list></block></autolambda><list></list></block><block s="reportGet"><l><option>costumes</option></l></block></block></block></block><block s="doIf"><block s="reportIsA"><block var="costume"/><l><option>costume</option></l></block><script><block s="doApplyExtension"><l>cst_export(cst, name)</l><list><block var="costume"/><l></l></list></block></script><list></list></block></script></block-definition><block-definition s="set name of costume %&apos;costume&apos; to %&apos;name&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>§_costumesMenu</options></input><input type="%s">thing</input></inputs><script><block s="doSetVar"><l>costume</l><block s="reportIfElse"><block s="reportIsA"><block var="costume"/><l><option>costume</option></l></block><block var="costume"/><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><block s="reportGetImageAttribute"><l><option>name</option></l><l></l></block><block var="costume"/></list></block></autolambda><list></list></block><block s="reportGet"><l><option>costumes</option></l></block></block></block></block><block s="doIf"><block s="reportIsA"><block var="costume"/><l><option>costume</option></l></block><script><block s="doApplyExtension"><l>obj_name(obj, name)</l><list><block var="costume"/><block var="name"/></list></block></script><list></list></block></script></block-definition><block-definition s="%&apos;value&apos;" type="reporter" category="Local blocks"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"></input></inputs><script><block s="doReport"><block var="value"/></block></script></block-definition><block-definition s="easing %&apos;choice&apos;" type="reporter" category="operators"><header></header><code></code><translations>de:Beschleunigung _&#xD;ca:de forma _&#xD;pt:a forma _&#xD;</translations><inputs><input type="%txt" readonly="true">linear<options>linear&#xD;quadratic={&#xD;quadratic-in&#xD;quadratic-out&#xD;quadratic-in-out&#xD;}&#xD;cubic={&#xD;cubic-in&#xD;cubic-out&#xD;cubic-in-out&#xD;}&#xD;quart={&#xD;quart-in&#xD;quart-out&#xD;quart-in-out&#xD;}&#xD;sinusoidal={&#xD;sine-in&#xD;sine-out&#xD;sine-in-out&#xD;}&#xD;elastic</options></input></inputs><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="choice"/><l>linear</l></list></block><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="reportMonadic"><l><option>id</option></l><l></l></block></autolambda><list></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="choice"/><l>quadratic-out</l></list></block><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="reportVariadicProduct"><list><l></l><l></l></list></block></autolambda><list></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="choice"/><l>quadratic-in</l></list></block><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="reportVariadicProduct"><list><l></l><block s="reportDifference"><l>2</l><l></l></block></list></block></autolambda><list></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="choice"/><l>quadratic-in-out</l></list></block><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportVariadicLessThan"><list><l></l><l>.5</l></list></block><block s="reportVariadicProduct"><list><l>2</l><block s="reportVariadicProduct"><list><l></l><l></l></list></block></list></block><block s="reportDifference"><block s="reportVariadicProduct"><list><block s="reportDifference"><l>4</l><block s="reportVariadicProduct"><list><l>2</l><l></l></list></block></block><l></l></list></block><l>1</l></block></block></autolambda><list></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="choice"/><l>cubic-out</l></list></block><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="reportVariadicProduct"><list><l></l><block s="reportVariadicProduct"><list><l></l><l></l></list></block></list></block></autolambda><list></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="choice"/><l>cubic-in</l></list></block><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block s="reportVariadicProduct"><list><custom-block s="-- %anyUE"><block var="t"/></custom-block><block var="t"/></list></block><block var="t"/></list></block><l>1</l></list></block></autolambda><list><l>t</l></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="choice"/><l>cubic-in-out</l></list></block><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportVariadicLessThan"><list><l></l><l>.5</l></list></block><block s="reportVariadicProduct"><list><l>4</l><block s="reportVariadicProduct"><list><l></l><block s="reportVariadicProduct"><list><l></l><l></l></list></block></list></block></list></block><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block s="reportVariadicProduct"><list><block s="reportDifference"><l></l><l>1</l></block><block s="reportDifference"><block s="reportVariadicProduct"><list><l>2</l><l></l></list></block><l>2</l></block></list></block><block s="reportDifference"><block s="reportVariadicProduct"><list><l>2</l><l></l></list></block><l>2</l></block></list></block><l>1</l></list></block></block></autolambda><list></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="choice"/><l>quart-out</l></list></block><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="reportVariadicProduct"><list><l></l><block s="reportVariadicProduct"><list><l></l><block s="reportVariadicProduct"><list><l></l><l></l></list></block></list></block></list></block></autolambda><list></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="choice"/><l>quart-in</l></list></block><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="reportDifference"><l>1</l><block s="reportVariadicProduct"><list><custom-block s="-- %anyUE"><block var="t"/></custom-block><block s="reportVariadicProduct"><list><block var="t"/><block s="reportVariadicProduct"><list><block var="t"/><block var="t"/></list></block></list></block></list></block></block></autolambda><list><l>t</l></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="choice"/><l>quart-in-out</l></list></block><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportVariadicLessThan"><list><l></l><l>.5</l></list></block><block s="reportVariadicProduct"><list><l>8</l><block s="reportVariadicProduct"><list><l></l><block s="reportVariadicProduct"><list><l></l><block s="reportVariadicProduct"><list><l></l><l></l></list></block></list></block></list></block></list></block><block s="evaluate"><block s="reifyReporter"><autolambda><block s="reportDifference"><l>1</l><block s="reportVariadicProduct"><list><l>8</l><block s="reportVariadicProduct"><list><custom-block s="-- %anyUE"><block var="t"/></custom-block><block s="reportVariadicProduct"><list><block var="t"/><block s="reportVariadicProduct"><list><block var="t"/><block var="t"/></list></block></list></block></list></block></list></block></block></autolambda><list><l>t</l></list></block><list><l></l></list></block></block></autolambda><list></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="choice"/><l>sine-out</l></list></block><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="reportDifference"><l>1</l><block s="reportMonadic"><l><option>sin</option></l><block s="reportVariadicSum"><list><l>90</l><block s="reportVariadicProduct"><list><l></l><l>90</l></list></block></list></block></block></block></autolambda><list></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="choice"/><l>sine-in</l></list></block><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="reportMonadic"><l><option>sin</option></l><block s="reportVariadicProduct"><list><l></l><l>90</l></list></block></block></autolambda><list></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="choice"/><l>sine-in-out</l></list></block><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="reportQuotient"><block s="reportDifference"><l>1</l><block s="reportMonadic"><l><option>cos</option></l><block s="reportVariadicProduct"><list><l></l><l>180</l></list></block></block></block><l>2</l></block></autolambda><list></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="choice"/><l>elastic</l></list></block><script><block s="doReport"><block s="reifyScript"><script><block s="doDeclareVariables"><list><l>p</l></list></block><block s="doSetVar"><l>p</l><l>0.3</l></block><block s="doReport"><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block s="reportPower"><l>2</l><block s="reportVariadicProduct"><list><l>-10</l><l></l></list></block></block><block s="reportMonadic"><l><option>sin</option></l><custom-block s="degrees %n"><block s="reportVariadicProduct"><list><block s="reportDifference"><l></l><block s="reportQuotient"><block var="p"/><l>4</l></block></block><block s="reportQuotient"><block s="reportVariadicProduct"><list><l>2</l><custom-block s="PI"></custom-block></list></block><block var="p"/></block></list></block></custom-block></block></list></block><l>1</l></list></block></block></script><list></list></block></block></script><list></list></block><custom-block s="error %s"><block s="reportJoinWords"><list><l>unknown easing function "</l><block var="choice"/><l>"</l></list></block></custom-block></script></block-definition><block-definition s="new play sound %&apos;sound&apos;" type="command" category="sound"><comment x="0" y="0" w="133.33333333333334" collapsed="false">This block replace the &quot;play sound block&quot; - BUG FREE !</comment><header></header><code></code><translations></translations><inputs><input type="%txt"><options>§_soundsMenu</options></input></inputs><script><block s="doPlaySoundAtRate"><block var="sound"/><block s="reportGetSoundAttribute"><l><option>sample rate</option></l><block var="sound"/></block></block></script><scripts><script x="263.50000000000006" y="146.03333333333336"><block s="playSound"><l></l><comment w="90" collapsed="false">there is a bug inthis block...</comment></block></script></scripts></block-definition><block-definition s="ask %&apos;question&apos; and wait with conditionnal answer %&apos;cond&apos; error msg %&apos;msg&apos;" type="command" category="sensing"><comment x="0" y="0" w="191.99999999999997" collapsed="false">Ask a question as long as the answer does not meet the condition.&#xD;&#xD;See examples inside this block...&#xD;&#xD;Block by Loucheman</comment><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%boolUE"></input><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>cond result</l></list></block><custom-block s="repeat %cs until %boolUE"><script><block s="doAsk"><block var="question"/></block><block s="doSetVar"><l>cond result</l><block s="evaluate"><block var="cond"/><list><block s="getLastAnswer"></block></list></block></block><block s="doIf"><block s="reportNot"><block var="cond result"/></block><script><block s="doSayFor"><block var="msg"/><l>2</l></block></script><list></list></block></script><block var="cond result"/></custom-block></script><scripts><comment x="20" y="283.24999999999994" w="90" collapsed="false">some examples</comment><script x="20" y="337.24999999999994"><custom-block s="ask %txt and wait with conditionnal answer %boolUE error msg %txt"><l>Enter a number:</l><block s="reportIsA"><l></l><l><option>number</option></l></block><l>Error: you should enter a number !.</l></custom-block><block s="doSayFor"><block s="getLastAnswer"></block><l>2</l></block></script><script x="20" y="417.0833333333333"><custom-block s="ask %txt and wait with conditionnal answer %boolUE error msg %txt"><l>What is tout name ?</l><block s="reportIsA"><l></l><l><option>text</option></l></block><l>Error: you should enter a number !.</l></custom-block><block s="doSayFor"><block s="getLastAnswer"></block><l>2</l></block></script><script x="20" y="496.9166666666666"><custom-block s="ask %txt and wait with conditionnal answer %boolUE error msg %txt"><l>Enter a number from 1 to 5:</l><block s="reportVariadicAnd"><list><block s="reportIsA"><l></l><l><option>number</option></l></block><custom-block s="value %n in range %n to %n"><l></l><l>1</l><l>5</l></custom-block></list></block><l>Error: you should enter a number from 1 to 5...</l></custom-block><block s="doSayFor"><block s="getLastAnswer"></block><l>2</l></block></script></scripts></block-definition><block-definition s="glide to %&apos;sprite&apos; in %&apos;sec&apos; sec easing %&apos;easing&apos;" type="command" category="motion"><comment x="0" y="0" w="232.39999999999995" collapsed="false">Glide to sprite&#xD;&#xD;Block by Loucheman v1.0</comment><header></header><code></code><translations></translations><inputs><input type="%s">sprite<options>§_objectsMenu</options></input><input type="%n">1</input><input type="%txt" readonly="true">linear<options>linear&#xD;quadratic={&#xD;quadratic-in&#xD;quadratic-out&#xD;quadratic-in-out&#xD;}&#xD;cubic={&#xD;cubic-in&#xD;cubic-out&#xD;cubic-in-out&#xD;}&#xD;quart={&#xD;quart-in&#xD;quart-out&#xD;quart-in-out&#xD;}&#xD;sinusoidal={&#xD;sine-in&#xD;sine-out&#xD;sine-in-out&#xD;}&#xD;elastic</options></input></inputs><script><block s="doFaceTowards"><block var="sprite"/></block><custom-block s="glide %n in %n secs easing %s"><custom-block s="distance between %s %s"><block s="reportObject"><block var="sprite"/></block><block s="reportGet"><l><option>self</option></l></block></custom-block><block var="sec"/><block var="easing"/></custom-block></script></block-definition><block-definition s="paste on %&apos;sprite&apos; with effects" type="command" category="pen"><comment x="0" y="0" w="120" collapsed="false">A better paste on block !&#xD;&#xD;Now you can apply effect and paste on the target with these effects...&#xD;&#xD;Block by Loucheman</comment><header></header><code></code><translations></translations><inputs><input type="%txt"><options>§_objectsMenu</options></input></inputs><script><custom-block s="save all sprite properties"></custom-block><block s="doDeclareVariables"><list><l>savedPentrails</l><l>cstWithEffects</l></list></block><block s="gotoXY"><l>0</l><l>0</l></block><block s="doSetVar"><l>savedPentrails</l><block s="reportPenTrailsAsCostume"></block></block><block s="clear"></block><block s="setScale"><l>100</l></block><block s="doStamp"></block><block s="doSetVar"><l>cstWithEffects</l><block s="reportPenTrailsAsCostume"></block></block><block s="clear"></block><block s="doSwitchToCostume"><block var="savedPentrails"/></block><block s="doStamp"></block><custom-block s="restore all saved sprite properties keep vars? %b"><l><bool>true</bool></l></custom-block><block s="doSwitchToCostume"><block var="cstWithEffects"/></block><block s="doPasteOn"><block var="sprite"/></block><custom-block s="restore all saved sprite properties keep vars? %b"><l><bool>false</bool></l></custom-block></script></block-definition><block-definition s="restore all saved sprite properties keep vars? %&apos;KeepVars&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%b">false</input></inputs><script><block s="doIf"><custom-block s="does var %s exist?"><l>@SaveShown</l></custom-block><script><block s="doIfElse"><block var="@SaveShown"/><script><block s="show"></block></script><script><block s="hide"></block></script></block></script><list></list></block><block s="doIf"><custom-block s="does var %s exist?"><l>@SaveX</l></custom-block><script><block s="setXPosition"><block var="@SaveX"/></block></script><list></list></block><block s="doIf"><custom-block s="does var %s exist?"><l>@SaveY</l></custom-block><script><block s="setYPosition"><block var="@SaveY"/></block></script><list></list></block><block s="doIf"><custom-block s="does var %s exist?"><l>@SaveDir</l></custom-block><script><block s="setHeading"><block var="@SaveDir"/></block></script><list></list></block><block s="doIf"><custom-block s="does var %s exist?"><l>@SaveSize</l></custom-block><script><block s="setScale"><block var="@SaveSize"/></block></script><list></list></block><block s="doIf"><custom-block s="does var %s exist?"><l>@SaveCostume</l></custom-block><script><block s="doSwitchToCostume"><block var="@SaveCostume"/></block></script><list></list></block><block s="doIf"><custom-block s="does var %s exist?"><l>@SaveGhostEffect</l></custom-block><script><block s="setEffect"><l><option>ghost</option></l><block var="@SaveGhostEffect"/></block></script><list></list></block><block s="doIf"><custom-block s="does var %s exist?"><l>@SaveColor</l></custom-block><script><block s="setEffect"><l><option>color</option></l><block var="@SaveColor"/></block></script><list></list></block><block s="doIf"><custom-block s="does var %s exist?"><l>@SaveSaturation</l></custom-block><script><block s="setEffect"><l><option>saturation</option></l><block var="@SaveSaturation"/></block></script><list></list></block><block s="doIf"><custom-block s="does var %s exist?"><l>@SaveBrightness</l></custom-block><script><block s="setEffect"><l><option>brightness</option></l><block var="@SaveBrightness"/></block></script><list></list></block><block s="doIf"><custom-block s="does var %s exist?"><l>@SaveFisheye</l></custom-block><script><block s="setEffect"><l><option>fisheye</option></l><block var="@SaveFisheye"/></block></script><list></list></block><block s="doIf"><custom-block s="does var %s exist?"><l>@SaveWhirl</l></custom-block><script><block s="setEffect"><l><option>whirl</option></l><block var="@SaveWhirl"/></block></script><list></list></block><block s="doIf"><custom-block s="does var %s exist?"><l>@SaveNegative</l></custom-block><script><block s="setEffect"><l><option>negative</option></l><block var="@SaveNegative"/></block></script><list></list></block><block s="doIf"><custom-block s="does var %s exist?"><l>@SaveMosaic</l></custom-block><script><block s="setEffect"><l><option>mosaic</option></l><block var="@SaveMosaic"/></block></script><list></list></block><block s="doIf"><custom-block s="does var %s exist?"><l>@SavePixelate</l></custom-block><script><block s="setEffect"><l><option>pixelate</option></l><block var="@SavePixelate"/></block></script><list></list></block><block s="doIf"><custom-block s="does var %s exist?"><l>@SavePenDown</l></custom-block><script><block s="doIfElse"><block var="@SavePenDown"/><script><block s="down"></block></script><script><block s="up"></block></script></block></script><list></list></block><block s="fork"><block s="reifyScript"><script><block s="doIf"><block s="reportNot"><block var="KeepVars"/></block><script><custom-block s="delete var %txt"><l>@SaveShown</l></custom-block><custom-block s="delete var %txt"><l>@SaveX</l></custom-block><custom-block s="delete var %txt"><l>@SaveY</l></custom-block><custom-block s="delete var %txt"><l>@SaveDir</l></custom-block><custom-block s="delete var %txt"><l>@SaveCostume</l></custom-block><custom-block s="delete var %txt"><l>@SaveGhostEffect</l></custom-block><custom-block s="delete var %txt"><l>@SaveColor</l></custom-block><custom-block s="delete var %txt"><l>@SaveSaturation</l></custom-block><custom-block s="delete var %txt"><l>@SaveBrightness</l></custom-block><custom-block s="delete var %txt"><l>@SaveFisheye</l></custom-block><custom-block s="delete var %txt"><l>@SaveWhirl</l></custom-block><custom-block s="delete var %txt"><l>@SaveNegative</l></custom-block><custom-block s="delete var %txt"><l>@SaveMosaic</l></custom-block><custom-block s="delete var %txt"><l>@SavePixelate</l></custom-block><custom-block s="delete var %txt"><l>@SavePenDown</l></custom-block></script><list></list></block></script><list></list></block><list></list></block></script></block-definition><block-definition s="does var %&apos;_name&apos; exist?" type="predicate" category="variables"><comment x="0" y="0" w="146" collapsed="false">This block reports &quot;true&quot; if there is a variable with this given name (input slot) in that context.&#xD;&#xD;It can be a global, sprite or script variable.&#xD;&#xD;Otherwise it reports &quot;false&quot;.</comment><header></header><code></code><translations>pt:a variável _ existe&#xD;ca:existeix la variable _ ?&#xD;es:existe la variable _ ?&#xD;de:existiert var _ ?&#xD;</translations><inputs><input type="%s"></input></inputs><script><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block s="reifyScript"><script><block s="doApplyExtension"><l>err_ignore</l><list><block s="reportApplyExtension"><l>var_get(name)</l><list><block var="_name"/></list></block></list></block><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><block s="reifyScript"><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><l></l></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></block></script></block-definition><block-definition s="delete var %&apos;var&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%txt">MySpriteVar</input></inputs><script><block s="doApplyExtension"><l>var_delete(name)</l><list><block var="var"/></list></block></script></block-definition><block-definition s="save all sprite properties" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="create sprite var %txt defaut %s"><l>@SaveShown</l><block s="reportShown"></block></custom-block><custom-block s="create sprite var %txt defaut %s"><l>@SaveX</l><block s="xPosition"></block></custom-block><custom-block s="create sprite var %txt defaut %s"><l>@SaveY</l><block s="yPosition"></block></custom-block><custom-block s="create sprite var %txt defaut %s"><l>@SaveDir</l><block s="direction"></block></custom-block><custom-block s="create sprite var %txt defaut %s"><l>@SaveSize</l><block s="getScale"></block></custom-block><custom-block s="create sprite var %txt defaut %s"><l>@SaveCostume</l><block s="getCostumeIdx"></block></custom-block><custom-block s="create sprite var %txt defaut %s"><l>@SaveGhostEffect</l><block s="getEffect"><l><option>ghost</option></l></block></custom-block><custom-block s="create sprite var %txt defaut %s"><l>@SaveColor</l><block s="getEffect"><l><option>color</option></l></block></custom-block><custom-block s="create sprite var %txt defaut %s"><l>@SaveSaturation</l><block s="getEffect"><l><option>saturation</option></l></block></custom-block><custom-block s="create sprite var %txt defaut %s"><l>@SaveBrightness</l><block s="getEffect"><l><option>brightness</option></l></block></custom-block><custom-block s="create sprite var %txt defaut %s"><l>@SaveFisheye</l><block s="getEffect"><l><option>fisheye</option></l></block></custom-block><custom-block s="create sprite var %txt defaut %s"><l>@SaveWhirl</l><block s="getEffect"><l><option>whirl</option></l></block></custom-block><custom-block s="create sprite var %txt defaut %s"><l>@SaveNegative</l><block s="getEffect"><l><option>negative</option></l></block></custom-block><custom-block s="create sprite var %txt defaut %s"><l>@SaveMosaic</l><block s="getEffect"><l><option>mosaic</option></l></block></custom-block><custom-block s="create sprite var %txt defaut %s"><l>@SavePixelate</l><block s="getEffect"><l><option>pixelate</option></l></block></custom-block><custom-block s="create sprite var %txt defaut %s"><l>@SavePenDown</l><block s="getPenDown"></block></custom-block></script></block-definition><block-definition s="create sprite var %&apos;var&apos; defaut %&apos;defaut&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%txt">MySpriteVar</input><input type="%s"></input></inputs><script><block s="doIf"><block s="reportNot"><custom-block s="does var %s exist?"><block var="var"/></custom-block></block><script><custom-block s="create %s var %mult%txt"><l>sprite</l><list><block var="var"/></list></custom-block></script><list></list></block><custom-block s="set var %s to %s"><block var="var"/><block var="defaut"/></custom-block></script></block-definition><block-definition s="create %&apos;_scope&apos; var %&apos;_names&apos;" type="command" category="variables"><comment x="0" y="0" w="146" collapsed="false">This block creates  new variables on the selected scope: global (for all sprites), sprite (for this sprite only) or script (only for that blocks stack) with the names given (in &apos;names&apos; list).&#xD;&#xD;If there is already a variable with that name in that scope, it does nothing: no errors and no overwrites.</comment><header></header><code></code><translations>pt:cria as variáveis _ _&#xD;ca:crea les _ variables _&#xD;es:crear las _ variables _&#xD;de:erstellen _ var _&#xD;</translations><inputs><input type="%s" readonly="true">global<options>global&#xD;sprite&#xD;script</options></input><input type="%mult%txt"></input></inputs><script><block s="doWarp"><script><block s="doForEach"><l>_item</l><block var="_names"/><script><block s="doApplyExtension"><l>var_declare(scope, name)</l><list><block var="_scope"/><block var="_item"/></list></block></script></block></script></block></script></block-definition><block-definition s="set var %&apos;_name&apos; to %&apos;_value&apos;" type="command" category="variables"><comment x="0" y="0" w="240.4931640625" collapsed="false">This block sets the given value (last input) to the variable named with the name givent (var input).&#xD;&#xD;It looks for that variable following the scope order &apos;script&apos; -&gt; &apos;sprite&apos; -&gt; &apos;global&apos; (the first match it finds).&#xD;&#xD;If that variable does not exist (in any scope) an error happens, stopping their script. You can check it before using the &quot;does var (name) exists?&quot; block. </comment><header></header><code></code><translations>ca:assigna a _ el valor _&#xD;es:asignar a _ el valor _&#xD;pt:altera _ para _&#xD;de:setze var _ auf _&#xD;</translations><inputs><input type="%s"><options>§_getVarNamesDict</options></input><input type="%s"></input></inputs><script><block s="doApplyExtension"><l>var_set(name, val)</l><list><block var="_name"/><block var="_value"/></list></block></script></block-definition><block-definition s="glide %&apos;duration&apos; secs to x: %&apos;x&apos; y: %&apos;y&apos; easing %&apos;easing&apos;" type="command" category="motion"><comment x="0" y="0" w="224.00000000000003" collapsed="false">Thk to ego-lay_atman-bay for the block !</comment><header></header><code></code><translations>de:gleite _ in _ Sek. beschleunigt: _&#xD;ca:llisca _ en _ segons de forma _&#xD;fr:glisser _ en _ sec. accélérer _&#xD;pt:desliza _ em _ s de forma _&#xD;</translations><inputs><input type="%n">1</input><input type="%n">0</input><input type="%n">0</input><input type="%s" readonly="true">linear<options>linear&#xD;quadratic={&#xD;quadratic-in&#xD;quadratic-out&#xD;quadratic-in-out&#xD;}&#xD;cubic={&#xD;cubic-in&#xD;cubic-out&#xD;cubic-in-out&#xD;}&#xD;quart={&#xD;quart-in&#xD;quart-out&#xD;quart-in-out&#xD;}&#xD;sinusoidal={&#xD;sine-in&#xD;sine-out&#xD;sine-in-out&#xD;}&#xD;elastic</options></input></inputs><script><custom-block s="animate setter %cmdRing getter %repRing delta %n over %n secs easing %repRing"><block s="reifyScript"><script><block s="doGotoObject"><l></l></block></script><list></list></block><block s="reifyReporter"><autolambda><block s="getPosition"></block></autolambda><list></list></block><block s="reportVariadicProduct"><list><block s="reportRelationTo"><l><option>distance</option></l><block s="reportNewList"><list><block var="x"/><block var="y"/></list></block></block><block s="reportNewList"><list><block s="reportMonadic"><l><option>sin</option></l><block s="reportRelationTo"><l><option>direction</option></l><block s="reportNewList"><list><block var="x"/><block var="y"/></list></block></block></block><block s="reportMonadic"><l><option>cos</option></l><block s="reportRelationTo"><l><option>direction</option></l><block s="reportNewList"><list><block var="x"/><block var="y"/></list></block></block></block></list></block></list></block><block var="duration"/><custom-block s="easing %txt"><block var="easing"/></custom-block></custom-block></script></block-definition><block-definition s="PI" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><l>3.141592653589793</l></block></script></block-definition><block-definition s="-- %&apos;n&apos;" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%anyUE" readonly="true"></input></inputs><script><block s="doRun"><block s="reifyScript"><script><block s="doChangeVar"><l></l><l>-1</l></block></script><list></list></block><list><block var="n"/></list></block><block s="doReport"><block s="evaluate"><block var="n"/><list></list></block></block></script></block-definition><block-definition s="degrees %&apos;radians&apos;" type="reporter" category="operators"><header></header><code></code><translations>de:Grad _&#xD;ca:graus de _ radians&#xD;pt:_ radianos em graus&#xD;</translations><inputs><input type="%n">0.5</input></inputs><script><block s="doReport"><block s="reportQuotient"><block s="reportVariadicProduct"><list><block var="radians"/><l>180</l></list></block><custom-block s="PI"></custom-block></block></block></script></block-definition><block-definition s="use case-independent comparisons %&apos;tf&apos;" type="command" category="operators"><comment x="0" y="0" w="225.33333333333331" collapsed="false">If input is TRUE, comparisons made by functions in the string library will be case-independent (so &quot;FOO&quot; = &quot;foo&quot;).  This is the default.&#xD;If input is FALSE, comparisons will be exact.</comment><header></header><code></code><translations>pt:altera comparações ignorando distinção minúsculas/maiúsculas para _&#xD;</translations><inputs><input type="%b"></input></inputs><script><block s="doIfElse"><block s="reportNot"><block var="tf"/></block><script><block s="doApplyExtension"><l>var_declare(scope, name)</l><list><l>global</l><l>_case indepent</l></list></block><block s="doApplyExtension"><l>var_set(name, val)</l><list><l>_case indepent</l><block s="reportBoolean"><l><bool>false</bool></l></block></list></block></script><script><block s="doApplyExtension"><l>var_delete(name)</l><list><l>_case indepent</l></list></block></script></block></script></block-definition><block-definition s="error %&apos;msg&apos;" type="command" category="control"><header></header><code></code><translations>de:Fehler _&#xD;pt:assinala o erro _&#xD;</translations><inputs><input type="%s"></input></inputs><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block var="msg"/></list></block></script></block-definition><block-definition s="animate setter %&apos;setter&apos; getter %&apos;getter&apos; delta %&apos;delta&apos; over %&apos;duration&apos; secs easing %&apos;easing&apos;" type="command" category="control"><header></header><code></code><translations>de:animiere Setter _ Getter _ Delta _ über _ Sek. beschleunigt _&#xD;ca:modifica setter _ i getter _ amb delta _ en _ segons de forma _&#xD;pt:anima com modificador _ e inspector _ de _ em _ s de forma _&#xD;</translations><inputs><input type="%cmdRing"></input><input type="%repRing"></input><input type="%n">50</input><input type="%n">1</input><input type="%repRing"></input></inputs><script><block s="doDeclareVariables"><list><l>end time</l><l>destination</l></list></block><block s="doSetVar"><l>end time</l><block s="reportVariadicSum"><list><block s="reportDate"><l><option>time in milliseconds</option></l></block><block s="reportVariadicProduct"><list><block var="duration"/><l>1000</l></list></block></list></block></block><block s="doSetVar"><l>destination</l><block s="reportVariadicSum"><list><block s="evaluate"><block var="getter"/><list></list></block><block var="delta"/></list></block></block><block s="doUntil"><block s="reportVariadicGreaterThan"><list><block s="reportDate"><l><option>time in milliseconds</option></l></block><block var="end time"/></list></block><script><block s="doRun"><block var="setter"/><list><block s="reportDifference"><block var="destination"/><block s="reportVariadicProduct"><list><block var="delta"/><block s="evaluate"><block var="easing"/><list><block s="reportQuotient"><block s="reportDifference"><block var="end time"/><block s="reportDate"><l><option>time in milliseconds</option></l></block></block><block s="reportVariadicProduct"><list><block var="duration"/><l>1000</l></list></block></block></list></block></list></block></block></list></block></script></block><block s="doRun"><block var="setter"/><list><block var="destination"/></list></block></script></block-definition><block-definition s="%&apos;type&apos; of category %&apos;category&apos; (js)" type="reporter" category="IDE tools"><comment x="0" y="0" w="90" collapsed="false">Thk to cameron8299 for the block !</comment><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; (js)" type="command" category="IDE tools"><comment x="0" y="0" w="90" collapsed="false">Thk to cameron8299 for the block !</comment><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><block s="doRun"><block s="reportJSFunction"><list></list><l>world.children[0].refreshIDE()</l></block><list></list></block></script></block-definition><block-definition s="refresh IDE" type="command" category="IDE tools"><comment x="0" y="0" w="404.8285714285716" collapsed="false">thk to cameron8299 for the block !</comment><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="set y to random position" type="command" category="motion"><header></header><code></code><translations></translations><inputs></inputs><script><block s="setYPosition"><block s="reportRandom"><block s="reportDifference"><block s="reportAttributeOf"><l><option>top</option></l><l>Stage</l></block><block s="reportMonadic"><l><option>abs</option></l><block s="reportDifference"><block s="reportGet"><l><option>top</option></l></block><block s="yPosition"></block></block></block></block><block s="reportVariadicSum"><list><block s="reportAttributeOf"><l><option>bottom</option></l><l>Stage</l></block><block s="reportMonadic"><l><option>abs</option></l><block s="reportDifference"><block s="reportGet"><l><option>bottom</option></l></block><block s="yPosition"></block></block></block></list></block></block></block></script></block-definition><block-definition s="set x to random position" type="command" category="motion"><header></header><code></code><translations></translations><inputs></inputs><script><block s="setXPosition"><block s="reportRandom"><block s="reportVariadicSum"><list><block s="reportAttributeOf"><l><option>left</option></l><l>Stage</l></block><block s="reportMonadic"><l><option>abs</option></l><block s="reportDifference"><block s="xPosition"></block><block s="reportGet"><l><option>left</option></l></block></block></block></list></block><block s="reportDifference"><block s="reportAttributeOf"><l><option>right</option></l><l>Stage</l></block><block s="reportMonadic"><l><option>abs</option></l><block s="reportDifference"><block s="xPosition"></block><block s="reportGet"><l><option>right</option></l></block></block></block></block></block></block></script></block-definition><block-definition s="set draggable to %&apos;bool&apos; for all sprites" type="command" category="Design helpers"><comment x="0" y="0" w="90" collapsed="false">By Loucheman</comment><header></header><code></code><translations></translations><inputs><input type="%b" initial="1">false</input></inputs><script><block s="doForEach"><l>sprites</l><block s="reportAskFor"><l>Stage</l><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>other sprites</option></l></block></autolambda><list></list></block><list></list></block><script><block s="doTellTo"><block var="sprites"/><block s="reifyScript"><script><block s="doSetVar"><l><option>my draggable?</option></l><block var="bool"/></block></script><list></list></block><list></list></block></script></block></script></block-definition><block-definition s="duration %&apos;c&apos;" type="reporter" category="sensing"><comment x="0" y="0" w="90" collapsed="false">Thank&apos;s @dardoro</comment><header></header><code></code><translations></translations><inputs><input type="%cs"></input></inputs><script><block s="doDeclareVariables"><list><l>t0</l></list></block><block s="doSetVar"><l>t0</l><block s="reportDate"><l><option>time in milliseconds</option></l></block></block><block s="doRun"><block var="c"/><list></list></block><block s="doReport"><block s="reportDifference"><block s="reportDate"><l><option>time in milliseconds</option></l></block><block var="t0"/></block></block></script></block-definition><block-definition s="duration %&apos;c&apos;" type="reporter" category="sensing"><comment x="0" y="0" w="90" collapsed="false">Thank&apos;s @dardoro</comment><header></header><code></code><translations></translations><inputs><input type="%repRing"></input></inputs><script><block s="doDeclareVariables"><list><l>t0</l><l>result</l></list></block><block s="doSetVar"><l>t0</l><block s="reportDate"><l><option>time in milliseconds</option></l></block></block><block s="doSetVar"><l>result</l><block s="evaluate"><block var="c"/><list></list></block></block><block s="doReport"><block s="reportJoinWords"><list><l>timer: </l><block s="reportDifference"><block s="reportDate"><l><option>time in milliseconds</option></l></block><block var="t0"/></block><l>    result:    </l><block s="reportIfElse"><block s="reportIsA"><block var="result"/><l><option>list</option></l></block><block s="reportListAttribute"><l><option>csv</option></l><block var="result"/></block><block var="result"/></block></list></block></block></script></block-definition><block-definition s="average duration (run %&apos;times&apos; times) %&apos;c&apos;" type="reporter" category="sensing"><comment x="0" y="0" w="90" collapsed="false">Thank&apos;s @dardoro</comment><header></header><code></code><translations></translations><inputs><input type="%n">10<options>1&#xD;5&#xD;10</options></input><input type="%cs"></input></inputs><script><block s="doDeclareVariables"><list><l>t0</l></list></block><block s="doSetVar"><l>t0</l><block s="reportDate"><l><option>time in milliseconds</option></l></block></block><block s="doRepeat"><block var="times"/><script><block s="doRun"><block var="c"/><list></list></block></script></block><block s="doReport"><block s="reportJoinWords"><list><block s="reportQuotient"><block s="reportDifference"><block s="reportDate"><l><option>time in milliseconds</option></l></block><block var="t0"/></block><block var="times"/></block><l> ms</l></list></block></block></script></block-definition><block-definition s="set (draggable=false) for all sprites" type="command" category="Design helpers"><comment x="0" y="0" w="90" collapsed="false">By Loucheman</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l><option>my draggable?</option></l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doForEach"><l>other sprites</l><block s="reportGet"><l><option>other sprites</option></l></block><script><block s="doTellTo"><block var="other sprites"/><block s="reifyScript"><script><block s="doSetVar"><l><option>my draggable?</option></l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><list></list></block></script></block></script></block-definition><block-definition s="let %&apos;declarations&apos;" type="command" category="other"><comment x="0" y="0" w="251.42857142857136" collapsed="false">Declare and initialize any number of variables.&#xD;Values of earlier variables may be used to initialize any later variables (like Scheme&apos;s LET*).&#xD;&#xD;Example:&#xD;LET* ((v1 4)(v2 SQRT OF (v1))), initializes v2 as 2.&#xD;&#xD;Thk to qw23 and cymplecy</comment><header></header><code></code><translations>de:deklariere _&#xD;</translations><inputs><input type="%group%upvar%anyUE" irreplaceable="true" expand="$nl&#xD;$arrowLeft" initial="2" min="2">$_variable&#xD;$_thing</input></inputs><script><block s="doDeclareVariables"><list><l>setter</l></list></block><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><l></l></block></script><list></list></block><list><l>setter</l><block s="reportAttributeOf"><block s="reifyScript"><script><block s="doSetVar"><l></l><l></l></block></script><list></list></block><block s="reportEnvironment"><l><option>caller</option></l></block></block></list></block><block s="doWarp"><script><block s="doForEach"><l>tuple</l><block var="declarations"/><script><block s="doRun"><block var="setter"/><list><block s="reportListItem"><l>1</l><block var="tuple"/></block><block s="evaluate"><block s="reportListItem"><l>2</l><block var="tuple"/></block><list></list></block></list></block></script></block></script></block></script></block-definition><block-definition s="use case-independent comparison" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block s="reifyScript"><script><block s="doSetVar"><l>result</l><block s="reportApplyExtension"><l>var_get(name)</l><list><l>_case indepent</l></list></block></block></script><list></list></block><block s="reifyScript"><script><block s="doSetVar"><l>result</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><l></l></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></block><block s="doReport"><block var="result"/></block></script></block-definition><block-definition s="is this string: %&apos;large&apos; contains %&apos;small&apos; ? (case-sensitive? %&apos;case-sensitive?&apos;" type="predicate" category="String"><comment x="0" y="0" w="205" collapsed="false">is large string contains small string?&#xD;Block by Loucheman</comment><header></header><code></code><translations></translations><inputs><input type="%txt" initial="1"></input><input type="%s" initial="1"></input><input type="%b" initial="1">false</input></inputs><script><block s="doDeclareVariables"><list><l>csSave</l><l>resutl</l></list></block><block s="doSetVar"><l>csSave</l><custom-block s="use case-independent comparison"></custom-block></block><custom-block s="use case-independent comparisons %b"><block s="reportNot"><block var="case-sensitive?"/></block></custom-block><block s="doSetVar"><l>resutl</l><block s="reportVariadicGreaterThan"><list><custom-block s="new position of %s in %txt"><block var="small"/><block var="large"/></custom-block><l>0</l></list></block></block><custom-block s="use case-independent comparisons %b"><block var="csSave"/></custom-block><block s="doReport"><block var="resutl"/></block></script><scripts><script x="339.64285714285717" y="91.76190476190459"><custom-block s="use case-independent comparisons %b"><l><bool>true</bool></l></custom-block></script><script x="339.64285714285717" y="124.61904761904746"><custom-block s="use case-independent comparison"></custom-block></script></scripts></block-definition><block-definition s="reverse this string: %&apos;string&apos;" type="reporter" category="String"><header></header><code></code><translations></translations><inputs><input type="%txt" initial="1"></input></inputs><script><block s="doReport"><block s="reportJoinWords"><block s="reportListAttribute"><l><option>reverse</option></l><block s="reportTextSplit"><block var="string"/><l><option>letter</option></l></block></block></block></block></script></block-definition><block-definition s="multiple positions of %&apos;small&apos; in %&apos;large&apos; (overlap? %&apos;overlap&apos; )" type="reporter" category="String"><comment x="0" y="0" w="240.3142857142859" collapsed="false">Search for multiple substring in a string and return a list of positions or an empty list &#xD;&#xD;Examples:&#xD;  overlap = true&#xD;    11 in 1110111 return 1,2,5,6&#xD;  overlap = false&#xD;    11 in 1110111 return 1,5&#xD;&#xD;Thk to bh for the overlapping search&#xD;Thk to sathvikrias for the non-overlapping search&#xD;Assembled by Loucheman</comment><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">aa</input><input type="%txt" initial="1">aaa</input><input type="%b" initial="1">false</input></inputs><script><block s="doIfElse"><block var="overlap"/><script><block s="doDeclareVariables"><list><l>small list</l><l>big list</l><l>length</l></list></block><block s="doSetVar"><l>small list</l><block s="reportTextSplit"><block var="small"/><l><option>letter</option></l></block></block><block s="doSetVar"><l>big list</l><block s="reportTextSplit"><block var="large"/><l><option>letter</option></l></block></block><block s="doSetVar"><l>length</l><block s="reportDifference"><block s="reportListAttribute"><l><option>length</option></l><block var="small list"/></block><l>1</l></block></block><block s="doReport"><block s="reportAtomicKeep"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><block var="small list"/><block s="reportListItem"><block s="reportNumbers"><l></l><block s="reportVariadicSum"><list><l></l><block var="length"/></list></block></block><block var="big list"/></block></list></block></autolambda><list></list></block><block s="reportNumbers"><l>1</l><block s="reportVariadicSum"><list><block s="reportDifference"><block s="reportListAttribute"><l><option>length</option></l><block var="big list"/></block><block var="length"/></block><l>1</l></list></block></block></block></block></script><script><block s="doReport"><block s="evaluate"><block s="reifyReporter"><autolambda><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportVariadicSum"><list><block s="reportTextAttribute"><l><option>length</option></l><block s="reportJoinWords"><block s="reportListItem"><block s="reportNumbers"><l>1</l><block var="index"/></block><block var="list"/></block></block></block><block s="reportVariadicProduct"><list><block var="#1"/><block s="reportDifference"><block var="index"/><l>1</l></block></list></block><l>1</l></list></block></autolambda><list><l>value</l><l>index</l><l>list</l></list></block><block s="reportReshape"><block s="reportTextSplit"><block var="large"/><block var="small"/></block><list><l>-1</l></list></block></block></autolambda><list><l>#1</l></list></block><list><block s="reportTextAttribute"><l><option>length</option></l><block var="small"/></block></list></block></block></script></block></script><scripts><script x="533.6571428571428" y="194"><custom-block s="multiple positions of %s in %txt (overlap? %b )"><l>11</l><l>1110111</l><l><bool>true</bool></l><comment w="90" collapsed="false">bh version</comment></custom-block></script><script x="533.5714285714284" y="243.14285714285717"><custom-block s="multiple positions of %s in %txt (overlap? %b )"><l>11</l><l>1110111</l><l><bool>false</bool></l><comment w="90" collapsed="false">sathvikrias version</comment></custom-block></script></scripts></block-definition><block-definition s="average duration %&apos;c&apos; (run %&apos;times&apos; times)" type="reporter" category="sensing"><comment x="0" y="0" w="90" collapsed="false">Thank&apos;s @dardoro</comment><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%n" initial="1">10</input></inputs><script><block s="doDeclareVariables"><list><l>t0</l><l>result</l></list></block><block s="doSetVar"><l>t0</l><block s="reportDate"><l><option>time in milliseconds</option></l></block></block><block s="doRepeat"><block var="times"/><script><block s="doSetVar"><l>result</l><block s="evaluate"><block var="c"/><list></list></block></block></script></block><block s="doReport"><block s="reportJoinWords"><list><l>timer: </l><block s="reportQuotient"><block s="reportDifference"><block s="reportDate"><l><option>time in milliseconds</option></l></block><block var="t0"/></block><block var="times"/></block><l>    Result:    </l><block s="reportIfElse"><block s="reportIsA"><block var="result"/><l><option>list</option></l></block><block s="reportListAttribute"><l><option>csv</option></l><block var="result"/></block><block var="result"/></block></list></block></block></script></block-definition><block-definition s="mouse touching %&apos;sprite&apos; ?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"><options>§_clonablesMenu</options></input></inputs><script><block s="doReport"><block s="reportAskFor"><block var="sprite"/><block s="reifyReporter"><autolambda><block s="reportTouchingObject"><l><option>mouse-pointer</option></l></block></autolambda><list></list></block><list></list></block></block></script></block-definition><block-definition s="set cursor %&apos;which&apos;" type="command" category="looks" space="true"><comment x="0" y="0" w="214.0712239583334" collapsed="false">Selects the specified costume for the cursor.</comment><header></header><code></code><translations></translations><inputs><input type="%s">pointer<options>auto&#xD;cell&#xD;copy&#xD;crosshair&#xD;default&#xD;grab&#xD;grabbing&#xD;help&#xD;move&#xD;not-allowed&#xD;pointer&#xD;progress&#xD;text&#xD;wait&#xD;zoom-in&#xD;zoom-out&#xD;n-resize&#xD;s-resize&#xD;e-resize&#xD;w-resize&#xD;ne-resize&#xD;se-resize&#xD;nw-resize&#xD;sw-resize</options></input></inputs><script><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/SciSnap3Extensions.js</l></list></block><block s="doApplyExtension"><l>SciS_setCursor(cur,proc)</l><list><block var="which"/><l></l></list><comment w="183.8461538461538" collapsed="false">Many thanks to helicoptur on the Snap! user forum!</comment></block></script></block-definition><block-definition s="a new sprite" type="reporter" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>sprite</l></list></block><block s="doSetVar"><l>sprite</l><block s="newClone"><l><option>Turtle sprite</option></l></block></block><block s="doTellTo"><block var="sprite"/><block s="reifyScript"><script><block s="doSetVar"><l><option>my temporary?</option></l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><list></list></block><block s="doReport"><block var="sprite"/></block></script></block-definition><block-definition s="a blank %&apos;clone&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%upvar" initial="1"></input></inputs><script><block s="doSetVar"><l>clone</l><block s="reportAskFor"><l>Sprite</l><block s="reifyReporter"><autolambda><custom-block s="a new sprite"></custom-block></autolambda><list></list></block><list></list></block></block></script><scripts><script x="241.71428571428578" y="22.8809523809524"><block s="reportGet"><l><option>other sprites</option></l></block></script><script x="155" y="110.30952380952384"><block s="reportAskFor"><block s="reportListItem"><l>1</l><block s="reportAskFor"><l>Stage</l><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>other sprites</option></l></block></autolambda><list></list></block><list></list></block></block><block s="reifyReporter"><autolambda><custom-block s="a new sprite"></custom-block></autolambda><list></list></block><list></list></block></script><script x="47.142857142857146" y="97.33333333333324"><block s="doReport"><l></l></block></script></scripts></block-definition><block-definition s="duplicate this string %&apos;str&apos; %&apos;time&apos; time" type="reporter" category="String"><header></header><code></code><translations></translations><inputs><input type="%txt" initial="1">*</input><input type="%n" initial="1">3</input></inputs><script><block s="doReport"><block s="reportJoinWords"><block s="reportReshape"><block var="str"/><list><block var="time"/></list></block></block></block></script></block-definition><block-definition s="cr" type="reporter" category="String"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportUnicodeAsLetter"><l>10</l></block></block></script></block-definition><block-definition s="Set %&apos;mime&apos; %&apos;q&apos; as def image" type="command" category="IDE tools"><header></header><code></code><translations></translations><inputs><input type="%s">image/webp<options>image/webp&#xD;image/webp-lossless&#xD;image/png&#xD;image/jpeg</options></input><input type="%s" initial="1">0.95</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>type</l><l>q</l></list><l>IDE_Morph.prototype.saveCanvasAs = function (canvas, fileName) {&#xD;  this.saveFileAs(canvas.toDataURL( type), type, fileName);&#xD;};&#xD;&#xD;Costume.prototype.toXML = function (serializer) {&#xD;    return serializer.format(&#xD;        &apos;&lt;costume name="@" center-x="@" center-y="@" image="@" &#126;/&gt;&apos;,&#xD;        this.name,&#xD;        this.rotationCenter.x,&#xD;        this.rotationCenter.y,&#xD;        this instanceof SVG_Costume ? this.contents.src&#xD;                : normalizeCanvas(this.contents).toDataURL( type, q)&#xD;    );&#xD;};</l></block><list><block var="mime"/><block var="q"/></list></block></script></block-definition><block-definition s="let %&apos;var&apos; be %&apos;val&apos;" type="command" category="other"><comment x="0" y="0" w="183.33333333333337" collapsed="false">LET (FOO) BE (5)&#xD;is equivalent to&#xD;SCRIPT VARIABLES (FOO)&#xD;SET (FOO) TO (5)</comment><header></header><code></code><translations>pt:cria a variável de guião _ com valor _&#xD;</translations><inputs><input type="%upvar"></input><input type="%s"></input></inputs><script><block s="doSetVar"><l>var</l><block var="val"/></block></script></block-definition><block-definition s="safely try %&apos;action&apos; then if %&apos;error&apos; %&apos;handler&apos;" type="command" category="control"><comment x="0" y="0" w="276" collapsed="false">Catch errors.&#xD;&#xD;Runs the first script.  If it succeeds, nothing else happens.&#xD;But if it has an error (something that would otherwise result&#xD;in a red halo around the block), then the second script is run,&#xD;with the text of the error message that would have been shown in the variable ERROR.</comment><header></header><code></code><translations>pt:tenta executar _ e, em caso de erro _ , executa _&#xD;ca:prova de forma segura _ i si _ _&#xD;</translations><inputs><input type="%cs"></input><input type="%upvar"></input><input type="%cs"></input></inputs><script><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block var="action"/><block var="handler"/><block var="error"/></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></block></script></block-definition><block-definition s="setting %&apos;which&apos;" type="reporter" category="sensing" space="true"><comment x="0" y="0" w="144.66666666666663" collapsed="false">Allows reading global settings programmatically.&#xD;Copied from Snap! library.</comment><header></header><code></code><translations>pt:o valor da configuração _&#xD;ca:paràmetre _&#xD;</translations><inputs><input type="%s" readonly="true">Stage size<options>Project notes&#xD;Project name&#xD;User&#xD;Presentation mode&#xD;Language&#xD;Zoom blocks&#xD;Stage size&#xD;Stage scale&#xD;Retina display support&#xD;Long form input dialog&#xD;Plain prototype labels&#xD;Input sliders&#xD;Execute on slider change&#xD;Clicking sound&#xD;Turbo mode&#xD;Flat design&#xD;Keyboard editing&#xD;Visible stepping&#xD;Thread safe scripts&#xD;Prefer smooth animations&#xD;Flat line ends&#xD;Codification support&#xD;Inheritance support&#xD;Hyper blocks support&#xD;Visible palette</options></input></inputs><script><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/SciSnap3Extensions.js</l></list></block><block s="doReport"><block s="reportApplyExtension"><l>SciS_setting(which)</l><list><block var="which"/></list></block></block></script></block-definition><block-definition s="set value %&apos;which&apos; to %&apos;value&apos;" type="command" category="sensing"><comment x="0" y="0" w="233.12820512820508" collapsed="false">Allows changing global settings programmatically.&#xD;This block is for numeric or text settings; use&#xD;SET FLAG for Boolean (checkbox) values.&#xD;Copied from Snap! library.</comment><header></header><code></code><translations>pt:altera o valor da configuração _ para _&#xD;ca:fixa el valor de _ a _&#xD;</translations><inputs><input type="%s" readonly="true">Stage size<options>Project notes&#xD;Project name&#xD;Language&#xD;Zoom blocks&#xD;Stage size&#xD;Stage scale&#xD;Visible palette</options></input><input type="%s"></input></inputs><script><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/SciSnap3Extensions.js</l></list></block><block s="doApplyExtension"><l>SciS_setValueTo(which,value)</l><list><block var="which"/><block var="value"/></list></block></script></block-definition><block-definition s="pipe %&apos;value&apos; $arrowRight %&apos;pipe&apos;" type="reporter" category="control"><header></header><code></code><translations>pt:a aplicação a _ de _&#xD;</translations><inputs><input type="%s"></input><input type="%mult%repRing"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="pipe"/></block><script><block s="doReport"><block var="value"/></block></script><list></list></block><block s="doReport"><custom-block s="pipe %s $arrowRight %mult%repRing"><block s="evaluate"><block s="reportListItem"><l>1</l><block var="pipe"/></block><list><block var="value"/></list></block><block s="reportCDR"><block var="pipe"/></block></custom-block></block></script></block-definition><block-definition s="write on stage text %&apos;text&apos; size: %&apos;size&apos; font: %&apos;font&apos; align: %&apos;align&apos; x: %&apos;x&apos; y: %&apos;y&apos; color: %&apos;color&apos;" type="command" category="pen"><comment x="0" y="0" w="90" collapsed="false">Syntax:&#xD;_italics_&#xD;*bold*&#xD;Fraction:&#xD;&#126;(1/2)</comment><header></header><code></code><translations></translations><inputs><input type="%mlt">Hello!</input><input type="%n">12</input><input type="%txt">Arial<options>serif&#xD;sans-serif&#xD;monospace&#xD;Arial&#xD;Arial Black&#xD;Verdana&#xD;Tahoma&#xD;Trebuchet MS&#xD;Impact&#xD;Times New Roman&#xD;Didot&#xD;Georgia&#xD;American Typewriter&#xD;Andalé Mono&#xD;Courier&#xD;Lucida Console&#xD;Monaco&#xD;Bradley Hand&#xD;Brush Script MT&#xD;Luminari&#xD;Comic Sans MS</options></input><input type="%txt" readonly="true">left<options>left&#xD;center&#xD;right</options></input><input type="%n">0</input><input type="%n">0</input><input type="%txt">rgb(0,0,0)</input></inputs><script><custom-block s="do %cs and restore pen"><script><block s="doDeclareVariables"><list><l>text dimensions</l></list></block><block s="doSetVar"><l>text dimensions</l><custom-block s="dimensions of text %mlt size: %n font: %txt align: %txt x: %n y: %n"><block var="text"/><block var="size"/><block var="font"/><block var="align"/><block var="x"/><block var="y"/></custom-block></block><block s="up"></block><block s="gotoXY"><custom-block s="value at key %s of %l"><l>x</l><block var="text dimensions"/></custom-block><custom-block s="value at key %s of %l"><l>y</l><block var="text dimensions"/></custom-block></block><custom-block s="write on stage %mlt size: %n font: %txt color: %txt"><block var="text"/><block var="size"/><block var="font"/><block var="color"/></custom-block></script></custom-block></script></block-definition><block-definition s="dimensions of text %&apos;text&apos; size: %&apos;size&apos; font: %&apos;font&apos; align: %&apos;align&apos; x: %&apos;x&apos; y: %&apos;y&apos;" type="reporter" category="pen" helper="true"><comment x="0" y="0" w="90" collapsed="false">pre-render text transparent to determine height and width and, if necessary, the adjusted coordinates (for right and center alignment)</comment><header></header><code></code><translations></translations><inputs><input type="%mlt">Hello!</input><input type="%n">12</input><input type="%txt">Arial<options>serif&#xD;sans-serif&#xD;monospace&#xD;Arial&#xD;Arial Black&#xD;Verdana&#xD;Tahoma&#xD;Trebuchet MS&#xD;Impact&#xD;Times New Roman&#xD;Didot&#xD;Georgia&#xD;American Typewriter&#xD;Andalé Mono&#xD;Courier&#xD;Lucida Console&#xD;Monaco&#xD;Bradley Hand&#xD;Brush Script MT&#xD;Luminari&#xD;Comic Sans MS</options></input><input type="%txt" readonly="true">left<options>left&#xD;center&#xD;right</options></input><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doDeclareVariables"><list><l>height</l><l>width</l></list></block><custom-block s="do %cs and restore pen"><script><block s="up"></block><block s="gotoXY"><l>0</l><l>0</l></block><block s="setHeading"><l>90</l></block><custom-block s="write on stage %mlt size: %n font: %txt color: %txt"><block var="text"/><block var="size"/><block var="font"/><l>transparent</l></custom-block><block s="doSetVar"><l>height</l><block s="reportMonadic"><l><option>abs</option></l><block s="yPosition"></block></block></block><block s="doSetVar"><l>width</l><block s="xPosition"></block></block><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="align"/><l>right</l></list></block><script><block s="doChangeVar"><l>x</l><block s="reportVariadicProduct"><list><l>-1</l><block var="width"/></list></block></block></script><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="align"/><l>center</l></list></block><script><block s="doChangeVar"><l>x</l><block s="reportVariadicProduct"><list><l>-0.5</l><block var="width"/></list></block></block></script><list></list></block></script></block></script></custom-block><block s="doReport"><block s="reportNewList"><list><custom-block s="key: %s value: %s"><l>width</l><block var="width"/></custom-block><custom-block s="key: %s value: %s"><l>height</l><block var="height"/></custom-block><custom-block s="key: %s value: %s"><l>x</l><block var="x"/></custom-block><custom-block s="key: %s value: %s"><l>y</l><block var="y"/></custom-block></list></block></block></script></block-definition><block-definition s="write on stage %&apos;text&apos; size: %&apos;size&apos; font: %&apos;font&apos; color: %&apos;color&apos;" type="command" category="pen" helper="true"><header></header><code></code><translations></translations><inputs><input type="%mlt">Hello!</input><input type="%n">12</input><input type="%txt">Arial<options>serif&#xD;sans-serif&#xD;monospace&#xD;Arial&#xD;Arial Black&#xD;Verdana&#xD;Tahoma&#xD;Trebuchet MS&#xD;Impact&#xD;Times New Roman&#xD;Didot&#xD;Georgia&#xD;American Typewriter&#xD;Andalé Mono&#xD;Courier&#xD;Lucida Console&#xD;Monaco&#xD;Bradley Hand&#xD;Brush Script MT&#xD;Luminari&#xD;Comic Sans MS</options></input><input type="%txt">rgb(0,0,0)</input></inputs><script><custom-block s="load fancy text extension"></custom-block><block s="doApplyExtension"><l>ft_write_on_stage(text, size, font, color, sprite)</l><list><block var="text"/><block var="size"/><block var="font"/><block var="color"/><block s="reportGet"><l><option>self</option></l></block></list></block></script></block-definition><block-definition s="load fancy text extension" type="command" category="pen" helper="true"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/microworlds/fancy-text.js</l></list></block></script></block-definition><block-definition s="key: %&apos;key&apos; value: %&apos;value&apos;" type="reporter" category="operators" helper="true"><header></header><code></code><translations>pt:um par (chave: _ , valor: _ )&#xD;</translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block var="key"/><block var="value"/></list></block></block></script></block-definition><block-definition s="do %&apos;command&apos; and restore pen" type="command" category="pen" helper="true"><header></header><code></code><translations></translations><inputs><input type="%cs"></input></inputs><script><block s="doDeclareVariables"><list><l>old x</l><l>old y</l><l>dir</l><l>pen down?</l><l>old color</l></list></block><block s="doSetVar"><l>old x</l><block s="xPosition"></block></block><block s="doSetVar"><l>old y</l><block s="yPosition"></block></block><block s="doSetVar"><l>dir</l><block s="direction"></block></block><block s="doSetVar"><l>pen down?</l><block s="getPenDown"></block></block><block s="doSetVar"><l>old color</l><block s="getPenAttribute"><l><option>r-g-b-a</option></l></block></block><block s="doRun"><block var="command"/><list></list></block><block s="up"></block><block s="gotoXY"><block var="old x"/><block var="old y"/></block><block s="setHeading"><block var="dir"/></block><block s="doIf"><block var="pen down?"/><script><block s="down"></block></script><list></list></block><block s="setPenColorDimension"><l><option>r-g-b(-a)</option></l><block var="old color"/></block></script></block-definition><block-definition s="value at key %&apos;key&apos; of %&apos;lst&apos;" type="reporter" category="operators" helper="true"><header></header><code></code><translations>pt:o valor com chave _ em _&#xD;</translations><inputs><input type="%s"></input><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doForEach"><l>each item</l><block var="lst"/><script><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportListItem"><l>1</l><block var="each item"/></block><block var="key"/></list></block><script><block s="doReport"><block s="reportListItem"><l>2</l><block var="each item"/></block></block></script><list></list></block></script></block></script></block><block s="doReport"><l></l></block></script></block-definition><block-definition s="set stage size w: %&apos;sizeH&apos; h: %&apos;sizeV&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%n">480</input><input type="%n">360</input></inputs><script><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/SciSnapExtensions.js</l></list></block><block s="doApplyExtension"><l>SciS_setvalue(which,value)</l><list><l>Stage size</l><block s="reportNewList"><list><block var="sizeH"/><block var="sizeV"/></list></block></list></block></script></block-definition><block-definition s="is prime ? %&apos;value&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="value"/><l>2</l></list></block><block s="reportBoolean"><l><bool>true</bool></l></block><block s="reportListIsEmpty"><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><block s="reportModulus"><block var="value"/><l></l></block><l>0</l></list></block></autolambda><list></list></block><block s="reportNumbers"><l>2</l><block s="reportMonadic"><l><option>sqrt</option></l><block var="value"/></block></block></block></block></block></block></script></block-definition></blocks><primitives><block-definition s="switch to costume %&apos;#1&apos;" type="command" category="looks" selector="doSwitchToCostume" primitive="doSwitchToCostume"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>§_costumesMenu</options></input></inputs><script><block s="doPrimitive"><l><bool>true</bool></l><l>doSwitchToCostume</l></block></script></block-definition></primitives><stage name="Stage" width="500" height="500" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="8955"><pentrails>data:image/png;base64,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</pentrails><costumes><list struct="atomic" id="8956"></list></costumes><sounds><list struct="atomic" id="8957"></list></sounds><variables><variable name="@SaveShown"><bool>true</bool></variable></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="Sprite" idx="1" x="72.00000000000011" y="102.00000000000006" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="false" hidden="true" costume="0" color="184,195,255,1" pen="tip" id="8962"><costumes><list struct="atomic" id="8963"></list></costumes><sounds><list struct="atomic" id="8964"></list></sounds><blocks></blocks><variables></variables><scripts><script x="25" y="25"><block s="receiveGo"></block><block s="clear"></block><block s="doTellTo"><l>Sprite(2)</l><block s="reifyScript"><script><block s="setEffect"><l><option>ghost</option></l><l>100</l></block><block s="show"></block></script><list></list></block><list></list></block><custom-block s="// %mlt"><l>Coding Train Challenge 167: Ulam Spiral of Prime Numbers&#xD;https://www.youtube.com/watch?v=a35KWEjRvc0&amp;list=PLygWKngAot9YwrBxzqRfTtB9aV0Mg_A3w&#xD;&#xD;let x, y;&#xD;let px, py;&#xD;let step = 1;&#xD;let stepSize = 50;&#xD;let numSteps = 1;&#xD;let state = 0;&#xD;let turnCounter = 1;&#xD;let totalSteps;&#xD;&#xD;function isPrime(value) {&#xD;  if (value == 1) return false;&#xD;  for (let i = 2; i &lt;= sqrt(value); i++) {&#xD;    if (value % i == 0) {&#xD;      return false;&#xD;    }&#xD;  }&#xD;  return true;&#xD;}&#xD;&#xD;function setup() {&#xD;  createCanvas(550, 550);&#xD;&#xD;  const cols = width / stepSize;&#xD;  const rows = height / stepSize;&#xD;  totalSteps = cols * rows;&#xD;&#xD;  x = width / 2;&#xD;  y = height / 2;&#xD;  px = x;&#xD;  py = y;&#xD;  background(0);&#xD;}&#xD;&#xD;function draw() {&#xD;  textSize(stepSize*0.5);&#xD;  textAlign(CENTER, CENTER);&#xD;  fill(255);&#xD;  //stroke(255);&#xD;  noStroke();&#xD;  text(step, x, y);&#xD;  stroke(255);&#xD;  strokeWeight(0.5);&#xD;  noFill();&#xD;  rectMode(CENTER);&#xD;  rect(x,y,stepSize);&#xD;  // if (isPrime(step)) {&#xD;  //   circle(x, y, stepSize * 0.5);&#xD;  // }&#xD;  // line(x, y, px, py);&#xD;  px = x;&#xD;  py = y;&#xD;&#xD;  switch (state) {&#xD;    case 0:&#xD;      x += stepSize;&#xD;      break;&#xD;    case 1:&#xD;      y -= stepSize;&#xD;      break;&#xD;    case 2:&#xD;      x -= stepSize;&#xD;      break;&#xD;    case 3:&#xD;      y += stepSize;&#xD;      break;&#xD;  }&#xD;&#xD;  if (step % numSteps == 0) {&#xD;    state = (state + 1) % 4;&#xD;    turnCounter++;&#xD;    if (turnCounter % 2 == 0) {&#xD;      numSteps++;&#xD;    }&#xD;  }&#xD;  step++;&#xD;  if (step &gt; totalSteps) {&#xD;    noLoop();&#xD;  }&#xD;}</l></custom-block><block s="hide"></block><custom-block s="set value %s to %s"><l>Stage size</l><block s="reportNewList"><list><l>500</l><l>500</l></list></block></custom-block><block s="doSetGlobalFlag"><l><option>turbo mode</option></l><l><bool>true</bool></l></block><block s="doWait"><l>1</l></block><block s="doDeclareVariables"><list><l>xPosition</l><l>yPosition</l><l>numSteps</l><l>state</l><l>turnCounter</l><l>totalSteps</l><l>yOffset</l><l>prevPosition</l><l>stepSize</l></list></block><block s="doSetVar"><l>stepSize</l><block var="Step Size"/></block><block s="clear"></block><block s="setHeading"><l>90</l></block><block s="setColor"><color>4,148,220,1</color></block><block s="doSetVar"><l>yOffset</l><l>5</l></block><block s="doSetVar"><l>numSteps</l><l>1</l></block><block s="doSetVar"><l>state</l><l>0</l></block><block s="doSetVar"><l>turnCounter</l><l>1</l></block><block s="doSetVar"><l>totalSteps</l><block s="reportPower"><block s="reportIfElse"><block s="reportVariadicEquals"><list><block s="reportModulus"><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block s="reportVariadicMin"><list><block s="reportAttributeOf"><l><option>width</option></l><l>Stage</l></block><block s="reportAttributeOf"><l><option>height</option></l><l>Stage</l></block></list></block><block var="stepSize"/></block></block><l>2</l></block><l>0</l></list></block><block s="reportDifference"><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block s="reportVariadicMin"><list><block s="reportAttributeOf"><l><option>width</option></l><l>Stage</l></block><block s="reportAttributeOf"><l><option>height</option></l><l>Stage</l></block></list></block><block var="stepSize"/></block></block><l>1</l></block><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block s="reportVariadicMin"><list><block s="reportAttributeOf"><l><option>width</option></l><l>Stage</l></block><block s="reportAttributeOf"><l><option>height</option></l><l>Stage</l></block></list></block><block var="stepSize"/></block></block></block><l>2</l></block></block><block s="doSetVar"><l>xPosition</l><l>0</l></block><block s="doSetVar"><l>yPosition</l><l>0</l></block><block s="doSetVar"><l>prevPosition</l><block s="reportNewList"><list><block var="xPosition"/><block var="yPosition"/></list></block></block><block s="doFor"><l>i</l><l>1</l><block var="totalSteps"/><script><block s="doTellTo"><l>Sprite(2)</l><block s="reifyScript"><script><block s="setEffect"><l><option>ghost</option></l><block var="#1"/></block></script><list><l>#1</l></list></block><list><custom-block s="remap value %n from range %n , %n to range %n , %n"><block var="i"/><l>1</l><block var="totalSteps"/><l>100</l><l>50</l></custom-block></list></block><block s="doIfElse"><block var="Draw prime ?"/><script><block s="doIf"><block s="reportVariadicOr"><list><block s="reportVariadicEquals"><list><block var="i"/><l>1</l></list></block><custom-block s="is prime ? %n"><block var="i"/></custom-block></list></block><script><custom-block s="write on stage text %mlt size: %n font: %txt align: %txt x: %n y: %n color: %txt"><block var="i"/><custom-block s="remap value %n from range %n , %n to range %n , %n"><block var="stepSize"/><l>3</l><l>25</l><l>7</l><l>12</l></custom-block><l>monospace</l><l>center</l><block var="xPosition"/><block s="reportVariadicSum"><list><block var="yPosition"/><block var="yOffset"/></list></block><l>rgb(0,0,0)</l></custom-block></script><list></list></block></script><script><block s="doIf"><block s="reportVariadicOr"><list><block s="reportVariadicEquals"><list><block var="i"/><l>1</l></list></block><custom-block s="is prime ? %n"><block var="i"/></custom-block></list></block><script><block s="setColor"><color>30,30,30,1</color></block><block s="setSize"><custom-block s="remap value %n from range %n , %n to range %n , %n"><block var="stepSize"/><l>3</l><l>25</l><l>3</l><l>8</l></custom-block></block><block s="up"></block><block s="gotoXY"><block var="xPosition"/><block var="yPosition"/></block><block s="down"></block><block s="forward"><l>0</l></block><block s="up"></block></script><list></list></block></script></block><block s="doIf"><block var="Draw path ?"/><script><block s="setSize"><l>1</l></block><block s="setColor"><color>184,195,255,1</color></block><custom-block s="line %l %l flat line ends: %b"><block var="prevPosition"/><block s="reportNewList"><list><block var="xPosition"/><block var="yPosition"/></list></block><l><bool>true</bool></l></custom-block></script><list></list></block><block s="doSetVar"><l>prevPosition</l><block s="reportNewList"><list><block var="xPosition"/><block var="yPosition"/></list></block></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="state"/><l>0</l></list></block><script><block s="doChangeVar"><l>xPosition</l><block var="stepSize"/></block></script><list><block s="reportVariadicEquals"><list><block var="state"/><l>1</l></list></block><script><block s="doChangeVar"><l>yPosition</l><block var="stepSize"/></block></script><block s="reportVariadicEquals"><list><block var="state"/><l>2</l></list></block><script><block s="doChangeVar"><l>xPosition</l><block s="reportMonadic"><l><option>neg</option></l><block var="stepSize"/></block></block></script><block s="reportVariadicEquals"><list><block var="state"/><l>3</l></list></block><script><block s="doChangeVar"><l>yPosition</l><block s="reportMonadic"><l><option>neg</option></l><block var="stepSize"/></block></block></script></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportModulus"><block var="i"/><block var="numSteps"/></block><l>0</l></list></block><script><block s="doSetVar"><l>state</l><block s="reportModulus"><block s="reportVariadicSum"><list><block var="state"/><l>1</l></list></block><l>4</l></block></block><block s="doChangeVar"><l>turnCounter</l><l>1</l></block><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportModulus"><block var="turnCounter"/><l>2</l></block><l>0</l></list></block><script><block s="doChangeVar"><l>numSteps</l><l>1</l></block></script><list></list></block></script><list></list></block></script></block></script><script x="82.66666666666666" y="2533.916666666663"><block var="step"/></script><script x="30" y="2759.750000000007"><block s="receiveInteraction"><l><option>stopped</option></l></block><block s="clear"></block><block s="doTellTo"><l>Sprite(2)</l><block s="reifyScript"><script><block s="setEffect"><l><option>ghost</option></l><block var="#1"/></block><block s="hide"></block></script><list><l>#1</l></list></block><list><l>100</l></list></block></script></scripts></sprite><sprite name="Sprite(2)" idx="2" x="0" y="-180" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="false" hidden="true" costume="2" color="73.94999999999999,39.933,0,1" pen="tip" id="9368"><costumes><list id="9369"><item><ref mediaID="Spiral of Primes v1.0_Sprite(2)_cst_Costume"></ref></item><item><ref mediaID="Spiral of Primes v1.0_Sprite(2)_cst_Costume(2)"></ref></item></list></costumes><sounds><list struct="atomic" id="9370"></list></sounds><blocks></blocks><variables></variables><scripts><script x="35" y="23.19444444444448"><block s="clear"></block><custom-block s="write on stage text %mlt size: %n font: %txt align: %txt x: %n y: %n color: %txt"><l>Ulam Spiral of &#xD;Prime Numbers</l><l>55</l><l>Showcard Gothic</l><l>center</l><l>0</l><l>0</l><l>rgb(255,255,255)</l></custom-block><block s="gotoXY"><l>0</l><l>-50</l></block><custom-block s="add %obj to my costumes"><block s="reportPenTrailsAsCostume"></block></custom-block><block s="clear"></block><block s="clear"></block><custom-block s="write on stage text %mlt size: %n font: %txt align: %txt x: %n y: %n color: %txt"><l>Ulam Spiral of &#xD;Prime Numbers</l><l>55</l><l>Showcard Gothic</l><l>center</l><l>0</l><l>0</l><l>rgb(128,128,128)</l></custom-block><block s="gotoXY"><l>0</l><l>-50</l></block><custom-block s="add %obj to my costumes"><block s="reportPenTrailsAsCostume"></block></custom-block><block s="clear"></block></script><script x="39.16666666666667" y="337.6944444444444"><block s="receiveGo"></block><block s="gotoXY"><l>0</l><l>-180</l></block></script></scripts></sprite><watcher var="xPosition" style="normal" x="9.999999999999432" y="10.000000000000071" color="243,118,29" hidden="true"/><watcher var="yPosition" style="normal" x="9.999999999999432" y="34.40000200000003" color="243,118,29" hidden="true"/><watcher var="Draw prime ?" style="slider" min="0" max="1" x="1.0000000000005684" y="2.9999999999999964" color="243,118,29"/><watcher var="Draw path ?" style="slider" min="0" max="1" x="202.73600566859022" y="2.4000020000000006" color="243,118,29"/><watcher var="Step Size" style="slider" min="3" max="25" x="384.7997863917053" y="0.6270206461249686" color="243,118,29"/></sprites></stage><variables><variable name="Draw path ?"><l>1</l></variable><variable name="Draw prime ?"><l>1</l></variable><variable name="Step Size"><l>25</l></variable></variables></scene></scenes></project><media name="Spiral of Primes v1.0" app="Snap! 10.7.1, https://snap.berkeley.edu" version="2"><costume name="Costume" center-x="215" center-y="48" image="data:image/png;base64,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" mediaID="Spiral of Primes v1.0_Sprite(2)_cst_Costume"/><costume name="Costume(2)" center-x="215" center-y="48" image="data:image/png;base64,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" mediaID="Spiral of Primes v1.0_Sprite(2)_cst_Costume(2)"/></media></snapdata>