Pighaus Games Docs

These docs describe 1.3, which is in testing. The version on Fab is 1.1: read its docs.

The mixer1.3

Every shake plays into a group. Groups have a volume and limits, quieten each other, answer to the player's comfort sliders and sit under one ceiling, so a busy moment never stacks into more than you meant.

Shakes add up. Left alone, a sprint, a landing and a nearby explosion stack into more motion than anyone authored. The mixer sits between the shakes and the screen and keeps them in proportion. It's Mixer on the pawn's Blendable Shake.

Groups#

Every layer plays into a group: the one it names under Group, or else its shake's. Seven come with the mixer, and you can add your own:

GroupForAnswers to
Handheldthe camera operatorthe handheld slider
Bodythe bob and sway of the character's own motionthe handheld slider
Postureleaning, momentum, the look trailing behind, the lens widening with a boostthe handheld slider
Rumbleshort knocks: footsteps, crouching, a joltthe shake slider
Impactshits, landings, the jump, recoilthe shake slider
Worldevents in the level: explosions, earthquakes, enginesthe shake slider
Cinematicmotion authored for a cutscenethe shake slider

A layer naming a group that isn't there plays into Impacts, or the first group if there's no Impacts, so a typo never silences it.

Each group has a Volume, its overall level, and a Player Slider: which of the player's comfort sliders turns it down, the handheld one, the shake one, or Neither for authored motion the comfort sliders shouldn't remove. It also has Keep Character Framed (%), how much the character holds their spot on screen while the group shakes everything around them: 60% for the handheld, 30% for the body, 0% for the rest.

Limits that squeeze#

Each group has a limit for movement, tilt and lens, and a point above which it starts squeezing:

Squeezed aboveLimit
Handheld, Body and Posture7 cm, 6°, 10° of lens14 cm, 13°, 20° of lens
Rumble10 cm, 6°, 10° of lens20 cm, 13°, 20° of lens
Impacts, World and Cinematic45 cm, 22.5°, 15° of lens60 cm, 30°, 30° of lens

Below the first number a group plays exactly as authored. Past it, it's squeezed smoothly, nearing the limit and never passing it. Nothing clips, so even a pile-up still moves like motion rather than hitting a wall. The constant groups are kept modest because they're on screen the whole time; the one-off groups have room, because a single big hit must never be blunted.

Over everything together there's a ceiling: Most Movement (cm), Most Tilt (deg) per axis and Most Lens (deg), at 40, 25 and 30. It's a net for pile-ups, not a way to tune the feel.

Ducking#

A group can quieten others while it plays, listed under its Ducks. Out of the box, Impacts ducks the handheld by 60% and the body by 40%, and World ducks the handheld by 40%. A hit then reads sharply instead of having to out-shout the bob.

SettingWhat it does
Quietensthe group to duck
Byhow far down, 0 to 1. 0.6 leaves 40% of it
Full At Movement (cm) and Full At Tilt (deg)how much this group has to move or tilt the camera for the duck to be complete. Tilt alone can get it there, so a hit that's all rotation still clears the stage
Arrives Athow quickly the duck comes in. Keep it high, so it's in place as the hit peaks
Lets Go Athow quickly it lets go. Keep it low, so the ducked group comes back smoothly

Get Duck Level reads how far the Handheld group is ducked right now, 1 being not at all.

Priorities, and copies of one shake#

Three settings on each shake, on its Playing Again line, decide what happens when it's played while it's already running:

SettingWhat it doesGood for
Only One At A Timeplaying it again carries on or starts over, as Played Again says, instead of adding a second copycharge-ups, and most shakes that run until stopped
Most At Oncea cap on copies of this shake; another play drops the oldestrapid fire, where twenty stacked kicks just read as a blur
Prioritywithin its group, a higher priority holds lower ones down while it playsan earthquake flattening the footstep rumble

Priority does nothing until the group's Lower Priorities Held Down By is above 0, and equal priorities never hold each other down, so leaving everything at 0 keeps plain adding. Held Down At and Let Back Up At are how quickly lower priorities go down and come back; keep the second low, so they return unnoticed.

Go deeperWhy the caps compare only copies of the same shake

Both copy rules are decided when the shake is asked for, and only ever against other copies of the same asset. Once two copies are adding together there's no telling them apart any more, and holding back a different shake is a mixing decision, which belongs to the groups, where the priorities, the ducks and the comfort sliders already are.

Turning a group up or down from gameplay#

Push Group Scale makes one group stronger or weaker until you Pop Group Scale with the same Source: quieter footsteps in a padded room, more rumble beside an engine. 0 silences the group, 1 leaves it be, 2 doubles it. Where several sources scale one group their scales multiply, and every change eases rather than steps. Get Group Scale reads the result. A Shake Volume does the same for a place.

The player's comfort#

The player's settings reach the mix in three ways. Each group answers to the handheld slider or the shake slider. Per Group scales single groups on top, for a menu with finer options. And Keep Horizon Level takes the roll out after everything is mixed, so every shake, lean and peek keeps its movement, pitch and yaw and the horizon stays put. Comfort has the menu side.

With a Blendable Follow Camera, its Comfort is the one a settings menu writes to. With any other camera, Blendable Shake's own Comfort (Without A Follow Camera) is used instead.

Seeing the mix#

Tick Draw Camera Stack on the Follow Camera. The camera stack readout ends with the mixer: a meter per group, how far each one is ducked, and every running shake with its layers' levels, plus the locomotion state, the stride and the effort.

When a shake does nothing#

The readout lists what's playing. Almost every "my shake did nothing" comes down to one of these:

  1. It isn't running. A layer waiting on an event only hears it while its shake runs: in Body, on the Rig in force, or played and not yet stopped.
  2. It was out of range. Play Shake At returned 0 because the pawn was outside the Outer Radius.
  3. It carried on instead. The shake is Only One At A Time with Played Again set to carry on, so your play joined the copy already running, at the larger of the two strengths.
  4. Its drivers are at zero. A layer driven by Character: aiming does nothing while you aren't aiming. On the shake's panel, set the sliders to what the game would see and watch the graph.
  5. Something turned it down. The player's comfort sliders, Per Group, a point of interest's suppression, a Rig's Handheld Transient Scale, a group's Volume, or a Push Group Scale or Shake Volume at 0.
  6. A higher priority holds it down in the same group.
  7. Nobody's looking. Only For The Local Player skips pawns no local player is looking through, and with Shake Other Cameras Too off, nothing shakes while the player looks through another camera.
  8. The call went nowhere. A feedback call on an actor with nothing implementing Blendable Feedback Sink is quietly ignored, by design.