Memory games (Javascript IN shared actions)


Last week I presented at the Adobe eLearning World 2020 “Deep dive into Captivate with Advanced and Shared actions’. I had prepared 3 different scenarios, to be ready for any audience. Due to the poll before the session I decided to go for the ‘newbie’ scenario because the majority was new to Shared actions, and a considerable amount of attendees even to Advanced actions. That means that intermediate and advanced users were perhaps disappointed. To remediate I plan some blogs and examples as illustration. This is the first one.

Javascript and Shared actions

It is possible to have the command ‘Execute Javascript’ embedded in a shared action. When talking about games, randomization is mostly used but not a ready-to-go feature in Captivate. In the session I showed a very simple board game where the tossing of a dice is simulated, and the board cursor advances based on the result of the dice toss. That was realized with one shared action.

This game uses random numbers as well. It is a memory game which can be used in many variations due to the flexibility of shared actions, variables and multistate objects.


You will learn about the game rules in the game. There is an easy and a more complicated way to play the 3 games. Hope you don’t keep only the easy one if you are in for some memory training:


Have fun!

The post Memory games (Javascript IN shared actions) appeared first on eLearning.

How to allow multiple, different right answers?

Hi – In captivate, how can I allow multiple right answers, that differ from user to user?  For example,

“Which of the course goals do you feel will help you the most?”

A. goal 1

B. goal 2

c. goal 3

I want it to be possible for any or all answers to be right (or better, to not mark right/wrong at all). For example:

1. User 1 chooses A and B, vs.

2. User 2 choose B only.

I want both responses to be right.

So far what I have tried and didn’t work:

1. Multiple choice knowledge check with multiple right answers enabled, and

2. Checkboxes, because they allow the user to choose more than 1 response (but this also didn’t work because I think you have to mark each checkbox variable as right or wrong, 0 or 1

Thanks in advance for your advice,


The post How to allow multiple, different right answers? appeared first on eLearning.

Export Captivate Learner Notes with JavaScript

A learner can add notes to the text they’ve already typed up. Once they are ready they can export their notes in a new window and they can copy and paste these notes into a word processor, send it to their printer, or save it as a PDF. This project uses an easy to use three lines of JavaScript to make it work.

Slider with Plus/Minus buttons

This small project is created as answer to a question on the Adobe forums. You can visit the thread using this link:

You will see that the user was using a ‘outdated’ workflow with a multitude of Show/Hide actions and decisions in conditional actions, probably based on equally outdated tutorials which were published before the Multistate objects appeared.  Have a look at this sample project. It has only one slide. Use the Minus and the Plus button to move the slider. There is a protection based on the limits. The text ‘slider…’ to start with zero.


Tow multistate objects (progress bar and Text warning) , two variables and two one-decision advanced actions have been used. If this slider would be reused often, maybe with a different set of  states, I would convert the advanced to shared actions of course.

Gamified Learning – “Kitchen Quest”


This is Kitchen Quest, a small gamified learning demo my team and I built at our little eLearning company.

Our goal was to create a retro Gameboy style game to help technicians learn how to troubleshoot different appliances in commercial kitchens.  To accomplish this goal, we used multiple combinations of Advanced and Conditional Actions, Variables, and JavaScript.  This is the result.

Check it out and let me know what you think!  If you have any questions on the different elements of the game or how we got certain parts to work, please don’t hesitate to ask!

Kitchen Quest  Overworld  

The post Gamified Learning – “Kitchen Quest” appeared first on eLearning.

Retain text in Text Entry Box

Hi there,

I’m working on a responsive project with Text Entry Boxes and User Input.

My problem is, that whenever the user goes to the next slide and returns to the previous slide (the slide with the TEB), the value of the variable of the TEB is empty. This is problematic because I want to use the input of the TEB later on. I tried using the “retain text” button for the TEB-settings but it makes no difference.

Do you have any ideas?

Kind regards

The post Retain text in Text Entry Box appeared first on eLearning.

Dashboards Using External Databases, and machine learning

A great tool for storing your custom variables in local storage or session storage is CpExtra from Infosemantics, but what if you want to save your custom variables forever! Storing your custom variables forever means you can create custom dashboards for users for 1 module or 1000.  Reading your custom variables into Captivate projects lets you do unlimited things with advanced actions … present dashboards, jump to slides, show or hide learning interactions … the list is endless.

You an even store form submissions and retrieve what the learner submitted.

My database of choice is Google Firestore.  Firestore is a realtime database and makes it easy to register users (replacing an LMS). It feels just like registration on any modern application. You can easily view, edit and export all your data.

More on Firestore later, but one cool thing is that Firestore has is advanced analytics and even machine learning which can be used to customize learning experiences to each individual learner.  To get the most out of analytics I use Google Tag Manager, Google Analytics and Google Datastudio.  (I know that’s a lot of Google stuff.)

What’s the point of all of this?  There are many advantages to storing detailed user data in a real time database.  Every click on your project can store a value in a custom variable.  Users can switch devices and see everything the did in with real time updates. Remember, some clicks are more important than others. Amazon, Facebook and Google are storing all our “important” clicks.  Why not educators?

Thought experiment to you Captivate community:  I believe important clicks (user paths and decision trees) are more important than quiz data and module completion data.  Does a quiz really really measure learning? Does completing a module really tell you much?  I don’t think so.

Above:  the Firestore database

Above:  A simple mobile friendly dashboard showing quiz results.

The post Dashboards Using External Databases, and machine learning appeared first on eLearning.

Interactivity in Captivate

Recently I presented a webinar about Interactivity in Captivate. As usual I don’t present with a PPT, but with a Captivate presentation.  That makes it possible to publish later as an interactive tutorial. It needed some editing of course, and adding narration.

The goal was to show how different workflows can be used to create interactivity: Branching (menu), Forced viewing,  Progress bars, Click&Reveal, Drag&Drop, Knowledge Check slides, Games.  The presentation was followed by demonstrating some used workflows in simple situations.

If you are interested, have a look. Many slides have a Back to Menu button, where you may see a tooltip which was added in the Rollover state.

Click to see the presentation:


Would love to hear comments, questions. For narration I used slide audio, object audio and the Play Audio command depending on the situation.

The post Interactivity in Captivate appeared first on eLearning.

Sequence Check – Setup


I have posted an example file where the sequence of clicks is checked, under sample projects.  The workflow started from an old post, created before the switch from SWF to HTML5 output, and having lot of new features added to more recent versions of Captivate. This blog will explain the setup of both example slides.

At the end, for those interested in choice between advanced and shared actions, will explain why shared actions couldn’t be used in this use case.



Similar to the old post I used only two user variables (to be created):

  • v_counter: will track the number of clicks on interactive objects. It starts with a default value of 0. It is reused on the second sequence slide, by resetting to the default value using the On Enter action of that slide.
  • v_correct: will track the number of correct clicks, set up with default value of 0 and re-used in the same way as the previous variable.

Multistate Objects

Instead of the hide/show workflow used in the original post, this time replaced it by multi-state objects to display the feedback. Object is labeled Tx_Display (for the Geo-slide) and Tx_DisplayBis (for the Keypad slide). Look at the screenshot of Object states of Tx_Display:

Normal state is empty (easy to reset, will be automatically reset when returning to the slide if ‘Retain State’ is unchecked). The 6 following states correspond with the correct sequence, hence their labeling. The last state is the Wrong state. The sequence of states is important, because I will be using the ‘Go to Next State’ command in the actions.


If you follow my posts, you know that I am a big fan of the use of SVGs as image and interactive objects. In this case I used them mostly because they remain crisp at any resolution and lead to very small file size. The file size of the published project is less than 4MB. Almost half of that size is due to the bitmap images on the ready-to-go slides, and one PNG which I used for the Background of the Keypad. Look at the timelines of the sequence slides. I grouped the SVGs. Too bad that you cannot recognize the interactive object from the color (should be green), but they all have a pausing point set at 1.5secs:

The group Gr_Wrong on the Keypad groups all button SVGS which are not used in the pincode. Those buttons are on top of the image, and can be hidden, since the remaining keypad image shows them as well but in a non-interactive version. For the Geo slide, the colored country  SVG buttons are also on top of a big SVG (Europe), but I don’t want the colored ones to disappear, for that reason the buttons will be disabled, not hidden (see advanced actions below).

Actions and events – Geo slide

The colored country SVG buttons trigger an advanced action On Success. There are 6 countries, which means 6 advanced actions (created with the duplicate function). The five first actions are similar to this one:

Only the items marked by a red oval have to be switched for the actions SV2….SV5. It is the name of the SVG button in the first decision, and the literal (number) in the second decision. If the clicked country is not fitting in the correct sequence, the learner sees the Wrong state in the text shape and the Retry button will appear.

The last country SVG button has a slightly different action, derived from the previous. shown action.  Reason: the Next button has to appear if the sequence was totally correct. That extra command is highlighted by a blue rectangle.

The Next button has the default command ‘Go to Next Slide’ on its Success event.

The Retry button has to reset everything, as you can see in this screenshot. Action is triggered by the Success event:

Actions and events – Keypad slide

Because of the re-use of the variables v_counter, v_correct and the button Bt_Next which is timed for the rest of the project, the On Enter event of this slide is used to reset everything to default values. If you want to allow going back to slides, a similar action would be needed for the Geo slide, but that was not the case in the example file. The On Enter action is pretty simple:

Some explanation may be needed for the Hide command which I highlighted. Since the required pincode (29791) needs the number ‘9’ twice (second and fourth position in the sequence) I have put two SVGs on top of each other: SVG_Two and SVG_Four. By default SVG_Two is visible, but SVG_Four  is hidden and becomes visible With the same action where SVG_Two is hidden. You cannot have two interactive objects on top of each other when both are active at the same location.

The Number buttons trigger an advanced action On Success.  It is similar to the one in the Geo slide, except for using Hiding instead of disabling. Example of the first number button (which is 2):

As explained above, for SVG_Second (number 9) there is a slight difference:

Similar to the Geo slide, the last correct button (number 1) will show the Next button if all was correct:

Any wrong number button will trigger this action using its Success event:

The new Retry button, labeled RetryBis is similar to the one on the Geo slide, triggers:

Remember that the SVG button Four  is in the same location as Two, because both have the number 9. That is why SVG_Four has to be hidden and SVG_Two shown.

Why not use Shared Actions?

Although we have very similar actions for the SVG buttons, both on the Geo slide and on the Keypad slide, this is a typical use case where it is impossible to use shared actions. Problem are the ‘literals’, which should have been converted to parameters. Look at the screenshot of the action SV1_Act posted earlier. Logically these items should be parameters:

  • The SVG button SV_1 – compulsory parameter in the first decision
  • The literal ‘1’ in the condition of the second edition, not compulsory
  • The multistate object Tx_Display, compulsory paraBt_Nextmeter in the second decision
  • The state Wrong in the ELSE part of the second decision
  • The button Bt_Next in the ELSE part of the second decision

Why is the literal a problem? Because it is also used in the Increment command. If you replace it by 2 for the second button, this will also be the case in the Increment command. I may have a workaround, but it is not always functional.

Second reason: with the workaround the parameters would increase to 6, which is my limit for a usable Shared action. Whereas using duplicate functionality for the advanced action is lot quicker, since only two items need to be edited.

This blog is already way too long. If you like to hear about my ‘thumb rules’ for choosing between duplicate advanced and shared actions, post a comment. Maybe I’ll dedicate another blog to it.

The post Sequence Check – Setup appeared first on eLearning.