Introduction
The target scoring sub-system allows the saving of prim setups per seat, and for users to be tested on how accurately and quickly they can duplicate a saved setup from a given starting point.
Save and load by seat
In order to make it easier to use the system (and to satisfy the internal requirements), the facility to save and load prim setups per seat was added. This appears outwardly identical to the general save/load functionality, but works on "!save" and "!load" buttons with a seat number.
Cards that are saved by seat-specific saves have the format: "S<seat number>/<name>". These are ignored by the normal "!list" button function, and cannot be loaded as non-seat-specific saves.
Components of scoring system
In addition to save and load buttons, which are only necessary during setup, two more buttons are required per seat: "!teststart <card1>" and "!testend <card2>".
In that example, the "teststart" button loads <card1> (setting out the prims as specified in that card) and starts the timer for the user on that seat. The "testend" button stops the timer, compares the positions of the prims against those in <card2>, calculates a score, and sends the data to scoreboards.
Another new button type is "!scoreclear". This has no seat number, and clears the scoreboards of all data.
Scoreboards are identical to those used by the racing system. You can have as many of these in the region as necessary.
The ML script should be at least v0.64, and a new script "ML scoreboard interface" was introduced. This new script handles the setup of the scoreboard data.
Setting up an example
To create a system that uses this (the test will be called "example"), follow the following steps for each seat if there are multiple seats:
Add a "!save example" button with the seat number as description.
Add buttons "!teststart example_before" and "!testend example_after", again with the seat number (if any) as descriptions.
Create and set up the prims necessary for the test, in the configuration required for the start of the test.
Use the save button to create notecard "example" - in the case of multiple seats, it will actually be called "S<s>/example", where <s> is the seat number.
Rename the notecard as "S<s>/example_before".
Now move the prims into the target positions, and save again.
Rename this notecard as "S<s>/example_after".
Also, for convenience you can add a "!scoreclear" button (no seat number) to be able to clear the scoreboards at any time.
Note that "*_before" and "*_after" are only suggestions - the notecards can be called anything.
Using the system
Having signed into the seat (if necessary), the participants can click on the "teststart" button. After a short delay, their name will appear on the scoreboard. Meanwhile, they can use the ML to rearrange the prims as necessary, clicking the "testend" button when they've finished. Their name will then be updated on the scoreboard with their score and the time they took in seconds.
Scoring
The more accurate the user's reproduction of the target prim arrangement, the lower their score.
Total scores are calculated as the sum of a score calculated for each prim, that score being the deviation of position as a percentage of the magnitude of the prim's scale (size).
In this way, greater accuracy is expected for smaller prims - in other words, the accuracy scales with the size of the test.
Technical considerations
Scoreboard delays
When data is sent to the scoreboards, it is batched up and only sent when there has been no change for three seconds. This is to prevent the scoreboards from constantly refreshing the display texture, which would be irritating.
External handling of ML commands
The ML main script now sends commands received from buttons or through chat out as link messages. This enables, for example, the "scoreclear" command to be implemented without change to the ML script - the scoreboard interface script receives and interprets that command independently. This may prove useful in future enhancements, effectively allowing the decentralising of processing.