Pause Menu System
Implementing a pause system on the audio side requires the management of many Cues simultaneously, as well as ensuring that the audio pause effect will be consistent whatever the situation in the game is. In this post, we will see how this can be achieved by using Atom Craft’s features such as Categories, Actions, and AISACs.
Categories
The easiest way to ensure that all the relevant Cues will be paused is to use the Categories. A project may already contain several Categories to group sounds by type (e.g., Ambiences, Voices, Foley, Music…). But unless the goal is to tweak each type of sound differently, it may be better to create a dedicated Category Group for the pause system, as it will usually stop most of the sounds (except maybe for an ambience or music Cue). Since several Categories can be assigned to a Cue, adding a new Category will not be a problem.
- In the Project Tree, select the Categories folder
- Add a new Category Group called Pause
- Then, add 3 Categories:
- Pause_Amb, which will only process background ambience sounds
- Pause_Music, which will only process music
- Pause_All, to process all the remaining sounds that will be affected by the pause system
- Finally drag and drop your Cues onto their respective Categories (alternatively, you can edit the Category property for each individual Cue).
Action
Usually, Actions are used to target specific Cues, but it is also possible to target Categories to affect several Cues at once with a single Action.
To keep things simple, the whole system relies on two Cues: one for when the game is paused (Pause_Stop), and the other for when the game resumes (Pause_Resume). All the Actions triggered in the Pause_Stop Cue need to be reverted by the Pause_Resume Cue. Additionally, the behavior will be different for the 3 Categories we created. To achieve this:
- Create 3 Action Tracks for both Cues.
- From the Project Tree, drag and drop the 3 Categories on their respective Tracks. They will now be the targets of the corresponding Action Tracks.
Specific Actions can now be created for each Category.
The sounds are paused with a Pause Action and resumed with a Resume Action, instead of using the Play/Stop Actions. This ensures that the transition is smooth when the game restarts and the audio does not jump.
To control the sound properties while the pause and resume operations are performed, the Playback Parameter Action can be used. It allows for the modification of the Cues’ properties such as Volume, Pitch, Filters and even AISACs.
By combining these Actions, it is easy to create complex behaviors.
Here is what was done in the demo project:
The Pause_Amb category only affects the background ambient sounds. Since these sounds are not synchronized to the picture, they will not be stopped but instead used to provide a quiet ambience to the pause menu:
- Right-click on the Pause_Amb Action Track in the Pause_Stop Cue
- Add a Playback Parameter Action
- In the Inspector window, change the Type of playback parameter property to Bandpass – Cutoff High
- Then, set the Target Parameter value to 0.20
- Do the same in the Pause_Resume Cue but set the Target Parameter value back to 1
- Additionally, setting the Rate of value change to 0.20 will make the Bandpass opening last around 5 seconds, and make the game resume smoother.
For the Pause_Music Category – which only affects the music – Cues will indeed be paused and resumed. However, a tape start/stop effect will be added using the Playback Parameter Action.
- In the Project Tree, create an AISAC under the Pause_Music Category to control its pitch
- Then, create a fading curve that goes from 0 to -3600
- On the Pause Cues, add a Playback Parameter Action, selecting the new AISAC as target
- Enter 1 as Target Parameter value for the Pause_Stop Cue and 0 for the Pause_Resume Cue
- The Rate of value change should be 2 for the Pause_Stop Cue and 0.75 for the Pause_Resume Cue
- In the Pause_Cue, make sure that the Pause Action is positioned around 500ms after the Playback Parameter Action to avoid the tape stop effect from being interrupted.
Here, the Pitch could have been chosen as the target of the Playback Parameter Action instead of the AISAC. The AISAC was chosen because it offers a convenient way to control more properties with the Action, simply by adding new graphs to the AISAC, should it become necessary.
Finally, the Pause_All Category will affect all the remaining Cues (3D sounds, dialogue, etc…). The Cues are simply paused or resumed with fade-outs/fade-ins using a Playback Parameter Actions on Volume.
A couple of sounds were added to the Pause_Stop and Pause_Resume Cues on a normal Track, in order to provide some extra feedback when the game is paused and resumed.
You can download the project below to see how it works in Atom Craft.