Script Author: Katja Borchert, Ph.D. (katjab@millisecond.com), Millisecond
Created: January 27, 2025
Last Modified: January 15, 2025 by K. Borchert (katjab@millisecond.com), Millisecond
Script Copyright © Millisecond Software, LLC
This script implements a 'shooting' task similar to the one described by Rogers et al (2024A). 'Shooting' tasks can be used to train and measure people's precision and speed in selecting targets on screen with a computer mouse. This 'shooting' game uses static targets (aka 'nonmoving' targets) only. The overall time of the task is time-limited with a variable number of targets (depends on performance)
The default setting of the game uses proportional screens, however, the game setup can easily be changed to absolute screen measurements under section 'Defaults'.
Rogers EJ, Trotter MG, Johnson D, Desbrow B and King N (2024A). Caffeine improves the shooting performance and reaction time of first-person shooter esports players: a dose-response study. Front. Sports Act. Living 6:1437700. doi: 10.3389/fspor.2024.1437700
Rogers EJ, Trotter MG, Johnson D, Desbrow B and King N (2024B). KovaaK’s aim trainer as a reliable metrics platform for assessing shooting proficiency in esports players: a pilot study. Front. Sports Act. Living 6:1309991. doi: 10.3389/fspor.2024.1309991
KovaaK’s shooting tasks: https://store.steampowered.com/
2 minutes
Participants see a number of static targets (max: 6) in a specific target area on the screen. They are asked to click on the targets as fast as possible with their left computer mouse button and hit as many as possible within a certain time frame (e.g. 1 minute). In the default game setup, the hit target immediately reappears in a new location, so that the number of targets are always constant. In a variant, the targets only reappear once all targets have been successfully hit.
Researchers can select the size of the target placement area, the size of the targets, the number of targets on screen (up to 6), whether targets immediately reappear, the number of rounds to play, and the duration of each game round. In addition, the game can be played with an optional practice session. Check section Editable Parameters for more editable design settings.
The default setting of the game uses proportional screens, however, the game setup can easily be changed to absolute screen measurements under section 'Defaults'.
(1) Intro
(2) Practice (Optional, see section 'Editable Parameters')
- default timing is 30s
- same set up as during the test trials (with the addition of the word 'Practice' on screen)
(3) Test
Default set up:
- 1 round for 1 minute
- 6 targets on screen, targets reappear immediately
the targets appear 500ms after the participants mouse cursor gets dropped off within the target placement
area (this happens as the the start button that needs to be pressed is located within that area)
provided by Millisecond
The room image was downloaded from https://pixabay.com/
and edited in such a way to result in three images with different target area sizes:
1) 'room3.png' (800px x 600px) was enlarged to be a (1200px x 900px) images and then cut down again to (800px x 600px) -> room2.png
2) 'room2.png' (800px x 600px) was enlarged to be a (1200px x 900px) images and then cut down again to (800px x 600px) -> room1.png
provided by Millisecond - can be edited in script 'shootingtask_rogers_instructions_inc.iqjs'
File Name: shootingtask_rogers_summary*.iqdat
| Name | Description |
|---|---|
| inquisit.version | Inquisit version number |
| computer.platform | Device platform: win | mac |ios | android |
| computer.touch | 0 = device has no touchscreen capabilities; 1 = device has touchscreen capabilities |
| computer.hasKeyboard | 0 = no external keyboard detected; 1 = external keyboard detected |
| display.refreshRate | The refreshrate of the current display (in Hz) |
| startdate | Date script was run |
| starttime | Time script was started |
| subjectid | Assigned subject id number |
| groupid | Assigned group id number |
| sessionid | Assigned session id number |
| elapsedtime | Time it took to run script (in ms); measured from onset to offset of script |
| completed | 0 = Test was not completed 1 = Test was completed |
| parameters.numberOfRounds | Number of test rounds to run |
| parameters.roundTimeoutMS | Timeout (in ms) for each round |
| parameters.targetAreaSize | The selected targetAreaSize (1=biggest; 2=medium; 3=smallest) |
| overallAttempts | The number of clicks on the screen (number of 'hit' attempts) |
| overallHitCount | The number of successful hits |
| overallHitRate | The overall hitRate |
| score | The final score = overallHitCount*overallHitRate (see Rogers et al, 2024A, p.4) |
| overallRT | Mean response time across hits and misses calculated as: complete testDuration in ms/overallAttempts Example: overallRT = 550ms => on average a click response was made roughly every 550ms across the entire test. |
| overallHitRT | Mean hit response time calculated as: [complete testDuration in ms]/overallHitCount Example: overallHitRT = 850ms => on average a hit response was made roughly every 850ms across the entire test. |
File Name: shootingtask_rogers_raw*.iqdat
| Name | Description |
|---|---|
| build | Inquisit version number |
| computer.platform | Device platform: win | mac |ios | android |
| computer.touch | 0 = device has no touchscreen capabilities; 1 = device has touchscreen capabilities |
| computer.hasKeyboard | 0 = no external keyboard detected; 1 = external keyboard detected |
| display.refreshRate | The refreshrate of the current display (in Hz) |
| date | Date the session was run |
| time | Time the session was run |
| subject | Participant ID |
| group | Group number |
| session | Session number |
| parameters.numberOfRounds | Number of test rounds to run |
| parameters.roundTimeoutMS | Timeout (in ms) for each round |
| parameters.targetAreaSize | The selected targetAreaSize (1=biggest; 2=medium; 3=smallest) |
| blockcode | The name the current block (built-in Inquisit variable) |
| blocknum | The number of the current block (built-in Inquisit variable) |
| trialcode | The name of the currently recorded trial (built-in Inquisit variable) |
| trialnum | The number of the currently recorded trial (built-in Inquisit variable) trialnum is a built-in Inquisit variable; it counts all trials run even those that do not store data to the data file. |
| roundCounter | The current round |
| attemptsPerRound | Number of attempted hits in the current round |
| hitsPerRound | Number of hits in the current round |
| response | The response of participant (selected area) |
| resp | "hit", "miss", "TO" (=timeout) |
| correct | Correctness of response (1 = correct (hit), 0 = error) |
| latency | Response latency (in ms); measured from: onset of trial |
| respTimestamp | The timestamp of the current response (in ms) relative to the onset of the script |
The procedure can be adjusted by setting the following parameters.
| Name | Description | Default |
|---|---|---|
Color Parameter |
||
| canvasColor | Display color of the actively used portion of the screen (the 'canvas') if set to a color other than the screenColor, you can distinguish the active canvas from the inactive portion of the screen | black |
| screenColor | Color of the screen not used by the canvas ('inactive screen') | black |
| defaultTextColor | Default color of text items | black |
Difficulty: Combination Of Targetwidthpct And Roompic |
||
| targetWidthPct | The size of the targets relative to the selected targetAreaSize targetArea1: ~75% of the width of the canvas => 4%*75%*canvasWidth targetArea2: ~50% of the width of the canvas => 4%*75%*canvasWidth targetArea3: ~35% of the width of the canvas => 4%*75%*canvasWidth the bigger the size of the targets, the easier it'll be to hit them | 4% |
Design |
||
| targetAreaSize | 1 = 'macroshooting' (room1.png => 'closer to shooting area'); ~75% of the width of the canvas 2 = medium (room2.png); ~50% of the width of the canvas 3 = 'microshooting' (room3.png => 'farthest from shooting area'); ~35% of the width of the canvas | 1 |
| numberOfRounds | The number of game rounds to be played | 1 |
| nrTargetsOnScreen | The number of targets on screen (Range: 1-6) | 6 |
| eraseTargetsAfterHit | True: the targets get erased after a hit and only reappear as a group once all targets have been eliminated false: each target that is hit, immediately reappears in a random location on the screen | false |
| showTimer | True: a timer is presented on screen during the duration of each game block false: no timer is presented to participants | true |
| showOngoingHitStats | True: the hitting stats (number of hits as well as hitIntervals) are presented to participants during the game false: no hitting stats are presented during the game | true |
| provideFinalFeedback | True: performance feedback is provided after the game is over false: performance feedback is not provided after the game is over | true |
Optional Practice Session |
||
| runPracticeSession | True: a practice session precedes the test game rounds false: no practice session is run | true |
Timing Parameters |
||
| roundTimeoutMS | The time (in ms) participants have to hit as many targets as possible during each game round | 10000 |
| practiceTimeoutMS | The time (in ms) participants have to hit as many targets as possible during the practice round | 10000 |