Link score to attempts in Custom questions


This time a Flemish colleague asked me to help with a Quiz that is very close to my original profession: I'm a civil engineer and this Quiz was about introducting students to technical drawing techniques, more specific, interpretation of Isometric Projection. Back to my roots!

In a recent article I talked about 'Beating the system', trying to make advanced actions easy to manage, to avoid tracking endless numbers of variables by reusing them intelligently (Be a Captivate Ecologist). And of course, I use my favourite shape buttons, either on Master slide or timed for the rest of the project to avoid having a multitude of objects and actions. Last year I presented a webinar about that subject, you can find the recording link in this blog post

Use case description

In the example, which you can watch below, there are two types of custom questions:

  1. Student has to type in a number, after screening a drawing. Originally colleague used a Short Answer Question. This was replaced by a custom question, that uses a Text Entry Box. And for 6.1 users: I limited the entry to the box to numbers only. All questions except the last use this type.
  2. Student has to identify an element in the drawing by clicking on it. Originall a hotspot question, in the custom question I used a click box. This type is used here only in the last question.

For all questions 3 attempts were provided, but the obtained score depends on the attempt:

  1. Correct on first atttempt: score = 3 points
  2. Correct on second attempt: score = 2 points
  3. Correct on last attempt: score = 1 point

Even with the new quizzing features in Captivate 6 this is not possible out of the box. That is the reason why I choose for Custom questions. The score has not to be reported to a LMS, it is more of knowledge check, but the score will be shown to the student at the end.

Colleague also asked to make it possible (for one sequence of questions) for the student to click on a button to have some Help. In this case it was a one-slide Powerpoint animation. I converted the animation to SWF and used it that way.

Moreover colleague wanted to be able to change the passing score. It was quite a challenge but fun as well.


Play with this movie to have an idea about the result. I didn't change the used drawings, nor the imported animation. You'll have to answer 10 questions...

Slides - Master slides

I used the Blank theme, main master slide has a gradient background. For the questions I created 3 master slides, one for each drawing (because they can be used for all questions concerning that drawing).

The first sequence of questions has a Help button with a tooltip. Both button and tooltip are shapes on the master slide Quest1. The shape button navigates to slide 2, which is the Help-slide with the animation. The help-slide will not be visited before the questions, for that sake I configured the button on the Intro-slide to jump immediately to the 3rd slide, which is the first question slide.

On the Help-slide you have a similar duo of shapes: a button and a tooltip (rollover shape). The button gets the user back to Last Slide Visited, to the question slide from which he asked for help.

Objects Timed for Rest of Project

On the first question slide, a lot of objects are timed for the rest of the project because they are reused all the time. Because I needed to be able to control their visibility, they couldn't be put on the master slide. Here is a screenshot of the timeline of that slide, the Text Entry Box was selected and its Properties are visible as well (watch the associated variable v_answer):

From bottom to top you see these objects:

Group Question1: has a text Quest1 and the not to be validated TEBAnswer1. Those objects are timed for the rest of the slide. These objects are visible in output.

Group TxtContainers: with the three possible text containers TxtSuccess, TxtWrong and TxtRetry. Initially they are not visible. I grouped them because it is easier to hide them all together in an advanced action. Those objects are timed for the rest of the project since they can be reused on each question slide. This will also make it possible to use less advanced actions, since they keep always the same name, ID.

Group GrpNext: has a shape button NextBt and a text container TextClickNext; the goal of the text is not only to tell the user what to do, but also to cover up the TEB's, so that they cannot be clicked another time to get the same score again. Why did I choose this instead of disabling the TEB? To disable the TEB a separate advanced action would have been needed, since each TEB has a different name. Whereas my 'cover' workaround allows me to use the same advanced action for every TEB. This group is initially invisible, and timed for the rest of the project.

Total: the banner with the obtained score, visible and timed for the rest of the project.


Variable ecology

In this use case I didn't use any system variable, and also deleted all default variables associated with the multiple Text Entry Boxes (9 of them, one for each of the first 9 question slides). I ended up with using only 7 variables. To prove it, here is a screenshot of the variables dialog box:

v_PassScore: will store the minimum percentage required to pass; I assigned a value on entering the first slide, the intro slide, with a simple action. Remember that the colleague requested to be able to change the value.

v_answer: will store the value entered in the TEB's, and is reused on each slide. This means that you have to associate this variable to each TEB to replace the default variable that normally gets the same name as the TEB (Text_Entry_Box_n). A good check: try to delete those default variables in the variable dialog box:  if removing a variable is denied, that means that you forgot to replace it by v_answer. If you are using version 6.1, you can use 'More Options' in the General accordion to limit the entry to Numbers.

v_attempts: reused on each question slide with a default value of 3, will be decremented with each attempt and also serve as question score.

v_correct: will be reused on each question slide, and populated with the correct answer on entering that question slide

v_max: starts with value = 0, not really necessary, but for lazy mathematicians, will be populated with the maximum score that can be obtained. You could also replace it by a literal, a number...

v_perc: starts with value = 0, will be used only on entering the score slide to calculate the percentage based on v_score and v_max

v_score: starts with value = 0, will store the score obtained, and will be incremented after each correct answer, taking into account the number of attempts used for the answer.

Events and Advanced actions

On Enter Slide events

are used both for the Question slides and for the Score slide.
  • Question slides: used to reset and hide what is needed, to calculate the new value of v_max and (only for the TEB-slides) to populate the variable v_answer with the correct number for the TEB-based questions. Here is an example of such a standard advanced action (for the second Question slide). Only the first statement has to be adapted for each TEB-slide.

For the click box slide (hotspot), this action is little bit different, no need to populate v_answer, but the click box has to be enabled (labeled Spot1):

  • Score slide: here a conditional action is needed which has two decisions; the first (Always) will hide unnecessary objects that were displayed for the rest of the project, and will calculate the percentage to be stored in v_perc
    Second decision (Checkup) will check the percentage and show the appropriate group (text + banner) based on that checkup:


Success event for Text Entry Boxes  triggers 'NotValidated'

All TEB's, which are not validated and have only one attempt will trigger the same advanced action, the conditional action NotValidated that has three decisions. The sequence of the decisions is important!

  1. Fout (Dutch for 'Wrong'): this situation occurs when the student has tried to answer 3 times, and didn't succeed to give the correct answer. 

    The correct feedback will appear, the group with the Next button and the coverup text will be made visible and the answer is reset (not really necessary, will also be reset on entering the next slide).
  2. Opnieuw (Dutch for Retry): will occur if the user has already given at least once an incorrect answer but the attempts are not yet exhausted.
     Correct feedback is made visible, variable v_attempts is decremented and v_answer is reset to 0. The last statement is meant to rewind the playhead to appear again before the pausing point of the TEB in its active part so that the student can answer again (see post about micro-navigation)
  3. Correct: whenever the student gives a correct answer. 
    Besides showing the correct feedback and the group GrpNext, you see that I calculated the new score that is immediately shown in the Total shape. Because of the sequence, the number of attempts left at that moment is identical to the score left for the slide.

Success event for Click Box triggers HotspotCorrect

For the hotspot question, I used both the Success and the Failure events for the click box (Spot1). Success event triggers this standard action, that is similar to the last decision Correct in the TEB-action; but here I disabled the click box to avoid the user clicking on it again :

Failure event for Click Box triggers HotspotNOK

The other situations, covered by the two decisions Fout and Opnieuw in the conditional action for the TEB's are now done by this conditional action attached to the Failure event. It has two decisions (since the third is now done by the Success action):

  • Fout (Wrong): if attempts are exhausted and the answer is wrong; very similar to the decision that is labeled the same way for the TEB's, no answer has to be checked here, only the attempts.
  • Opnieuw (Retry): after an incorrect answer, when there is at least one attempt left:



Pretty long article, I'm sorry. But wanted to offer this use case because of the the way I reused both variables and advanced actions. If I had plunged in without any preparation (or with an old version of Captivate) this probably would have led to a multitude of variables and actions.

Would really appreciate any comment, feedback.


Events and (advanced) Actions


If you have been visiting this blog already, you are aware that I'm writing a lot about (advanced) actions because they allow to push Captivate to another level, to create more engaging eLearning assets. 

In previous posts I offered:

  • list with System variables essential in a lot of (advanced) actions
  • list with Statements, the commands you can use in an advanced action, and comparing them with the commands you find in the simple Actions accordion

When helping users who start with creating actions, I often see that novices in this domain are not always aware of the process needed to trigger an advanced action: each action, whether a simple or an advanced one has to be connected to an 'Event', and that is the subject of this article. At the end you'll find a link to a list, describing all the possible events, use cases and tips.

Events - out of the box

Most events that can trigger an action are linked with interactivity, something the user has to do. This is the case for Success/Failure events for (Shape) Buttons, Click Boxes, Text Entry boxes, interactive Widgets but also for Question slides. 

Less known are the actions that can be triggered when a Quiz is completed (Success/Failure).

Also even less known is that a Rollover slidelet has even two events: on Rollover, and on Click. For the events available out of the box with Captivate this is the only rollover available to trigger an action. The backdraw is that you rarely can use both events, because when you use the On Click event you necessarily have to do the rollover as well.

Events that are not linked with interactivity are the slide events: when entering or when exiting a slide, you can have an advanced action to be executed. But not all commands (statements) can be done by such an action (see list).

Often I get the question if an action can be triggered by time or by a frame, but that is not possible for the moment with Captivate. One example: the timer widget will show a popup when time is elapsed, but you cannot execute an action immediately at that point. I have been explaining this in an old article: Timer widget.

Widgets to extend events

Jim Leichliter, aka Captivatepro/CaptivateDev has a free widget for Time Based Actions.   It can be used in some cases, but not as easily as for an 'On Frame' event that is available in Flash for programmers.

InfoSemantics developed a widget that is one of my favourites: the Eventhandler Widget. It is not free but if you are plunging really into advanced actions, please try it out because it can add as many events as you want to any object.

Both widgets are not yet supported for HTML5 output.


You can download the list from this link. I created this table, along with other lists, to use them for the workshop Advanced Actions that I coached at DevLearn 2012. Really hope to be able to do more workshops of that kind, interaction with learners is something I really miss when blogging.

First column (Event) identifies the event, second column (Assign action) shows in which Properties panel (PI) you can indicate the action to be triggered, third column is A Description. When necessary you'll find some comment/use cases in the last column, which also mentions the possible limitations for the event. 

You'll find first a table with events that can trigger only one advanced action, and next a smaller table with those events that can trigger one out of two possible (advanced) actions based on a condition: validated TEB, question slides and Quiz.

I would appreciate if you left some comment in case you find this list useful. Combine it with the lists I mentioned at the beginning: system variables, and statements/commands.

Aggregating results TEB's in Captivate


This use case is an answer to this question on the user forum Aggregate the results of four text-entry-boxes on the same slide. I thought it to be a good illustration of one of my previous recommendations when preparing advanced actions: think about all possible situations. For that reason I'll explain two different scenarios. The example is created in Captivate 6 but can easily be transformed for 5 and 5.5. To make the rewind possible in the example, I used a third scenario that will not be explained. It is the most complicated one, because I couldn't use the system variable cpQuizInfoPointsscored in this case, that variable cannot be reset.


If you read the thread on the user forum, you'll know that four Text Entry Boxes are used to ask validated entries. Each TEB has its own Submit button, and the sequence is not imposed. The user can choose to have one or more TEB's blank, by just clicking on its Submit button. If you want to avoid blank entries, have a look at an old blog post where I explain the work flow to check  that: Where is Null

When all Submit buttons have been clicked, three situations are possible:

  1. a Success text and a button to the Next section if all 4 answers were correct
  2. a Hint text with a choice between two buttons: Review or Next
  3. e Failure text with only a Review button

The example has only 3 slides:

  1. 'Questions' with the 4 entry boxes and the initially hidden text containers and buttons
  2. 'ReviewSection'
  3. 'NextSection'

Play with it to see the different situations (use the Rewind button)

Here is the cheat sheet:

  • TEB1: Brussel, Brussels or Bruxelles
  • TEB2: Dutch or Nederlands
  • TEB3: 3 or three
  • TEB4: 8 or eight

Objects on Questions slide

In the example (Captivate 6) this slide has:

  • 4 TEB's with their associated variable (which I'll not use in the actions) and Submit button; the scenario to be chose depends on the number of attempts you chose here (Action accordion); I unchecked all captions in the Options dialog
  • 4 Questions (Text Captions)
  • Review button (used a shape from button category, added text to it): not visible, triggers simple action to jump to Review section
  • Next button: not visible, triggers simple action to jump to Next section
  • Three texts: Success, Hint, Failure (used shapes - added a character Sarah); not visible


Besides the variables associated with the TEB's, that will store the chosen answer, I created  5 user variables:

  • v_1, v_2, v_3, v_4 with an initial value of 0, will get the value 1 when the user has submitted that TEB; those variables are not necessary in the first scenario
  • v_total: initial value=0, will store the total number of TEB's that have been confirmed by their Submit button

Scenario 1

For this scenario the attempts for all the TEB's are set to 1.This means that the user can click only once on the Submit button, cannot change his mind.

Events and variables 

Each Text Entry Box has two events: On Success and LastAttempt. In this scenario it is possible to trigger the same advanced action TEBCheck by both events and for each TEB. 

I used the variable v_total to count the number of times the Submit button is clicked, each one will only once result in an action because the attempt is set to 1. 

To make it possible to check the number of correct answers, I checked 'Include in Quiz' in the Reporting accordion with score left to 1point. That way the system variable cpQuizInfoPointsscored can be used to check the number of correct answers.

Advanced Action (conditional) TEBCheck

This action has 4 decisions (see screenshots in Gallery) - ELSE is never used

  1. Always: is a mimicked standard action, to increment v_total
  2. TextCorrect: checks if both variables v_total AND cpQuizInfoPointsscored have the value 4 which means that all TEB's have been submitted and all answers were correct. Then the appropriate text and the Next button are made visible (I also had to make the actor SaraSmall visible)
  3. TextHint: checks if all TEB's have been submitted (v_total =4) AND if the score (cpQuizInfoPointsscored) equals 3. In that case the appropriate text, the Next and the Review will get visible
  4. TextFailure: checks if all TEB's have been submitted (v_total =4) AND if the score (cpQuizInfoPointsscored) is less than 3. The appropriate caption will get visible and the Review button

There is no need for ELSE, if none of the conditions is fulfilled the user can just go on submitting TEB's because in that case v_total is not yet equal to 4. Also there is no need to hide text/buttons because only one of the decisions can result in a positive answer, they are mutually exclusive.

Note: I wanted to keep this scenario as simple as possible, only one advanced action that is triggered by 8 events (Success, LastAttempt for each TEB). Real programmers could blame me for this, because for the LastAttempt, which is in reality a Failure event, the second decision TextCorrect can never be fulfilled! So for the purist: create two different advanced actions, and for the LastAttempt action you can delete the second decision, which results in 3 decisions for that action instead of 4 for the Success action I described here.

Scenario 2

If you want to allow more than one attempt the previous scenario would not work because the value of v_total is increased with each click on a Submit button. Example: if you allow 2 attempts for each TEB, the value of v_total would result in 4 if both attempts were used on two TEB's, and that is not what you want.

Events and variables

That is the reason for using the variables v_1....v_4 that will be set to 1 each time the Submit button is clicked for the corresponding TEB. And the counter v_total will not be created by incrementing, but by calculating the sum of the 4 variables v_1...v_4. That way the value can never exceed 4. 

Because the variable v_... depends on the TEB, now I'll need to create an advanced action for each TEB: CheckTEB1, CheckTEB2, CheckTEB3, CheckTEB4. For the lazy user: you can use this action both for the Success and LastAttempt event; for the purist: create a slightly different action for the LastAttempt event, in which you delete the second decision TextCorrect (see note in first scenario).

Advanced Actions (conditional) TEBCheck1 .... TEBCheck4

Those actions have the same 4 decisions as in the first scenario, even better, only the first decision (mimicked standard action) has to be changed. You have to assign the value 1 to the corresponding variable v_1.... v_4 and the variable v_total is calculated with 3 subsequent Expression statements. Remember: no functions like Sum are available, and you can use only one operator (+) in a statement, hence that sequence of Expressions.

Have a look at this Always decision for the first action TEBCheck1

Use the Duplicate function to create the similar actions TEBCheck2... 4. The only editing to be done is to change the variable highlighted in the screenshot! Nothing else has to be edited, but be sure to attach the correct action to the correct events.

"Beat the system" - save time creating Advanced Actions (Captivate)


Wondering about the title? I borrowed it from the answer of the user about my solution for her problem in this thread: 'Very brilliant way to beat the system, I am impressed...'

To create that solution, I followed my own instructions described in Look before you leap... and Be a Captivate ecologist. The user had created a solution, but it was taking so  much time to duplicate and edit the advanced actions, reason why she looked for help. 

The example in this post was created with Captivate 6, in which I again used a lot of shapes because of their unique possibilities. This is not possible in previous versions, so I'll explain the changes to be made to the example for versions 5/5.5. 

Look at the end of the post: for CP6-users I offer a template with the advanced actions, that can be easily customized (instructions included). 

I extended the solution so that it also includes an answer to a question that often pops up: conditional showing of a Next button when all information has been viewed. The simple solution where this condition is not required, is also available in the template. The user was hiding/showing the play bar for that purpose, but I choose to hide/show only a Next (shape) button. For previous versions, the version with the play bar will be easier.

User wanted to have the same work flow on a lot of slides: user has to click several buttons to show Text Captions, after having clicked all buttons. She had created advanced actions triggered by the buttons to achieve her goal, but the problem is that duplicating this for a lot of slides means a lot of work because the text captions have different content on each slide, so a unique ID was needed for each of them which means tiresome editing of the advanced actions pointing to those Text Captions.


Have a look at this movie. It has only 4 content slides after the introduction slide. each of them has 4 buttons, that will show a Text container. The content of the containers is different on each slide. The Next button, that is also on the Intro-slide will only appear when all Text has been viewed.  The text container at the bottom shows the number of the content slide and doubles as a button to hide all text. The last slide has some tips for those who get the template (Captivate 6 only).

Captivate 6 solution

Slides - objects

  1. Slide Intro has a shape button BtNext, displayed for the rest of the project, placed on top and pausing at 2 seconds. 
  2. Slide Content1 has a lot of shapes, all are displayed for the rest of the project and all placed on top; look at the screenshot of that slide with the Timeline and you'll see from top to bottom:
    • BtnsGrp: object group with 4 shape buttons (Btn_One, Btn_Two, Btn_Three, Btn_Four), configured as buttons and pausing at 1,5secs each. Those buttons will trigger an advanced action that has not to be edited depending on the slide, thus allowing the Display for rest of Project tming.
    • Bt_HideAll, a shape button that shows the text 'Slide x' and is also configured as a button to trigger a simple advanced action that hides all text captions. This shape button ihas no pause, is displayed for the rest of the project, same action triggered on each content slide.
    • CaptionsGrp: object group with 4 shapes (TC_1, TC_2, TC_3,TC_4) used as Text containers. As you see they show only a variable, which allows me to display them as well for the rest of the project. The content will change if the value of the variable is changed. That is the 'trick'.
  3. Slides Content2...Content4 have no objects at all.
  4. Slide End has an Interaction (Accordion)


Be careful when creating the Text Containers TC_1... to make them big enough to show the largest text you'll have to put in, and when inserting the variable to change its length (default value = 15) so that it will show all the text


Events - triggers

Content slides: On Enter for those slides will trigger an advanced action Enter_Connectx (where x is the number of the content slide). The primary goal of that action is to populate the variables shown in the text contaners TC_n.  It will also hide some objects. The template has an alternative if you do not need that condition for the next button, and the alternative action is EnterConnectx . Those actions are different for each content slide. 

End slide:  On Enter will trigger the action EnterEnd that will hide all the objects that were displayed on the content slides and the Next button.

Bt_One, Bt_Two, Bt_Three, Bt_Four: On Success will trigger advanced actions Show_One, Show_Two, Show_Three, Show_Four. The template has also the alternatives ShowOne, ShowTwo, ShowThree, ShowFour if you do not need the condition for the Next button to appear only after having viewed all text.

BtHideAll: will trigger a standard advanced action that hides all text containers.


I created these user variables:

  • v_slide will store the content slide number that is displayed in the shape button BtHideAll; default value = 0 but I reinitialized it to 1 on the Content1 slide as well (in case user gets back to that slide)
  • v_one, v_two, v_three, v_four: variables that will contain the text for the corresponding text containers TC_1, TC_2, TC_3 and TC_4; default value=0
  • v_show1, v_show2, v_show3, v_show4: with default value 0 will be used to track if a text container has been viewed because then they'll get the value 1 (toggle)

No system variables were used in this case.

Advanced actions

Enter_Content1: a standard advanced action, triggered on entering the first content slide. It is different from the other content slides, because I assign the value 1 to the variable v_slide. The screenshot is self-explanatory: re-initialisation of the variables v_show1...4 that are reused on each slide, hiding the Next button and Captions, initialising v_slide.  The cumbersome part is assigining the text to the variables. I suggest to put the text in a text caption off stage and use copy/paste. 

Enter_Content2, ....and all subsequent content slides trigger a similar advanced action as the first content slide with the exception of the v_slide assignment that is replaced by incrementing v_slide using the Expresison statement.

EnterEnd: standard action that hides a lot of objects

HideAllCaptions: very simple standard advanced action:

Show_One and similar actions Show_Two... Show_Four

This is a conditional action with two decisions:

  1. Always: a mimicked standard action that will show the appropriate Text Container, hide the other text containers and toggle the variable v_show1
  2. Next? is the real condition, checking the values of the toggles v_show1....v_show2 and showing the Next button when all have been set to 1. You do not need Else actions.

Captivate 5/5.5 solution

You can create the same solution in those versions, with those changes:

  • You do not have object groups, so some actions will have a lot more statements because you have to hide each object by a separate statement
  • On first content slide, replace the Text Containers by Text Captions that can also be displayed for the rest of the project and placed on top.
  • On first content slide, replace the shape button BtHideAll by two objects:
    • a text caption including the variable v_slide, displayed for the rest of the project and on top
    • a click box on top of that text caption that triggers the action HideAllCaptions; that click box cannot be displayed for the rest of the project but you can copy it and paste it to all subsequent content slides in one action. since it will always trigger the same action
  • On first content slide, replace the shape buttons Bt_One... by simple buttons. Again, they cannot be displayed for the rest of the project but they will always trigger the same advanced action. So, use the same copy/paste work flow as described for the previous click box.


Template (Captivate 6)

No link to a template, sorry. Although I like blogging and sharing, I dislike the lack of communication using this blog medium. Please, if you want me to send you the template in person, you'll have to contact me and provide an e-mail address. Either you try to reach me on Twitter (will follow you so that a DM with address is possible) or you use a private message on the user forums for Captivate. Would love to hear the reason of your request...

Limit Review to Incorrect Answers (Captivate 6)

Update: you can find a new version, HTML compatible and using newer features in this post=µ:


Because this question "While in Review Quiz process, is it possible to review only the slides which have been answered incorrectly?" popped up already multiple times on the user forums, I thought it could be interesting to create an easy solution. The solution will not work with random question slides, because the On Enter Slide event is not available for such slides. 


Play this movie to see the result. It has 5 question slides of different types, some with partial scoring, most with penalties. Only one attempt on Question level but two attempts are allowed on Quiz level. I dragged the Review button under the Retake button on the Score slide, to avoid confusion After the second attempt you can click the Review button on the Score slide, and only the questions that have been answered incorrectly will be visible, the correctly answered questions are skipped automatically.

Slides and events

The movie has 8 slides: Title, Instruction, 5 Question slides and the Score slide. Here is a screenshot of the Advanced Interaction panel (F9):

In this panel you see that I used the Success and Failure events of the Question slides, they always trigger the same advanced action Questx, where is x is the number of the Question. I also used the On Enter events for the Question slides and for the Score slide.



In the actions I will use the system variable cpQuizInfoLastSlidePointScored that stores the score of the last Question slide, immediately after the two-step process to submit the answer. Because this variable is reused for every question, I have to copy its value to a user variable for each slide. For this purpose I created as many user variables as the number of questions, labeled:

v_quest1, v_quest2, .... v_quest5 with a default value of 0

Too bad that we do not have a system variable that indicates when the user enters Review mode. So I created another user variable, a boolean that has an initial value of 0 but will get the value 1 when in Review mode.

v_review boolean (0,1)

To check this mode I will use the system variable cpQuizInfoAttempts. This variable stores the number of the present attempt on Quiz level when the first question of that attempt is started. But I will check only on entering the score slide (see Advanced Actions, EnterScore).


Advanced actions

Quest1, Quest2, Quest3, Quest4, Quest5 (standard advanced actions)

Those actions are triggered both by the Success and Last Attempt events for the corresponding question slide. They have only two statements:

  1. will store the value of cpQuizInfoLastSlidePointScored in a user variable; this variable is the only word to be edited in the duplicates 
  2. because a standard action is not releasing the play head, I preferred to add the statement 'Go to Next Slide' over 'Continue' to avoid waiting time for the user

You see two screenshots: the action accordion of the Quiz Properties panel for question slide 2 and the advanced action Quest2.

EnterQ1, EnterQ2, EnterQ3, EnterQ4, EnterQ5 (conditional advanced actions)

These are triggered by the On Slide Enter event for each Question slide. The condition (IF) to be checked is an AND combination of two:

  1. Is the user in Review mode? This is done by checking the value of the variable v_review.
  2. Has the user a positive score for this question? Done by checking the value of the corresponding variable v_questx (where x = number of the question). Since some questions have partial scoring, and there are also penalties, this doesn't mean that the question was answered totally correct. If you want to skip only for totally correct answers, you have to change this second condition, asking if the score was equal to the maximum score for that question (cpQuizInfoPointsPerQuestionSlide stores that information, so the condition would then be: IF v_quest(x) is equal to cpQuizInfoPointsPerQuestionSlide). 

If both conditions result in True, the slide will be skipped ('Go to Next Slide'), else the play head just continues. Here the screenshots for the second question slide:

EnterScore (conditional advanced action)

This action is triggered on entering the Score slide and will store the value 1 in the user variable v_review when the last Quiz attempt has been taken.  At that moment the system variable cpQuizInfoAttempts will be equal to the maximum number of attempts. There is no system variable for that maximum number, so you'll have to check it and type it in as a 'literal' in the condition. 

Here is a screenshot of that action, only the IF/Then part. For Else a simple Continue statement is OK. You'll see I have also a second decision, used to show the correct feedback on the score slide. As I mentioned before, I'm a bit embarrassed by the fact that the default feedback message shifts always to Times New Roman font. So I replaced it by showing/hiding a smart shape used as text container. 


The proposed work flow can also be used for versions 5 and 5.5. The actions are rather simple, and the only cumbersome work is the duplication, editing (although limited always to changing one variable name) and attribution to the correct event. One could create a template to avoid having to recreate at least one original action and variable. 

Statements (Advanced Actions) in Captivate 6 (list)


Recently at DevLearn 2012 I coached some Captivate users for Advanced actions in a preconf workshop. Besides a cookbook, which I will not publish publicly, I also offered them a table describing all available statements in the Advanced Actions dialog box. The list with system variables has been explained in a previous article, with a link for a free download of that list. This post will describe the Statements list that you will also be able to download for free at the end.


The list with statements has 4 columns

  • Statement: as it appears in the dropdown list of the first column in advanced actions, I used the same sequence as provided there.  Sometimes statements will be greyed out in the list because they are not available in that situation.
  • Explanation: trying to explain what exactly is the meaning of the statement

  • Comments: has more explanation, warnings and tips about the statement

  • Simple action?: shows if the statement is also available as simple action in the action accordion for an event; some are only available for certain events, which explains the subdivision of this column in:
    • On Enter (slide event)
    • On Exit (slide event)
    • Object (Success or Last Attempt for an interactive object)

I added a small table on page 2 with actions that are only available as simple actions, and not in the dropdown list for advanced actions. If you do not understand the comment about 'No action' (last line), please watch this video about the difference between a simple and an advanced action.


I posted the pdf on; use this link  to download your free copy. Would love to see your comments.

Buttons on Question/Score Slides in Captivate 6?


On Thursday 4th of October I presented a webinar about my favourite new feature in version 6: shapes used as buttons. In this blog you could already read how to use those shape buttons on Master slides or timed for the rest of the project. Using them on question slides is a bit more tricky as I explained in the webinar. Question slides are always like difficult kids to handle, and this didn't change with regard to shape buttons. 

Individual Shape button

Inserting a shape on an individual question slide is not a problem, and there is no limltiation: you can even insert a button from the Buttons category (that is already converted to a button and has an action attached to it).

Some tips:

  • Be careful if you provide a pausing point for the shape button. A question slide has its pausing point by default at half its duration. This pause will be released after the second step in the submitting process (1st = Submit, 2nd = Y or click on slide). If the shape button pauses before the Question slide pause, clicking on it to do something (like showing a text caption, an image, playing audio) will not be possible after the second step of the submitting process is completed. If you have the shape button pausing after the question slide pause, the playhead will stop at that pausing point after the submit/Y process has been done which could confuse the user.
  • If the objects that pop up when clicking the shape button do cover up the question, do not forget to provide a possibility to hide them again, either with the same or with another button.
  • It will probably be necessary to reset everything when returning to the slide (if this could happen, perhaps for a second Quiz attempt or Review). You can use the On Enter event of the slide for that purpose.
  • It can be annoying to select an object on a Question slide that is not one of the native Question slide objects that have always priority. It is much easier to select them in the Timeline than on stage.

Shape buttons for multiple question slides

As you know from previous blog posts, the real power of shape buttons is that they can be used on master slides or timed for the rest of the project so that they can be used on multiple slides without having to copy/paste and to edit all (advanced) actions because the ID's of objects change on each slide. But here there are some problems for using those work flows on question slides as I discovered. Here is the history of my exploration, if you want to skip immediately to the example and how it was created, feel free:

  1. If you check the Timing dropdown list for a shape button on a question slide you'll see that the option 'Show for rest of project' is NOT available.Difficult kid.... you know :-) This means that the work flow where you extend the life of a shape button on a first question slide to all question slides is impossible.
  2. However it is possible to put a shape button on a Question master slide (you have to put them on all the master slides that you need for the questions). This work flow remains possible but has its restrictions: the shape button has no ID which means that it cannot be hidden/shown on discrete slides, it cannot be timed, and if you choose a pause (not to be recommended in this case) it will always be at the end of the slide. 

  3. When opening the dropdown list for the actions in the Action accordion, you'll have a new surprise: some options are dimmed, not available. You cannot show/hide anything, nor apply an effect. It is logical that Disable/Enable are dimmed as well, because none of the question slide objects can be controlled, and a shape button itself cannot be enabled/disabled. It is the only interactive object allowed on a question slide.
  4. But when you choose 'Execute Advanced Actions' and open the dialog box, you'll have another surprise: here the three actions banned from the simple actions list are available. That is a relief, isn't it? But weird...

  5. So I tried out an example - you'll see it in the movie. I wanted to offer the user a shape button that would pop up a text container (shape) showing the value of the present question slide (points attributed to it) and the score obtained until that question. For both data there is a system variable: cpQuizInfoPointsPerQuestionSlide and cpQuizInfoPointsscored. So this text container can be the same for every Question slide. The way to go is to create that Text container, display it for the rest of the project. That way it has a unique ID and can be popped up with the same advanced action on each question slide. Bummer, new surprise: you cannot time any object on a question slide, not even a text container, for the rest of the project. Why do I not use a simple text caption? A text caption can indeed be timed for the rest of the project, but.... as most objects on an Question slide it will always been stacked under the default Question slide objects like answers. And I want the popup message to be on top. And yes, this is indeed only possible with shapes used as text containers!

  6. "Never give up", trying to find a workaround. I put the text container shape on the slide before the first question slide (it is hidden anyway at the start), and.... it shows up on each question slide. So issue solved, kid (question slide) is 'tamed' by Lilybiri :-).

  7. Now up to the score slide, want to replace the review message by something that the user can pop up by clicking on a button. Trying to add a shape button to the score slide, and that is possible! I can add a rollover smart shape as tooltip without any problems. Now I add some hidden text container shapes, and I can use the Arrange menu to pull them to the front of the stack. Great! Created an advanced action to pop up the right text based on the Quiz result, works fine. But... the text containers will be behind the score text captions, another disappointment because I was able to use the Arrange menu. I also tried out to put the shape button with the action on the master slide used for the score slide, but same result: no way to get my text containers on top of the default text of the score slide. The simplest solution would be to create your own score slide, using the quizzing system variables of course.

Example movie

Watch this example: each question slide (3) has an Information button, toggling a text shape on/off. You'll read there the number of points attributed to the present question and the total score obtained so far. There is a button on the score slide (with tooltip) to show a review message.


Slide 1 (Title): has the text bubble QstInfo, that is invisible, timed for the rest of the project and put on top:

Master slides for Questions (here MCQ and Hot Spot) have a shape button (used the 'i' button from the buttons category) top right, that triggers an advanced action Quest_Info. The button doesn't pause. 

First Question slide (Q1) has a line shape StopLine that will be used to create the toggle aspect. It is timed for the rest of the project as well and placed on top like the Text bubble QstInfo on the first page.

Score slide: I deleted the review messages in Quiz, Settings, Quiz Result Messages and tucked the Review placeholder out of the way. I added a shape button InfoBt (from the buttons category as well) with another rollover shape as tooltip. Created two shapes with image and text that are initially invisible: OKReview and NotOKReview. The shape button InfoBt triggers a conditional advanced action Review

Advanced Actions

Quest_Info triggered by the shape button on the question Master slides is a conditional advanced action with one decision. To create the toggle aspect I used the approach explained in Toggle Shape Buttons - scenario 3, which needs a user variable v_visib. The more elegant scenario 4 from that article is impossible because the button is on a master slide.

Review is triggered by a shape button on the Score slide. It is again a conditional action with one decision, and self-explaining:


I hope that my struggle with the 'difficult' question slides will have led to some tips that could be useful for you. Again, shapes prove to be a game changer, even though there are still some unexplainable quirks. I'm waiting for your comments.

Widgets in Adobe Captivate (list)


If you have been visiting my blog you'll know that I wrote quite a lot of articles about using the Widgets that are available in the Captivate box (both in versions 5, 5.5 and 6). There is not much documentation about those widgets available. So I decided to list up the widgets, possible use cases and sometimes a link to blog posts that are explaining more in detail the use of that widget. And of course, added my own comments. Feel free to download the list, link is below.

Structure list

I grouped the widgets this way:

  1. Static widgets without variables (those widgets are supported for HTML5 output)
  2. Static widgets with variables (supported as well)
  3. Interactive widgets (not supported for HTML5 output)
  4. Question widget (not supported)

In the table you'll also see if the source code is available for the widget, which is the case for all, except the A3C widget.


Download the list from using this link. No need to have an Adobe ID.

Would appreciate if you let me know this list is useful, or if you want to add more comments. It is limited on purpose to the widgets that are included with Captivate. If you are looking for external widgets, I recommend visiting the Widget Treasury.

Intermediate Score Slides


An upgraded post, which takes advantage of the new features in more recent versions, have been posted. Check it out:

Intermeidate Score Slides in 2020


Even in Captivate 6 only one quiz per file is possible, although you can have a pretest as well in the same fle. A question that often appears on the forum like the one in this thread: "...I'm adding a quiz for each of the individual sections within a file (3 in total). I'd like for the user to see how well they've done in each section, but there is only one score page in my project and it only comes up when the quiz has been completed". 

In this post I'll try to explain a possible solution, with custom score slides after each section similar to the default score slide that pops up after the last question slide of the file. Have first a look at the example movie to see the result.


You'll find three sections with only a quiz in this example: Geography, Politics, General (subject = Belgium). Of course, normally you'd have also content slides in those sections but I suspect that regular readers of my blog do not need those any more. You can take the quizzes in any order. When you have finished all quizzes, a button will appear that will navigate you to the Total Score slide, which is the default Score slide. I think my custom score slides are prettier :-)

Scores of the different sections, question slides can be found in this Advanced Interaction view:


You have seen this sequence of slides:

  • Slide Intro with Continue (Shape) button
  • Slide Choice where you can choose the subject (3 shape buttons with simple Jump to actions); after a quiz the user is navigated back to this slide and completed quizzes are marked; when all quizzes are done the (shape) button Total Score (Jump to last slide) appears on this slide;
  • Slide Group Geography: with 3 Question slides (Q1_Geo, Q2_Geo, Q3_Geo) and a slide GeoScore; maximum possible score = 10p
  • Slide Group Politics: with 3 Question slides (Q1_PolQ2_PolQ3_Pol) and a slide PolScoremaximum possible score = 15p
  • Slide Group General: with 4 Question slides (Q1_GnrlQ2_GnrlQ3_Gnrl, Q4_Gnrl) and a slide GnrlScore  maximum possible score = 20p
  • Slide TotalScore   


To keep track of the score and the number of correctly answered questions for the partial quizzes, I created user variables. The percentage is calculated and stored in another variable. In the example those variables are shown only on the intermediate Score slides, but if wanted a summary can be offered at the end, showing the results for all sections.

Since there are 3 sections, I have 3 trios of variables, none has a default value to start with:

  • v_geoscore, v_geoqst, v_geoperc will store values of score/correct questions/percentage for the Geography quiz
  • v_polscore, v_polqst, v_polperc will store values of score/correct questions/percentage for the Politics quiz
  • v_gnrlscore, v_gnrlqst, v_gnrlperc will store values of score/correct questions/percentage for the General quiz

Another variable v_null (empty variable) was used to check if a Quiz had a result to mark the Quizzes as done in the second slide Choice, and eventually present the button to advanced to the Total Score.

Advanced Actions

With this article I focus first on the intermediate score slides. I didn't calculate the maximum possible score, nor the total number of questions, but just typed them in.

To populate the defined variables (score, number correct questions, percentage) I used the Quizzing system variable cpQuizInfoLastSlidePointScored. This variable is reused after each slide, so I can only get use it immediately after each question slide. That is the reason for the advanced action, triggered on entering the question slides, starting with the second question slide. The action is the same for all question slides in a section. Here is an example for the section Geography:

Conditional advanced action Ent_Q_Geo

This action is triggered On Enter for slides Q2_Geo (for the first question slide) and Q3_Geo (for the second question slide).

I adopted the (almost) the same way as Captivate to count the number of correct questions: for questions with partial scores, the question is counted as correct if only part of the question is correct. Not totally the same way, because I require that the score has to be positive, because with Captivate depending on the penalties even a negative score is possible for a question with partial scores and one part correct, rest incorrect. That is the reason for the IF: score of the previous question has to be positive. In that case the variable v_geoqst is incremented. Both for correct and incorrect questions the score is added to v_geoscore.

For the groups Politics and General a similar action has to be created. It will be applied to all question slides except the first of the section.

Conditional advanced action Ent_Q_Geo

To add the result of the last question slide, I used an On Enter action for the score slide, that is different because it has also to calculate the percentage to be shown (v_geoperc) and to show the proper text caption for Success/Failure.

This action has two decisions: 

QPrevCorrect: has the same statements as Ent_Q_Geo plus the statements to calculate the percentage. As mentioned I did type in the maximum possible score (10, 15 or 20 for the 3 quizzes). 


Passed?: shows the proper text (used a smart shape as text container), based on the result.



This article did focus on how to create intermediate score slides.  I will not explain in detail the work flow I used for the choice slide to mark the visited quizzes, which was done with another conditional action. I used also the new discovered functionality that you can have two smart shape buttons in an exact same location and switch between them (see toggle shape buttons)

Workshop Advanced Actions - DevLearn 2012

Preconf Workshop Advanced Actions


 If you are a regular visitor of this blog, you will be surprised that this time you'll not find a tutorial. I am so looking forward to be able to train for the first time "IRL" about the subject I have been exploring since a couple of years in this blog: Advanced actions to extend Adobe Captivate's functionalities. And while preparing this workshop (and some other presentations for DevLearn) I wanted to share my excitement with you.

Training approach

My students are well aware of my ideas for efficient training, but you probably only know me from written tutorials. I'm the kind of trainer that loves throwing the student in the water, a lot more than trying to explain how to swim... and I'm persuaded that a training is a lot more efficient if the trainee has made a lot of mistakes (even stupid ones) and was able to find the reason for the mistake and enjoyed the discovery of a solution.

This approach is natural to me, since it is my personal preffered way or learning as well. You all know that finding good documentation, books about advanced actions in Captivate is a tough, almost hopeless adventure. I gave up that search a long time ago, and just plunged into them, learning from all my stupid mistakes. And then I tried to solve use cases for other users, thanks for helping me to learn more. I hope now to be able to share the results of those learning experiences in this workshop. 


We'll spend some time to discover things, using small exercises in the morning session.  Be sure: you'll get a list with tasks to choose from, both for total newbies and other attendees. And... it is not forbidden to cheat! Perhaps your neighbour has accomplished a great way to solve her/his chosen task!

  • System variables:
    • to show info and save time
    • to perform action
  • User variables (take control)
  • Variables associated with TEB and widgets
  • Snippets (bit hidden) = small advanced actions
    • attached to available shape buttons
    • how to edit to extend their power
  • Custom navigation for your project
  • Shape buttons: powerful and new
  • Simple vs Standard action
  • Conditional action with one decision
  • Condtional action with multiple decisions
  • Events
  • Reusing actions,variables with template

And let's design a simple game in the afternoon session, after all we are in Las Vegas, not? You will be using the discoveries of the morning and learn some good practice, tips and tricks:

  • analysis of possible situations: 
    • collaboration with colleagues
    • worksheet with example analysis
  • choosing events, variables
    • avoiding pitfalls
    • reusing variables
  • labeling can save a lot of time
    • beware - I'm a labeling freak
  • conditional actions: use of flow chart
    • useful and a necessity for complex condtitions
  • work flow for creation actions and testing
    • using copy/paste intelligently
  • timesaving tips/tricks

What do you think?

As usual, I'm hoping to read some comments on this writing. Even if you will not be able to participate in this training. Add your ideas, would appreciate it more than ever. I'm so looking forward to this workshop. 

I'm copresenting as well on the DevLean conference with two great friends : 

Engage Learners with Widgets and Effects in Adobe Captivate  with Joe Ganci

Best of Two Worlds: Integrating ZebraZapps Interactions in Captivate  also with Joe Ganci

Rapid Development Tool Showdown: Captivate vs. Lectora  with Rebecca Goldberg