Branch aware quiz not working as expected.

Hello everyone,

Using Captivate 2019

Does a branch aware quiz only grade a single linear path through your course? I have eight branches jumping off of one slide. At the end of each branch I allow the user to: A ) Go to the quiz results slide B ) Jump back to the branching slide and do another branch. My project seems to only be grading the last branch that was went through and forgets about the first branch that was done.

Does this sound like something odd is happening or am I correct in thinking that you cannot go back and run a second branch?

Thank you,


The post Branch aware quiz not working as expected. appeared first on eLearning.

Can anyone help me how to have Content slides and Quiz slide in one single project on Captivate 2019

Hi there,

I am new to Captivate 2019. Can anyone tell me or show me how I can have content slides and quiz slides interacting with each other on one single project?

I am creating an e-learning course for my company where I have intro slides with video the explains what the course entails.  Then we move on the start a series of questions that each should dovetail (branch out) to different slides that might be another content/video or another set of questions depending on the learner’s answer. I have laid out all the questions and their respective branching answers on a word document and I am coping and pasting them onto Captivate.

The problem I am having is that I successfully create the content slides and some of the quiz on a single project but I cannot mix/move them around.
For instance, I have an intro and then user/learner will click next and start the quiz or set of questions. If he chooses option “1” out of 8 and clicks submit, he or she should to to another video slide that should take him or her to a different kind of assessment. At the same time, if user/learner chooses option “2”, he or she should see a different set of questions. Most of the questions are also “yes and no” based and depending which one is chosen, it should branch out to a complete different direction.
I just cannot figure that out yet. this is my third day working on Captivate and I feel like I am wrestling it.

What am I doing wrong? Is there any setting that I am missing? I am not grading user’s/learner’s scores. I am simply using the questions for self reflection/actualization.

If someone can shine a light on this it would be much appreciated.


The post Can anyone help me how to have Content slides and Quiz slide in one single project on Captivate 2019 appeared first on eLearning.

Couse completion issue…any ideas?!

Hi all,

I’ve created a course based on system compliance.

This is the scenario:

  1. The course requires bookmarking (remember where the user left off if exiting early for some reason)
  2. If they fail the course, they need to re-take the entire course, not just the quiz (we want them to learn the content, not just guess the answers several times)
  3. The course has branches (different processes for different groups of salespeople)

This is the problem:

Users would like the option to resume from where they left off.

Enabling ‘Send Resume Data’ provides a way for the user to get back to the point where they last left off, that’s great. However, if they exit the course after viewing at least one question slide, it’s considered that they ‘attempted’ the quiz.  As a result, this marks the course as ‘Completed’.

I need a way for them to be able to get to the end of the course, answering the questions within the branch they are on and be able to fail. Only at this point should the course be considered as ‘Completed’.

This way I can use Completed (they got to the end of the course) vs Successfully Completed (they got to the end of the course and passed the quiz).

Using xAPI output, I only have the following three options to consider the course as ‘Completed’:

  1. Quiz is attempted (if the user exits the course during the first question it considers this as ‘attempted’ so marks the course as completed – No good, as they can’t them resume from where they left off previously).
  2. Quiz is passed (No good to me as I want the LMS to return the user to the beginning of the course if they fail).  Instead, they will be taken back to the final screen in a loop as the course isn’t classed as being completed, so they ‘Resume’.
  3. Quiz is passed or the quiz attempt limit is reached (This one won’t be any good either as the user exiting the course anytime before the end of the course will mark it as completed)

I thought perhaps using Slide views % might help, although I suspect this won’t be branch aware and it will look at 100% as being the number of slides across the entire course, not just the specific branch they are going down, right?

Does anyone know of a way around this? I’m surprised there isn’t an option something like ‘Course is considered completed when user visits slide X’ or Quiz is passed.

I’d appreciate any help if possible please!



The post Couse completion issue…any ideas?! 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.

CSV import – localisation


Some time before the release of CP2017 I published a blog post, where I explained how I use the GIFT import for localising projects. Time to check if a similar solution is possible with the new CSV import. I used the provided template file, an Excel spreadsheet with macros. ‘CSVQuestionsCreationMacro.xlsm’. You find this worksheet in the GalleryQuiz. That may be a problem for users who don’t have administrator rights, because the installation folder is not always accessible for them. That is one of the reasons that a lot of folders are duplicated in the Public documents (Windows) or Shared documents.

Example movie

You can watch this movie, which I’ll also be using to explain the Branch aware functionality in a future post. After the title slide, you have a choice slide: you can opt to take the quiz in one of three languages. Or, if you are trilingual, why not choose the option ‘ALL’?


Workflow CSV import

English questions

I used the provided Excel worksheet to create these questions. I first double checked the Quiz Preferences for the Default labels, and the master slides. I took out the option to show the Progress. Reason: contrary to all other labels, when you change the Preferences to have another language, the labeling of the Progress will not remain on the existing slides. That is an annoying small bug. The progress text will always be converted to the last used language.

After importing the questions some manual work has to be done, because not everything can be set up in the CSV file:

  • The positive score for each question is imported, but if you want a penalty, you will have to add it manually. Refer to the Advanced Interaction panel shown below
  • For the MCQ slide with multiple correct answers, you need to set up the individual scores manually for each of the answers. With GIFT import it is possible to insert already the positive partial scores, not with CSV for what I detected.

It is very easy to set up the Matching slides, the Help documentation is not updated: you do not have to insert the pipe sympbol, there is a matching field. Nicely done!

Dutch and French questions

The third sheet of the Excel worksheet has the fields for the to be exported CSV file. However you are not allowed to edit those fields. You don’t have access to the questions as they were defined in the second sheet, so that is not a workaround.

My workflow was to use the exported CSV file with the English questions, and open it in Excel as a copy. That file can be translated to any language. You can save it as a CSV file from Excel and import in Captivate.

Before importing such a translated file, I set the Quiz Preferences to the correct language. Especially the Default labels need to be translated. For that purpose I have always a Preferences file ready that can be imported. Only newly created quiz slides will take on those new labels (also for the buttons), with the exception of the Progress mentioned above: it will also override the progress on existing quiz slides.


At this moment, I still have a slight preference to use GIFT files for import, especially if I need to translate questions for the same project or for other projects. Translating a GIFT file, that is already set up correctly is a quicker workflow. Being able to define partial score in that file is another plus.

In a next blog post, I will explain the ins and outs, and the setup of the Branch aware feature which has been used in the example file.

The post CSV import – localisation appeared first on eLearning.

Branching Navigation

Well, I am going to go out on a limb here and offer some thoughts on branching… 

This is one of those areas that has many avenues of approach and I offer nothing more than my own methodology. I make no grand claims and the few that I might make are pragmatic in nature. Due to the broad nature of this topic, I am happy to hear how others go about designing their branching scenarios.


This post is born out of a large conversation on how to setup some branching where some content is shared between different types of learners. I hope that this post helps many of you to visualize the workflow a little bit better and help grasp how the navigation part of it is built. The branching we find in this demo is what I would consider low level branching since it is void of any complex navigation based on decisions made by the learner. It is a relatively linear progression with next and previous buttons.


The demo is made up of a total of 10 slides as follows…

  1. Title slide with two types of entry to the learning – unvalidated and validated
  2. Content page 1 – a shared content page
  3. Content page 2 – a shared content page
  4. Content page 3 – a shared content page
  5. Content page 4 – a shared content page
  6. Content page 5 – a shared content page – but the final one for non-managers
  7. Content page 6 – a content page for managers only
  8. Content page 7 – a content page for managers only
  9. Content page 8 – a content page for managers only – the last content page for managers
  10. Final slide

Each content slide has a NEXT and PREVIOUS button for navigation. The criteria is just that if you are a manager, you see all the slides but if you are a non-manager, you only get to see seven of the slides. The concept of course can be easily extended to any number of slides.

Content slides have a START OVER button to return to the first page.
Content slides also have an indicator of the status of the branch as being manager or non-manager

The demo also has two variables.

manager – this variable has a value of either 0 or 1 so that we know which rules to follow. Default value = 0
empNumber – this is the variable for the text entry box on the validated side of the demo. Default value = 0

Slide Breakdown

Title Slide – Non-validated

On the left side is the non-validated entry system. Basically the user clicks on the manager or non-manager button based on whatever category they fall under. There are no checks here. We have no way to determine if the learner is being honest and nothing prevents a non-manager from viewing the manager material. This would seem an issue if there is any sort of sensitive materials.

The manager button executes an advanced action which does three things

  1. Sets the manager variable to 1
  2. changes the state of the status indicator to manager
  3. Takes the learner to the next slide

The non-manager button does nothing more than take the user to the next slide. Defaults are to non-manager so no other changes are necessary.

Title Slide – Validated

On the right side is the validated entry system. Here, the user must enter their employee number. Assuming that users do not know the numbers of other employees, this might be considered a little more secure but nothing prevents someone from using someone else’s employee number to gain access to the manager information. Once the number is entered, they can click the Start Training button.

OK – so there is a gazillion ways to go here, pick your poison. You would need to go with something that is realistic and feasible for your organization. If you have 1000 employees, this might not be the best way to validate because the backside could get messy.

Here we have the Start Training button execute some conditional actions.

  1. IF empNumber is 87152 then we set manager to 1, change the status indicator to manager, and goto the next slide
  2. ELSE IF empNumber is 56993 then we just move forward
  3. ELSE we display an error box indicating that the number is not in the system.

Slide 2

A content slide that is shared by both groups.

We add the NEXT button which does nothing more than go to the next slide. We also see the START OVER button appear which will reset the variables and take the learner back to the title slide. You should notice the green status indicator at bottom center which will display whether you are on the manager or non-manager track.

Slides 3 – 5

Same as Slide 2 but with the addition of the PREVIOUS button that does nothing more than back up a slide.

Slide 6

This is the final content slide for learners identified as non-managers. The only real change here is the behavior of the NEXT button. Here we place a conditional action that checks the status of the manager variable.

IF manager = 1 then go to slide 7

ELSE goto slide 10

Slides 7-9

These three slides are the same as slide two with the exception that a non-manager would not see them.

Slide 10

This is the final slide and would be seen by both groups. The NEXT button goes away since there isn’t a next slide to go to anyway. The PREVIOUS button, however performs a conditional action.

IF manager = 1 then goto slide 9

ELSE goto slide 6

This is because we don’t want the non-managers to go back and see the manager stuff.

Other Thoughts

In my opinion, having a strong sense of your pathways and logic is essential. I like to map out my branches so I can see the flow because branching scenarios can get complex very quickly and overwhelm you. The map helps to keep me from getting lost.

Here is the link to the working demo.

Feel free to ask any questions you may have.

The post Branching Navigation appeared first on eLearning.

Goto slide by slide name & goto slide containing shape with name in javascript

There are many cases where you have interactions that require jumping to another slide in the module.  The classic case is a “menu” slide with a number of options, where selecting an option transfers the learner to a particular lesson or detail slide.  This is also the basis of how adaptive learning is actually implemented.

Captivate provides you a way to jump to a particular slide using advanced actions.  Once you point to a particular slide, the advanced action jump will follow that slide even if it is moved or other slides are added before or after.  This is a well known capability that has been part of captivate for a long time.

There are some cases where having  the ability to perform these kinds of jumping functions in javascript is an advantage.

  •  It is sometimes easier to develop more complex branching decisions in javascript than directly in advanced actions
  •  There are cases where one wants to use a named object rather than a slide name to identify which slide to go to
  •  If slides are deleted, captivate removes the “jump to slide” action and replaces it with a “continue”  action.

Jump to slide by slide name

The following shows how to implement jump functions in Javascript.  First, we  define a Javascript function that gets added to the menu  slide,   and then each button is set up to call this function with the name of the slide that it wants to have the user jump to.

The javascript function is:

function gotoSlideNamed(aName) {
   var cpObjectList = Object.getOwnPropertyNames(cp.D);   // get all of the captivate-defined objects
   var findSlideLabels = function ( acc, val ) {   //  extract objects that have slide names 
         if ( typeof cp.D[val].lb == "undefined" || cp.D[val].lb == "" ) return acc;
          acc[cp.D[val].lb ] = cp.D[val].from ;   // pick up the frame number 
          return acc
   var cpSlideObjects = cpObjectList.reduce ( findSlideLabels , {} )   // run the function on all of the captivate objects
   cpCmndGotoFrameAndResume = cpSlideObjects[aName];  // set the "next frame" variable to the start frame of the object
   return ;
This script  is  added to the menu slide using the “on entry execute Javascript” slide-level action.
Now, for each button,  you simply add the following “on success execute Javascript” action:
gotoSlideNamed("action_1")   // action_1 is just a made-up name,  you put the name of your desired slide there..
Now, any change in the module will not impact where you jump to.
It is common that once a learner completes a subsection, they are taken back to the menu.   In that case, we use the same function to make sure that the return jump is also robust.   Naming the menu slide “top_menu”   we add a “go back” button with the javascript:
Note that we tend not to use names with spaces in them just for safety.

Jump to slide by name of shape

There are some cases where you’d rather jump to a slide that happens to have an element on it with a specific name.   In this case,  there is another function we use that works for named elements rather than slide names:

function gotoSlideWithShapeName(aName) {
  var theSlide = cp.D[aName].apsn;    // get parent slide name
  cpCmndGotoFrameAndResume = cp.D[theSlide].from   // set next frame to the start frame number of that slide 

If you have a shape on the target slide with the id “section_3”  you can have a button that simply calls the javascript function:


With these two functions,  branching paths can be accomplished in Javascript, which can be an advantage in cases where you have complex branching scenarios.

For more information,  contact

( edited 6/11)