<snapdata remixID="15110551"><project name="gamepad demo" app="Snap! 11.0.8, https://snap.berkeley.edu" version="2"><notes>This is a demo of my gamepad library, which can be found here: https://snap.berkeley.edu/snap/snap.html#present:Username=ego-lay_atman-bay&amp;ProjectName=gamepad%20library</notes><thumbnail>data:image/png;base64,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</thumbnail><scenes select="1"><scene name="gamepad demo"><notes>This is a demo of my gamepad library, which can be found here: https://snap.berkeley.edu/snap/snap.html#present:Username=ego-lay_atman-bay&amp;ProjectName=gamepad%20library</notes><palette><category name="gamepad" color="0,118,118,1"/></palette><hidden></hidden><headers></headers><code></code><blocks><block-definition s="gamepads" type="reporter" category="gamepad"><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="load gamepad library"></custom-block><block s="doReport"><block s="reportApplyExtension"><l>gp_gamepads()</l><list></list></block></block></script><scripts><script x="10" y="111.63333333333328"><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>const gamepads = navigator.getGamepads()&#xD;if (!gamepads) {&#xD;  return new List()&#xD;}&#xD;&#xD;const gamepadList = new List()&#xD;&#xD;for (let gamepad of gamepads) {&#xD;  if (!gamepad) {&#xD;    continue&#xD;  }&#xD;  &#xD;  const info = new List()&#xD;  info.add(new List([&apos;id&apos;,gamepad.index + 1]))&#xD;  info.add(new List([&apos;name&apos;,gamepad.id]))&#xD;  info.add(new List([&apos;connected&apos;,gamepad.connected]))&#xD;  info.add(new List([&apos;axes&apos;, new List(gamepad.axes)]))&#xD;  info.add(new List([&apos;buttons&apos;, new List(gamepad.buttons.map(button =&gt; button.pressed))]))&#xD;  // info.add(new List([&apos;mapping&apos;,gamepad.mapping]))&#xD;  &#xD;  gamepadList.add(info)&#xD;}&#xD;&#xD;return gamepadList</l></block><list></list></block></block></script></scripts></block-definition><block-definition s="get gamepad %&apos;index&apos; info" type="reporter" category="gamepad"><header></header><code></code><translations></translations><inputs><input type="%n" initial="1">1<options>1&#xD;2&#xD;3&#xD;4</options></input></inputs><script><block s="doReport"><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><block s="reportListItem"><l>id</l><l/></block><block var="index"/></list></block></autolambda><list></list></block><custom-block s="gamepads"></custom-block></block></block></script></block-definition><block-definition s="gamepad %&apos;index&apos; connected?" type="predicate" category="gamepad"><header></header><code></code><translations></translations><inputs><input type="%n" initial="1">1<options>1&#xD;2&#xD;3&#xD;4</options></input></inputs><script><block s="doDeclareVariables"><list><l>info</l></list></block><block s="doSetVar"><l>info</l><custom-block s="get gamepad %n info"><block var="index"/></custom-block></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="info"/><l><option>list</option></l></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><block s="doReport"><block s="reportListItem"><l>connected</l><custom-block s="get gamepad %n info"><block var="index"/></custom-block></block></block></script></block-definition><block-definition s="gamepad %&apos;index&apos; buttons" type="reporter" category="gamepad"><header></header><code></code><translations></translations><inputs><input type="%n" initial="1">1<options>1&#xD;2&#xD;3&#xD;4</options></input></inputs><script><block s="doDeclareVariables"><list><l>info</l></list></block><block s="doSetVar"><l>info</l><custom-block s="get gamepad %n info"><block var="index"/></custom-block></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="info"/><l><option>list</option></l></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script><list></list></block><block s="doReport"><block s="reportListItem"><l>buttons</l><block var="info"/></block></block></script></block-definition><block-definition s="gamepad %&apos;index&apos; axes" type="reporter" category="gamepad"><header></header><code></code><translations></translations><inputs><input type="%n" initial="1">1<options>1&#xD;2&#xD;3&#xD;4</options></input></inputs><script><block s="doDeclareVariables"><list><l>info</l></list></block><block s="doSetVar"><l>info</l><custom-block s="get gamepad %n info"><block var="index"/></custom-block></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="info"/><l><option>list</option></l></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script><list></list></block><block s="doReport"><block s="reportListItem"><l>axes</l><block var="info"/></block></block></script></block-definition><block-definition s="button %&apos;button&apos; of gamepad %&apos;gamepad&apos; pressed?" type="predicate" category="gamepad" space="true"><header></header><code></code><translations></translations><inputs><input type="%n" initial="1">1<options>A (1)=1&#xD;B (2)=2&#xD;X (3)=3&#xD;Y (4)=4&#xD;Left Bumper (5)=5&#xD;Right Bumper (6)=6&#xD;Left Trigger (7)=7&#xD;Right Trigger (8)=8&#xD;- (9)=9&#xD;+ (10)=10&#xD;Left Stick (11)=11&#xD;Right Stick (12)=12&#xD;D-Pad Up (13)=13&#xD;D-Pad Down (14)=14&#xD;D-Pad Left (15=15&#xD;D-Pad Right (16)=16&#xD;Home/View (17)=17&#xD;Select/Snapshot (18)=18</options></input><input type="%n" initial="1">1<options>1&#xD;2&#xD;3&#xD;4</options></input></inputs><script><block s="doReport"><block s="reportListItem"><block var="button"/><custom-block s="gamepad %n buttons"><block var="gamepad"/></custom-block></block></block></script></block-definition><block-definition s="when button %&apos;button&apos; on gamepad %&apos;gamepad&apos; pressed %&apos;pressed buttons&apos;" type="hat" category="gamepad"><variables><list struct="atomic" id="152">last buttons</list></variables><header></header><code></code><translations></translations><inputs><input type="%n" initial="1">1<options>any=any&#xD;A (1)=1&#xD;B (2)=2&#xD;X (3)=3&#xD;Y (4)=4&#xD;Left Bumper (5)=5&#xD;Right Bumper (6)=6&#xD;Left Trigger (7)=7&#xD;Right Trigger (8)=8&#xD;- (9)=9&#xD;+ (10)=10&#xD;Left Stick (11)=11&#xD;Right Stick (12)=12&#xD;D-Pad Up (13)=13&#xD;D-Pad Down (14)=14&#xD;D-Pad Left (15=15&#xD;D-Pad Right (16)=16&#xD;Home/View (17)=17&#xD;Select/Snapshot (18)=18</options></input><input type="%n" initial="1">1<options>1&#xD;2&#xD;3&#xD;4</options></input><input type="%upvar" initial="1" max="1">buttons</input></inputs><script><block s="doDeclareVariables"><list><l>buttons</l></list></block><block s="doSetVar"><l>buttons</l><custom-block s="gamepad %n buttons"><block var="gamepad"/></custom-block></block><block s="doSetVar"><l>pressed buttons</l><block s="reportNewList"><list></list></block></block><block s="doIf"><block s="reportListIsEmpty"><block var="buttons"/></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="button"/><l>any</l></list></block><script><block s="doSetVar"><l>pressed buttons</l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportListItem"><l></l><block var="buttons"/></block></autolambda><list></list></block><block s="reportNumbers"><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="buttons"/></block></block></block></block></script><list><block s="reportIsA"><block var="button"/><l><option>list</option></l></block><script><block s="doSetVar"><l>pressed buttons</l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportListItem"><l></l><block var="buttons"/></block></autolambda><list></list></block><block var="button"/></block></block></script><block s="reportListItem"><block var="button"/><block var="buttons"/></block><script><block s="doSetVar"><l>pressed buttons</l><block s="reportNewList"><list><block var="button"/></list></block></block></script></list></block><block s="doIf"><block s="reportVariadicNotEquals"><list><block var="last buttons"/><block var="pressed buttons"/></list></block><script><block s="doSetVar"><l>last buttons</l><block var="pressed buttons"/></block><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list><comment w="110" collapsed="false">Trigger again when a new button is pressed</comment></block><block s="doReport"><block s="reportNot"><block s="reportListIsEmpty"><block var="pressed buttons"/></block></block></block></script></block-definition><block-definition s="while button %&apos;button&apos; on gamepad %&apos;gamepad&apos; is pressed %&apos;pressed buttons&apos;" type="hat" category="gamepad" semantics="rule"><header></header><code></code><translations></translations><inputs><input type="%n" initial="1">1<options>any=any&#xD;A (1)=1&#xD;B (2)=2&#xD;X (3)=3&#xD;Y (4)=4&#xD;Left Bumper (5)=5&#xD;Right Bumper (6)=6&#xD;Left Trigger (7)=7&#xD;Right Trigger (8)=8&#xD;- (9)=9&#xD;+ (10)=10&#xD;Left Stick (11)=11&#xD;Right Stick (12)=12&#xD;D-Pad Up (13)=13&#xD;D-Pad Down (14)=14&#xD;D-Pad Left (15=15&#xD;D-Pad Right (16)=16&#xD;Home/View (17)=17&#xD;Select/Snapshot (18)=18</options></input><input type="%n" initial="1">1<options>1&#xD;2&#xD;3&#xD;4</options></input><input type="%upvar" initial="1" max="1">buttons</input></inputs><script><block s="doDeclareVariables"><list><l>buttons</l></list></block><block s="doSetVar"><l>buttons</l><custom-block s="gamepad %n buttons"><block var="gamepad"/></custom-block></block><block s="doSetVar"><l>pressed buttons</l><block s="reportNewList"><list></list></block></block><block s="doIf"><block s="reportListIsEmpty"><block var="buttons"/></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="button"/><l>any</l></list></block><script><block s="doSetVar"><l>pressed buttons</l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportListItem"><l></l><block var="buttons"/></block></autolambda><list></list></block><block s="reportNumbers"><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="buttons"/></block></block></block></block></script><list><block s="reportIsA"><block var="button"/><l><option>list</option></l></block><script><block s="doSetVar"><l>pressed buttons</l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportListItem"><l></l><block var="buttons"/></block></autolambda><list></list></block><block var="button"/></block></block></script><block s="reportListItem"><block var="button"/><block var="buttons"/></block><script><block s="doSetVar"><l>pressed buttons</l><block s="reportNewList"><list><block var="button"/></list></block></block></script></list></block><block s="doReport"><block s="reportNot"><block s="reportListIsEmpty"><block var="pressed buttons"/></block></block></block></script></block-definition><block-definition s="clamp stick x: %&apos;x&apos; y: %&apos;y&apos;" type="reporter" category="gamepad" space="true"><header></header><code></code><translations></translations><inputs><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doDeclareVariables"><list><l>m</l></list></block><block s="doSetVar"><l>m</l><block s="reportMonadic"><l><option>sqrt</option></l><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block var="x"/><block var="x"/></list></block><block s="reportVariadicProduct"><list><block var="y"/><block var="y"/></list></block></list></block></block></block><block s="doIf"><block s="reportVariadicGreaterThan"><list><block var="m"/><l>1</l></list></block><script><block s="doSetVar"><l>x</l><block s="reportQuotient"><block var="x"/><block var="m"/></block></block><block s="doSetVar"><l>y</l><block s="reportQuotient"><block var="y"/><block var="m"/></block></block></script><list></list></block><block s="doReport"><block s="reportNewList"><list><block var="x"/><block var="y"/></list></block></block></script></block-definition><block-definition s="set deadzone %&apos;deadzone&apos; for axes x: %&apos;x&apos; y: %&apos;y&apos;" type="reporter" category="gamepad"><header></header><code></code><translations></translations><inputs><input type="%n">0.2</input><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doDeclareVariables"><list><l>m</l></list></block><block s="doSetVar"><l>m</l><block s="reportMonadic"><l><option>sqrt</option></l><block s="reportVariadicSum"><list><block s="reportPower"><block var="x"/><l>2</l></block><block s="reportPower"><block var="y"/><l>2</l></block></list></block></block></block><block s="doIfElse"><block s="reportVariadicLessThan"><list><block var="m"/><block var="deadzone"/></list></block><script><block s="doReport"><block s="reportNewList"><list><l>0</l><l>0</l></list></block></block></script><script><block s="doDeclareVariables"><list><l>over</l><l>nover</l><l>nx</l><l>ny</l></list><comment w="90" collapsed="false">smoothing</comment></block><block s="doSetVar"><l>over</l><block s="reportDifference"><block var="m"/><block var="deadzone"/></block></block><block s="doSetVar"><l>nover</l><block s="reportQuotient"><block var="over"/><block s="reportDifference"><l>1</l><block var="deadzone"/></block></block></block><block s="doSetVar"><l>nx</l><block s="reportQuotient"><block var="x"/><block var="m"/></block></block><block s="doSetVar"><l>ny</l><block s="reportQuotient"><block var="y"/><block var="m"/></block></block><block s="doReport"><block s="reportNewList"><list><block s="reportVariadicProduct"><list><block var="nx"/><block var="nover"/></list></block><block s="reportVariadicProduct"><list><block var="ny"/><block var="nover"/></list></block></list></block></block></script></block></script></block-definition><block-definition s="rumble strong: %&apos;strong&apos; weak: %&apos;weak&apos; for %&apos;time&apos; secs on gamepad %&apos;gamepad&apos;" type="command" category="gamepad" space="true"><header></header><code></code><translations></translations><inputs><input type="%n" initial="1">25</input><input type="%n" initial="1">50</input><input type="%n" initial="1">0.25</input><input type="%n" initial="1">1<options>1&#xD;2&#xD;3&#xD;4</options></input></inputs><script><custom-block s="load gamepad library"></custom-block><block s="doApplyExtension"><l>gp_rumble(index, duration, weak, strong)</l><list><block s="reportDifference"><block var="gamepad"/><l>1</l></block><block s="reportVariadicProduct"><list><block var="time"/><l>1000</l></list></block><block s="reportQuotient"><block var="weak"/><l>100</l></block><block s="reportQuotient"><block var="strong"/><l>100</l></block></list></block></script><scripts><script x="10" y="165.33333333333337"><block s="doRun"><block s="reportJSFunction"><list><l>index</l><l>duration</l><l>weak</l><l>strong</l></list><l>const gamepad = navigator.getGamepads()[index]&#xD;&#xD;if (!gamepad) {&#xD;  return&#xD;}&#xD;&#xD;gamepad.vibrationActuator.playEffect(&apos;dual-rumble&apos;, {&#xD;  duration: duration,&#xD;  weakMagnitude: weak,&#xD;  strongMagnitude: strong,&#xD;});</l></block><list><block s="reportDifference"><block var="gamepad"/><l>1</l></block><block s="reportVariadicProduct"><list><block var="time"/><l>1000</l></list></block><block s="reportQuotient"><block var="weak"/><l>100</l></block><block s="reportQuotient"><block var="strong"/><l>100</l></block></list></block></script></scripts></block-definition><block-definition s="load gamepad library" type="command" category="gamepad" helper="true"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doApplyExtension"><l>src_load(url)</l><list><l>https://ego-lay-atman-bay.github.io/snap-extensions/block-extensions/gamepad-v2.js</l></list></block></script><scripts><script x="10" y="109.79999999999995"><block s="doSetVar"><l>__module__gamepad</l><l>https://ego-lay-atman-bay.github.io/snap-extensions/block-extensions/gamepad-v2.js</l><comment w="181" collapsed="false">Global variable for auto loading (if the url is whitelisted, which it&apos;s not, unless you have a userscript like I do).</comment></block></script></scripts></block-definition><block-definition s="stick direction x: %&apos;x&apos; y: %&apos;y&apos;" type="reporter" category="gamepad"><variables><list struct="atomic" id="583">last direction</list></variables><header></header><code></code><translations></translations><inputs><input type="%n" initial="1">0</input><input type="%n" initial="1">0</input></inputs><script><block s="doIf"><block s="reportVariadicEquals"><list><l>0</l><block var="x"/><block var="y"/></list></block><script><block s="doReport"><block var="last direction"/></block></script><list></list></block><block s="doSetVar"><l>last direction</l><block s="reportAtan2"><block var="x"/><block s="reportDifference"><l></l><block var="y"/></block></block></block><block s="doReport"><block var="last direction"/></block></script></block-definition><block-definition s="stick magnitude x: %&apos;x&apos; y: %&apos;y&apos;" type="reporter" category="gamepad"><header></header><code></code><translations></translations><inputs><input type="%n" initial="1">0</input><input type="%n" initial="1">0</input></inputs><script><block s="doReport"><block s="reportMonadic"><l><option>sqrt</option></l><block s="reportVariadicSum"><list><block s="reportPower"><block var="x"/><l>2</l></block><block s="reportPower"><block var="y"/><l>2</l></block></list></block></block></block></script></block-definition></blocks><primitives></primitives><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="629"><pentrails>data:image/png;base64,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</pentrails><costumes><list struct="atomic" id="630"></list></costumes><sounds><list struct="atomic" id="631"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="Sprite" idx="1" x="-19.862658665962613" y="-32.772443709355" heading="172.39607714543456" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="0,33.14999999999827,255,1" pen="tip" id="636"><costumes><list struct="atomic" id="637"></list></costumes><sounds><list struct="atomic" id="638"></list></sounds><blocks></blocks><variables></variables><scripts><script x="30" y="30"><block s="receiveGo"></block><block s="gotoXY"><l>0</l><l>0</l></block><block s="bubble"><l>Waiting for gamepad...</l></block><block s="doWaitUntil"><custom-block s="gamepad %n connected?"><l>1</l></custom-block></block><block s="bubble"><l></l></block><block s="doDeclareVariables"><list><l>direction</l><l>A pressed</l><l>stick pos</l></list></block><block s="doForever"><script><block s="doSetVar"><l>stick pos</l><block s="reportListItem"><block s="reportNewList"><list><l>1</l><l>2</l></list></block><custom-block s="gamepad %n axes"><l>1</l></custom-block></block></block><block s="doSetVar"><l>stick pos</l><custom-block s="set deadzone %n for axes x: %n y: %n"><l>0.2</l><block s="reportListItem"><l>1</l><block var="stick pos"/></block><block s="reportListItem"><l>2</l><block var="stick pos"/></block></custom-block></block><block s="doSetVar"><l>stick pos</l><custom-block s="clamp stick x: %n y: %n"><block s="reportListItem"><l>1</l><block var="stick pos"/></block><block s="reportListItem"><l>2</l><block var="stick pos"/></block></custom-block></block><block s="doSetVar"><l>direction</l><custom-block s="stick direction x: %n y: %n"><block s="reportListItem"><l>1</l><block var="stick pos"/></block><block s="reportListItem"><l>2</l><block var="stick pos"/></block><variables><variable name="last direction"><l>172.3960771454346</l></variable></variables></custom-block></block><block s="setHeading"><block var="direction"/></block><block s="forward"><block s="reportVariadicProduct"><list><custom-block s="stick magnitude x: %n y: %n"><block s="reportListItem"><l>1</l><block var="stick pos"/></block><block s="reportListItem"><l>2</l><block var="stick pos"/></block></custom-block><block s="reportVariadicSum"><list><l>5</l><block s="reportVariadicProduct"><list><custom-block s="button %n of gamepad %n pressed?"><l>8</l><l>1</l></custom-block><l>7</l></list></block></list></block></list></block></block><block s="doIf"><custom-block s="button %n of gamepad %n pressed?"><l>1</l><l>1</l></custom-block><script><block s="down"></block><custom-block s="rumble strong: %n weak: %n for %n secs on gamepad %n"><l>10</l><l>10</l><l>0.05</l><l>1</l></custom-block></script><list><l><bool>true</bool></l><script><block s="up"></block></script></list></block><block s="doIf"><block s="reportVariadicGreaterThan"><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><script><block s="setXPosition"><block s="reportAttributeOf"><l><option>right</option></l><block s="reportGet"><l><option>stage</option></l></block></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicLessThan"><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><script><block s="setXPosition"><block s="reportAttributeOf"><l><option>left</option></l><block s="reportGet"><l><option>stage</option></l></block></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicGreaterThan"><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><script><block s="setYPosition"><block s="reportAttributeOf"><l><option>top</option></l><block s="reportGet"><l><option>stage</option></l></block></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicLessThan"><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><script><block s="setYPosition"><block s="reportAttributeOf"><l><option>bottom</option></l><block s="reportGet"><l><option>stage</option></l></block></block></block></script><list></list></block></script></block></script><script x="30" y="935.0000000000005"><custom-block s="when button %n on gamepad %n pressed %upvar"><l>8</l><l>1</l><l>buttons</l><variables><variable name="last buttons"><list struct="atomic" id="863"></list></variable></variables></custom-block><custom-block s="rumble strong: %n weak: %n for %n secs on gamepad %n"><l>80</l><l>50</l><l>0.2</l><l>1</l></custom-block></script><script x="30" y="1011.8333333333337"><custom-block s="when button %n on gamepad %n pressed %upvar"><l>7</l><l>1</l><l>buttons</l><variables><variable name="last buttons"><list struct="atomic" id="873"></list></variable></variables></custom-block><block s="clear"></block></script><script x="30" y="1085.4999999999995"><custom-block s="while button %n on gamepad %n is pressed %upvar"><l>5</l><l>1</l><l>buttons</l></custom-block><block s="changePenColorDimension"><l><option>hue</option></l><l>-0.5</l></block></script><script x="30" y="1163.3333333333335"><custom-block s="while button %n on gamepad %n is pressed %upvar"><l>6</l><l>1</l><l>buttons</l></custom-block><block s="changePenColorDimension"><l><option>hue</option></l><l>0.5</l></block></script></scripts></sprite><watcher var="__module__gamepad" style="normal" x="10" y="10.000000000000007" color="243,118,29" hidden="true"/></sprites></stage><variables><variable name="__module__gamepad" hidden="true"><l>https://ego-lay-atman-bay.github.io/snap-extensions/block-extensions/gamepad-v2.js</l></variable></variables></scene></scenes></project><media name="gamepad demo" app="Snap! 11.0.8, https://snap.berkeley.edu" version="2"></media></snapdata>