﻿<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Millisecond Forums » Millisecond Forums » Inquisit 7  » How to Stop Making a Shape Go Back and Forth</title><generator>InstantForum 2017-1 Final</generator><description>Millisecond Forums</description><link>https://forums.millisecond.com/</link><webMaster>Millisecond Forums</webMaster><lastBuildDate>Thu, 23 Apr 2026 18:41:46 GMT</lastBuildDate><ttl>20</ttl><item><title>How to Stop Making a Shape Go Back and Forth</title><link>https://forums.millisecond.com/Topic41599.aspx</link><description>Hello,&lt;br/&gt;&lt;br/&gt;I am having an issue with a trial that I want to play. My trial is meant to be playing notes to the tune of Twinkle Twinkle Little Star based on the allignment of a red rectangle with black rectangles. The red rectangle travels from one point of the screen to another without stopping. The participant clicks on the space bar to make the sound play, and the process repeats 5 more times (6 times total). At the end of each verse, the bar is meant to stop and go back to the beginning. However, I am having an issue where the bar goes a small distance backwards before teleporting to the starting point for the next verse. Is there something wrong with my code? Here are two verses to visualize the issue:&lt;br/&gt;&lt;br/&gt;&amp;lt;expt myExpt&amp;gt;&lt;br/&gt;/ blocks = [1=task; 2=task2]&lt;br/&gt;&amp;lt;/expt&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;values&amp;gt;&lt;br/&gt;/ repCount = 0&lt;br/&gt;/ xAtResponse = 0&lt;br/&gt;/ musicLineStartX = 5% // start x coordinate of animation&lt;br/&gt;/ musicLineEndX = 90% // end x coordinate of animation&lt;br/&gt;/ musicLineDuration = 7250 // duration of full animation&lt;br/&gt;&amp;lt;/values&amp;gt;&lt;br/&gt;&lt;br/&gt;The bar that moves across the screen:&lt;br/&gt;&amp;lt;shape musicline&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = crimson&lt;br/&gt;/ size = (2%,100%)&lt;br/&gt;/ animation = path(values.musicLineDuration, -1, values.musicLineStartX, 50%, values.musicLineEndX, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;7 shapes that the bar will pass over:&lt;br/&gt;&amp;lt;shape line1&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (20%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line2&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (30%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line3&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (40%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line4&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (50%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line5&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (60%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line6&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (70%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line7&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (80%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block task&amp;gt;&lt;br/&gt;/ trials = [1=synchrony]&lt;br/&gt;/ onBlockBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.repCount = 0;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = 0;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = 5%; // start x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineEndX = 90%; // end x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration = 7250; // duration of full animation&lt;br/&gt;}&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block task2&amp;gt;&lt;br/&gt;/ trials = [1=synchrony2] &lt;br/&gt;/ onBlockBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.repCount = 0;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = 0;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = 5%; // start x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineEndX = 90%; // end x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration = 7250; // duration of full animation&lt;br/&gt;}&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial synchrony&amp;gt;&lt;br/&gt;/ onTrialBegin = {&lt;br/&gt;&amp;nbsp; // we start out playing no note, skipping all of them&lt;br/&gt;&amp;nbsp; sound.noteA.skip = true;&lt;br/&gt;&amp;nbsp; sound.noteC.skip = true;&lt;br/&gt;&amp;nbsp; sound.noteD.skip = true;&lt;br/&gt;&amp;nbsp; sound.noteE.skip = true;&lt;br/&gt;&amp;nbsp; sound.noteF.skip = true;&lt;br/&gt;&amp;nbsp; sound.noteG.skip = true;&lt;br/&gt;&amp;nbsp; // if animation over line 1 or 2 at the time of response, we enable noteC. 19pct, 21pct, 29, 31&lt;br/&gt;&amp;nbsp; if ((values.xAtResponse &amp;gt;= 15pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 24pct) || (values.xAtResponse &amp;gt;= 25pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 34pct))&lt;br/&gt;&amp;nbsp; sound.noteC.skip = false;&lt;br/&gt;&amp;nbsp; // if over line 3, 4, or 7 we enable note G&lt;br/&gt;&amp;nbsp; if ((values.xAtResponse &amp;gt;= 35pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 44pct) || (values.xAtResponse &amp;gt;= 45pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 54pct) || (values.xAtResponse &amp;gt;= 75pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 84pct))&lt;br/&gt;&amp;nbsp; sound.noteG.skip = false;&lt;br/&gt;&amp;nbsp; // if over line 5 or 6, we enable note A&lt;br/&gt;&amp;nbsp; if ((values.xAtResponse &amp;gt;= 55pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 64pct) || (values.xAtResponse &amp;gt;= 65pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 74pct))&lt;br/&gt;&amp;nbsp; sound.noteA.skip = false;&lt;br/&gt;&amp;nbsp; } &lt;br/&gt;/ stimulusframes = [&lt;br/&gt;&amp;nbsp; 1=clearScreen, musicline, line1, line2, line3, line4, line5, line6, line7, &lt;br/&gt;&amp;nbsp; noteA, noteC, noteD, noteE, noteF, noteG,&lt;br/&gt;&amp;nbsp; debug]&lt;br/&gt;/ beginResponseTime = -1&lt;br/&gt;/ validResponse = (" ")&lt;br/&gt;/ isValidResponse = {&lt;br/&gt;&amp;nbsp; if (trial.synchrony.response== 57)&lt;br/&gt;&amp;nbsp;&amp;nbsp;  values.xAtResponse = shape.musicline.xPct; // store X coordinate of music line at time of response&lt;br/&gt;&amp;nbsp;&amp;nbsp;  values.musicLineDuration -= trial.synchrony.latency; // calculate remaining animation duration&lt;br/&gt;&amp;nbsp;&amp;nbsp;  values.musicLineStartX = values.xAtResponse; // set new start point, picking back up where we were at time of last response&lt;br/&gt;&amp;nbsp;&amp;nbsp;  return true;&lt;br/&gt;&amp;nbsp; }&lt;br/&gt;/ onTrialEnd = {&lt;br/&gt;&amp;nbsp; if (values.musicLineDuration &amp;lt;= 0 || trial.synchrony.response == 0) // if trial times out, we reset everything&lt;br/&gt;&amp;nbsp;&amp;nbsp;  values.musicLineStartX = 5%; // back to the original start position&lt;br/&gt;&amp;nbsp;&amp;nbsp;  //values.musicLineDuration = 7250; // back to original duration&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//values.xAtResponse = 0%; // we don't have any response yet&lt;br/&gt;&amp;nbsp;&amp;nbsp;  values.repCount += 1; // we increase the repetition count&lt;br/&gt;&amp;nbsp; }&lt;br/&gt;/ branch = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (values.repCount &amp;lt;= 7) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;  return trial.synchrony;&lt;br/&gt;&amp;nbsp; }&lt;br/&gt;}&lt;br/&gt;/ timeout = values.musicLineDuration&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial synchrony2&amp;gt;&lt;br/&gt;/ onTrialBegin = {&lt;br/&gt;&amp;nbsp; // we start out playing no note, skipping all of them&lt;br/&gt;&amp;nbsp; sound.noteA.skip = true;&lt;br/&gt;&amp;nbsp; sound.noteC.skip = true;&lt;br/&gt;&amp;nbsp; sound.noteD.skip = true;&lt;br/&gt;&amp;nbsp; sound.noteE.skip = true;&lt;br/&gt;&amp;nbsp; sound.noteF.skip = true;&lt;br/&gt;&amp;nbsp; sound.noteG.skip = true;&lt;br/&gt;&amp;nbsp; if ((values.xAtResponse &amp;gt;= 15pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 24pct) || (values.xAtResponse &amp;gt;= 25pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 34pct))&lt;br/&gt;&amp;nbsp; sound.noteF.skip = false;&lt;br/&gt;&amp;nbsp; // if over line 3 or 4, we enable note E&lt;br/&gt;&amp;nbsp; if ((values.xAtResponse &amp;gt;= 35pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 44pct) || (values.xAtResponse &amp;gt;= 45pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 54pct))&lt;br/&gt;&amp;nbsp; sound.noteE.skip = false;&lt;br/&gt;&amp;nbsp; // if over line 5 or 6, we enable note D&lt;br/&gt;&amp;nbsp; if ((values.xAtResponse &amp;gt;= 55pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 64pct) || (values.xAtResponse &amp;gt;= 65pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 74pct))&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteD.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 7, we enable note C&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 75pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 84pct))&lt;br/&gt;&amp;nbsp; sound.noteC.skip = false;&lt;br/&gt;&amp;nbsp; } &lt;br/&gt;/ stimulusframes = [&lt;br/&gt;&amp;nbsp; 1=clearScreen, musicline, line1, line2, line3, line4, line5, line6, line7, &lt;br/&gt;&amp;nbsp; noteA, noteC, noteD, noteE, noteF, noteG,&lt;br/&gt;&amp;nbsp; debug]&lt;br/&gt;/ beginResponseTime = -1&lt;br/&gt;/ validResponse = (" ")&lt;br/&gt;/ isValidResponse = {&lt;br/&gt;&amp;nbsp; if (trial.synchrony2.response== 57)&lt;br/&gt;&amp;nbsp;&amp;nbsp;  values.xAtResponse = shape.musicline.xPct; // store X coordinate of music line at time of response&lt;br/&gt;&amp;nbsp;&amp;nbsp;  values.musicLineDuration -= trial.synchrony2.latency; // calculate remaining animation duration&lt;br/&gt;&amp;nbsp;&amp;nbsp;  values.musicLineStartX = values.xAtResponse; // set new start point, picking back up where we were at time of last response&lt;br/&gt;&amp;nbsp;&amp;nbsp;  return true;&lt;br/&gt;&amp;nbsp; }&lt;br/&gt;/ onTrialEnd = {&lt;br/&gt;&amp;nbsp; if (values.musicLineDuration &amp;lt;= 0 || trial.synchrony2.response == 0) // if trial times out, we reset everything&lt;br/&gt;&amp;nbsp;&amp;nbsp;  values.musicLineStartX = 5%; // back to the original start position&lt;br/&gt;&amp;nbsp;&amp;nbsp;  //values.musicLineDuration = 7250; // back to original duration&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//values.xAtResponse = 0%; // we don't have any response yet&lt;br/&gt;&amp;nbsp;&amp;nbsp;  values.repCount += 1; // we increase the repetition count&lt;br/&gt;&amp;nbsp; }&lt;br/&gt;/ branch = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (values.repCount &amp;lt;= 7) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;  return trial.synchrony2;&lt;br/&gt;&amp;nbsp; }&lt;br/&gt;}&lt;br/&gt;/ timeout = values.musicLineDuration&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;The sound files to play:&lt;br/&gt;&amp;lt;sound noteC&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_C.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteG&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_G.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteA&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_A.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteF&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_F.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteE&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_E.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteD&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_D.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;Unfortunately it is not letting me attach the sound files.</description><pubDate>Mon, 08 Sep 2025 19:23:56 GMT</pubDate><dc:creator>krmanning10</dc:creator></item><item><title>RE: How to Stop Making a Shape Go Back and Forth</title><link>https://forums.millisecond.com/Topic41630.aspx</link><description>&lt;blockquote data-id="41629" class="if-quote-wrapper" unselectable="on" data-guid="1757359093972" contenteditable="false" id="if_insertedNode_1757359093277"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="41629" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="41629" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="41629" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;krmanning10 - 9/8/2025&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-41629"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;blockquote data-id="41628" class="if-quote-wrapper" unselectable="on" data-guid="1757359093972" contenteditable="false" id="if_insertedNode_1757358726607"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="41628" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="41628" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="41628" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - 9/8/2025&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-41628"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;blockquote data-id="41627" class="if-quote-wrapper" unselectable="on" data-guid="1757359093972" contenteditable="false" id="if_insertedNode_1757358348662"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="41627" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="41627" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="41627" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;krmanning10 - 9/8/2025&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-41627"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;blockquote data-id="41626" class="if-quote-wrapper" unselectable="on" data-guid="1757359093972" contenteditable="false" id="if_insertedNode_1757357699517"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="41626" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="41626" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="41626" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - 9/8/2025&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-41626"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;blockquote data-id="41625" class="if-quote-wrapper" unselectable="on" data-guid="1757359093972" contenteditable="false" id="if_insertedNode_1757357213029"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="41625" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="41625" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="41625" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;krmanning10 - 9/8/2025&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-41625"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;blockquote data-id="41601" class="if-quote-wrapper" unselectable="on" data-guid="1757359093972" contenteditable="false" id="if_insertedNode_1757353791253"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="41601" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="41601" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="41601" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - 8/26/2025&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-41601"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;br/&gt;In the main, the way you've changed the /onTrialEnd logic from the original where you wanted repetiosns makes no sense and creates problems.&lt;br/&gt;&lt;br/&gt;Here's a fixed-up version, as best as I can guess at what you actually want.&lt;br/&gt;&lt;br/&gt;[code]&amp;lt;expt myExpt&amp;gt;&lt;br/&gt;/ blocks = [1=task; 2=task2]&lt;br/&gt;&amp;lt;/expt&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;values&amp;gt;&lt;br/&gt;// repCount = 0 // not needed anymore&lt;br/&gt;/ xAtResponse = 0&lt;br/&gt;/ musicLineStartX = 5% // start x coordinate of animation&lt;br/&gt;/ musicLineEndX = 90% // end x coordinate of animation&lt;br/&gt;/ musicLineDuration = 7250 // duration of full animation&lt;br/&gt;&amp;lt;/values&amp;gt;&lt;br/&gt;&lt;br/&gt;The bar that moves across the screen:&lt;br/&gt;&amp;lt;shape musicline&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = crimson&lt;br/&gt;/ size = (2%,100%)&lt;br/&gt;/ animation = path(values.musicLineDuration, 1, values.musicLineStartX, 50%, values.musicLineEndX, 50%) // not doing any actual repetions, so 1, not -1&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;7 shapes that the bar will pass over:&lt;br/&gt;&amp;lt;shape line1&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (20%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line2&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (30%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line3&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (40%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line4&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (50%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line5&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (60%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line6&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (70%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line7&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (80%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block task&amp;gt;&lt;br/&gt;/ trials = [1=synchrony]&lt;br/&gt;/ onBlockBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = 0;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = 5%; // start x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineEndX = 90%; // end x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration = 7250; // duration of full animation&lt;br/&gt;}&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block task2&amp;gt;&lt;br/&gt;/ trials = [1=synchrony2]&lt;br/&gt;/ onBlockBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = 0;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = 5%; // start x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineEndX = 90%; // end x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration = 7250; // duration of full animation&lt;br/&gt;}&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial synchrony&amp;gt;&lt;br/&gt;/ onTrialBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// we start out playing no note, skipping all of them&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteA.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteD.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteE.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteF.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteG.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if animation over line 1 or 2 at the time of response, we enable noteC. 19pct, 21pct, 29, 31&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 15pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 24pct) || (values.xAtResponse &amp;gt;= 25pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 34pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 3, 4, or 7 we enable note G&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 35pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 44pct) || (values.xAtResponse &amp;gt;= 45pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 54pct) || (values.xAtResponse &amp;gt;= 75pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 84pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteG.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 5 or 6, we enable note A&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 55pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 64pct) || (values.xAtResponse &amp;gt;= 65pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 74pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteA.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;}&lt;br/&gt;/ stimulusframes = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1=clearScreen, musicline, line1, line2, line3, line4, line5, line6, line7,&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;noteA, noteC, noteD, noteE, noteF, noteG,&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;debug]&lt;br/&gt;/ beginResponseTime = -1&lt;br/&gt;/ validResponse = (" ")&lt;br/&gt;/ isValidResponse = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (trial.synchrony.response== 57) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = shape.musicline.xPct; // store X coordinate of music line at time of response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration -= trial.synchrony.latency; // calculate remaining animation duration&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = values.xAtResponse; // set new start point, picking back up where we were at time of last response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ branch = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!(values.musicLineDuration &amp;lt;= 0 || trial.synchrony.response == 0)) { // as long as animation / trial hasn't timed out, we keep running&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return trial.synchrony;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ timeout = values.musicLineDuration&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial synchrony2&amp;gt;&lt;br/&gt;/ onTrialBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// we start out playing no note, skipping all of them&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteA.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteD.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteE.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteF.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteG.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 15pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 24pct) || (values.xAtResponse &amp;gt;= 25pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 34pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteF.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 3 or 4, we enable note E&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 35pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 44pct) || (values.xAtResponse &amp;gt;= 45pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 54pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteE.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 5 or 6, we enable note D&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 55pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 64pct) || (values.xAtResponse &amp;gt;= 65pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 74pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteD.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 7, we enable note C&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 75pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 84pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;}&lt;br/&gt;/ stimulusframes = [&lt;br/&gt;  1=clearScreen, musicline, line1, line2, line3, line4, line5, line6, line7,&lt;br/&gt;  noteA, noteC, noteD, noteE, noteF, noteG,&lt;br/&gt;  debug]&lt;br/&gt;/ beginResponseTime = -1&lt;br/&gt;/ validResponse = (" ")&lt;br/&gt;/ isValidResponse = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (trial.synchrony2.response== 57) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = shape.musicline.xPct; // store X coordinate of music line at time of response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration -= trial.synchrony2.latency; // calculate remaining animation duration&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = values.xAtResponse; // set new start point, picking back up where we were at time of last response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ branch = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!(values.musicLineDuration &amp;lt;= 0 || trial.synchrony2.response == 0)) { // as long as animation / trial hasn't timed out, we keep running&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return trial.synchrony2;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ timeout = values.musicLineDuration&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;The sound files to play:&lt;br/&gt;&amp;lt;sound noteC&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_C.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteG&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_G.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteA&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_A.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteF&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_F.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteE&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_E.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteD&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_D.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;text debug&amp;gt;&lt;br/&gt;/ items = ("X position at time of response: &amp;lt;%values.xAtResponse%&amp;gt; | Remaining duration: &amp;lt;%values.musicLineDuration%&amp;gt;")&lt;br/&gt;/ position = (50%, 10%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/text&amp;gt;[/code]&lt;br/&gt;&lt;br/&gt;In the future, please:&lt;br/&gt;- Always provide any and all files your code requires. Put script and associated files in a ZIP, attach the ZIP to your post. If it is too large to attach, upload it somewhere else and provide the download link.&lt;br/&gt;- Don't paste entire scripts into a post's body. If you need to highlight speciic parts, you can do so using +Insert, and then &amp;lt;/&amp;gt; (nsert code).&lt;br/&gt;- Comment your code. E.g. if you're stripping out certain parts, your comments should explain why / what the modified code is supposed to do as opposed to the original.&lt;a class="if-quote-goto quote-link" href="#" data-id="41601"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;Hello,&lt;br/&gt;&lt;br/&gt;Thank you for your help! I made the changes you suggested. Unfortunately, I'm afraid I'm still running into the same issue. I've attached a zip file with all the components needed for it. I would provide a video file of the issue but it is too large to be attached, so I apologize in advance. &lt;a class="if-quote-goto quote-link" href="#" data-id="41625"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;There is no attachment. Please provide the files. In addition:&lt;br/&gt;- Make sure your Inquisit installation is up to date.&lt;br/&gt;- Provide the application log along with the other files (Tools -&amp;gt; View Log File).&lt;a class="if-quote-goto quote-link" href="#" data-id="41626"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="41627"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;The ZIP you attached contains seven MP3 files, nothing else. No code, no log.&lt;a class="if-quote-goto quote-link" href="#" data-id="41628"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;I apologize! The code should be in there now.&lt;a class="if-quote-goto quote-link" href="#" data-id="41629"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;The code you attached does not implement any of changes I proposed at all, so of course it has the same problems as before.&lt;br/&gt;&lt;br/&gt;DId you pick the wrong file?&lt;br/&gt;</description><pubDate>Mon, 08 Sep 2025 19:23:56 GMT</pubDate><dc:creator>Dave</dc:creator></item><item><title>RE: How to Stop Making a Shape Go Back and Forth</title><link>https://forums.millisecond.com/Topic41629.aspx</link><description>&lt;blockquote data-id="41628" class="if-quote-wrapper" unselectable="on" data-guid="1757358727286" contenteditable="false" id="if_insertedNode_1757358726607"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="41628" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="41628" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="41628" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - 9/8/2025&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-41628"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;blockquote data-id="41627" class="if-quote-wrapper" unselectable="on" data-guid="1757358727286" contenteditable="false" id="if_insertedNode_1757358348662"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="41627" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="41627" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="41627" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;krmanning10 - 9/8/2025&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-41627"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;blockquote data-id="41626" class="if-quote-wrapper" unselectable="on" data-guid="1757358727286" contenteditable="false" id="if_insertedNode_1757357699517"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="41626" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="41626" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="41626" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - 9/8/2025&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-41626"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;blockquote data-id="41625" class="if-quote-wrapper" unselectable="on" data-guid="1757358727286" contenteditable="false" id="if_insertedNode_1757357213029"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="41625" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="41625" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="41625" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;krmanning10 - 9/8/2025&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-41625"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;blockquote data-id="41601" class="if-quote-wrapper" unselectable="on" data-guid="1757358727286" contenteditable="false" id="if_insertedNode_1757353791253"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="41601" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="41601" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="41601" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - 8/26/2025&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-41601"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;br/&gt;In the main, the way you've changed the /onTrialEnd logic from the original where you wanted repetiosns makes no sense and creates problems.&lt;br/&gt;&lt;br/&gt;Here's a fixed-up version, as best as I can guess at what you actually want.&lt;br/&gt;&lt;br/&gt;[code]&amp;lt;expt myExpt&amp;gt;&lt;br/&gt;/ blocks = [1=task; 2=task2]&lt;br/&gt;&amp;lt;/expt&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;values&amp;gt;&lt;br/&gt;// repCount = 0 // not needed anymore&lt;br/&gt;/ xAtResponse = 0&lt;br/&gt;/ musicLineStartX = 5% // start x coordinate of animation&lt;br/&gt;/ musicLineEndX = 90% // end x coordinate of animation&lt;br/&gt;/ musicLineDuration = 7250 // duration of full animation&lt;br/&gt;&amp;lt;/values&amp;gt;&lt;br/&gt;&lt;br/&gt;The bar that moves across the screen:&lt;br/&gt;&amp;lt;shape musicline&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = crimson&lt;br/&gt;/ size = (2%,100%)&lt;br/&gt;/ animation = path(values.musicLineDuration, 1, values.musicLineStartX, 50%, values.musicLineEndX, 50%) // not doing any actual repetions, so 1, not -1&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;7 shapes that the bar will pass over:&lt;br/&gt;&amp;lt;shape line1&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (20%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line2&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (30%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line3&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (40%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line4&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (50%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line5&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (60%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line6&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (70%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line7&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (80%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block task&amp;gt;&lt;br/&gt;/ trials = [1=synchrony]&lt;br/&gt;/ onBlockBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = 0;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = 5%; // start x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineEndX = 90%; // end x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration = 7250; // duration of full animation&lt;br/&gt;}&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block task2&amp;gt;&lt;br/&gt;/ trials = [1=synchrony2]&lt;br/&gt;/ onBlockBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = 0;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = 5%; // start x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineEndX = 90%; // end x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration = 7250; // duration of full animation&lt;br/&gt;}&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial synchrony&amp;gt;&lt;br/&gt;/ onTrialBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// we start out playing no note, skipping all of them&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteA.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteD.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteE.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteF.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteG.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if animation over line 1 or 2 at the time of response, we enable noteC. 19pct, 21pct, 29, 31&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 15pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 24pct) || (values.xAtResponse &amp;gt;= 25pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 34pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 3, 4, or 7 we enable note G&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 35pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 44pct) || (values.xAtResponse &amp;gt;= 45pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 54pct) || (values.xAtResponse &amp;gt;= 75pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 84pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteG.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 5 or 6, we enable note A&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 55pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 64pct) || (values.xAtResponse &amp;gt;= 65pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 74pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteA.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;}&lt;br/&gt;/ stimulusframes = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1=clearScreen, musicline, line1, line2, line3, line4, line5, line6, line7,&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;noteA, noteC, noteD, noteE, noteF, noteG,&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;debug]&lt;br/&gt;/ beginResponseTime = -1&lt;br/&gt;/ validResponse = (" ")&lt;br/&gt;/ isValidResponse = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (trial.synchrony.response== 57) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = shape.musicline.xPct; // store X coordinate of music line at time of response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration -= trial.synchrony.latency; // calculate remaining animation duration&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = values.xAtResponse; // set new start point, picking back up where we were at time of last response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ branch = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!(values.musicLineDuration &amp;lt;= 0 || trial.synchrony.response == 0)) { // as long as animation / trial hasn't timed out, we keep running&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return trial.synchrony;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ timeout = values.musicLineDuration&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial synchrony2&amp;gt;&lt;br/&gt;/ onTrialBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// we start out playing no note, skipping all of them&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteA.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteD.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteE.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteF.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteG.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 15pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 24pct) || (values.xAtResponse &amp;gt;= 25pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 34pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteF.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 3 or 4, we enable note E&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 35pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 44pct) || (values.xAtResponse &amp;gt;= 45pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 54pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteE.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 5 or 6, we enable note D&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 55pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 64pct) || (values.xAtResponse &amp;gt;= 65pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 74pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteD.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 7, we enable note C&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 75pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 84pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;}&lt;br/&gt;/ stimulusframes = [&lt;br/&gt;  1=clearScreen, musicline, line1, line2, line3, line4, line5, line6, line7,&lt;br/&gt;  noteA, noteC, noteD, noteE, noteF, noteG,&lt;br/&gt;  debug]&lt;br/&gt;/ beginResponseTime = -1&lt;br/&gt;/ validResponse = (" ")&lt;br/&gt;/ isValidResponse = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (trial.synchrony2.response== 57) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = shape.musicline.xPct; // store X coordinate of music line at time of response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration -= trial.synchrony2.latency; // calculate remaining animation duration&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = values.xAtResponse; // set new start point, picking back up where we were at time of last response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ branch = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!(values.musicLineDuration &amp;lt;= 0 || trial.synchrony2.response == 0)) { // as long as animation / trial hasn't timed out, we keep running&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return trial.synchrony2;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ timeout = values.musicLineDuration&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;The sound files to play:&lt;br/&gt;&amp;lt;sound noteC&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_C.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteG&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_G.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteA&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_A.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteF&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_F.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteE&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_E.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteD&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_D.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;text debug&amp;gt;&lt;br/&gt;/ items = ("X position at time of response: &amp;lt;%values.xAtResponse%&amp;gt; | Remaining duration: &amp;lt;%values.musicLineDuration%&amp;gt;")&lt;br/&gt;/ position = (50%, 10%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/text&amp;gt;[/code]&lt;br/&gt;&lt;br/&gt;In the future, please:&lt;br/&gt;- Always provide any and all files your code requires. Put script and associated files in a ZIP, attach the ZIP to your post. If it is too large to attach, upload it somewhere else and provide the download link.&lt;br/&gt;- Don't paste entire scripts into a post's body. If you need to highlight speciic parts, you can do so using +Insert, and then &amp;lt;/&amp;gt; (nsert code).&lt;br/&gt;- Comment your code. E.g. if you're stripping out certain parts, your comments should explain why / what the modified code is supposed to do as opposed to the original.&lt;a class="if-quote-goto quote-link" href="#" data-id="41601"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;Hello,&lt;br/&gt;&lt;br/&gt;Thank you for your help! I made the changes you suggested. Unfortunately, I'm afraid I'm still running into the same issue. I've attached a zip file with all the components needed for it. I would provide a video file of the issue but it is too large to be attached, so I apologize in advance. &lt;a class="if-quote-goto quote-link" href="#" data-id="41625"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;There is no attachment. Please provide the files. In addition:&lt;br/&gt;- Make sure your Inquisit installation is up to date.&lt;br/&gt;- Provide the application log along with the other files (Tools -&amp;gt; View Log File).&lt;a class="if-quote-goto quote-link" href="#" data-id="41626"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="41627"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;The ZIP you attached contains seven MP3 files, nothing else. No code, no log.&lt;a class="if-quote-goto quote-link" href="#" data-id="41628"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;I apologize! The code should be in there now.</description><pubDate>Mon, 08 Sep 2025 19:12:47 GMT</pubDate><dc:creator>krmanning10</dc:creator></item><item><title>RE: How to Stop Making a Shape Go Back and Forth</title><link>https://forums.millisecond.com/Topic41628.aspx</link><description>&lt;blockquote data-id="41627" class="if-quote-wrapper" unselectable="on" data-guid="1757358349910" contenteditable="false" id="if_insertedNode_1757358348662"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="41627" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="41627" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="41627" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;krmanning10 - 9/8/2025&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-41627"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;blockquote data-id="41626" class="if-quote-wrapper" unselectable="on" data-guid="1757358349910" contenteditable="false" id="if_insertedNode_1757357699517"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="41626" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="41626" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="41626" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - 9/8/2025&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-41626"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;blockquote data-id="41625" class="if-quote-wrapper" unselectable="on" data-guid="1757358349910" contenteditable="false" id="if_insertedNode_1757357213029"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="41625" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="41625" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="41625" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;krmanning10 - 9/8/2025&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-41625"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;blockquote data-id="41601" class="if-quote-wrapper" unselectable="on" data-guid="1757358349910" contenteditable="false" id="if_insertedNode_1757353791253"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="41601" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="41601" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="41601" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - 8/26/2025&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-41601"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;br/&gt;In the main, the way you've changed the /onTrialEnd logic from the original where you wanted repetiosns makes no sense and creates problems.&lt;br/&gt;&lt;br/&gt;Here's a fixed-up version, as best as I can guess at what you actually want.&lt;br/&gt;&lt;br/&gt;[code]&amp;lt;expt myExpt&amp;gt;&lt;br/&gt;/ blocks = [1=task; 2=task2]&lt;br/&gt;&amp;lt;/expt&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;values&amp;gt;&lt;br/&gt;// repCount = 0 // not needed anymore&lt;br/&gt;/ xAtResponse = 0&lt;br/&gt;/ musicLineStartX = 5% // start x coordinate of animation&lt;br/&gt;/ musicLineEndX = 90% // end x coordinate of animation&lt;br/&gt;/ musicLineDuration = 7250 // duration of full animation&lt;br/&gt;&amp;lt;/values&amp;gt;&lt;br/&gt;&lt;br/&gt;The bar that moves across the screen:&lt;br/&gt;&amp;lt;shape musicline&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = crimson&lt;br/&gt;/ size = (2%,100%)&lt;br/&gt;/ animation = path(values.musicLineDuration, 1, values.musicLineStartX, 50%, values.musicLineEndX, 50%) // not doing any actual repetions, so 1, not -1&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;7 shapes that the bar will pass over:&lt;br/&gt;&amp;lt;shape line1&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (20%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line2&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (30%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line3&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (40%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line4&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (50%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line5&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (60%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line6&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (70%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line7&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (80%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block task&amp;gt;&lt;br/&gt;/ trials = [1=synchrony]&lt;br/&gt;/ onBlockBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = 0;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = 5%; // start x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineEndX = 90%; // end x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration = 7250; // duration of full animation&lt;br/&gt;}&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block task2&amp;gt;&lt;br/&gt;/ trials = [1=synchrony2]&lt;br/&gt;/ onBlockBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = 0;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = 5%; // start x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineEndX = 90%; // end x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration = 7250; // duration of full animation&lt;br/&gt;}&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial synchrony&amp;gt;&lt;br/&gt;/ onTrialBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// we start out playing no note, skipping all of them&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteA.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteD.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteE.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteF.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteG.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if animation over line 1 or 2 at the time of response, we enable noteC. 19pct, 21pct, 29, 31&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 15pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 24pct) || (values.xAtResponse &amp;gt;= 25pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 34pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 3, 4, or 7 we enable note G&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 35pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 44pct) || (values.xAtResponse &amp;gt;= 45pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 54pct) || (values.xAtResponse &amp;gt;= 75pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 84pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteG.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 5 or 6, we enable note A&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 55pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 64pct) || (values.xAtResponse &amp;gt;= 65pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 74pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteA.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;}&lt;br/&gt;/ stimulusframes = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1=clearScreen, musicline, line1, line2, line3, line4, line5, line6, line7,&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;noteA, noteC, noteD, noteE, noteF, noteG,&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;debug]&lt;br/&gt;/ beginResponseTime = -1&lt;br/&gt;/ validResponse = (" ")&lt;br/&gt;/ isValidResponse = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (trial.synchrony.response== 57) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = shape.musicline.xPct; // store X coordinate of music line at time of response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration -= trial.synchrony.latency; // calculate remaining animation duration&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = values.xAtResponse; // set new start point, picking back up where we were at time of last response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ branch = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!(values.musicLineDuration &amp;lt;= 0 || trial.synchrony.response == 0)) { // as long as animation / trial hasn't timed out, we keep running&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return trial.synchrony;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ timeout = values.musicLineDuration&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial synchrony2&amp;gt;&lt;br/&gt;/ onTrialBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// we start out playing no note, skipping all of them&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteA.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteD.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteE.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteF.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteG.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 15pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 24pct) || (values.xAtResponse &amp;gt;= 25pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 34pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteF.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 3 or 4, we enable note E&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 35pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 44pct) || (values.xAtResponse &amp;gt;= 45pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 54pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteE.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 5 or 6, we enable note D&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 55pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 64pct) || (values.xAtResponse &amp;gt;= 65pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 74pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteD.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 7, we enable note C&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 75pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 84pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;}&lt;br/&gt;/ stimulusframes = [&lt;br/&gt;  1=clearScreen, musicline, line1, line2, line3, line4, line5, line6, line7,&lt;br/&gt;  noteA, noteC, noteD, noteE, noteF, noteG,&lt;br/&gt;  debug]&lt;br/&gt;/ beginResponseTime = -1&lt;br/&gt;/ validResponse = (" ")&lt;br/&gt;/ isValidResponse = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (trial.synchrony2.response== 57) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = shape.musicline.xPct; // store X coordinate of music line at time of response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration -= trial.synchrony2.latency; // calculate remaining animation duration&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = values.xAtResponse; // set new start point, picking back up where we were at time of last response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ branch = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!(values.musicLineDuration &amp;lt;= 0 || trial.synchrony2.response == 0)) { // as long as animation / trial hasn't timed out, we keep running&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return trial.synchrony2;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ timeout = values.musicLineDuration&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;The sound files to play:&lt;br/&gt;&amp;lt;sound noteC&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_C.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteG&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_G.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteA&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_A.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteF&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_F.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteE&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_E.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteD&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_D.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;text debug&amp;gt;&lt;br/&gt;/ items = ("X position at time of response: &amp;lt;%values.xAtResponse%&amp;gt; | Remaining duration: &amp;lt;%values.musicLineDuration%&amp;gt;")&lt;br/&gt;/ position = (50%, 10%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/text&amp;gt;[/code]&lt;br/&gt;&lt;br/&gt;In the future, please:&lt;br/&gt;- Always provide any and all files your code requires. Put script and associated files in a ZIP, attach the ZIP to your post. If it is too large to attach, upload it somewhere else and provide the download link.&lt;br/&gt;- Don't paste entire scripts into a post's body. If you need to highlight speciic parts, you can do so using +Insert, and then &amp;lt;/&amp;gt; (nsert code).&lt;br/&gt;- Comment your code. E.g. if you're stripping out certain parts, your comments should explain why / what the modified code is supposed to do as opposed to the original.&lt;a class="if-quote-goto quote-link" href="#" data-id="41601"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;Hello,&lt;br/&gt;&lt;br/&gt;Thank you for your help! I made the changes you suggested. Unfortunately, I'm afraid I'm still running into the same issue. I've attached a zip file with all the components needed for it. I would provide a video file of the issue but it is too large to be attached, so I apologize in advance. &lt;a class="if-quote-goto quote-link" href="#" data-id="41625"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;There is no attachment. Please provide the files. In addition:&lt;br/&gt;- Make sure your Inquisit installation is up to date.&lt;br/&gt;- Provide the application log along with the other files (Tools -&amp;gt; View Log File).&lt;a class="if-quote-goto quote-link" href="#" data-id="41626"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="41627"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;The ZIP you attached contains seven MP3 files, nothing else. No code, no log.</description><pubDate>Mon, 08 Sep 2025 19:08:03 GMT</pubDate><dc:creator>Dave</dc:creator></item><item><title>RE: How to Stop Making a Shape Go Back and Forth</title><link>https://forums.millisecond.com/Topic41627.aspx</link><description>&lt;blockquote data-id="41626" class="if-quote-wrapper" unselectable="on" data-guid="1757357700045" contenteditable="false" id="if_insertedNode_1757357699517"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="41626" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="41626" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="41626" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - 9/8/2025&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-41626"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;blockquote data-id="41625" class="if-quote-wrapper" unselectable="on" data-guid="1757357700045" contenteditable="false" id="if_insertedNode_1757357213029"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="41625" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="41625" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="41625" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;krmanning10 - 9/8/2025&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-41625"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;blockquote data-id="41601" class="if-quote-wrapper" unselectable="on" data-guid="1757357700045" contenteditable="false" id="if_insertedNode_1757353791253"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="41601" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="41601" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="41601" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - 8/26/2025&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-41601"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;br/&gt;In the main, the way you've changed the /onTrialEnd logic from the original where you wanted repetiosns makes no sense and creates problems.&lt;br/&gt;&lt;br/&gt;Here's a fixed-up version, as best as I can guess at what you actually want.&lt;br/&gt;&lt;br/&gt;[code]&amp;lt;expt myExpt&amp;gt;&lt;br/&gt;/ blocks = [1=task; 2=task2]&lt;br/&gt;&amp;lt;/expt&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;values&amp;gt;&lt;br/&gt;// repCount = 0 // not needed anymore&lt;br/&gt;/ xAtResponse = 0&lt;br/&gt;/ musicLineStartX = 5% // start x coordinate of animation&lt;br/&gt;/ musicLineEndX = 90% // end x coordinate of animation&lt;br/&gt;/ musicLineDuration = 7250 // duration of full animation&lt;br/&gt;&amp;lt;/values&amp;gt;&lt;br/&gt;&lt;br/&gt;The bar that moves across the screen:&lt;br/&gt;&amp;lt;shape musicline&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = crimson&lt;br/&gt;/ size = (2%,100%)&lt;br/&gt;/ animation = path(values.musicLineDuration, 1, values.musicLineStartX, 50%, values.musicLineEndX, 50%) // not doing any actual repetions, so 1, not -1&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;7 shapes that the bar will pass over:&lt;br/&gt;&amp;lt;shape line1&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (20%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line2&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (30%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line3&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (40%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line4&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (50%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line5&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (60%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line6&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (70%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line7&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (80%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block task&amp;gt;&lt;br/&gt;/ trials = [1=synchrony]&lt;br/&gt;/ onBlockBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = 0;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = 5%; // start x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineEndX = 90%; // end x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration = 7250; // duration of full animation&lt;br/&gt;}&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block task2&amp;gt;&lt;br/&gt;/ trials = [1=synchrony2]&lt;br/&gt;/ onBlockBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = 0;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = 5%; // start x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineEndX = 90%; // end x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration = 7250; // duration of full animation&lt;br/&gt;}&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial synchrony&amp;gt;&lt;br/&gt;/ onTrialBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// we start out playing no note, skipping all of them&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteA.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteD.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteE.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteF.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteG.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if animation over line 1 or 2 at the time of response, we enable noteC. 19pct, 21pct, 29, 31&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 15pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 24pct) || (values.xAtResponse &amp;gt;= 25pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 34pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 3, 4, or 7 we enable note G&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 35pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 44pct) || (values.xAtResponse &amp;gt;= 45pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 54pct) || (values.xAtResponse &amp;gt;= 75pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 84pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteG.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 5 or 6, we enable note A&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 55pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 64pct) || (values.xAtResponse &amp;gt;= 65pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 74pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteA.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;}&lt;br/&gt;/ stimulusframes = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1=clearScreen, musicline, line1, line2, line3, line4, line5, line6, line7,&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;noteA, noteC, noteD, noteE, noteF, noteG,&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;debug]&lt;br/&gt;/ beginResponseTime = -1&lt;br/&gt;/ validResponse = (" ")&lt;br/&gt;/ isValidResponse = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (trial.synchrony.response== 57) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = shape.musicline.xPct; // store X coordinate of music line at time of response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration -= trial.synchrony.latency; // calculate remaining animation duration&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = values.xAtResponse; // set new start point, picking back up where we were at time of last response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ branch = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!(values.musicLineDuration &amp;lt;= 0 || trial.synchrony.response == 0)) { // as long as animation / trial hasn't timed out, we keep running&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return trial.synchrony;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ timeout = values.musicLineDuration&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial synchrony2&amp;gt;&lt;br/&gt;/ onTrialBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// we start out playing no note, skipping all of them&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteA.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteD.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteE.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteF.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteG.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 15pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 24pct) || (values.xAtResponse &amp;gt;= 25pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 34pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteF.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 3 or 4, we enable note E&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 35pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 44pct) || (values.xAtResponse &amp;gt;= 45pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 54pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteE.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 5 or 6, we enable note D&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 55pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 64pct) || (values.xAtResponse &amp;gt;= 65pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 74pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteD.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 7, we enable note C&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 75pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 84pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;}&lt;br/&gt;/ stimulusframes = [&lt;br/&gt;  1=clearScreen, musicline, line1, line2, line3, line4, line5, line6, line7,&lt;br/&gt;  noteA, noteC, noteD, noteE, noteF, noteG,&lt;br/&gt;  debug]&lt;br/&gt;/ beginResponseTime = -1&lt;br/&gt;/ validResponse = (" ")&lt;br/&gt;/ isValidResponse = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (trial.synchrony2.response== 57) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = shape.musicline.xPct; // store X coordinate of music line at time of response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration -= trial.synchrony2.latency; // calculate remaining animation duration&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = values.xAtResponse; // set new start point, picking back up where we were at time of last response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ branch = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!(values.musicLineDuration &amp;lt;= 0 || trial.synchrony2.response == 0)) { // as long as animation / trial hasn't timed out, we keep running&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return trial.synchrony2;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ timeout = values.musicLineDuration&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;The sound files to play:&lt;br/&gt;&amp;lt;sound noteC&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_C.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteG&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_G.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteA&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_A.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteF&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_F.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteE&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_E.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteD&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_D.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;text debug&amp;gt;&lt;br/&gt;/ items = ("X position at time of response: &amp;lt;%values.xAtResponse%&amp;gt; | Remaining duration: &amp;lt;%values.musicLineDuration%&amp;gt;")&lt;br/&gt;/ position = (50%, 10%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/text&amp;gt;[/code]&lt;br/&gt;&lt;br/&gt;In the future, please:&lt;br/&gt;- Always provide any and all files your code requires. Put script and associated files in a ZIP, attach the ZIP to your post. If it is too large to attach, upload it somewhere else and provide the download link.&lt;br/&gt;- Don't paste entire scripts into a post's body. If you need to highlight speciic parts, you can do so using +Insert, and then &amp;lt;/&amp;gt; (nsert code).&lt;br/&gt;- Comment your code. E.g. if you're stripping out certain parts, your comments should explain why / what the modified code is supposed to do as opposed to the original.&lt;a class="if-quote-goto quote-link" href="#" data-id="41601"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;Hello,&lt;br/&gt;&lt;br/&gt;Thank you for your help! I made the changes you suggested. Unfortunately, I'm afraid I'm still running into the same issue. I've attached a zip file with all the components needed for it. I would provide a video file of the issue but it is too large to be attached, so I apologize in advance. &lt;a class="if-quote-goto quote-link" href="#" data-id="41625"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;There is no attachment. Please provide the files. In addition:&lt;br/&gt;- Make sure your Inquisit installation is up to date.&lt;br/&gt;- Provide the application log along with the other files (Tools -&amp;gt; View Log File).&lt;a class="if-quote-goto quote-link" href="#" data-id="41626"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;</description><pubDate>Mon, 08 Sep 2025 18:55:20 GMT</pubDate><dc:creator>krmanning10</dc:creator></item><item><title>RE: How to Stop Making a Shape Go Back and Forth</title><link>https://forums.millisecond.com/Topic41626.aspx</link><description>&lt;blockquote data-id="41625" class="if-quote-wrapper" unselectable="on" data-guid="1757357214655" contenteditable="false" id="if_insertedNode_1757357213029"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="41625" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="41625" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="41625" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;krmanning10 - 9/8/2025&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-41625"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;blockquote data-id="41601" class="if-quote-wrapper" unselectable="on" data-guid="1757357214655" contenteditable="false" id="if_insertedNode_1757353791253"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="41601" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="41601" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="41601" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - 8/26/2025&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-41601"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;br/&gt;In the main, the way you've changed the /onTrialEnd logic from the original where you wanted repetiosns makes no sense and creates problems.&lt;br/&gt;&lt;br/&gt;Here's a fixed-up version, as best as I can guess at what you actually want.&lt;br/&gt;&lt;br/&gt;[code]&amp;lt;expt myExpt&amp;gt;&lt;br/&gt;/ blocks = [1=task; 2=task2]&lt;br/&gt;&amp;lt;/expt&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;values&amp;gt;&lt;br/&gt;// repCount = 0 // not needed anymore&lt;br/&gt;/ xAtResponse = 0&lt;br/&gt;/ musicLineStartX = 5% // start x coordinate of animation&lt;br/&gt;/ musicLineEndX = 90% // end x coordinate of animation&lt;br/&gt;/ musicLineDuration = 7250 // duration of full animation&lt;br/&gt;&amp;lt;/values&amp;gt;&lt;br/&gt;&lt;br/&gt;The bar that moves across the screen:&lt;br/&gt;&amp;lt;shape musicline&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = crimson&lt;br/&gt;/ size = (2%,100%)&lt;br/&gt;/ animation = path(values.musicLineDuration, 1, values.musicLineStartX, 50%, values.musicLineEndX, 50%) // not doing any actual repetions, so 1, not -1&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;7 shapes that the bar will pass over:&lt;br/&gt;&amp;lt;shape line1&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (20%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line2&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (30%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line3&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (40%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line4&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (50%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line5&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (60%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line6&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (70%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line7&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (80%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block task&amp;gt;&lt;br/&gt;/ trials = [1=synchrony]&lt;br/&gt;/ onBlockBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = 0;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = 5%; // start x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineEndX = 90%; // end x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration = 7250; // duration of full animation&lt;br/&gt;}&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block task2&amp;gt;&lt;br/&gt;/ trials = [1=synchrony2]&lt;br/&gt;/ onBlockBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = 0;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = 5%; // start x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineEndX = 90%; // end x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration = 7250; // duration of full animation&lt;br/&gt;}&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial synchrony&amp;gt;&lt;br/&gt;/ onTrialBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// we start out playing no note, skipping all of them&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteA.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteD.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteE.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteF.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteG.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if animation over line 1 or 2 at the time of response, we enable noteC. 19pct, 21pct, 29, 31&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 15pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 24pct) || (values.xAtResponse &amp;gt;= 25pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 34pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 3, 4, or 7 we enable note G&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 35pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 44pct) || (values.xAtResponse &amp;gt;= 45pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 54pct) || (values.xAtResponse &amp;gt;= 75pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 84pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteG.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 5 or 6, we enable note A&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 55pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 64pct) || (values.xAtResponse &amp;gt;= 65pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 74pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteA.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;}&lt;br/&gt;/ stimulusframes = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1=clearScreen, musicline, line1, line2, line3, line4, line5, line6, line7,&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;noteA, noteC, noteD, noteE, noteF, noteG,&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;debug]&lt;br/&gt;/ beginResponseTime = -1&lt;br/&gt;/ validResponse = (" ")&lt;br/&gt;/ isValidResponse = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (trial.synchrony.response== 57) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = shape.musicline.xPct; // store X coordinate of music line at time of response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration -= trial.synchrony.latency; // calculate remaining animation duration&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = values.xAtResponse; // set new start point, picking back up where we were at time of last response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ branch = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!(values.musicLineDuration &amp;lt;= 0 || trial.synchrony.response == 0)) { // as long as animation / trial hasn't timed out, we keep running&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return trial.synchrony;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ timeout = values.musicLineDuration&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial synchrony2&amp;gt;&lt;br/&gt;/ onTrialBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// we start out playing no note, skipping all of them&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteA.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteD.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteE.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteF.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteG.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 15pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 24pct) || (values.xAtResponse &amp;gt;= 25pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 34pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteF.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 3 or 4, we enable note E&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 35pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 44pct) || (values.xAtResponse &amp;gt;= 45pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 54pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteE.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 5 or 6, we enable note D&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 55pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 64pct) || (values.xAtResponse &amp;gt;= 65pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 74pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteD.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 7, we enable note C&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 75pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 84pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;}&lt;br/&gt;/ stimulusframes = [&lt;br/&gt;  1=clearScreen, musicline, line1, line2, line3, line4, line5, line6, line7,&lt;br/&gt;  noteA, noteC, noteD, noteE, noteF, noteG,&lt;br/&gt;  debug]&lt;br/&gt;/ beginResponseTime = -1&lt;br/&gt;/ validResponse = (" ")&lt;br/&gt;/ isValidResponse = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (trial.synchrony2.response== 57) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = shape.musicline.xPct; // store X coordinate of music line at time of response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration -= trial.synchrony2.latency; // calculate remaining animation duration&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = values.xAtResponse; // set new start point, picking back up where we were at time of last response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ branch = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!(values.musicLineDuration &amp;lt;= 0 || trial.synchrony2.response == 0)) { // as long as animation / trial hasn't timed out, we keep running&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return trial.synchrony2;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ timeout = values.musicLineDuration&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;The sound files to play:&lt;br/&gt;&amp;lt;sound noteC&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_C.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteG&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_G.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteA&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_A.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteF&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_F.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteE&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_E.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteD&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_D.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;text debug&amp;gt;&lt;br/&gt;/ items = ("X position at time of response: &amp;lt;%values.xAtResponse%&amp;gt; | Remaining duration: &amp;lt;%values.musicLineDuration%&amp;gt;")&lt;br/&gt;/ position = (50%, 10%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/text&amp;gt;[/code]&lt;br/&gt;&lt;br/&gt;In the future, please:&lt;br/&gt;- Always provide any and all files your code requires. Put script and associated files in a ZIP, attach the ZIP to your post. If it is too large to attach, upload it somewhere else and provide the download link.&lt;br/&gt;- Don't paste entire scripts into a post's body. If you need to highlight speciic parts, you can do so using +Insert, and then &amp;lt;/&amp;gt; (nsert code).&lt;br/&gt;- Comment your code. E.g. if you're stripping out certain parts, your comments should explain why / what the modified code is supposed to do as opposed to the original.&lt;a class="if-quote-goto quote-link" href="#" data-id="41601"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;Hello,&lt;br/&gt;&lt;br/&gt;Thank you for your help! I made the changes you suggested. Unfortunately, I'm afraid I'm still running into the same issue. I've attached a zip file with all the components needed for it. I would provide a video file of the issue but it is too large to be attached, so I apologize in advance. &lt;a class="if-quote-goto quote-link" href="#" data-id="41625"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;There is no attachment. Please provide the files. In addition:&lt;br/&gt;- Make sure your Inquisit installation is up to date.&lt;br/&gt;- Provide the application log along with the other files (Tools -&amp;gt; View Log File).</description><pubDate>Mon, 08 Sep 2025 18:49:00 GMT</pubDate><dc:creator>Dave</dc:creator></item><item><title>RE: How to Stop Making a Shape Go Back and Forth</title><link>https://forums.millisecond.com/Topic41625.aspx</link><description>&lt;blockquote data-id="41601" class="if-quote-wrapper" unselectable="on" data-guid="1757353791982" contenteditable="false" id="if_insertedNode_1757353791253"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="41601" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="41601" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="41601" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - 8/26/2025&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-41601"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;br/&gt;In the main, the way you've changed the /onTrialEnd logic from the original where you wanted repetiosns makes no sense and creates problems.&lt;br/&gt;&lt;br/&gt;Here's a fixed-up version, as best as I can guess at what you actually want.&lt;br/&gt;&lt;br/&gt;[code]&amp;lt;expt myExpt&amp;gt;&lt;br/&gt;/ blocks = [1=task; 2=task2]&lt;br/&gt;&amp;lt;/expt&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;values&amp;gt;&lt;br/&gt;// repCount = 0 // not needed anymore&lt;br/&gt;/ xAtResponse = 0&lt;br/&gt;/ musicLineStartX = 5% // start x coordinate of animation&lt;br/&gt;/ musicLineEndX = 90% // end x coordinate of animation&lt;br/&gt;/ musicLineDuration = 7250 // duration of full animation&lt;br/&gt;&amp;lt;/values&amp;gt;&lt;br/&gt;&lt;br/&gt;The bar that moves across the screen:&lt;br/&gt;&amp;lt;shape musicline&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = crimson&lt;br/&gt;/ size = (2%,100%)&lt;br/&gt;/ animation = path(values.musicLineDuration, 1, values.musicLineStartX, 50%, values.musicLineEndX, 50%) // not doing any actual repetions, so 1, not -1&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;7 shapes that the bar will pass over:&lt;br/&gt;&amp;lt;shape line1&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (20%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line2&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (30%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line3&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (40%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line4&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (50%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line5&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (60%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line6&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (70%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line7&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (80%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block task&amp;gt;&lt;br/&gt;/ trials = [1=synchrony]&lt;br/&gt;/ onBlockBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = 0;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = 5%; // start x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineEndX = 90%; // end x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration = 7250; // duration of full animation&lt;br/&gt;}&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block task2&amp;gt;&lt;br/&gt;/ trials = [1=synchrony2]&lt;br/&gt;/ onBlockBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = 0;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = 5%; // start x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineEndX = 90%; // end x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration = 7250; // duration of full animation&lt;br/&gt;}&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial synchrony&amp;gt;&lt;br/&gt;/ onTrialBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// we start out playing no note, skipping all of them&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteA.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteD.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteE.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteF.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteG.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if animation over line 1 or 2 at the time of response, we enable noteC. 19pct, 21pct, 29, 31&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 15pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 24pct) || (values.xAtResponse &amp;gt;= 25pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 34pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 3, 4, or 7 we enable note G&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 35pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 44pct) || (values.xAtResponse &amp;gt;= 45pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 54pct) || (values.xAtResponse &amp;gt;= 75pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 84pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteG.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 5 or 6, we enable note A&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 55pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 64pct) || (values.xAtResponse &amp;gt;= 65pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 74pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteA.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;}&lt;br/&gt;/ stimulusframes = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1=clearScreen, musicline, line1, line2, line3, line4, line5, line6, line7,&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;noteA, noteC, noteD, noteE, noteF, noteG,&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;debug]&lt;br/&gt;/ beginResponseTime = -1&lt;br/&gt;/ validResponse = (" ")&lt;br/&gt;/ isValidResponse = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (trial.synchrony.response== 57) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = shape.musicline.xPct; // store X coordinate of music line at time of response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration -= trial.synchrony.latency; // calculate remaining animation duration&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = values.xAtResponse; // set new start point, picking back up where we were at time of last response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ branch = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!(values.musicLineDuration &amp;lt;= 0 || trial.synchrony.response == 0)) { // as long as animation / trial hasn't timed out, we keep running&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return trial.synchrony;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ timeout = values.musicLineDuration&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial synchrony2&amp;gt;&lt;br/&gt;/ onTrialBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// we start out playing no note, skipping all of them&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteA.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteD.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteE.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteF.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteG.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 15pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 24pct) || (values.xAtResponse &amp;gt;= 25pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 34pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteF.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 3 or 4, we enable note E&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 35pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 44pct) || (values.xAtResponse &amp;gt;= 45pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 54pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteE.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 5 or 6, we enable note D&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 55pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 64pct) || (values.xAtResponse &amp;gt;= 65pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 74pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteD.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 7, we enable note C&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 75pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 84pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;}&lt;br/&gt;/ stimulusframes = [&lt;br/&gt;  1=clearScreen, musicline, line1, line2, line3, line4, line5, line6, line7,&lt;br/&gt;  noteA, noteC, noteD, noteE, noteF, noteG,&lt;br/&gt;  debug]&lt;br/&gt;/ beginResponseTime = -1&lt;br/&gt;/ validResponse = (" ")&lt;br/&gt;/ isValidResponse = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (trial.synchrony2.response== 57) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = shape.musicline.xPct; // store X coordinate of music line at time of response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration -= trial.synchrony2.latency; // calculate remaining animation duration&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = values.xAtResponse; // set new start point, picking back up where we were at time of last response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ branch = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!(values.musicLineDuration &amp;lt;= 0 || trial.synchrony2.response == 0)) { // as long as animation / trial hasn't timed out, we keep running&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return trial.synchrony2;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ timeout = values.musicLineDuration&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;The sound files to play:&lt;br/&gt;&amp;lt;sound noteC&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_C.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteG&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_G.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteA&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_A.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteF&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_F.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteE&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_E.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteD&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_D.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;text debug&amp;gt;&lt;br/&gt;/ items = ("X position at time of response: &amp;lt;%values.xAtResponse%&amp;gt; | Remaining duration: &amp;lt;%values.musicLineDuration%&amp;gt;")&lt;br/&gt;/ position = (50%, 10%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/text&amp;gt;[/code]&lt;br/&gt;&lt;br/&gt;In the future, please:&lt;br/&gt;- Always provide any and all files your code requires. Put script and associated files in a ZIP, attach the ZIP to your post. If it is too large to attach, upload it somewhere else and provide the download link.&lt;br/&gt;- Don't paste entire scripts into a post's body. If you need to highlight speciic parts, you can do so using +Insert, and then &amp;lt;/&amp;gt; (nsert code).&lt;br/&gt;- Comment your code. E.g. if you're stripping out certain parts, your comments should explain why / what the modified code is supposed to do as opposed to the original.&lt;a class="if-quote-goto quote-link" href="#" data-id="41601"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;Hello,&lt;br/&gt;&lt;br/&gt;Thank you for your help! I made the changes you suggested. Unfortunately, I'm afraid I'm still running into the same issue. I've attached a zip file with all the components needed for it. I would provide a video file of the issue but it is too large to be attached, so I apologize in advance. </description><pubDate>Mon, 08 Sep 2025 17:53:34 GMT</pubDate><dc:creator>krmanning10</dc:creator></item><item><title>RE: How to Stop Making a Shape Go Back and Forth</title><link>https://forums.millisecond.com/Topic41601.aspx</link><description>&lt;br/&gt;In the main, the way you've changed the /onTrialEnd logic from the original where you wanted repetiosns makes no sense and creates problems.&lt;br/&gt;&lt;br/&gt;Here's a fixed-up version, as best as I can guess at what you actually want.&lt;br/&gt;&lt;br/&gt;[code]&amp;lt;expt myExpt&amp;gt;&lt;br/&gt;/ blocks = [1=task; 2=task2]&lt;br/&gt;&amp;lt;/expt&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;values&amp;gt;&lt;br/&gt;// repCount = 0 // not needed anymore&lt;br/&gt;/ xAtResponse = 0&lt;br/&gt;/ musicLineStartX = 5% // start x coordinate of animation&lt;br/&gt;/ musicLineEndX = 90% // end x coordinate of animation&lt;br/&gt;/ musicLineDuration = 7250 // duration of full animation&lt;br/&gt;&amp;lt;/values&amp;gt;&lt;br/&gt;&lt;br/&gt;The bar that moves across the screen:&lt;br/&gt;&amp;lt;shape musicline&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = crimson&lt;br/&gt;/ size = (2%,100%)&lt;br/&gt;/ animation = path(values.musicLineDuration, 1, values.musicLineStartX, 50%, values.musicLineEndX, 50%) // not doing any actual repetions, so 1, not -1&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;7 shapes that the bar will pass over:&lt;br/&gt;&amp;lt;shape line1&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (20%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line2&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (30%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line3&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (40%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line4&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (50%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line5&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (60%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line6&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (70%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line7&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (80%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block task&amp;gt;&lt;br/&gt;/ trials = [1=synchrony]&lt;br/&gt;/ onBlockBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = 0;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = 5%; // start x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineEndX = 90%; // end x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration = 7250; // duration of full animation&lt;br/&gt;}&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block task2&amp;gt;&lt;br/&gt;/ trials = [1=synchrony2]&lt;br/&gt;/ onBlockBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = 0;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = 5%; // start x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineEndX = 90%; // end x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration = 7250; // duration of full animation&lt;br/&gt;}&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial synchrony&amp;gt;&lt;br/&gt;/ onTrialBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// we start out playing no note, skipping all of them&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteA.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteD.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteE.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteF.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteG.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if animation over line 1 or 2 at the time of response, we enable noteC. 19pct, 21pct, 29, 31&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 15pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 24pct) || (values.xAtResponse &amp;gt;= 25pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 34pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 3, 4, or 7 we enable note G&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 35pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 44pct) || (values.xAtResponse &amp;gt;= 45pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 54pct) || (values.xAtResponse &amp;gt;= 75pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 84pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteG.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 5 or 6, we enable note A&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 55pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 64pct) || (values.xAtResponse &amp;gt;= 65pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 74pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteA.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;}&lt;br/&gt;/ stimulusframes = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1=clearScreen, musicline, line1, line2, line3, line4, line5, line6, line7,&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;noteA, noteC, noteD, noteE, noteF, noteG,&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;debug]&lt;br/&gt;/ beginResponseTime = -1&lt;br/&gt;/ validResponse = (" ")&lt;br/&gt;/ isValidResponse = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (trial.synchrony.response== 57) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = shape.musicline.xPct; // store X coordinate of music line at time of response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration -= trial.synchrony.latency; // calculate remaining animation duration&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = values.xAtResponse; // set new start point, picking back up where we were at time of last response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ branch = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!(values.musicLineDuration &amp;lt;= 0 || trial.synchrony.response == 0)) { // as long as animation / trial hasn't timed out, we keep running&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return trial.synchrony;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ timeout = values.musicLineDuration&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial synchrony2&amp;gt;&lt;br/&gt;/ onTrialBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// we start out playing no note, skipping all of them&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteA.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteD.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteE.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteF.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteG.skip = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 15pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 24pct) || (values.xAtResponse &amp;gt;= 25pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 34pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteF.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 3 or 4, we enable note E&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 35pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 44pct) || (values.xAtResponse &amp;gt;= 45pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 54pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteE.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 5 or 6, we enable note D&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 55pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 64pct) || (values.xAtResponse &amp;gt;= 65pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 74pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteD.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 7, we enable note C&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 75pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 84pct)) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteC.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;}&lt;br/&gt;/ stimulusframes = [&lt;br/&gt;  1=clearScreen, musicline, line1, line2, line3, line4, line5, line6, line7,&lt;br/&gt;  noteA, noteC, noteD, noteE, noteF, noteG,&lt;br/&gt;  debug]&lt;br/&gt;/ beginResponseTime = -1&lt;br/&gt;/ validResponse = (" ")&lt;br/&gt;/ isValidResponse = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (trial.synchrony2.response== 57) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = shape.musicline.xPct; // store X coordinate of music line at time of response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration -= trial.synchrony2.latency; // calculate remaining animation duration&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = values.xAtResponse; // set new start point, picking back up where we were at time of last response&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ branch = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!(values.musicLineDuration &amp;lt;= 0 || trial.synchrony2.response == 0)) { // as long as animation / trial hasn't timed out, we keep running&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return trial.synchrony2;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;}&lt;br/&gt;/ timeout = values.musicLineDuration&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;The sound files to play:&lt;br/&gt;&amp;lt;sound noteC&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_C.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteG&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_G.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteA&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_A.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteF&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_F.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteE&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_E.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteD&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_D.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;text debug&amp;gt;&lt;br/&gt;/ items = ("X position at time of response: &amp;lt;%values.xAtResponse%&amp;gt; | Remaining duration: &amp;lt;%values.musicLineDuration%&amp;gt;")&lt;br/&gt;/ position = (50%, 10%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/text&amp;gt;[/code]&lt;br/&gt;&lt;br/&gt;In the future, please:&lt;br/&gt;- Always provide any and all files your code requires. Put script and associated files in a ZIP, attach the ZIP to your post. If it is too large to attach, upload it somewhere else and provide the download link.&lt;br/&gt;- Don't paste entire scripts into a post's body. If you need to highlight speciic parts, you can do so using +Insert, and then &amp;lt;/&amp;gt; (nsert code).&lt;br/&gt;- Comment your code. E.g. if you're stripping out certain parts, your comments should explain why / what the modified code is supposed to do as opposed to the original.</description><pubDate>Tue, 26 Aug 2025 22:48:48 GMT</pubDate><dc:creator>Dave</dc:creator></item><item><title>RE: How to Stop Making a Shape Go Back and Forth</title><link>https://forums.millisecond.com/Topic41600.aspx</link><description>&lt;blockquote data-id="41599" class="if-quote-wrapper" unselectable="on" data-guid="1756240126343" contenteditable="false" id="if_insertedNode_1756240125844"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="41599" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="41599" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="41599" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;krmanning10 - 8/26/2025&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-41599"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;Hello,&lt;br/&gt;&lt;br/&gt;I am having an issue with a trial that I want to play. My trial is meant to be playing notes to the tune of Twinkle Twinkle Little Star based on the allignment of a red rectangle with black rectangles. The red rectangle travels from one point of the screen to another without stopping. The participant clicks on the space bar to make the sound play, and the process repeats 5 more times (6 times total). At the end of each verse, the bar is meant to stop and go back to the beginning. However, I am having an issue where the bar goes a small distance backwards before teleporting to the starting point for the next verse. Is there something wrong with my code? Here are two verses to visualize the issue:&lt;br/&gt;&lt;br/&gt;&amp;lt;expt myExpt&amp;gt;&lt;br/&gt;/ blocks = [1=task; 2=task2]&lt;br/&gt;&amp;lt;/expt&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;values&amp;gt;&lt;br/&gt;/ repCount = 0&lt;br/&gt;/ xAtResponse = 0&lt;br/&gt;/ musicLineStartX = 5% // start x coordinate of animation&lt;br/&gt;/ musicLineEndX = 90% // end x coordinate of animation&lt;br/&gt;/ musicLineDuration = 7250 // duration of full animation&lt;br/&gt;&amp;lt;/values&amp;gt;&lt;br/&gt;&lt;br/&gt;The bar that moves across the screen:&lt;br/&gt;&amp;lt;shape musicline&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = crimson&lt;br/&gt;/ size = (2%,100%)&lt;br/&gt;/ animation = path(values.musicLineDuration, -1, values.musicLineStartX, 50%, values.musicLineEndX, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;7 shapes that the bar will pass over:&lt;br/&gt;&amp;lt;shape line1&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (20%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line2&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (30%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line3&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (40%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line4&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (50%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line5&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (60%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line6&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (70%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;shape line7&amp;gt;&lt;br/&gt;/ shape = rectangle&lt;br/&gt;/ color = black&lt;br/&gt;/ size = (2%,50%)&lt;br/&gt;/ position = (80%, 50%)&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/shape&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block task&amp;gt;&lt;br/&gt;/ trials = [1=synchrony]&lt;br/&gt;/ onBlockBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.repCount = 0;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = 0;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = 5%; // start x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineEndX = 90%; // end x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration = 7250; // duration of full animation&lt;br/&gt;}&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block task2&amp;gt;&lt;br/&gt;/ trials = [1=synchrony2] &lt;br/&gt;/ onBlockBegin = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.repCount = 0;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.xAtResponse = 0;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineStartX = 5%; // start x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineEndX = 90%; // end x coordinate of animation&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.musicLineDuration = 7250; // duration of full animation&lt;br/&gt;}&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial synchrony&amp;gt;&lt;br/&gt;/ onTrialBegin = {&lt;br/&gt;&amp;nbsp; // we start out playing no note, skipping all of them&lt;br/&gt;&amp;nbsp; sound.noteA.skip = true;&lt;br/&gt;&amp;nbsp; sound.noteC.skip = true;&lt;br/&gt;&amp;nbsp; sound.noteD.skip = true;&lt;br/&gt;&amp;nbsp; sound.noteE.skip = true;&lt;br/&gt;&amp;nbsp; sound.noteF.skip = true;&lt;br/&gt;&amp;nbsp; sound.noteG.skip = true;&lt;br/&gt;&amp;nbsp; // if animation over line 1 or 2 at the time of response, we enable noteC. 19pct, 21pct, 29, 31&lt;br/&gt;&amp;nbsp; if ((values.xAtResponse &amp;gt;= 15pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 24pct) || (values.xAtResponse &amp;gt;= 25pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 34pct))&lt;br/&gt;&amp;nbsp; sound.noteC.skip = false;&lt;br/&gt;&amp;nbsp; // if over line 3, 4, or 7 we enable note G&lt;br/&gt;&amp;nbsp; if ((values.xAtResponse &amp;gt;= 35pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 44pct) || (values.xAtResponse &amp;gt;= 45pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 54pct) || (values.xAtResponse &amp;gt;= 75pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 84pct))&lt;br/&gt;&amp;nbsp; sound.noteG.skip = false;&lt;br/&gt;&amp;nbsp; // if over line 5 or 6, we enable note A&lt;br/&gt;&amp;nbsp; if ((values.xAtResponse &amp;gt;= 55pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 64pct) || (values.xAtResponse &amp;gt;= 65pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 74pct))&lt;br/&gt;&amp;nbsp; sound.noteA.skip = false;&lt;br/&gt;&amp;nbsp; } &lt;br/&gt;/ stimulusframes = [&lt;br/&gt;&amp;nbsp; 1=clearScreen, musicline, line1, line2, line3, line4, line5, line6, line7, &lt;br/&gt;&amp;nbsp; noteA, noteC, noteD, noteE, noteF, noteG,&lt;br/&gt;&amp;nbsp; debug]&lt;br/&gt;/ beginResponseTime = -1&lt;br/&gt;/ validResponse = (" ")&lt;br/&gt;/ isValidResponse = {&lt;br/&gt;&amp;nbsp; if (trial.synchrony.response== 57)&lt;br/&gt;&amp;nbsp;&amp;nbsp;  values.xAtResponse = shape.musicline.xPct; // store X coordinate of music line at time of response&lt;br/&gt;&amp;nbsp;&amp;nbsp;  values.musicLineDuration -= trial.synchrony.latency; // calculate remaining animation duration&lt;br/&gt;&amp;nbsp;&amp;nbsp;  values.musicLineStartX = values.xAtResponse; // set new start point, picking back up where we were at time of last response&lt;br/&gt;&amp;nbsp;&amp;nbsp;  return true;&lt;br/&gt;&amp;nbsp; }&lt;br/&gt;/ onTrialEnd = {&lt;br/&gt;&amp;nbsp; if (values.musicLineDuration &amp;lt;= 0 || trial.synchrony.response == 0) // if trial times out, we reset everything&lt;br/&gt;&amp;nbsp;&amp;nbsp;  values.musicLineStartX = 5%; // back to the original start position&lt;br/&gt;&amp;nbsp;&amp;nbsp;  //values.musicLineDuration = 7250; // back to original duration&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//values.xAtResponse = 0%; // we don't have any response yet&lt;br/&gt;&amp;nbsp;&amp;nbsp;  values.repCount += 1; // we increase the repetition count&lt;br/&gt;&amp;nbsp; }&lt;br/&gt;/ branch = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (values.repCount &amp;lt;= 7) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;  return trial.synchrony;&lt;br/&gt;&amp;nbsp; }&lt;br/&gt;}&lt;br/&gt;/ timeout = values.musicLineDuration&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial synchrony2&amp;gt;&lt;br/&gt;/ onTrialBegin = {&lt;br/&gt;&amp;nbsp; // we start out playing no note, skipping all of them&lt;br/&gt;&amp;nbsp; sound.noteA.skip = true;&lt;br/&gt;&amp;nbsp; sound.noteC.skip = true;&lt;br/&gt;&amp;nbsp; sound.noteD.skip = true;&lt;br/&gt;&amp;nbsp; sound.noteE.skip = true;&lt;br/&gt;&amp;nbsp; sound.noteF.skip = true;&lt;br/&gt;&amp;nbsp; sound.noteG.skip = true;&lt;br/&gt;&amp;nbsp; if ((values.xAtResponse &amp;gt;= 15pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 24pct) || (values.xAtResponse &amp;gt;= 25pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 34pct))&lt;br/&gt;&amp;nbsp; sound.noteF.skip = false;&lt;br/&gt;&amp;nbsp; // if over line 3 or 4, we enable note E&lt;br/&gt;&amp;nbsp; if ((values.xAtResponse &amp;gt;= 35pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 44pct) || (values.xAtResponse &amp;gt;= 45pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 54pct))&lt;br/&gt;&amp;nbsp; sound.noteE.skip = false;&lt;br/&gt;&amp;nbsp; // if over line 5 or 6, we enable note D&lt;br/&gt;&amp;nbsp; if ((values.xAtResponse &amp;gt;= 55pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 64pct) || (values.xAtResponse &amp;gt;= 65pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 74pct))&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sound.noteD.skip = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// if over line 7, we enable note C&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((values.xAtResponse &amp;gt;= 75pct &amp;amp;&amp;amp; values.xAtResponse &amp;lt;= 84pct))&lt;br/&gt;&amp;nbsp; sound.noteC.skip = false;&lt;br/&gt;&amp;nbsp; } &lt;br/&gt;/ stimulusframes = [&lt;br/&gt;&amp;nbsp; 1=clearScreen, musicline, line1, line2, line3, line4, line5, line6, line7, &lt;br/&gt;&amp;nbsp; noteA, noteC, noteD, noteE, noteF, noteG,&lt;br/&gt;&amp;nbsp; debug]&lt;br/&gt;/ beginResponseTime = -1&lt;br/&gt;/ validResponse = (" ")&lt;br/&gt;/ isValidResponse = {&lt;br/&gt;&amp;nbsp; if (trial.synchrony2.response== 57)&lt;br/&gt;&amp;nbsp;&amp;nbsp;  values.xAtResponse = shape.musicline.xPct; // store X coordinate of music line at time of response&lt;br/&gt;&amp;nbsp;&amp;nbsp;  values.musicLineDuration -= trial.synchrony2.latency; // calculate remaining animation duration&lt;br/&gt;&amp;nbsp;&amp;nbsp;  values.musicLineStartX = values.xAtResponse; // set new start point, picking back up where we were at time of last response&lt;br/&gt;&amp;nbsp;&amp;nbsp;  return true;&lt;br/&gt;&amp;nbsp; }&lt;br/&gt;/ onTrialEnd = {&lt;br/&gt;&amp;nbsp; if (values.musicLineDuration &amp;lt;= 0 || trial.synchrony2.response == 0) // if trial times out, we reset everything&lt;br/&gt;&amp;nbsp;&amp;nbsp;  values.musicLineStartX = 5%; // back to the original start position&lt;br/&gt;&amp;nbsp;&amp;nbsp;  //values.musicLineDuration = 7250; // back to original duration&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//values.xAtResponse = 0%; // we don't have any response yet&lt;br/&gt;&amp;nbsp;&amp;nbsp;  values.repCount += 1; // we increase the repetition count&lt;br/&gt;&amp;nbsp; }&lt;br/&gt;/ branch = {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (values.repCount &amp;lt;= 7) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;  return trial.synchrony2;&lt;br/&gt;&amp;nbsp; }&lt;br/&gt;}&lt;br/&gt;/ timeout = values.musicLineDuration&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;The sound files to play:&lt;br/&gt;&amp;lt;sound noteC&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_C.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteG&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_G.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteA&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_A.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteF&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_F.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteE&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_E.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;sound noteD&amp;gt;&lt;br/&gt;/ items = ("Twinkle_Twinkle_Little_Star_D.mp3")&lt;br/&gt;/ playThrough = false&lt;br/&gt;/ erase = false&lt;br/&gt;&amp;lt;/sound&amp;gt;&lt;br/&gt;&lt;br/&gt;Unfortunately it is not letting me attach the sound files.&lt;a class="if-quote-goto quote-link" href="#" data-id="41599"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;Please put everything in a ZIP -- the script, any files it requires -- and then attach the ZIP. Thanks</description><pubDate>Tue, 26 Aug 2025 20:29:21 GMT</pubDate><dc:creator>Dave</dc:creator></item></channel></rss>