There is one mechanic within storyboarding that will allow you to create some sort of interactive effect with what is happening during gameplay: Triggers.
Triggers can catch certain events and execute basic commands on your sprite in response.

Note

Triggers are the most complex command currently provided by the storyboarding API. Unfortunately they are accordingly buggy.
This section will cover triggers’ most common oddities and weird behavior, along with a few edge cases towards the end.

HitSoundSoft is the trigger condition. You will learn about the different kinds of trigger conditions in the next section.

0,105330 marks the start and end time of the trigger. There is no limit to how often a trigger can be executed within the specified timeframe.

The Fade commands after the trigger command are indented by one additional whitespace or underscore to mark them as belonging to the trigger.

It is very important to notice that the time values specified for these commands are relative to the time when the trigger starts executing.

Example: If the trigger condition is met at 23918 the sprite will change to 100% opacity at 23918 and fade out at 24028. This behaviour assures that a trigger can be activated and executed multiple times.

If you’re familiar with hitsounding, then these columns should be very easy to understand. Aside from the prefix “Hitsound” you can individually add or leave out a specification of your hitsound to get the exact hitsound or combination of hitsounds you want.

While the naming of the triggers suggests that it checks which hitsound is played, this is actually not the case!
Changing the sampleset of a note via the Sampleset Menu on the top left of the editor (Ctrl/Shift+Q/W/E/R) or via Sample Import will be ignored for the sake of evaluating triggers.
You always have to change your samplesets via inherited timing sections if you want your Hitsound triggers to work correctly.

Note

You might have noticed that there is no option to catch a hitnormal alone. This is very annoying when you want to catch hitnormals along with other notes that actually have finishers.
It can be worked around by changing the sampleset for these notes so you can use Hitsound5 or something like that but it requires a lot of manual effort nonetheless.

If you wonder why this is the case, the answer is that hitnormals work for everyone differently. Currently there is the option to configure the option LayeredHitSounds in your Skin.ini to 0 causing hitnormals no longer be played on notes that have additionals.
As this is a setting determined by the user in most cases, there is no way to get a consistent experience for all players without the already mentioned workaround anyway.

When nothing is happening the idling Aoba sprite should be shown. This will be the case at the start of the beatmap.
As soon as any hitsound is played it should get replaced by one of the other two sprites.

And that’s it! Aoba will now play the drum in sync with the map!
You can see the application of this effect in the following map: https://osu.ppy.sh/s/597411

Warning

Yes, with the map, not with the player. Hitsound-triggers are only activated by Hitsounds from objects. Otherwise this would be amazing for Taiko-mode effects but you can still do some interesting things with it!
The other sad thing is that spinners and drumrolls (except for the head) in Taiko don’t trigger hitsounds but you could perfectly let Aoba drum to an osu!standard difficulty.
This solution is far from universal, as you will see in the Pitfalls-section, but it works perfectly fine for Kantans and most Futsuu difficulties.

If you are planning to use Passing and Failing triggers in a map for either Catch the Beat or mania, go no further.
There is full support for standard and partial support for Taiko (only Don/Kat, no drumrolls/spinners) but none at all for CtB and mania. Keep this in mind before making big plans with this type of trigger.

From reading the chapter about layers and objects you might know already that osu! uses 4 different layers to draw a storyboard. 2 of these layers are Pass and Fail that are displayed in accordance to the current game state.
There are 2 trigger conditions corresponding with these layers called Passing and Failing:

Passing occurs when the game state is changing from Fail to Pass

Failing occurs when the game state is changing from Pass to Fail

Now there is one major hiccup in applying this to storyboards and that is that Pass and Fail-Layers work differently in every game mode.

In osu!standard the game state can only change at the end of a combo. If the last note of the combo gets you a Geki judgement the game state will be Pass, otherwise it will be Fail.

In osu!taiko the game state can change on each note. If the last note was missed, the game state is Fail, otherwise it is Pass. It should also be noted that drumrolls (except for the head? unconfirmed) and spinners don’t count as notes.

In osu!mania and Catch the Beat the game state can only change on breaks. As we learned earlier, triggers always need to correspond to a gameobject. This means that Passing and Failing triggers will have no effect in these gamemodes.

Yes, too easy to actually work. Otherwise this would be the coolest interactive storyboard in 29 lines ever.

The problem with using animations here is that they run independently from the trigger:

When using LoopOnce as the loop-option they will work fine on the first trigger but show only the last animation frame on consecutive triggers.

When using LoopForever the animation will work fine on the first trigger but start and end on the wrong frame for consecutive ones.

The slightly annoying but in this case bearable workaround is animating by hand. This means creating a sprite for every frame of the animation and fading it in and out with the proper delay according to its position within the animation.
If you understood how an animation works, this should be trivial to do. Refer to the tutorial on animation if you have trouble.

Warning

So we learned that you can’t use triggers on animations if they are supposed to be displayed more than once.
For recreating the animation with triggers on its individual sprites you have to explicitly fade them out at the start of the trigger as they will otherwise fade in as soon as the trigger starts executing.

Note

It should be noted that all combos in the map you’re storyboarding for have to be at least as long as the longest transition effect (in this case 2 seconds of getting up).
Otherwise the effects will overlap or not flow well into each other (assuming you counteracted the overlapping issue) and make it look very bad. 2 seconds for a combo in osu! standard is very reasonable though so this would work in most beatmaps.