TABLE OF CONTENTS
- Event Actions, Event Groups, and the Timeline
- Major Features
- How to Enable Timelines in your Performance Engine
- Example Event Timeline with Simple Chat Messages
- Structure of a Timeline
- Event Action Format
- Running the Timeline with Simple Chat Messages
- Example Event Timeline with Avatar Animations
- Loading Animations
- Set up a Mover or Animation Inviter
- Eventlist Example with Animation Actions
- Defining Animation Targets
- Send Animation Invites
- Run the Timeline with Animations
- Example Event Timeline with Scripted Cameras
- What you Need for Cameras in your Timeline
- (Optional) Using Custom Camera Seats
- Communicate the Use of Cameras to your Audience
- Eventlist Example with Camera Actions
- Running the Timeline with Scripted Cameras
- Returning Camera Control at the End
- Example Event Timeline with Rezzing tricks
- Preparation for Rez Actions
- Timeline Steps with Rezzing/Derezzing
- Running the Timeline with Rezzing Tricks
- How to Stop and Reset Timelines
- How to Stop a Timeline in Progress
- How to Reset MST Mover positions and Animations from the Eventlist
- How to Clear Camera Control from the Eventlist
- How to Clear All Active Animations from the Eventlist
- Tips for Good Timeline Performance
- Avoid too many simultaneous commands, especially chat commands
- Advanced Timelines – Offset Time
- What is Offset Time
- When is Offset Time Useful
- How to Convert Absolute Time to and from Offset Time
- Advanced Timelines – Event Groups
- Why Groups are Useful
- How to run Groups Individually
- Private Groups
- The “onrez” Group
- Advanced Timelines- How to Debug Timeline Commands.
- Check Messages
- Enable Debug Mode
- Advanced Animations – Animation Overlays
- Additional Eventlist Commands
- Curtain Control
- Triggering one Timeline from Another Timeline
- Sending Link Messages
- Listing Event Groups
- Outfit Changes
- Show Active Animation Permissions
- Load Another Eventlist Notecard
- Event Action Reference
1.a Event Actions, Event Groups, and the Eventlist Timeline
The MST Performance Engine can trigger particular event actions at highly precise times. Event actions can include avatar animations, avatar and object movement, scripted camera effects, rezzing and derezzing objects, costume changes, curtain movement, and any special effects that can be triggered by a chat command.
Event actions can be organized into event groups. Event groups specify which avatars or devices the actions should apply to. Event groups can be run individually, or all at the same time. We’ll explain more of how this works below.
The list of event groups and event actions is collectively called the eventlist timeline. The timeline is defined in the MST Performance Engine’s “~EVENTLIST” notecard.
1.b Major Features
The MST Event Engine can do the following:
- Trigger events with sub-second accuracy, even in stressed busy regions
- Combine movement, animation, chat, and other controls in a unified, single point of management
- Handle very long performances with hundreds of commands
- Provide animation control for up to 80 avatars simultaneously
- Organize commands into groups, and then run each group individually or all at once
- Manage all aspects of your timeline with click menus as well as chat commands, whichever you prefer
- Optionally allow other people to stop/run your timelines.
- Run events even if the owner is offline.
- Timing can be written in either an absolute chronology format (elapsed seconds since the timeline started), or as relative to the last action format (elapsed seconds since the previous step). The time format can be converted back and forth as desired, automatically.
- Run events in repeating loops
1.c How to Enable Timelines in your Performance Engine
To tell your performance engine you wish to use it to manage eventlist timelines:
- Rez your performance engine on the ground.
- Select it, choose edit, navigate the contents tab in your viewer’s build window.
- Edit the “~MST_CONFIG” notecard. Find the line that says “EVENTLIST_ACTIVE” and change it to say “EVENTLIST_ACTIVE=YES” if it doesn’t say this already.
- Save your notecard.
- After your performance engine finishes initializing, center it the usual way.
- Your performance engine will now show commands for playing event lists (play show, reset show, etc.)
Important Note for ChoreoHUD Director users: The MST ChoreoHUD Director has its own built in, graphical eventlist capability. Do not enable the eventlist in the MST Performance Engine if you are planning to run your eventlist from your ChoreoHUD Director.
2. Example Event Timeline with Simple Chat Messages
2.a Structure of a Timeline
In this section we’ll introduce a very simple timeline for demonstration purposes. This simple timeline will trigger nearby chat messages with a few seconds delay between each message.
To create this simple timeline, open up the ~EVENTLIST notecard in your MST Performance Egnine and paste following lines the end:
@group dancers1 dancers1= 0|SAY:0:Event Group dancers1 is starting up! This is an example of a 10-second long timeline with timed (or choreographed) chat messages 5|SAY:0:Dancers1 says Hello! It's been 5 seconds since we started the Event Group dancer1 timeline 10.5|SHOUT:0:Dancers1 has been running for 10.5 seconds. Please wait 5 more seconds before it completes... 15.5|SAY:0:Dancers1 is now finished, this is the last command in the Dancers1 event group
When you are finished pasting the above lines into your ~EVENTLIST notecard, save the notecard and wait for the event engine to initialize.
There are three important elements in the above timeline. The first is the group definition which names a particular event group. There always must be at least one line like this and it starts with an “@” symbol. The group definition line here is “@group dancers1” and it tells the engine that you will be using an event group called “dancers1”. You can name your group anything, but it should a single word with no spaces, commas, “:” or “|” characters.
The second important element is the start of an event group timeline. This is the second line, the one which says “dancers1=” . This line should only contain the name of a event group you have previously defined in the line above it, followed by “=”, symbol and nothing else. This line signifies that all lines after it will be commands to execute when that event group is run.
Why do we use these two lines with with “@” and “=” symbols? It’s for historical reasons and compatibility with other timeline processing tools. Try not to get too hung up on the meaning of the syntax, but do take care that your own event groups always contain these two lines.
The last, and longest section, is the event actions that belong to the above group. These are all the lines that start with timing numbers, and then a “|” symbol followed by a capitalized command. In our example above, these are lines that start with 0,5,10.5,and 15.5 respectively. We’ll explain more of this format below.
2.b Event Action Format
Event actions have a very specific format.
First they start with a number, which represents that number of seconds to wait before this line should run. A “0” means “run this line immediately as soon as the event group starts.”.
Next, there is “|” character, followed by a capitalized event command which may optionally include extra text after it.
In our example the commands are SAY and SHOUT, which correspond to either speaking or shouting in nearby chat. Depending on the command, more text may be needed on each line. The SAY and SHOUT commands, for example, require you to specify the channel number (0 is the visible, public nearby chat channel), and the text to speak.
2.c Running the Timeline with Simple Chat Messages
You’re now ready to test your first simple event group. Ensure your performance engine is centered, then click the MST Performance Engine, and choose “play show”. You will see messages appear in your nearby chat window as the timeline executes.
Alternatively, you can use the chat command “/8 playshow” if you are in chat distance. There are always chat commands for every option in the blue popup menu. If you want to see what they are at any time, you may choose “<more show” and then “show HELP” from the performance engine’s menu.
When you play the show, the MST Performance Engine will start playing all defined event groups simultaneously. You should see the following lines appear in your nearby chat:
[11:33:45] newAct: Event Group dancers1 is starting up! This is an example of a 15.5-second long timeline with timed (or choreographed) chat messages [11:33:50] newAct: Dancers1 says Hello! It's been 5 seconds since we started the Event Group dancer1 timeline [11:33:55] newAct shouts: Dancers1 has been running for 10.5 seconds. Please wait 5 more seconds before it completes... [11:34:00] newAct: Dancers1 is now finished, this is the last command in the Dancers1 event group
I’ve included timestamps in the above chat messages so you can verify the timing matches the times specified in the ~EVENTLIST notecard timeline steps.
3. Example Event Timeline with Avatar Animations
In the previous section we showed how to use the MST Performance Engine to run a timeline with chat commands. While this is useful for showing the general concepts, most people will want to use the MST Performance Engine to run a timeline with event actions that can animate avatars, not just chat. Running avatar animations requires a little more setup. This section will show you what you need to get started and offer you an example.
3.a Loading Animations
Any animations you wish to use in your evenlist timeline must be copied into the inventory of the MST Performance Engine. If you don’t do this, you’ll get an error when the ~EVENTLIST notecard loads.
In the examples below, we’ve copied the free demonstration animations “The Robot” “Figure Eight” and “standing dance” into the MST performance engine. If you don’t have these handy, you may copy them from the contents of the MST ChoreoHUD Solo object. You may also copy your own animations into the performance engine instead, but in this case be sure to rename the animations in the examples to match the animations you have used.
3.b Set up a Mover or Animation Inviter
To use avatar animations with the MST Performance Engine, your MST Performance Engine should be centered on a nearby MST centerpoint, and an “MST_mover_rename_me” object should be rezzed nearby. Do not sit on the mover yet, we will need to prepare it first.
Using the mover for animation choreography is not required, but it is the most popular way to use choreographed animations on stage. For more information about choreographing animations without movers, see sections of the documentation about “Animation Inviters”.
- Rename your mover object “leadDancer” for this example. In the future you can name your mover anything unique, as long as you don’t use spaces, “|” or “,” characters.
- When you’ve finished renaming your mover using your viewer’s build window, click the mover and its color and hovertext will change to reflect the new name. You do not need to choose anything from the menu.
MST Movers automatically change color hue when their name changes. This helps you distinguish movers from each other at a glance, when they are rezzed out on the ground. If for whatever reason you dislike the color you may try changing the mover name slightly.
3.c Preparing the Eventlist Timeline
Next, open up the ~EVENTLIST notecard in your MST Performance Engine and paste following lines at the end. If you have any existing event groups from earlier examples, you may delete them.
@group dancers1|leadDancer|waiting dancers1= 0|SAY:0:Event Group dancers1 is starting up! This is an example of a 35-second long timeline with choreographed animations. 0.2|SAY:0:You should be sitting on an MST mover. 5|SAY:0:Now you're running the starting animation 5|ANIM:standing dance 10|SAY:0:Now you're running the 2nd animation 10|ANIM:The Robot 20|SAY:0:Now you're running the 3rd animation 20|ANIM:Figure Eight 30|SAY:0:Now you're playing the 1st animation again 30|ANIM:standing dance 35|SAY:0:Finished 35|STOP
In the example above, you should change these to the name of your own MST mover and the name of your own animations if you have customized either one.
The above timeline should look a little familiar compared to the earlier chat example. You can see the event group definition line, the event group start, and the event action times and commands. There are some new animation-specific twists that will be described below. For now, just save the new ~EVENTLIST notecard and wait for the performance engine to reinitialize.
TIP #1: A lot of people ask how do know how long various animations and dancers take, in seconds. There is no consistent way to find out. You can hope that the author of the animation included this information in the name or the description field of the animation. You can also check the animation timing database here: http://sldancequeens.blogspot.com/p/dance-database.html . If all else fails, you can click your animations, click “play” and time how long it takes to do a complete loop with a stopwatch, or by using the ChoreoHUD Solo.
TIP #2: You might ask if you are supposed to type each animation line by hand into this timeline when composing your own choreography. The answer is that you can do this, but there are more natural, faster ways. See the documentation section on the MST ChoreoHUD Solo for a more visual, intuitive way to create an animation sequence that will then print out a timeline sequence.
3.d Defining MST Animation Targets
When using the MST Performance Engine to animate avatars, you must include the names of all MST movers or animation inviters that run those animations in the group definition line.
For the example above, you’ll see the group definition line say:
After the name of the group there is a “|” character, and then the name of the MST mover that will be used to run animations. If more than one MST mover should run the animations in this group, then separate the movers with spaces such as “@group dancers1|leadDancer,secondDancer”.
3.e Send Animation Invites
Before you run an event group with animations, the MST Movers mentioned in the group definition line (“leadDancer” in the example above) should have avatars sitting on them. Sit on your mover now.
When an avatar sits on one these movers a number of things happen:
- The mover will not animate you right away, you will see yourself placed in the default awkward “sl sit” pose. This is intention to show that MST does not have animation control yet.
- You will receive a private nearby chat message explaining that an invite will be sent to you, and how long it will take to arrive. Invites are not sent out instantly to avoid overloading a region and becoming lost. Instead they are queued for maximum reliability.
- At about the time mentioned, you will then receive a permission request to animate your avatar, from your performance engine. If you have already accepted the permission dialog in the past, the performance engine may ‘remember you’ and sometimes not send a second invite.
- When you accept, your avatar will do a slight “surfboard shuffle” to prove that animation is working, and then your pose will change to a stand.
- The mover will become invisible, and change shape to a skinny pole to optimize for some viewer behaviors.
When all these steps complete, continue on to the next section.
3.f Run the Timeline with Animations
When all avatars to be animated are sitting on the appropriate MST movers, and have accepted the animation permission dialog, you’re ready to start the event timeline.
Start thetimeline by clicking the MST Performance Engine and selecting “play show”.
Alternatively, you can shout the chat command “/8 playshow”.
When running animations, the SL server must download each animation to everyone who is viewing it, such as your audience. Sometimes this can take a noticable amount of time, such as 1-15 seconds, depending on the length of the animation, region performance, and connection bandwidth of particular audience members. During this time when someone’s viewer is waiting to download an animation, the avatar that is supposed to be animating will appear to “freeze” from the downloader’s perspective, while that person waits for the animation to finish downloading.
This is generally unwanted behavior during performances. To avoid this freezing, one normally runs through all the animations needed within the audience’s draw distance, and in their cone of vision, but behind something like a wall, before the show starts.
MetaHarper Show Tools supports this ‘precaching” of animations. To precache, have at least one avatar on any MST mover associated with that act, and either click the MST Performance Engine and choose “precache”, or shout the chat command “/8 precache”
4. Example Event Timeline with Scripted Cameras
4.a What you Need for Cameras in your Timeline
Before you start using scripted commands in your timeline, you should have set up a nearby MST centerpoint and configured MST Camera views as described in th camera documentation. If you don’t wish to use scripted cameras in your event lists, you can skip this section.
If the MST centerpoint or furniture is not owned by you, you may need to use the “stagerez” or “center” commands with your MST Performance Engine before starting your camera-enabled act. You should also ensure that you have added an “ALLOW” line for the centerpoint owner by UUID in your performance engine’s ‘MST_CONFIG’ notecard.
When you use an MST Mover or wear an MST camera HUD, you can see the scripted camera movement even while you are performing the act. However it is unlikely that your audience will have these devices.
Instead, you should also have enough camera-enabled furniture set up for your audience to sit on. You can use the included MST Theater seat for this purpose, or you can create your own theater seats.
4.b (Optional) Using Custom Camera Seats
If you create your own seats, make sure your furniture uses a poseball-less pose positioning system (AVSitter(tm) is popular and tested to be compatible). Then, copy the “~camSeat1”, “~seatConfig”, and “~camSeatManager” scripts from the MST Theater seat into your custom furniture. Make sure that “~seatConfig” notecard sets the name to your centerpoint in the VENUE field, and has an ALLOW= line specifying the UUID of the centerpoint owner if this is someone other than yourself.
Finally, if your custom furniture can seat more than one avatar at a time, add an additional “~camSeat*” script for each additional avatar that can sit on that same piece of furniture. For example, if you have a 3-person sofa, add scripts “~camSeat2” and “~camSeat3” in addition to “~camSeat1”. These additional ~camSeat Scripts can be found in a box called “more sitters” in your MST package subbox titled “Optional- More Camera Components”
4.c Communicate the Use of Cameras to your Audience
Plan a message to let your audience know that your performance uses scripted cameras. Let them know they will need to sit down in order for the camera effects to work, and that they may wish to reset any viewer camera customization by pressing “control-9”.
Let your audience know that they can “break out” of the camera control at any time by using the normal viewer camera controls, and can also get back to the scripted camera view at any time by pressing the “Escape” key.
This message can be spoken in audio, or written in text, or rezzed in a friendly texture with instructions, or all three.
4.d Eventlist Example with Camera Actions
Below is an example of an ~EVENTLIST notecard that uses scripted camera commands. It assumes you have already set up Camera Views named “Camera1″,”Camera2”, “Camera3” in the ~CAMERAS notecard as described in the earlier Camera documentation.
@group cameras1 cameras1= 0|SAY:0:Event Group cameras1 is starting up! This is an example of a 53-second long timeline with choreographed cameras. 0.2|SAY:0:You should be sitting on an MST mover, MST theater seat, or using the MST Camera HUD. 2|SAY:0:Now we're moving to Camera1 view 2|SETCAM Camera1 5|SAY:0:Now we're fading out to black.. 5|CAMFADEOUT 10|SAY:0:Now we're fading back in. 20|CAMFADEIN 30|SAY:0:Now we're panning to Camera2, slowly 30|SETCAM Camera2 200 45|SAY:0:Now we're panning to Camera3, quickly 45|SETCAM Camera3 50 50|SAY:0:We're finished! Clearing camera control in 3 more seconds. 53|CLEARCAM
4.e Running the Timeline with Scripted Cameras
When all avatars that wish to see the scripted Cameras sequence are sitting on MST-enabled furniture, you’re ready to start the event timeline.
Start the timeline by clicking the MST Performance Engine and selecting “play show”.
Alternatively, you can use the chat command “/8 playshow” if you are in chat distance.
Hit the “escape key” on your keyboard a few times before the performance starts to ensure your viewer is using the default (scripted) camera view.
4.f Returning Camera Control at the End
You may have noticed that the last line of the example timeline contains the “CLEARCAM” command. This is very important, so your last camera view doesn’t stay active longer than it is supposed to.
You may also send this command manually bu shouting “/8 clearcam”. You can also wear the MST Curtain HUD for another way to quickly send this message, if needed.
5. Example Event Timeline with Rezzing tricks
The prop rezzing documentation covers what you need to know to rez and derez your set manually. However, you can also rez and derez objects on demand, in your eventlist timeline. In this section we’ll show you how to do this.
5.a Preparation for Rez Actions
You should make sure that your MST Performance Engine is centered and has at least one prop configured as described in the prop rezzing documentation.
5.b Timeline Steps with Rezzing/Derezzing
Below is an example of an ~EVENTLIST notecard that uses commands to rez and derez individual objects. It assumes you have already set up prop objects, (in this case, the props are named prop1, prop2, prop3) in the ~PACKLIST notecard as described in the earlier rezzing documentation.
@group rezexample1 rezexample1= 0|SAY:0:Event Group rezexample is starting up! This is an example of a 12-second long timeline that demonstrates 0.2|SAY:0:rezzing and derezzing individual objects from your MST Performance Engine 2|SAY:0:Now we're rezzing a prop named "prop1" 2|REZ prop1 5|SAY:0:Now we're rezzing two props, "prop2" and "prop3" 5|REZ prop2:prop3 10|SAY:0:Now we're de-rezzing all three of the above props 10|DEREZ prop1:prop2:prop3 12|SAY:0:We're finished!
Note: This example shows how to rez individual named objects. You may also bulk-rez and bulk-derez an entire large scene outside of the EVENTLIST timeline, using the MST Performance Engine’s “stagerez” commands as described in the rezzing documentation.
5.c Running the Timeline with Rezzing Tricks
When all all the props you are using with the “REZ” steps exist in the MST Performance Engine’s inventory, and they have lines in the ~PACKLIST notecard, you will be ready to run your example timeline with rez commands.
Start the timeline by clicking the MST Performance Engine and selecting “play show”. Alternatively, you can shout the command “/8 playshow” if you are in chat distance.
6. How to Stop and Reset Timelines.
6.a How to Stop a Timeline in Progress
Often you will want to stop a timeline before it gets to the end for one reason for other. You can stop an timeline that is playing by either clicking the MST Performance Engine and choosing “reset show” or by shouting the chat command “/8 resetshow”. When you run this command all movers, animations, and timeline processing will stop and return to their starting positions.
6.b How to Reset MST Mover positions and Animations from the Eventlist
You can also use the “STOP” command step from wthin a timeline. This will stop all movers and animations. It is a good practice to use this as one of the very first timeline actions to ensure that MST movers are in position and ready. If you only wish to stop movers but not animations, you can use “STOPMOVE” in the group where you are using movers, or “STOPMOVE:ALL”.
6.c How to Clear Camera Control from the Eventlist
You can use the “CLEARCAM” command within a timeline to disable scripted camera control. Typically this is done at the end of an act that uses scriped cameras.
6.d How to Clear all Active Animations from the Eventlist
You can use the “CLEARANIM” command within a timeline to remove all animations activate on avatars the performance engine controls. This can sometimes cause avatars to be stopped in unusual poses, so it is advisable to play an animation right afterwards that looks like a normal stand or pose. The “STOP” command could also be used for this and as a side effect will reset avatars to their starting pose.
7. Tips for Good Timeline Performance
7.a Avoid too many simultaneous commands, especially chat commands
The MST Performance Engine ~EVENTLIST notecard allows you to run multiple commands at the same time. For example, a timeline that starts more than one command at exactly “3.0” seconds after it starts is valid. The MST event engine will not create any artificial delays between these commands:
3.0|SAY:0:This command will be run 3 seconds after the timeline starts 3.0|SAY:0:And so will this one
Similarly, if you have different event groups defined, and start them all at the same time (default behavior for start show), multiple commands will run at the same time without a problem. For example:
@group1 group1= 3.0|SAY: This command will be run 3 seconds after group1 starts @group2 group2= 3.0|SAY: This command will be run 3 seconds after group2 starts
However, one thing to keep in mind is that there’s an SL script engine limit to how many commands you can run “simultaneously”, and some commands are faster than others. In particular, chat commands (SAY, WHISPER, SHOUT, REGIONSAY) execute slowly on an SL simulator. Avoid running more than 3-4 at the same exact time. If you attempt to use too many chat messages at once, they can either be delayed or lost altogether.
You may be wondering just how fast the event engine can process commands. It completely depends on the script performance of your region. Check your region stats in the viewer window (controls-shift-1) and find the line with “script run” and “spare time”. You want script run to be as close to 100% as possible and spare time to be greater than 1ms for the best script performance. Keep in mind that a large audience will tend to use up a great deal of script time for their own attachments and HUDs. For this reason try and plan for degraded script time whenever possible by not expecting too many commands to run at the same moment. Space them out 0.2 or even 0.5 seconds apart for safety if you have the option.
8. Advanced Timelines – Offset Time
8.a What is Offset Time?
Normally your timeline steps have a number a the front, representing seconds that must elapse since the start of the timeline to before that step should execute. This is called absolute time. Here’s a quick example:
@group dancers1 dancers1= 0|SAY:0:This shows as soon as the dancers1 event group starts 5.0|SAY:0:This shows 5 seconds after the dancers1 event group starts 10.0|SAY:0:This shows 10 seconds after the dancers1 event group starts 11.0|SAY:0:Dancers1 event group is finished.
There is another way to specify timings. instead of specifying seconds from the start of the event group, you can instead specify seconds since the previous step. When you specify “seconds since the previous step” you add a “+” in front of the line and this is called offset time. You can write any timeline in either offset time or absolute time, whichever is more convenient. Here’s an example of the same exact timeline above, written with offset time.
@group dancers1 dancers1= 0|SAY:0:This shows as soon as the dancers1 event group starts +5.0|SAY:0:This shows 5 seconds after the dancers1 event group starts +5.0|SAY:0:This shows 10 seconds after the dancers1 event group starts +1.0|SAY:0:Dancers1 event group is finished.
8.b When is Offset Time Useful?
You may ask yourself why you would want to use offset time instead of absolute time. Absolute time is easier for most situations, but there is one particular scenario where it is suboptimal. If you have a timeline and you want to insert some new content into it, either at the beginning or middle, if you use absolute time you have to change every single line timing after your change to account for your inserted content. If you use offset time, you do not need to change any lines except for the ones you insert new.
So, adding new content into an existing timeline is much easier with offset time.
8.c How to Convert Absolute Time to and from Offset Time
Luckily you do not have to choose one time scheme or the other. You can freely convert back and forth, or even use a mix of both formats in the same timeline. You can change your timeline to whatever format is best for the changes you wish to make.
You can convert your timeline by clicking your engine and using the “more show” / “print events” command. Here you can enter the name of your timeline group and optionally specify ‘ offset’ after it to have it printed in offset time.
If you are using chat commands, you may shout “/8 printevents yourEventGroupName” followed by either “abs” or “offset”. For example, if our ~EVENTLIST notecard contains a group named “dancers1” we can run “/8 printevents dancers1 abs” to show that group in absolute time format. We could also run “/8 printevents dancers1 offset” to show that group in offset time format.
The printout from these commands can be pasted into your EVENTLIST notecard, replacing whatever was there before for that group
If you find you are switching between offset time and absolute time frequently, you may wish to try the MST ChoreoHUD Director Edition. This tool lets you change time format with a single button click and insert commands into timelines graphically.
9. Advanced Timelines – Event Groups
9.a Why Are Groups Useful?
You have have noticed in the timeline examples that we organize timeline steps into different event groups. Typically this is done for convenience, so that you can create a dance routine for say, Bob, that lasts five minutes, and then another dance routing for Eve, which lasts five minutes. Then, you can can put both of these five minute routines into the same show, in two different event groups, which is an easy cut-and-paste operation. You don’t need to merge them together by hand, the MST Performance Engine will do this for you. In the below example, we have two groups. When you run the entire timeline with “playshow” as usual, they will be blended together.
@group bob|bobmover bob= 0|SAY:0:Group bob is starting. 5|SAY:0:Bob has been running for 5 seconds 10|SAY:0:Bob has finished. @group eve|evemover eve= 0|SAY:0:Group eve is now starting 3|SAY:0:Eve has been running for 3 seconds 8|SAY:0:Eve has been running for 8 seconds 11|SAY:0:Even has finished.
This automatic blending together of event groups into a unified timeline can also be used for your own style of organization. Some people like to put special effects or emotes in their own event group, for example.
It is worth noting that if you break your act into smaller groups, the larger act becomes easier to build, test, and debug. Your performance engine allows you to run just a single group at a time until you are satisfied with the results.
9.b How to run Groups Individually
Sometimes you do not want to automatically blend all the event groups together and start them at the same time, like the playshow command does. Sometimes you want to run each group independently, for example if each group represents a different short act, and you’d like to run them one after another with free-form intermissions in between them. Or, perhaps you have an event that has three possible endings and you want to choose which one to use while the show is running.
Whatever the reason, it is easy to run an event group in isolation. Instead of using the “playshow” command, you shout the chat command “/8 run yourGroupName”. In our example above, we could run group “bob” by itself by “/8 run bob” or group “eve” by itself with “/8 run eve”.
If you are using a lot of individual groups, you might want an easier way to trigger them other than chat commands. The “ChoreoHUD Director Edition” provides this functionality.
9.c Private Groups
Sometimes you wish to have your cake and eat it too. If you want to use “playshow” to merge most groups together, but also have a few groups that are never merged and only used with “/8 run”, we call these ‘private’ groups. You can make a private group by naming it something that starts with “!”. These groups will be ignored when you use “playshow”.
If you are using private groups, you might want an easier way to trigger them other than chat commands. The “ChoreoHUD Director Edition” provides this functionality.
9.d The “onrez” Group
If you use an event group named “onrez” it will behave in a special way. This event group will execute immediately after you use the “stagerez” command with your MST Performance Engine. This can be useful for setting some pre-show preparation commands, such as enabling cameras, showing your audience a custom curtain banner, or sending welcome or informational chat. An example of this is below.
@group onrez onrez= 0|SAY:0:This command is in the onrez group and will run immediately when you use stagerez with this MST Performance Engine.
10. Advanced Timelines- How to Debug timeline commands.
Check your Messages
If your timelines are not behaving as expected, the first thing to check is your nearby chat messages that show up whenever you save the ~EVENTLIST notecard. Make sure you see a message like “Adding timeline for group yourGroupName” for each group name you defined. If you don’t see this message, carefully check to make sure that you have specified both the group definition and group start lines with no syntax errors. If you can’t find what might be wrong, try replacing what you have with one of the example timelines at the beginning of this document, and then slowly modifying it. Pay very careful attention to any errors you may see in your nearby chat window after you save a notecard. If you aren’t seeing any messages at all, “reset scripts” in your MST Performance Engine may help.
Try turning on debugging
You can enable “Debug Mode” for the MST Timeline by clicking the MST performance engine, clicking the “more show” button, and then choosing “debug”. You can also enable it by using the chat command “/8 debug”
When in debug mode, each command the MST tries to run will be printed in your nearby chat, when it tries to run it. This can help you see more easily if your timing is as you expect, or if your commands might be mistyped in some way.
Make sure to turn OFF debugging before you use your MST Performance Engine in a show. To turn off debugging, click the performance engine, choose “more show” and then click “nodebug”, or use the chat command “/8 nodebug”
11. Advanced Timelines- Animation Overlays
There are some times where you want to play one animation on top of another, without the previous animation stopping. For example, you may want to play a guitar-playing animation that will take over the avatar’s arm movements, while their legs continue to perform a shuffle dance.
To overlay an animation on top of an existing one, without stopping the previous animations, use the OVERLAYANIM command. For example:
0|ANIM:shuffle_dance1 5|OVERLAYANIM:guitar_play1 20|OVERLAYSTOP:guitar_play1
In the example above, shuffle_dance1 will continue to animate the avatar’s legs, while guitar_play1 will animate their arms into a guitar playing loop. You have to stop overlay animations yourself. You can do this with the “OVERLAYSTOP” command as shown above.
With combinations of OVERLAYANIM and OVERLAYSTOP you can do some clever things, such as make a dance animation appear to start somewhere in the middle instead of at the beginning, by removing an overlay, thus exposing the underlying animation. This advanced technique can be used to crop intro pieces of an animation.
Overlay animations are subject to the their “animation priority”. The higher the priority order animations take precedence over lower priority animations. Most priorities are level 4 or level 3. It’s advised to test your overlay behavior manually first, by clicking the animations directly in your inventory and choosing “play in world” to determine if they can overlay on top of each other as you expect.
12. Additional Eventlist-related Commands
12.a Curtain Control
If your performance area has a curtain that can be opened and closed via chat commands you can use MST Performance Engine to open and close at the appropriate times in your act.
First, check with the owner of the centerpoint you will be using that they have set the CURTAIN_OPEN and CURTAIN_CLOSE lines inside the MST centerpoint’s VENUE_CONFIGURATION file to chat commands that can open and close their curtain systems.
Then, use the CURTAINOPEN or CURTAINCLOSE step commands in your timeline as needed. For example, you may wish to put the following line at the end of your act:
The advantage of using these commands is that you can move your act to different venues, which might use different curtains with different chat commands, and you won’t have to change your act. The MST Performance Engine will read get the correct curtain chat command from the MST Centerpoint at the venue.
A free, resizable, performance-grade stage curtain is included in the MST package for your convenience.
12.b Triggering one Timeline from Another Timeline
It is not currently possible to have timeline start another timeline, within the same MST Performance engine. This may be in a future release– if you would like this feature let me know.
As an alternative, you can have two more more MST Performance Engines active in the same area, and have one trigger events in the other. Typically this is done by placing a second MST performance engine on its own seperate centerpoint, and configuring its command channel to something different such as “/9”. Then you can trigger its events with “/9 playshow” or with the “/9 run eventGroupName” chat command.
12.c Sending Link Messages
If you’re a scripter in LSL and wish to have your the MST Performance Engine trigger your own scripts via linked messages, you can use the LINK command. The format is “LINK: <linknumber>:<integer>:<string>:<keystring> ” Here’s an example below:
Note: avoid using integers between 1000 and 9999. These link message integers are used by MST Performance Engine internally.
12.d Listing Available Event Groups in your Timeline
You can get a list of the available timelines by clicking the rezzer and selecting “<more SHOW>” then “listevents”.
If you cannot click the rezzer, you may also shout the chat command “/8 listevents”.
12.e Outfit Changes
If performers are using the MST Outfitter HUD, you can use some built in eventist commands to gain extra security and avoid crosstalk with other stages.
OUTFITADD:folderName OUTFITREMOVE:folderName OUTFITGROUPADD:groupName,folderName OUTFITGROUPREMOVE:groupName,folderName
When using these commands you do not need to specify a channel – it will be automatically detected from the MST Centerppoint.
These commands are otherwise similar to the chat commands used by the MST Outfitter. “groupName” can be either an avatar legacy name like “Arrehn Resident” or a name that is defined in the MST outfitter notecard after GROUPS= .
12.f Show Active Animation Permissions
It can sometimes be useful to see or validate which avatars have successfully given your MST performance engine permission to run their animations. Typically these will be avatars sitting on MST movers. To see which avatars have successful granted animation permission to your performance engine, use the following command:
12.g Load Another Eventlist Notecard
The ~EVENTLIST notecard will lost a large number of events. In practice we have run shows up to 40 minutes long on a single notecard. However, a more complicated or longer show may consume too much memory and fail to load.
If this happens, you can use multiple MST performance engines, or alternatively you can take a small break during your performance to load a new set of events from a different notecard. You can do this with the command: /8 loadevents <notecard_name>. For example: /8 loadevents ~EVENTLIST_2
When you use this command, the new notecard will load and this will take a number of seconds, depending on length. It fully replaces all groups and events from the original notecard.
For a full list of all MST Eventlist commands see the documentation here