Clocker: Designing Game Audio Logic (Part 1)

게임 오디오 / 사운드 디자인

In this two-part blog series, we'll be going over the way we designed the sound system for Clocker.  Hello, my name is Yu Tan from Salt Sound Studio. I was responsible for integrating Wwise and Unity, creating sound effects and designing the interaction mechanism.

image003

Clocker is an indie adventure puzzle game, developed by Wild Kid Games. The storyline focuses on the relationship between a father and his daughter, with time as the connecting bond. The game features a unique time mechanism, compelling storylines and challenging puzzles to solve, and is delivered in an artistic hand-painting graphics style. It tells the story of a father and his daughter, using a two-character narrative technique, and allows you to control either of the two characters separately when solving puzzles during your adventure.

The gameplay consists of using a clock to control NPC actions and logic lines. Logic lines are alternative storylines that develop as a result of changing the order of events with the clock. As the father, you are trapped in a time-frozen space. You can, however, use the clock to go back and forth through time, in order to change the order of events. As the daughter, you live in a normal world and will get to see how everything pans out, eventually.

Initially, because Clocker is a small game, we thought there wouldn’t be a large number of sounds involved. But after running some tests, we realized it required a much greater quantity of sounds than we thought.

image005Logic lines for Scene 6

The image shown above is a representation of two of the game's logic lines. Each logic line represents a set of NPC actions.

As players enter Scene 6:

  • Thief Logic A is triggered.

One of two things follow:

  • The thief moves forward, then opens the door. Or,
  • Thief Logic A stops before completing (i.e. the thief doesn’t open the door), then no other logic events are triggered. Note that many NPCs have a logic line with multiple action phases.

Then, if Thief Logic A completes:

  • Homeowner Logic B is triggered. And as a result, the homeowner runs to the thief.

Now, as you control the homeowner, you have two options:

  • You let the homeowner run towards the thief and hit him. Or,
  • You make the homeowner go back to Homeowner Logic A, then turn to control the thief.

From there, either Thief Logic E or D is triggered, depending on what action phase the homeowner is in.

We could go on and on, but it’s clear the game logic is complex. In the image shown below, you can see how the character States change in the  game. The clock has two timelines to represent the different character States.


小偷与屋主的逻辑表现Logic actions for the thief and the homeowner         

With the above description, we've outlined the gameplay and the game logic. The game includes 70 NPCs and 682 logic lines, so it made sense to use cascade structures to control how the storylines proceed.

With cascade structures, you have to keep track of the playback position of NPC sounds. Meaning, you need to record the audio playback's time information as the NPCs are deployed. This way, we can make sure that NPC sounds are always in sync with the game visuals, as their logic lines stop and resume. This also enables these sounds to playback, forward and backward.

With the above conditions met, we grouped the in-game sounds into 5 parts:

 

1. Father’s Time
  • Controlling time to travel back and forth through time.
  • Recording the exact playback position of NPC sounds.
2. Daughter’s Time
  • Reflecting the gradual change in time.
  • Extending static animation clips.
  • Solving possible voiceover issues.
3. Game Functionality
  • Controlling the playback speed relative to controller pressure.
4. Interactive Music
  • Guiding the player’s actions with in-game music.
  • Designing the interactive music for Clocker.
5. Performance Optimization
  • Managing SoundBanks in the project.
  • Compressing the audio for different platforms.

The Unity engine's audio capabilities not being capable enough to pull this off, we naturally turned to the Wwise sound engine to get more advanced features.

Implementation in the game

Father’s Time

Controlling the time to go back and forth

We looked at different solutions to match the audio to the game dynamics, but individual sound effects were just not immersive enough to convey the time States of each character. And had we used these sound effects to sync with the animation clips in-game, it would have been difficult to switch to precise time points in the current logic line. In the end, we decided to create new sound effects for each character's entire logic line. This way, not only could the sound effects for each character be maintained efficiently, we could also overcome the challenge of recording the current playback position as players move back and forth through time.

 image008Event List
image010Switch Groups

In the images above, you can see the Events we created for each character’s logic line, as well as the Switch Groups that were used when switching between logic lines. Using these assets, we were able to quickly find the required Events, based on the scene names, current NPCs and their logic lines. This saved us a lot of time and effort.

Creating sound effects for individual actions or objects was not a good idea. As previously mentioned, they were not immersive enough to convey how players go back in time. To get better results, we decided to reverse the sound effects for the entire logic line, rather than simply reversing the individual sounds, and added a layer of low-frequency sounds to match with and support the game's time mechanism. By playing forward/backward sounds and switching between logic lines in real time, the change in playback State from Logic A to Logic B was reflected perfectly. This was a lot of work, but it worked out well. In the image below, you can see the sound waves for an entire logic line.

image012Waves for a reverse logic line

To determine a character's current timeline, we defined two Game Parameter values (1 and -1). 1 means to play forward sounds, -1 means to play backward sounds. They are triggered when the player moves forward or backward, respectively. This way, we were able to switch between logic lines and reflect the change in playback state properly. In the image below, you can see how we set the Game Parameter values.

 

image014 Game Parameter Property Editor 

To play forward/backward sounds while making sure they do not overlap, we used Wwise's Blend Containers to control the playback position. This way, we were able to avoid having both sounds being played at the same time. In the image below, you can see how we set the Blend Container.

image016Blend Editor

Recording the exact playback position of NPC sounds

As previously mentioned, to record the exact playback position, we created both forward and backward sounds. The sounds are played against the in-game timeline. This is done to quantify the percentage of elapsed playback time and uses the SeekOnEvent API function to go back and forth through time. In the image below, you can see how we used this function.

image018

In order to return to the last playback position, we only need to record how much playback time has elapsed for the current animation clip and sound, then read that information prior to the NPC logic lines being triggered again.

Daughter’s Time

Reflecting the gradual change of time

When the daughter enters, time and space are frozen, but gradually return to normal. In the image below, you can see how this works.

 女儿时间渐变Gradual change in time when the daughter enters

In the father’s world, everything is black and white. There are no ambient sounds being played in the father's scene, so as to heighten the sense of frozen time and space. When the daughter enters, everything gradually returns to normal, including color. To sync up with the game visuals, the ambient sounds gradually evolve in the same manner. In order to get even better results, we split these ambient sounds into layers, including wind blow, small objects and critters. Their volume increases gradually.

We also defined two Game Parameter values (0 and 1) and a percentage value, for the size of the scene. This way, the ambient sounds could be faded-in properly, relative to the daughter’s current position.

image021

In the Blend Container, the layered ambient sounds fade-out, based on the following curves, and all of them blend together. In the image  below, you can see how we set the Voice Volume and Fade parameters.

 image023

Extending static animation clips

In the game, the daughter has her own independent logic lines. They are not triggered by the father.

When the daughter enters, the father’s interrupted logic line resumes. Let’s say a NPC logic line stops after completing only 30% of its triggered events. When the daughter gets close to this NPC, the sounds resumes from that playback position (i.e. 30%) until the father’s logic line completes. Her own logic line is triggered based on her father’s current actions. That’s how we extended the cascade structures we mentioned earlier.

In the image below, you can see that when the daughter enters the scene, the police officer resumes his logic line, based on the father’s logic line until it completes. He then decides whether or not to arrest the thief. The daughter’s animation clips are looped, so we have to stop the playback of the current sounds to avoid auditory fatigue.

女儿时间延续Extending static animation clips

Solving possible voiceover issues

In the game, we used modal particles in most of the characters’ dialogue, to reflect their feelings. These modal particles help players identify NPCs’ emotional states in game. At first, we actually considered using voice overs (VO) to that end. However, the producer refused for two reasons:

  • The game has multiple finales, and VOs may expose the hidden finales.
  • This was an indie game with a limited budget. 

So in the end, we used modal particles instead of VOs.

In order to be able to bring NPCs to life even without VOs, we decided to use modal particles to reflect their emotional states. For example, there is a middle aged man in the game, who is not that easy to get along with. As such, we used modal particles to reflect his caustic tone of voice.

Game Function

Controlling the playback speed against the controller pressure

力度按压控制Adjusting character actions against your controller pressure

In the game, the logic's speed is controlled by the controller pressure, to get the sounds to sync with the game visuals. In the image above, you can see how this works.

We used the built-in Time Stretch effect in Wwise to get the global sounds to reflect the acceleration and deceleration. In the image below, you can see that we defined two Game Parameter values (0 and 1). These Game Parameter values translate controller pressure values to determine the Time Stretch rate.

image027Game Parameter - Rate

Deceleration for game visuals occurs at a factor of 10, while the Time Stretch effect occurs at a factor of 15. So the transition is very smooth during playback. 100 means no Time Stretch, 200 means double the duration, and so on. The maximum controller pressure is specified as 100, and the minimum speed is specified as 1100. This ensures that the Time Stretch rate matches the animation clip. In the image below, you can see how we set the Time Stretch effect.

 image029Time Stretch - Effect Editor

In Part 2 of this blog, we will look at how we designed the interactive music for Clocker. Stay tuned!

image001

 

YU TAN

Senior Audio Designer

Salt Sound Studio

YU TAN

Senior Audio Designer

Salt Sound Studio

Yu Tan loves game audio design. He is devoted to the research and promotion of audio technologies.

댓글

댓글 달기

이메일 주소는 공개되지 않습니다.

다른 글

라우드니스를 처리하는 최상의 방법, 제 2강: 라우드니스와 다이내믹 처리 방법

우리가 여기서 말하는 '라우드니스'는 우리가 예시로 측정하는 도시 소음이나 sound pressure level (SPL) 미터와는 다릅니다. SPL 미터는 소리 압력을 측정해요....

15.1.2020 - 작성자: 지에 양 (Jie Yang, 디지몽크)

이미지 기반 파라미터를 이용한 오픈 월드 앰비언트 디자인

Blend Container는 강력한 시퀀싱 및 믹싱 도구가 될 수 있습니다. 단순히 그것의 기능을 배우는 것이 게임 사운드 디자이너의 생각에 온갖 종류의 새로운 아이디어를...

13.3.2020 - 작성자: 톰 토디아 (TOM TODIA)

누구나 사용할 수 있는 WAAPI - 제 1부: 개요

안녕하세요. 저는 왕양 (汪洋) 이라고 합니다 (혹은 ‘씨 예’, 溪夜라고도 불립니다). 저는 작년 하반기에 WAAPI에 대해 알게 되었습니다 (Wwise 저작 API). 저같이...

30.3.2021 - 작성자: 토마스 왕 (THOMAS WANG, 汪洋)

텔 미 와이(Tell Me Why) | 오디오 다이어리 제 2부: 음악

Tell Me Why의 음악은 본질적으로 캐릭터의 서사와 감정을 뒷받침하도록 설계되었습니다. 게임의 이야기는 두 주인공에게 아주 자세하게 집중되어 있으며 생각에 잠기기 쉬운 느린...

23.6.2022 - 작성자: 루이 마르탱 (Louis Martin)

Strata 작업 과정 파워업하기 | 2부 - "연결된 REAPER 프로젝트 열기"

Wwise를 REAPER와 함께 사용하는 사운드 디자이너라면 Wwise에서 작업하는 동안 REAPER에서 사운드를 다시 렌더링하고 싶은 경우가 종종 있습니다. 원래대로라면 관련...

15.8.2023 - 작성자: Audiokinetic (오디오키네틱)

AudioLink로 떠나는 여행

지난 10월 게임사운드콘(GameSoundCon)에서 저는 호텔 근처 고급 샌드위치 가게에서 데미안(Damian)과 점심을 먹고 있었습니다. 예상하셨겠지만 저희는 오디오 기술에...

10.6.2024 - 작성자: 피터 "pdx" 드레셔 (Peter "pdx" Drescher)

다른 글

라우드니스를 처리하는 최상의 방법, 제 2강: 라우드니스와 다이내믹 처리 방법

우리가 여기서 말하는 '라우드니스'는 우리가 예시로 측정하는 도시 소음이나 sound pressure level (SPL) 미터와는 다릅니다. SPL 미터는 소리 압력을 측정해요....

이미지 기반 파라미터를 이용한 오픈 월드 앰비언트 디자인

Blend Container는 강력한 시퀀싱 및 믹싱 도구가 될 수 있습니다. 단순히 그것의 기능을 배우는 것이 게임 사운드 디자이너의 생각에 온갖 종류의 새로운 아이디어를...

누구나 사용할 수 있는 WAAPI - 제 1부: 개요

안녕하세요. 저는 왕양 (汪洋) 이라고 합니다 (혹은 ‘씨 예’, 溪夜라고도 불립니다). 저는 작년 하반기에 WAAPI에 대해 알게 되었습니다 (Wwise 저작 API). 저같이...