﻿<?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 4  » Changing valid response of current trial based on response of previous trial.</title><generator>InstantForum 2017-1 Final</generator><description>Millisecond Forums</description><link>https://forums.millisecond.com/</link><webMaster>Millisecond Forums</webMaster><lastBuildDate>Thu, 10 Sep 2026 03:46:49 GMT</lastBuildDate><ttl>20</ttl><item><title>Changing valid response of current trial based on response of previous trial.</title><link>https://forums.millisecond.com/Topic22243.aspx</link><description>Hello, I am working on a task where participants will remember the order of a previously viewed array of faces.&lt;br/&gt;&lt;br/&gt;During the recall trial, participants view four faces on screen and indicate the order of each face by using separate buttons for 1st, 2nd, 3rd, and 4th. &amp;nbsp;Because I want real-time feedback to show the participant which face they selected, I have separate trials for each button press so that the number they selected will appear below the corresponding face.&amp;nbsp;&lt;br/&gt;I would like to make it so that once a button press has occurred, this button will not be a validresponse in during the next trial. &amp;nbsp;However, because I can't predict which button will be pressed on each trial, I can't simply change the "validresponse = (..." entry for the next trial. &amp;nbsp;Unfortunately I can't figure out a way to push this information into the next trial without creating separate trials for every situation. &amp;nbsp; Here's a sample of my code:&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial recall1&amp;gt;&lt;br/&gt;/ontrialbegin = [values.trialstarttime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/ontrialbegin = [values.tasktimetrue = expt.FaceSequenceTask.elapsedtime]&lt;br/&gt;/ontrialbegin = [values.tasktime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/stimulustimes = [0=nothing]&lt;br/&gt;/response = timeout(8000)&lt;br/&gt;/validresponse = (3,4,5,6)&lt;br/&gt;&lt;br/&gt;/responsetrial = (3, response1first)&lt;br/&gt;/responsetrial = (4, response2first)&lt;br/&gt;/responsetrial = (5, response3first)&lt;br/&gt;/responsetrial = (6, response4first)&lt;br/&gt;/ontrialend = [if(response == 3)values.rsp1 = 1]&lt;br/&gt;/ontrialend = [if(response == 4)values.rsp1 = 2]&lt;br/&gt;/ontrialend = [if(response == 5)values.rsp1 = 3]&lt;br/&gt;/ontrialend = [if(response == 6)values.rsp1 = 4]&lt;br/&gt;/ontrialend = [if(response == 3)values.validres1==(1)]&lt;br/&gt;/ontrialend = [if(response == 4)values.validres2==(1)]&lt;br/&gt;/ontrialend = [if(response == 5)values.validres3==(1)]&lt;br/&gt;/ontrialend = [if(response == 6)values.validres4==(1)]&lt;br/&gt;/ontrialend = [values.counter = values.counter + 1]&lt;br/&gt;/ontrialend = [values.timeleft = 8000 - trial.recall1.elapsedtime]&lt;br/&gt;/ontrialend = [values.rt1 = trial.recall1.elapsedtime]&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&amp;lt;trial response1first&amp;gt;&lt;br/&gt;/ontrialbegin = [values.trialstarttime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/ontrialbegin = [values.tasktimetrue = expt.FaceSequenceTask.elapsedtime]&lt;br/&gt;/ontrialbegin = [values.tasktime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/stimulustimes = [1=onefirst]&lt;br/&gt;/ontrialbegin = [trial.response1first.timeout = values.timeleft]&lt;br/&gt;/validresponse = (3,4,5,6)&lt;br/&gt;/responsetrial = (4, response2second)&lt;br/&gt;/responsetrial = (5, response3second)&lt;br/&gt;/responsetrial = (6, response4second)&lt;br/&gt;/ontrialend = [if(response == 3)values.rsp2 = 1]&lt;br/&gt;/ontrialend = [if(response == 4)values.rsp2 = 2]&lt;br/&gt;/ontrialend = [if(response == 5)values.rsp2 = 3]&lt;br/&gt;/ontrialend = [if(response == 6)values.rsp2 = 4]&lt;br/&gt;/ontrialend = [values.counter = values.counter + 1]&lt;br/&gt;/ontrialend = [values.rt2 = trial.response1first.elapsedtime]&lt;br/&gt;/ontrialend = [values.timeleft = values.timeleft - trial.response1first.elapsedtime]&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial response1second&amp;gt;&lt;br/&gt;/ontrialbegin = [values.trialstarttime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/ontrialbegin = [values.tasktimetrue = expt.FaceSequenceTask.elapsedtime]&lt;br/&gt;/ontrialbegin = [values.tasktime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/stimulustimes = [1=onesecond]&lt;br/&gt;/ontrialbegin = [trial.response1second.timeout = values.timeleft]&lt;br/&gt;/validresponse = (3,4,5,6)&lt;br/&gt;/responsetrial = (4, response2third)&lt;br/&gt;/responsetrial = (5, response3third)&lt;br/&gt;/responsetrial = (6, response4third)&lt;br/&gt;/ontrialend = [if(response == 3)values.rsp3 = 1]&lt;br/&gt;/ontrialend = [if(response == 4)values.rsp3 = 2]&lt;br/&gt;/ontrialend = [if(response == 5)values.rsp3 = 3]&lt;br/&gt;/ontrialend = [if(response == 6)values.rsp3 = 4]&lt;br/&gt;/ontrialend = [values.counter = values.counter + 1]&lt;br/&gt;/ontrialend = [values.rt3 = trial.response1second.elapsedtime]&lt;br/&gt;/ontrialend = [values.timeleft = values.timeleft - trial.response1second.elapsedtime]&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial response1third&amp;gt;&lt;br/&gt;/ontrialbegin = [values.trialstarttime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/ontrialbegin = [values.tasktimetrue = expt.FaceSequenceTask.elapsedtime]&lt;br/&gt;/ontrialbegin = [values.tasktime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/stimulustimes = [1=onethird]&lt;br/&gt;/ontrialbegin = [trial.response1second.timeout = values.timeleft]&lt;br/&gt;/validresponse = (3,4,5,6)&lt;br/&gt;/responsetrial = (4, response2fourth)&lt;br/&gt;/responsetrial = (5, response3fourth)&lt;br/&gt;/responsetrial = (6, response4fourth)&lt;br/&gt;/ontrialend = [if(response == 3)values.rsp4 = 1]&lt;br/&gt;/ontrialend = [if(response == 4)values.rsp4 = 2]&lt;br/&gt;/ontrialend = [if(response == 5)values.rsp4 = 3]&lt;br/&gt;/ontrialend = [if(response == 6)values.rsp4 = 4]&lt;br/&gt;/ontrialend = [values.counter = values.counter + 1]&lt;br/&gt;/ontrialend = [values.rt4 = trial.response1third.elapsedtime]&lt;br/&gt;/ontrialend = [values.timeleft = values.timeleft - trial.response1third.elapsedtime]&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial response1fourth&amp;gt;&lt;br/&gt;/ontrialbegin = [values.trialstarttime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/ontrialbegin = [values.tasktimetrue = expt.FaceSequenceTask.elapsedtime]&lt;br/&gt;/ontrialbegin = [values.tasktime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/stimulustimes = [1=onefourth]&lt;br/&gt;/timeout = values.timeleft&lt;br/&gt;/ontrialend = [values.counter = values.counter + 1]&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial response2first&amp;gt;&lt;br/&gt;/ontrialbegin = [values.trialstarttime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/ontrialbegin = [values.tasktimetrue = expt.FaceSequenceTask.elapsedtime]&lt;br/&gt;/ontrialbegin = [values.tasktime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/stimulustimes = [1=twofirst]&lt;br/&gt;/ontrialbegin = [trial.response2first.timeout = values.timeleft]&lt;br/&gt;/validresponse = (3,4,5,6)&lt;br/&gt;/responsetrial = (3, response1second)&lt;br/&gt;/responsetrial = (5, response3second)&lt;br/&gt;/responsetrial = (6, response4second)&lt;br/&gt;/ontrialend = [if(response == 3)values.rsp2 = 1]&lt;br/&gt;/ontrialend = [if(response == 4)values.rsp2 = 2]&lt;br/&gt;/ontrialend = [if(response == 5)values.rsp2 = 3]&lt;br/&gt;/ontrialend = [if(response == 6)values.rsp2 = 4]&lt;br/&gt;/ontrialend = [values.counter = values.counter + 1]&lt;br/&gt;/ontrialend = [values.rt2 = trial.response2first.elapsedtime]&lt;br/&gt;/ontrialend = [values.timeleft = values.timeleft - trial.response2first.elapsedtime]&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial response2second&amp;gt;&lt;br/&gt;/ontrialbegin = [values.trialstarttime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/ontrialbegin = [values.tasktimetrue = expt.FaceSequenceTask.elapsedtime]&lt;br/&gt;/ontrialbegin = [values.tasktime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/stimulustimes = [1=twosecond]&lt;br/&gt;/ontrialbegin = [trial.response2second.timeout = values.timeleft]&lt;br/&gt;/validresponse = (3,4,5,6)&lt;br/&gt;/responsetrial = (3, response1third)&lt;br/&gt;/responsetrial = (4, response2third)&lt;br/&gt;/responsetrial = (5, response3third)&lt;br/&gt;/responsetrial = (6, response4third)&lt;br/&gt;/ontrialend = [if(response == 3)values.rsp3 = 1]&lt;br/&gt;/ontrialend = [if(response == 4)values.rsp3 = 2]&lt;br/&gt;/ontrialend = [if(response == 5)values.rsp3 = 3]&lt;br/&gt;/ontrialend = [if(response == 6)values.rsp3 = 4]&lt;br/&gt;/ontrialend = [values.counter = values.counter + 1]&lt;br/&gt;/ontrialend = [values.rt3 = trial.response2second.elapsedtime]&lt;br/&gt;/ontrialend = [values.timeleft = values.timeleft - trial.response2second.elapsedtime]&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial response2third&amp;gt;&lt;br/&gt;/ontrialbegin = [values.trialstarttime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/ontrialbegin = [values.tasktimetrue = expt.FaceSequenceTask.elapsedtime]&lt;br/&gt;/ontrialbegin = [values.tasktime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/stimulustimes = [1=twothird]&lt;br/&gt;/ontrialbegin = [trial.response2third.timeout = values.timeleft]&lt;br/&gt;/validresponse = (3,4,5,6)&lt;br/&gt;/responsetrial = (3, response1fourth)&lt;br/&gt;/responsetrial = (4, response2fourth)&lt;br/&gt;/responsetrial = (5, response3fourth)&lt;br/&gt;/responsetrial = (6, response4fourth)&lt;br/&gt;/ontrialend = [if(response == 3)values.rsp4 = 1]&lt;br/&gt;/ontrialend = [if(response == 4)values.rsp4 = 2]&lt;br/&gt;/ontrialend = [if(response == 5)values.rsp4 = 3]&lt;br/&gt;/ontrialend = [if(response == 6)values.rsp4 = 4]&lt;br/&gt;/ontrialend = [values.counter = values.counter + 1]&lt;br/&gt;/ontrialend = [values.rt4 = trial.response2third.elapsedtime]&lt;br/&gt;/ontrialend = [values.timeleft = values.timeleft - trial.response2third.elapsedtime]&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;.&lt;br/&gt;.&lt;br/&gt;.&lt;br/&gt;etc..&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Any suggestions on the best way to do this? &amp;nbsp;Currently my code works, but if the participant presses the same button twice in a row, then the trial advances and they will not have the ability to order each of the four faces. &amp;nbsp; &amp;nbsp;Apologies of this is unclear, I can post the code in full if needed.&lt;br/&gt;&lt;br/&gt;Thanks!&lt;br/&gt;Dylan.&amp;nbsp;&lt;br/&gt;&lt;br/&gt;</description><pubDate>Wed, 09 Aug 2017 07:03:19 GMT</pubDate><dc:creator>Dylonius</dc:creator></item><item><title>RE: Changing valid response of current trial based on response of previous trial.</title><link>https://forums.millisecond.com/Topic22257.aspx</link><description>Thanks a ton, it works. &amp;nbsp;&lt;br/&gt;&lt;br/&gt;For anyone else reading this thread, make sure you re-initialize your "responsestorage" variable to something not included in your desired "validresponse" after every trial.&amp;nbsp;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;</description><pubDate>Wed, 09 Aug 2017 07:03:19 GMT</pubDate><dc:creator>Dylonius</dc:creator></item><item><title>RE: Changing valid response of current trial based on response of previous trial.</title><link>https://forums.millisecond.com/Topic22246.aspx</link><description>&lt;div data-id="22243" class="if-quote-wrapper" unselectable="on" data-guid="1502213099276"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="22243" 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="22243" 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="22243" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dylonius - Tuesday, August 8, 2017&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-22243"&gt;&lt;div class="if-quote-message-margin"&gt;Hello, I am working on a task where participants will remember the order of a previously viewed array of faces.&lt;br/&gt;&lt;br/&gt;During the recall trial, participants view four faces on screen and indicate the order of each face by using separate buttons for 1st, 2nd, 3rd, and 4th. &amp;nbsp;Because I want real-time feedback to show the participant which face they selected, I have separate trials for each button press so that the number they selected will appear below the corresponding face.&amp;nbsp;&lt;br/&gt;I would like to make it so that once a button press has occurred, this button will not be a validresponse in during the next trial. &amp;nbsp;However, because I can't predict which button will be pressed on each trial, I can't simply change the "validresponse = (..." entry for the next trial. &amp;nbsp;Unfortunately I can't figure out a way to push this information into the next trial without creating separate trials for every situation. &amp;nbsp; Here's a sample of my code:&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial recall1&amp;gt;&lt;br/&gt;/ontrialbegin = [values.trialstarttime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/ontrialbegin = [values.tasktimetrue = expt.FaceSequenceTask.elapsedtime]&lt;br/&gt;/ontrialbegin = [values.tasktime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/stimulustimes = [0=nothing]&lt;br/&gt;/response = timeout(8000)&lt;br/&gt;/validresponse = (3,4,5,6)&lt;br/&gt;&lt;br/&gt;/responsetrial = (3, response1first)&lt;br/&gt;/responsetrial = (4, response2first)&lt;br/&gt;/responsetrial = (5, response3first)&lt;br/&gt;/responsetrial = (6, response4first)&lt;br/&gt;/ontrialend = [if(response == 3)values.rsp1 = 1]&lt;br/&gt;/ontrialend = [if(response == 4)values.rsp1 = 2]&lt;br/&gt;/ontrialend = [if(response == 5)values.rsp1 = 3]&lt;br/&gt;/ontrialend = [if(response == 6)values.rsp1 = 4]&lt;br/&gt;/ontrialend = [if(response == 3)values.validres1==(1)]&lt;br/&gt;/ontrialend = [if(response == 4)values.validres2==(1)]&lt;br/&gt;/ontrialend = [if(response == 5)values.validres3==(1)]&lt;br/&gt;/ontrialend = [if(response == 6)values.validres4==(1)]&lt;br/&gt;/ontrialend = [values.counter = values.counter + 1]&lt;br/&gt;/ontrialend = [values.timeleft = 8000 - trial.recall1.elapsedtime]&lt;br/&gt;/ontrialend = [values.rt1 = trial.recall1.elapsedtime]&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&amp;lt;trial response1first&amp;gt;&lt;br/&gt;/ontrialbegin = [values.trialstarttime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/ontrialbegin = [values.tasktimetrue = expt.FaceSequenceTask.elapsedtime]&lt;br/&gt;/ontrialbegin = [values.tasktime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/stimulustimes = [1=onefirst]&lt;br/&gt;/ontrialbegin = [trial.response1first.timeout = values.timeleft]&lt;br/&gt;/validresponse = (3,4,5,6)&lt;br/&gt;/responsetrial = (4, response2second)&lt;br/&gt;/responsetrial = (5, response3second)&lt;br/&gt;/responsetrial = (6, response4second)&lt;br/&gt;/ontrialend = [if(response == 3)values.rsp2 = 1]&lt;br/&gt;/ontrialend = [if(response == 4)values.rsp2 = 2]&lt;br/&gt;/ontrialend = [if(response == 5)values.rsp2 = 3]&lt;br/&gt;/ontrialend = [if(response == 6)values.rsp2 = 4]&lt;br/&gt;/ontrialend = [values.counter = values.counter + 1]&lt;br/&gt;/ontrialend = [values.rt2 = trial.response1first.elapsedtime]&lt;br/&gt;/ontrialend = [values.timeleft = values.timeleft - trial.response1first.elapsedtime]&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial response1second&amp;gt;&lt;br/&gt;/ontrialbegin = [values.trialstarttime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/ontrialbegin = [values.tasktimetrue = expt.FaceSequenceTask.elapsedtime]&lt;br/&gt;/ontrialbegin = [values.tasktime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/stimulustimes = [1=onesecond]&lt;br/&gt;/ontrialbegin = [trial.response1second.timeout = values.timeleft]&lt;br/&gt;/validresponse = (3,4,5,6)&lt;br/&gt;/responsetrial = (4, response2third)&lt;br/&gt;/responsetrial = (5, response3third)&lt;br/&gt;/responsetrial = (6, response4third)&lt;br/&gt;/ontrialend = [if(response == 3)values.rsp3 = 1]&lt;br/&gt;/ontrialend = [if(response == 4)values.rsp3 = 2]&lt;br/&gt;/ontrialend = [if(response == 5)values.rsp3 = 3]&lt;br/&gt;/ontrialend = [if(response == 6)values.rsp3 = 4]&lt;br/&gt;/ontrialend = [values.counter = values.counter + 1]&lt;br/&gt;/ontrialend = [values.rt3 = trial.response1second.elapsedtime]&lt;br/&gt;/ontrialend = [values.timeleft = values.timeleft - trial.response1second.elapsedtime]&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial response1third&amp;gt;&lt;br/&gt;/ontrialbegin = [values.trialstarttime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/ontrialbegin = [values.tasktimetrue = expt.FaceSequenceTask.elapsedtime]&lt;br/&gt;/ontrialbegin = [values.tasktime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/stimulustimes = [1=onethird]&lt;br/&gt;/ontrialbegin = [trial.response1second.timeout = values.timeleft]&lt;br/&gt;/validresponse = (3,4,5,6)&lt;br/&gt;/responsetrial = (4, response2fourth)&lt;br/&gt;/responsetrial = (5, response3fourth)&lt;br/&gt;/responsetrial = (6, response4fourth)&lt;br/&gt;/ontrialend = [if(response == 3)values.rsp4 = 1]&lt;br/&gt;/ontrialend = [if(response == 4)values.rsp4 = 2]&lt;br/&gt;/ontrialend = [if(response == 5)values.rsp4 = 3]&lt;br/&gt;/ontrialend = [if(response == 6)values.rsp4 = 4]&lt;br/&gt;/ontrialend = [values.counter = values.counter + 1]&lt;br/&gt;/ontrialend = [values.rt4 = trial.response1third.elapsedtime]&lt;br/&gt;/ontrialend = [values.timeleft = values.timeleft - trial.response1third.elapsedtime]&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial response1fourth&amp;gt;&lt;br/&gt;/ontrialbegin = [values.trialstarttime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/ontrialbegin = [values.tasktimetrue = expt.FaceSequenceTask.elapsedtime]&lt;br/&gt;/ontrialbegin = [values.tasktime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/stimulustimes = [1=onefourth]&lt;br/&gt;/timeout = values.timeleft&lt;br/&gt;/ontrialend = [values.counter = values.counter + 1]&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial response2first&amp;gt;&lt;br/&gt;/ontrialbegin = [values.trialstarttime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/ontrialbegin = [values.tasktimetrue = expt.FaceSequenceTask.elapsedtime]&lt;br/&gt;/ontrialbegin = [values.tasktime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/stimulustimes = [1=twofirst]&lt;br/&gt;/ontrialbegin = [trial.response2first.timeout = values.timeleft]&lt;br/&gt;/validresponse = (3,4,5,6)&lt;br/&gt;/responsetrial = (3, response1second)&lt;br/&gt;/responsetrial = (5, response3second)&lt;br/&gt;/responsetrial = (6, response4second)&lt;br/&gt;/ontrialend = [if(response == 3)values.rsp2 = 1]&lt;br/&gt;/ontrialend = [if(response == 4)values.rsp2 = 2]&lt;br/&gt;/ontrialend = [if(response == 5)values.rsp2 = 3]&lt;br/&gt;/ontrialend = [if(response == 6)values.rsp2 = 4]&lt;br/&gt;/ontrialend = [values.counter = values.counter + 1]&lt;br/&gt;/ontrialend = [values.rt2 = trial.response2first.elapsedtime]&lt;br/&gt;/ontrialend = [values.timeleft = values.timeleft - trial.response2first.elapsedtime]&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial response2second&amp;gt;&lt;br/&gt;/ontrialbegin = [values.trialstarttime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/ontrialbegin = [values.tasktimetrue = expt.FaceSequenceTask.elapsedtime]&lt;br/&gt;/ontrialbegin = [values.tasktime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/stimulustimes = [1=twosecond]&lt;br/&gt;/ontrialbegin = [trial.response2second.timeout = values.timeleft]&lt;br/&gt;/validresponse = (3,4,5,6)&lt;br/&gt;/responsetrial = (3, response1third)&lt;br/&gt;/responsetrial = (4, response2third)&lt;br/&gt;/responsetrial = (5, response3third)&lt;br/&gt;/responsetrial = (6, response4third)&lt;br/&gt;/ontrialend = [if(response == 3)values.rsp3 = 1]&lt;br/&gt;/ontrialend = [if(response == 4)values.rsp3 = 2]&lt;br/&gt;/ontrialend = [if(response == 5)values.rsp3 = 3]&lt;br/&gt;/ontrialend = [if(response == 6)values.rsp3 = 4]&lt;br/&gt;/ontrialend = [values.counter = values.counter + 1]&lt;br/&gt;/ontrialend = [values.rt3 = trial.response2second.elapsedtime]&lt;br/&gt;/ontrialend = [values.timeleft = values.timeleft - trial.response2second.elapsedtime]&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial response2third&amp;gt;&lt;br/&gt;/ontrialbegin = [values.trialstarttime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/ontrialbegin = [values.tasktimetrue = expt.FaceSequenceTask.elapsedtime]&lt;br/&gt;/ontrialbegin = [values.tasktime = expt.FaceSequenceTask.elapsedtime - values.taskstart]&lt;br/&gt;/stimulustimes = [1=twothird]&lt;br/&gt;/ontrialbegin = [trial.response2third.timeout = values.timeleft]&lt;br/&gt;/validresponse = (3,4,5,6)&lt;br/&gt;/responsetrial = (3, response1fourth)&lt;br/&gt;/responsetrial = (4, response2fourth)&lt;br/&gt;/responsetrial = (5, response3fourth)&lt;br/&gt;/responsetrial = (6, response4fourth)&lt;br/&gt;/ontrialend = [if(response == 3)values.rsp4 = 1]&lt;br/&gt;/ontrialend = [if(response == 4)values.rsp4 = 2]&lt;br/&gt;/ontrialend = [if(response == 5)values.rsp4 = 3]&lt;br/&gt;/ontrialend = [if(response == 6)values.rsp4 = 4]&lt;br/&gt;/ontrialend = [values.counter = values.counter + 1]&lt;br/&gt;/ontrialend = [values.rt4 = trial.response2third.elapsedtime]&lt;br/&gt;/ontrialend = [values.timeleft = values.timeleft - trial.response2third.elapsedtime]&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;.&lt;br/&gt;.&lt;br/&gt;.&lt;br/&gt;etc..&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Any suggestions on the best way to do this? &amp;nbsp;Currently my code works, but if the participant presses the same button twice in a row, then the trial advances and they will not have the ability to order each of the four faces. &amp;nbsp; &amp;nbsp;Apologies of this is unclear, I can post the code in full if needed.&lt;br/&gt;&lt;br/&gt;Thanks!&lt;br/&gt;Dylan.&amp;nbsp;&lt;br/&gt;&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="22243"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;You can achieve this using /isvalidresponse and a global variable (a &amp;lt;values&amp;gt; entry) that stores the previously clicked responses. See e.g. &amp;lt;trial clicktrial&amp;gt; in this example:&lt;br/&gt;&lt;a href="https://www.millisecond.com/forums/FindPost18371.aspx"&gt;https://www.millisecond.com/forums/FindPost18371.aspx&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;The crucial parts are&lt;br/&gt;&lt;br/&gt;&amp;lt;trial clicktrial&amp;gt;&lt;br/&gt;/ stimulusframes = [1=selectedcorner, debug]&lt;br/&gt;/ validresponse = (c1,c2,c3,c4,c5,c6,c7,c8,done)&lt;br/&gt;&lt;strong&gt;/ isvalidresponse = [!contains(values.responsestorage, trial.clicktrial.response)]&lt;/strong&gt;&lt;br/&gt;/ inputdevice = mouse&lt;br/&gt;&lt;strong&gt;/ ontrialend = [values.responsestorage = concat(values.responsestorage, trial.clicktrial.response)]&lt;/strong&gt;&lt;br/&gt;..&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;i.e. &lt;br/&gt;&lt;br/&gt;/ isvalidresponse = [!contains(values.responsestorage, trial.clicktrial.response)]&lt;strong&gt;&lt;br/&gt;&lt;br/&gt;&lt;/strong&gt;the response is only considered valid if the given response is _not_ already contained in values.responsestorage&lt;br/&gt;&lt;br/&gt;and &lt;br/&gt;&lt;br/&gt;/ ontrialend = [values.responsestorage = concat(values.responsestorage, trial.clicktrial.response)]&lt;strong&gt;&lt;br/&gt;&lt;br/&gt;&lt;/strong&gt;adds the given response to the value.&lt;br/&gt;</description><pubDate>Tue, 08 Aug 2017 10:32:50 GMT</pubDate><dc:creator>Dave</dc:creator></item></channel></rss>