Find the Correct Action


Fixing bugs is one of the best ways of learning. That is my personal experience and I suspect I am not at all unique. Several years ago I solved a problem for a Captivate user, which I will use now for this challenge.

Watch the output

Goal was to show a sequence of images, not all in the same location, by clicking a button. In this case, there are only 4 images. It is looping, you can continue clicking eternally. No multi state objects were used (they didn’t exist yet when I solved this issue):


Possible actions

To understand the meaning of the labels, here is the timeline of the photo-slide:

You’ll see the Preview of two advanced actions, created in CP2019. They both use one user variable v_click which is defined with a default value of 0.

Action A

Action B

Your challenge

  • Which action will be functional: A or B?
  • Why will the non-functional action fail?
  • Could you ‘fix’ the non-functional action?
  • Why is using a shared action not considered to be an alternative.
  • …. other ideas?

Looking forward to your answers….

The post Find the Correct Action appeared first on eLearning.

Custom, Accessible Quiz: Development Highlights

I recently posted a showcase – a Custom, Accessible Quiz. This was a shorter, rewritten and rebranded version of a fully customized, yet accessible quiz I created for a client.
In this article I want to share some highlights of the development process. If you haven’t tried it already, it will help to understand the rest of this article if you try out the quiz before reading further. It’s at:

Multiple Introductions

Multiple text for introductions overlaid on a single slide.

In the course, there are two possible scenarios in which a learner may start the quiz:

  • A first attempt;
  • Re-taking after a failed attempt.

For both scenarios, I used a single slide to communicate the introduction to the quiz. Structurally, this means that the quiz always starts from a single location. Through experience, I have learned that this simple decision will help to simplify any debugging that might be necessary later as it reduces the number of non-essential branches in the course.

Advanced action showing how cpQuizInfoAttempts is used to determine which text to display.

For both scenarios, I used a single slide to communicate the introduction to the quiz. Structurally, this means that the quiz always starts from a single location. Through experience, I have learned that this simple decision will help to simplify any debugging that might be necessary later as it reduces the number of non-essential branches in the course. To determine which scenario was in play, I used Captivate’s cpQuizInfoAttempts system variable to track whether the quiz had previously been attempted. cpQuizInfoAttempts reports the number of times a quiz has been attempted; If the quiz has not yet been taken, its default value is zero.

Learn more about Captivate’s system variables at:

Custom Options

I created the custom options using Smart Shapes as buttons. Each option has only two states: Normal and Visited.

The highlighted True button for question 1 with its Smart Shape properties visible in the Property Inspector.

In terms of accessibility, this was perhaps one of the trickier areas of the quiz because unlike regular buttons, smart shapes are not automatically accessible. It was therefore necessary to add Accessibility Names to each state.

Quizzing Logic

The quiz contains only accessible question-types: true or false, multiple-choice (pick one, and select all that apply) and fill-in-the-blanks.
I created separate advanced actions to implement the logic for each of these question types, and then saved them as shared actions so that I could reuse the same advanced action for multiple questions containing similar objects.

A shared action
In each question, every option has an advanced action associated with it which defines the following:

  • The score to assign to the option – 10 for the correct answer, 0 otherwise (in most cases. Select all that apply works a little differently).
  • Any options that must be deselected once this specific option is selected (for true or false and pick one question types).
  • The specific variable that should be updated when at least one option has been selected –to indicate that it is time to enable the Submit button.

It’s also worth mentioning that every question slide also has an On Enter advanced action that resets all the options to their Normal state and clears the score from the Submit button before the slide is displayed –-if the quiz is being retaken.

A Little Branching

As I mentioned earlier, through experience, I have learned that it is generally best to limit branching to only when necessary to achieve pedagogical objectives i.e. when distinct structural paths need to be defined. This situation fits that definition in that after the learner has completed the quiz, they are automatically directed along one of two distinct paths:

  • Pass the quiz and go to the course conclusion;
  • Fail the quiz and go back to the beginning of the quiz (to retake it).

So, this was a perfect situation to implement a little branching by creating a conditional advanced action which determined where to direct the learner based on the outcome of the quiz. It did this by determining which Next button and message group to display to the learner on the Quiz results slide.

The Branching View showing the branches from the Test Results slide.

Similar to the introduction, I used On Enter to attach the advanced action to the slide. This is the branch you can see in the image.

The post Custom, Accessible Quiz: Development Highlights appeared first on eLearning.

Captivate ‘Advanced Action’ ?

When Button is pressed, I want to perform three actions… and planning to have few second pause between actions written in ‘Advanced Action Script’. ‘Advanced Action’ script runs all command, But no Pause happening.  Why Pause is not working in Captivate ‘Advanced Action’ ?

The post Captivate ‘Advanced Action’ ? appeared first on eLearning.

Issue with Advanced Actions not showing.


I am having an issue where a button isn’t doing what the advanced action is telling it to do. Basically I have created an interactive glossary where letters unlock once a Module is viewed, for example if I am viewing Module 1.1 this would reveal 10 words in the

glossary. The glossary is built as a text box with various states for each letter, for letters such as C there is multiple words that need to be shown at different points.

To make this work I have used the module selection buttons to assign each letter variable with 1 as you can see below.

The learner then needs to click on the letter which will tell the glossary text box what state it needs to be in, as you can see below. For some reason this advanced action isn’t working when I have clicked the button and I can’t seem the figure out why. I have clicked on the Module selection button to increment the variable ‘C’ so when I click on the button (which has the below advance action) the state changes aren’t going through. I have tried using if statements instead of while and tried creating a fresh action but neither seem work.

Can anyone help please?

The post Issue with Advanced Actions not showing. appeared first on eLearning.

What is Branch Aware?


Branch aware feature appeared with Captivate 6.  I created a blog post to explain it, but I regularly meet users who are still unaware of its existence, or its possibilities. So I decided to refurbish that old post, and create a new example movie with CP2019. You have seen a first version of that movie in my recent post about localisation with CSV import. That post discusses the workflow to create quiz slides in different languages in the same project. The example did use the Branch aware feature, but some of the features were not fully localised: the score slide was the default score slide which is in English since I am using a version in that tongue.

In this post I will also talk a lot about the quizzing system variables. If you didn’t download my explanatory table yet, please do so. You’ll find a link in this blog post: Creative with Quizzing variables.

What is Branch Aware?

Look at the Advanced Interaction panel of the example movie. It gives you a lot of information, not only about the events and the triggered actions, but also about all scored objects, including question slides.

You see that the total score is set at 60 points, result of the 9 graded questions in the file. For each of those graded slides both the individual score and the penalty are shown. There are also 3 Survey slides, without a score. Those values are also stored in quizzing system variables:

  • Total score in cpQuizInfoTotalQuizPoints
  • Score per question in cpQuizInfoPointsPerQuestionSlide (reusable variable)
  • Penalty per question in cpQuizInfoNegativePointsOnCurrentQuestionSlide (reusable variable)

If you don’t activate the option ‘Branch Aware in Quiz Preferencesn Settings (see screenshot later on), the default score slide will show 60 as maximum score. If the learner takes only one branch (language) of the quiz, the percentage (cpInfoPercentage) will be calculated as the obtained score (cpQuizInfoPointsscored) divided by that maximum score of 60. Same with the number of correct answers and total number of answers. This means the learner would be very confused, and never succeeds in that case. Reason is that those system variables are fixed when the course starts, I label them as being ‘static’.

When turning on Branch Aware, the system variables become ‘dynamic’, they will be changed on runtime based on the branch, thse slides visited by the learner. In this example movie that has been my choice: if the learner succeeds in one branch (maybe Dutch) the maximum possible score will be changed to 20, the percentage will be calculated with that maximum and the obtained score and the learner will see correct data on the score slide, can reach the passing score. No problem if a trilingual learner did visit the three branches, since the variables are dynamic, he will be judged on the maximum score of 60. This is the setup of Quiz Preferences, Setting for the example movie:

Example Movie


Setup Project

The project has 16 slides: Title slide, Dashboard slide, 3 groups each with 4 questions, the default score slide and a custom score slide. This is the Filmstrip, I expanded the group ‘Dutch questions’:

Dashboard slide (slide 2)

I will not explain the effects on the dashboard slide, where I used a loop action (While) triggered by the On Enter event.

I created a user variable v_all The four buttons on this slide trigger a shared action which has two parameters: which value has to be assigned to the variable (1=All, E=English, D=Dutch, F=French) and the slide to jump to. Here is the instance for the button ‘Nederlands’ (Dutch):

Start slide of question groups Dutch/French

On all quiz slides a shape is displayed with info about the obtained score and correct answers so far. That shape, labeled SS_Info is a multistate object. In the Normal state the English version is displayed, there are two more states:  Dutch and French. Switching to the appropriate state is done with the On Enter event of the start slide of the Dutch and the French group. It is a simple action:

Because the project is pure linear, and there is no opportunity to go back, this setup is sufficient.

Last slide of each group (Survey slide)

The event ‘After Survey’ is used to navigate to the appropriate score slide. For the learners who did take the three branches, the default score slide (ScoreDefault = slide 15) is used, for the others the custom score slide 16. The same advanced action ‘LastAct’ can be used for the last slide in each group. If that last slide was a normal quiz slide, not a Survey slide, the same action could be used but for both Success and Last Attempt events.

Custom Score slide (16)

On this slide I used several multistate objects: where I added two states (Dutch/French) to the Normal state which has the English text. The On Enter event of this slide is used to trigger this action which will take care of showing the correct language information, and of the appearance of the Tropy image if the learner has passed.

One warning: the maximum score on the custom score slide is not created by using a system variable, but typed in (can also be calculated, as I explained in an older post about intermediate score slides). The variable cpQuizInfoTotalQuizPoints will not have changed from the original 60 points which took into account all quiz slides. It is strange because cpInfoPercentage where that maximum score is used, is correctly displayed as is  cpQuizInfoPointsscored.


I know that more improvements are possible, but blog post is already pretty long. If you really want to show a custom progress indicator on the quiz slides, maybe you’ll find some inspiration in this old post. 

If you allow backwards navigation, even give the opportunity to choose another branch on the dashboard, there will be some more editing needed. This article was meant to explain what happens when using the Branch Aware feature. Hope it helps some people.

The post What is Branch Aware? appeared first on eLearning.

Make Drag&Drop behave like any question

Use Case

Drag&Drop slides are often used as another type of questions. But its behavior is not totally the same. The typical two-step Submit process is missing:

  1. Tap the Submit button, feedback messages appear. One of them is the Hint message “You must answer the question to continue’.  There is a Retry message possible if you have multiple attempts on question level. There is one success message which has also the invitiation ‘Click on the slide or press Y” to start the second step of the Submit process. Same for the Failure message. You can have multiple failure messages (up till 3) if you have more attempts. During this first step the playhead remains paused at the pausing point (default time is at 1.5sec but you could have moved it).
  2. After clicking the slide or pressing Y, with one attempt, the playhead is released and the actions ‘On Success’ or ‘Last Attempt’ are done.

The Review situation is also different for D&D slides, compared with the default quiz slides. For that situation I already posted a blog in the past. This post is meant to answer a question in this thread

Quote “I am trying to make the D&D a quiz question and behave just like the other questions with “you must answer” if nothing is done, Correct or Incorrect when answered and only one attempt.

A while ago I already blogged about a solution that is showing the ‘You must answer’ in a dynamic failure message. That solution required to offer at least two attempts, and didn’t mimick the whole Submit process as wanted here.

My Solution

This is the screenshot of the Timeline of the Drag&Drop slide which I created as test case: 4 drag sources (generic names ending on 4,5,6,7 and one drop target – SmartShape_8.


I created two user variables:

  • v_correct: with a default value of 0. This variable will be incremented by 1 for each correct drag action. In the use case there are maximum 2;
  • v_wrong: also with a default value of 0. It will track the wrong drag actions in a similar way.

Changes to the Drag&Drop setup

  • Originally the score to be added to the Quiz total was linked to the Drag&Drop slide (Reporting section). I took that score away.
  • The default Submit button is dragged off the stage, will be replaced by a custom shape button (in timeline it is named SB_Submit.
  • The messages indicated as Success Caption and Failure Caption (although they are often shapes) were taken away by unchecking them in the Actions tab.
  • The pausing point (not visible on the Timeline) may remain, although it is not really necessary since you’ll have a Custom Submit button which can have a pausing point. If you keep both pausing points, they should be at the same time.
  • All Object Actions, normally set to No Action have been changed to an Increment command. For the wrong drag actions the variable v_wrong is incremented, for the correct drag actions the variable v_correct. See screenshot below:

Feedback messages (multistate)

I replaced the feedback messages by one shape with four states:

The Normal state is invisible to the user (no fill, no stroke). The other states Hint, Incorrect and Correct have exactly the same style as in the default messages in quiz slides. Too bad that you cannot choose the style, because Quizzing styles are not available for non-quiz objects. Weird, do not know the reason for this limitation.

Interactive Objects

I already mentioned the custom Submit Button which you can give exactly the same style as the Quiz Button style (which you cannot choose from the list). That shape button in the timeline screenshot shows a pausing point, at the same time as the pausing point of the D&D slide. It was not really necessary but I prefer seeing the pausing points, which is not the case for the default one in D&D slides. The Submit button will trigger an advanced or shared action.

In the Timeline you also see two click boxes CB_Wrong and CB_Correct. Those click boxes are NOT visible in output. They do not have any feedback messages, and cover the whole slide. Difference between both:

  • CB_Wrong has no score attached to it.
  • CB_Correct has the score you  want to attach to the D&D question.

The reason for those click boxes is explained in a very old blog post (where I used Buttons) under this link.

Report Custom Questions – part 2

Both click boxes allow also to use the shortcut key ‘y’.

Advanced Action triggered by SB_Submit

When the Submit button is clicked or tapped, three possible situations can occur:

  1. The learner has not dragged any drag source. In that case both variables v_wrong and v_correct will have kept their default value 0. The Hint state should appear.
  2. The learner has dragged sources but at least one was wrong. In that case the variable v_wrong will have a value greater than 0. Not only the InCorrect state of the message shape has to appear but also the click box which has no score, CB_Wrong.
  3. The learner has done only correct drag actions, no incorrect actions.   The Correct state has to appear and the click box which has a score CB_Correct.

Here is the Preview of that advanced action:


The proposed solution can not be used in a responsive project created with Fluid Boxes because of its strict 2-dimension rule: you cannot stack objects in the same location as is the case here for the click boxes (which are amongst the forbidden objects in Fluid Boxes). In that case you will have to replace them by buttons which are not covering up any other object.

If you want to use this workflow in more projects, I would convert the advanced action to a shared action, and create some extra object styles in a custom theme: styles for the messages and for the button. The conversion to shared action would be an interesting use case, because of the many literals… maybe next blog.

The post Make Drag&Drop behave like any question appeared first on eLearning.

Unusual Use of Shared Actions


It is not a secret that I am a big fan of Shared Actions. It is very rare that a project I’m working on is not using at least one shared action. From what I hear and read, lot of you don’t realize how much time you can save with them. This short article will offer some ideas where Shared Actions are used for (maybe) a totally different situation than you expect.

1. Creation of Variables

If you are reading this post, it is very likely that you use system variables as well as user variables. Do you create user variables in each project, and include a proper description and eventually default values?  I have a list of variables which I use very often in projects, here are some examples:

  • v_null: an empty variable used to check if Text Entry Boxes remained empty after a learner clicked its Submit button, or to reset the variable associated with a TEB.
  • v_counter: as the name tells to track a number of clicks, attempts….
  • v_visit: for situations where the content of a slide has to be different on a later visit, you want to track if the slide has been visited
  • v_one, v_two, v_three….: number of variables that can be used for different use cases, like tracking clicks on hotspots, finishing chapters…

Knowledge fact: when you import a shared action in another project, variables not defined as parameters, will be created including the description and default value.

I have a shared action with a list of Assign commands, one for each of those often used variables. It doesn’t matter what you assign at all. I drag that shared action from my external Library with shared actions to each new project. Variables are ready for use, even as parameters in other shared actions.

2. Shared Action without Parameters

Sounds very strange, because the reusability of a shared action is based on parameters? I already gave a first example of such a parameter-less SA under 1.  It is much safer and easier to transfer a shared action to another project than an advanced action. You use the shared action directly or convert it to an advanced action if you prefer (maybe for more editing). Here is an example:

I use this action to calculate the reference time in seconds (to be used later in calculations) of a frame, mostly the first or last frame of a slide. Defined as a shared action, it needs no parameters. Once dropped into the project Library, I can use it for any frames where I want a reference time.

3. Shared Action as Template

You can copy an object or a slide, which has advanced actions attached to a new project. But that is not always working great. If you have navigation in the advanced action ‘Jump to Slide’, that command will often be reset to ‘Continue’ if that slide is not found. Same for objects, variables etc.

Less known is that any shared action can be used as a template to create an advanced action. In the top left of the Advanced Actions dialog box, you are used to see ‘Blank’ which is the default template for an action. Open the dropdown list, and you’ll find all shared actions in the project as extra templates:

Choose one of them, you’ll have to fill in the parameters, add a name, edit the commands (delete, add as you want) and save as an advanced action.


Do you use shared actions? Did you like these tips? Do you want to have some training about advanced/shared actions? Personalised training is the best way to get to grip with them.

I love seeing comments on my posts, and promised: you will always get an answer!

The post Unusual Use of Shared Actions appeared first on eLearning.