Sequences

Breaking down the average ride or show into scenes or sequences is the job of a show control programmer – and when we’re through, that’s precisely what you’ll be!

If we take a simple dark ride as an example, after leaving the load station, something has to tell the audio and lighting and show action equipment like doors to go when the ride vehicle makes its way through. As the ride enters the first scene, the first sequence is triggered. This could be really simple – a light cue, an audio track playing to set the mood, perhaps a video clip that plays on the door as you enter them.

Thinking about this logically, we would program something like this (see video clip for table)

Looking at this logic, we see that we need to do these actions at different times to make it all feel lined up perfectly (going back to our analogy of a conductor leading a symphony). The scene 1 transition and door welcome video run at the same time – a crescendo of sorts as you enter the attraction.

This could be a single sequence that you could call Scene 1 Start in WinScript. Or you could break it into multiple sequences (let’s say that the light cue you called needs to run again in a later scene or you want to break it into modular functions where you set a light cue number and only message the lighting controller from a single sequence, both of those methods are completely acceptable. We’ll see a couple of examples of these as we go on through the course – and as you’ll learn, there’s more than one way to bake a cake, and they still end up tasting great no matter what.

So we’ve got a sequence full of actions that does something cool (and we’ll see how this gets created in WinScript in just a moment). Let’s look at creating a sequence and what some of the options are.

First, to create a new sequence, I can either click the NEW button here and it’ll pop up a wizard for configuring a new sequence. If I double-click on the bottom row of the screen, it’ll create a new sequence as well, with the default options. Then, you can right-click on the sequence number and choose sequence options on the new one, which gives you the same wizard. I clicked on 2 and notice that it added a new “blank” row at the bottom for me to use later – but row 2 is a REAL BOY – I mean a real sequence and ready to be configured.

On this screen, I can name my sequence, choose a sequence type and choose the display mode for Timed or Timecode-based sequences.

For sequence types, we have three choices. Logical is for sequences that don’t have a time element – they are only functional and meant to run as fast as they can to achieve their objectives. You could use this to turn on all projectors in the queue line in the morning, for example, or to send a reboot or Wake Up command to some piece of equipment downstream. Very useful for elements that aren’t show timing specific!

For timed elements, there are two types of sequences, and it’s based on what type of clock is driving them. Timed sequences use internal clocks based on the chips inside the controller. SMPTE sequences (on the V16Pro, V16X, and RidePlayer models only) slave their clocks to another source – an SMPTE clock, either internally generated or provided from some external source. We’ll be talking about SMPTE later, so we’ll focus on Timed sequences here, but it’s good to know where to configure them now.

Once you select a type of sequence, if you choose either of the time-based styles, you have a choice of Display modes – Grid View or Timeline View. It’s wise to pick a display mode and stick with it; switching back and forth is not recommended. Let’s take a look at each of them to understand the differences.

Let’s look at the other tabs to see what else we can configure for Sequence Options. On the behavior tab, we can Disable a sequence from running at all. We can set the sequence to automatically start when the device first boots up (an excellent tool for making sure your attraction is in a consistent known state when first waking up!), or we can set a sequence to Loop. One note to be careful with Loops, particularly with logical sequences – they will execute as fast as the device is capable of running if you don’t build logic into them to slow them down. That could consume a considerable number of resources if not well thought out!

A critically important checkbox is the “Wait for Device Responses” feature – when the controllers send a message out to some devices, they can respond with an acknowledgment or some other form of update response (status, lamp life, updates to variables, etc.). If this checkbox is checked, the sequence will wait until that response is received before running the next event in the sequence (sounds really useful, right?). There’s a cautionary statement that goes with this – if you wait, you don’t know how long you might wait. If your script is very time-sensitive, it may not be appropriate to wait for the responses inside that timed sequence – the other device could be offline, the network could be congested, etc. – so it’s all part of your job as the designer to make this decision carefully and appropriately for your particular use case. If you have questions, let us know and we’ll be happy to help make recommendations.

Restart Enable controls how a sequence behaves when it is issued a ‘Start’ command. By default, a sequence that is already running that receives a ‘Start’ will basically ignore it and continue with execution. A sequence that has ‘Restart Enabled’ will restart from the beginning when a ‘Start’ command occurs. The lockout setting specifies how much time must go by after a restart occurs before another restart is allowed to take place. Any ‘Start’ commands during the lockout period will be ignored.

On the advanced tab, we have a couple of helpful options for managing sequence length – two styles of automatic length management (based on either events or length of media). You can also manually set the length of your sequence if you are awaiting additional media or know that you need it to run longer than what’s showing.

If you are designing ShowTouch panels and want to prevent all your helper sequences from being visible in ShowTouch, this checkbox is helpful and will restrict the list of available sequences to those you want available for Touch use.

Finally, redundancy will be covered in a separate series of videos, so if you have questions on the redundant features and how to use them, please check out that course.

Back to the list of sequences. Some of those options we saw inside Sequence Options are also visible here as a quick reference. D for Disabled, A for Autostart, and L for Looping. You can check and change these here also! Now let’s look at the views of what a sequence looks like.

Here’s the grid view. Think Excel for show control! It’s a very intuitive interface (and identical to the interface for Logical events with the addition of the Time column for time-based Sequences). We’ll go into details on what goes into these fields in the Events session, but know that this is what the user interface looks like for Grid View.

The other view for editing time-based sequences is called Timeline, and it’s the choice for anything involving media playback from any Alcorn gear (RidePlayer, Binloop, etc.) or where you are more comfortable working in an interface that feels like a non-linear editing suite (like Premiere, ProTools, Audacity, etc.) With this view, you can add groups to organize your events and see the duration of your media live on-screen. You can use this view to jump into or “scrub” into a specific section of the media files in real-time (provided you are using video/audio playback hardware that supports that functionality). As we mentioned, there’s a context-sensitive toolbar here that shows you options specific to the timeline view, and in addition to the others you are familiar with, there’s zoom in/out, increase and decrease spacing, groups, markers and lock the screen to prevent scrolling automatically when watching playback in Live mode. We’ll get into groups and markers in the events segment.

So now we’ve seen how to create a sequence.

But how does it communicate with all our devices and how do we get them to show up in the system? How do we know which devices are available to us?

Once we have the devices, something has to START this sequence. It could be a time of day, a variable being passed in from another system, a contact closure input directly into the controller, or additional networked I/O or any of a variety of other methods. We’ll see several examples of that in a future session called Triggers.

And those actions are what we call Events. We’ll take a look at Events in just a few minutes. Before we do that, though, let’s talk about devices, and how we add them to our project and communicate with them.