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.

Decision Tabs and Conditional Actions

I have created some conditional actions with multiple decision tabs, but the logic doesn’t seem to be working the way I hoped.

If you have an action to “Jump to a slide” if a particular condition is true, is that the end, or does Captivate look at the other decision tabs also?

For example, if you have three conditional decision tabs A, B and C in that order, and A is true, do B and C get checked also? If the action for A is to go to a new slide, and, say, B is also true, do the actions for B ever get looked at?

What I was hoping Captivate would do would be for the actions for A to be taken, and B or C would never be looked at.

The post Decision Tabs and Conditional Actions appeared first on eLearning.

Issue with multi-tab advanced action

Situation:  I have a single SCO course will four branches.  All four branches come off of a single slide (from here forward referred to a the branch slide).  The learner is given the option to attempt to test-out of the course.  The questions are all related to a specific branch of the course and answering all of the questions related to a branch allows the learner to skip that content.   When the learner gets to the branch slide an advanced action (testOutResults) is executed “on enter”.  That action will display one of five images to indicate the learners current progress in the course:

1. TestedOut – They got 100% on the test out and do not need to see any content

2. TestOutRslt – Shows them what lessons, if any they tested out of.

3. CourseComplete – Displayed when they have completed all of the course content and did not test out.

4. Show Next Img – Instructs the learner to select another lesson (shouldn’t display until the learner has gone through a branch’s content and then come back to this slide).

5. TestOutSkipped – Displayed when the learner initial enters the branch slide if they chose to skip the test out option.

If a learner takes the pre-test, the PreTest variable is set to “0”.  If they opt to skip the test out option, the var PreTest is set to “1” to indicate that and then is changed to “2” by the “TestOutSkipped” portion of the advanced action.

Here is the advanced action setup:

Problem:  I’m having two issues at the moment related to what images the advanced action is showing or trying to show.  If the Test Out is skipped, the action first starts to show the “Show Next Img” image, and then seems to be overridden by the TestOutSkipped image.  From my understanding of Adv Actions this shouldn’t happen because the value of the PreTest var isn’t changed to “2” until after the Show Next Img portion of the advanced action has run.  The situation is worse if the testout is attempted but there is content the learner needs to see.  In this case, the Show Next Img image overrides the TestOutResult image…again, even though the value of the PreTest variable should still be “o” when the TestOutResult portion of the action runs and is not changed to “2” until after the Show Next Img portion.

I understood that Advanced Actions run from top to bottom in each tab and left to right along the tabs.  So in this case, I thought it would run the first tab and not execute the second until the first is finished and so on.  Have I got it wrong or is there an error in my setup that I’m not seeing?

If this is a “Captivate Quirk”, then I’ll do one of two things…I’ll either create another slide that handles the “Test Out” results and then moves to the branch slide OR I’ll forget doing everything in the Advanced Action and just write a big “if/else” javascript statement that executes on enter.

Thanks in advance for the help.



The post Issue with multi-tab advanced action appeared first on eLearning.

Why I Love Shared Actions since over 4 years!


Shared actions were a new feature in Captivate 7 several years ago. They were improved with Captivate 8.  I never understood why almost no one talks about them, even self-labeled experts seem never to use them. This is a real pity because their power is much underestimated. In most projects I open an external library (have a look at Internal and External Libraries) which has frequently used shared actions. It saves me a lot of time in each project. I will try to summarize in this blog post the results of my almost 5 years of experience with Shared actions. As usual my goal is to get more CP-users to understand when and how to use them.   More users could mean getting enhancement feature requests on the priority list of the developers )

Example movie (CP2017)

Please watch this movie, one of the examples I will explain at the Adobe Learning Summit, session 202 ‘Make the most of Captivate’s Timeline for Advanced Workflows’. You will see in this movie how one shared action can be used both to skip slide audio on revisiting a slide, or to force to view the entire slide on first visit. This is a use within one project. That action certainly has its place in a common external Library. To have an explanation of the shared action, you’ll have to be patient, because I want to give ‘First View’ to the participants of the session in Las Vegas, 24 October.

Published Tutorials Shared Actions

These posts were published 4 years ago (yes, have over 4 years experience with SA :-)). If you are on CP2017, the screenshots may be a little bit different because of the change to the Advanced Actions dialog box (see AA Dialog in 2017). However the work flow and terminology for Shared actions is still the same.

Use cases

Following on those tutorials I explained a bunch of use cases where shared actions were used. Examples are the way to explore new features, and you’ll find a list with links here:

1 (shared) Action  = 5 Toggle Buttons

This blog post has a unique shared action that you’ll be ablefor several toggle button in all your projects. The post was written  for Captivate 8. If you are using Fluid Boxes work flow (responsive projects) in CP2017, you can have the toggle buttons in a fluid box on master slides, not timed for the rest of the project (unless  in a static fluid box).

Dashboard, using Shared Actions

The advantage of shared actions when setting up a menu or dashboard

Drag&Drop Tips

When using object actions for Drag&Drop slides, shared actions can be an excellent choice over duplicate advanced actions

Custom Hotspot Questions

Using shared actions to create a custom controlled hotspot question which has lot of advantages over the default type of Hotspot question.

Forcing First View

This is an older version of the Example movie for which I posted a link above. It did already use Shared actions.

Matchstick Game

Games often need repetitive actions and that means that shared actons are the way to go.

Playing with Captivate 9

Another version of a dashboard created with shared actions, to celebrate the arrival of CP9.

Myths and tips

Strange myths exist about Shared actions. Lot of users believe they are only useful  between projects, not in the same  project. Personally, with the exception of the external library mentioned at the beginning, I always give priority on shared actions within one project over advanced actions if appropriate. If an action is used at least twice in a project, and it is possible to use a shared action, I will not use duplicate advanced actions.
Half-myth is that you cannot edit a shared action. That is partially true. You cannot edit a shared action which is already assigned to events and have it changed automatically. However you can use the original shared action as template to create a new shared action. You will have to assign it to all events after completing the new shared action. At that moment you will appreciate the fact that the shared action appears in the Library and has a Usage button  –  like any other asset. Contrary to advanced actions you can even reuse the same name for a shared action, provided the older action is no longer present in the file. That is one of those annoying things, that you can never reuse a name for an advanced action, even if it has been deleted. Keeping track of Usage of advanced actions is also very cumbersome.
Shared actions cannot replace advanced actions in all circumstances, and they need a different set of mind when preparing the actions. You have to be very careful with the candidate parameters: variables and literals.  I could tell a lot about spectacular results when replacing advanced by shared actions that are set up in an efficient way: courses that couldn’t be published anymore because of the number of variables and advanced actions that now run very smoothly, decrease of file size and loading time when using shared instead of advanced actions. Once lot of Captivate users gave me the title ‘Queen of Advanced Actions’. At this moment I feel more like the defender of Shared Actions, not the first ignored and underestimated stepchild of Captivate.  Too often I hear comments like: ‘I cannot see any advantage in using shared over advanced actions’.  Sorry, but that means you never tried them out. This article proves that I have explored them…. and they are on my top feature list of Adobe Captivate.


I would love to organize an online training with focus on use of shared actions. If you would consider such a course a valuable add-on to your skillset, please send me a message using info@lilybiri.com.

Creative with Quizzing System Variables


In my last post I mentioned that, based on the visits to my blog posts, Quizzes in Captivate seem to be one of the stumbling blocks for newbies. Most of the quizzing blog posts with focus on default quiz slides are already pretty old. More recently I have been talking about new features like Branch aware and Knowledge Check Slides. The most visited post on my blog will be updated in a near future, to accommodate recent changes in Captivate. The present article will offer you some ideas about using the Quizzing category of system variables. If you ever downloaded my full list of system variables, you know that these variables are read-only, at least if you are not a JS expert. As a bonus to reading this post, you’ll find a downloadable list with Quizzing System variables including some personal comments and links to blog posts where I have used those variables.

This article is meant as an introduction to the use of variables. For that reason the mentioned use cases are not complicated.

Using Read-only Variables

Quizzing System variables are read only. However you can use them in two ways, which will be illustrated by some use cases later on:

  1. To show information to the learner, by inserting them in a text container, which can be a shape or a text caption.
    All variables are case sensitive, for that reason I recommend strongly only to insert variables using the X button in the Character part of the Properties panel for the text container. In the dialog box you choose System variables (default is User variables), eventually the category (Quizzing) and pick the correct variable from the dropdown list. It is also possible to limit the number of characters, Maximum length (set to 5 in this screenshot):

    Since text containers including variables have to be generated on runtime, contrary to the static text containers, it is wise to use only websafe fonts which was not the case in the screenshot above.

  2. To use them in an advanced or shared action for multiple goals, like changing navigation, calculation, skipping slides etc.

You will see some use cases for both situations in this article.

Use case 1: extra Information on question slides

This use case has been explained more in detail in an older article (Buttons on question/score slide). In this example I ‘refurbished’ that older version using newer features  multistate object, shared action, toggle command.

The idea is to insert system variables in a text container (shape or caption) that appears on the first question slide. Text container is timed for the rest of the project, always on top. Since all embedded quiz objects have priority in the stacking order (z-order, order of the layers in the timeline), you have to make sure that thise custom text container is not covered up by embedded objects. For that reason I edited the size of feedback messages on the quizzing master slide, to make room for the (green) text container. An alternative work flow is explained in the older article mentioned before:

This text container can be permanently on the question slides, always available, or you can use a Toggle shape button to trigger its appearance. That button is visible in the screenshot as a green button with the label ‘i’. Similar to the text container, it is also inserted on the first question slide, timed for the rest of the project. This shape button has an extra custom state ‘Close’, visible on the next screenshot, to turn it into a real toggle button. The action used for this shape button is the shared action described in ‘1 action = 5 toggle buttons‘, and a user variable v_visib is used in that action. When importing or dragging the shared action from the external Library with shared actions, that variable is created automatically (see Reuse Shared Actions in Other Projects).

Besides the system variables cpQuizInfoPointsscored, cpQuizInfoPointsPerQuestionSlide and cpQuizInfoNegativePointsOnCurrentQuestionSlide. The result on runtime, when the toggle button has opened the info text can be seen in this screenshot:

To be sure that the information is closed by default On Enter for each question slide, I use an On Enter action for each question slide (see use case 3).

Use case 2: Custom Score slide

You can turn on/off fields in the default Score slide, but you can also replace the inserted fields by your text and system/user variables. Look at this example in editing mode:

On runtime it will look like this screenshot:

This score slide is taken from the same example file. Since both the text information container and its toggle button were timed for the rest of the project, you have to take care of hiding both On Enter for this score slide. I used this standard advanced action:

Use case 3: Calculation of the Total Penalty

Although there is a system variable (with a very long name) cpQuizInfoNegativePointsOnCurrentQuestionSlide, no exposed system variable is available containing the total penalty of the quiz, which is the opposite of the maximum number of points , cpQuizInfoTotalQuizPoints. If the user misses all answers, he’ll get a negative score equal to that Total penalty. I will have to calculate that total.

For that purpose I created a user variable v_penalty with a start value of 0. The On Enter event of each question slide was used to trigger this  standard advanced action (a shared action had no sense, because the same action applies to each question slide):

The first 3 commands take care of resetting the toggle button (SB_Info with the variable v_visib ) and hiding the text information container (Tx_Info).

The Expression command is using cpQuizInfoNegativePointsOnCurrentQuestionSlide to calculate the present amount of v_penalty. It may seem confusing that I’m using ‘+’ as math operator: reason is that the system variable always shows a negative number. You don’t have to believe me: have a look at the second screenshot in use case 1. 

More use cases – download

I wanted to keep it simple in the described use cases, introduction to the use of variables. Download the pdf with description of all quizzing system variables from this link

The table has 6 columns:

  • Variable name
  • Variable type: a variable can be empty, a Boolean (only values are 0/1 or T/F), a number, text or undefined.
  • Explanation which is sometimes bit different from the explanation found in the Variables dialog box
  • Default value
  • Comments: those are my personal comments
  • Blog posts: here you’ll find quite a lot more use cases, I mention the blog posts where the referenced variable has been used

In this screenshot you see part of the first page:


I’m waiting for your comments. Do you see ways of using those system variables in your projects? Do you have questions, use cases that you cannot figure out if they are possible? Fire away.