Soria

Soria is a 3D atmospheric adventure platformer inspired by Scandinavian folklore. It’s a fable of friendship and found family that explores the bond between a fledgling gryphon and a young boy. It’s a story we’re all intimately familiar with, allowing the player to relate to the characters no matter their walk of life.


Credits:

Design
Oscar Værnø
Ross Everson
James Hellman

Animation
Ross Everson

Art
Johanne Eikå Bergill
Georgia Higgins

Programming
James Hellman

VFX
James Farr

Music
Magnus Hodne

Sound
Magnus Hodne
Jason Read


On Soria we took a prototype focused design process. We would begin with an initial concept of a mechanic or direction for a level. Once we were happy that we understood what it was we wanted from it I would jump in and begin prototyping it. We then moved into the iteration phase of the design, I would make a basic function and preset it to the other designers, once they tested it and gave feedback I would make the appropriate changes. We would loop this until it felt good to use. This was all done alongside our animator making and iterating on the animations for the mechanic as in a third-person game, animations are just as much a part of the feel as any other aspect of the mechanic. See below for an example of our process.

I was also responsible for all the coding; I would prototype in Blueprints then after testing if needed, it would be ported to C++. One of the most enjoyable aspects of working on Soria was the movement system the core focus for the team was to make the character feel good. Creating a good feel to a controller required me to work closely with the animator, to create the movement system it required four states: Standing, Walking, Running, Sprinting. The player could only be in any one of these states. This allowed us to have more control over the character movement and helped us maintain a great feel to the game.


The Mechanics of Soria

Controller

The movement was one of the most rewarding things to create for Soria. We set out with the task of making it feel good to move in a mostly flat white box level. We initially looked into a standard acceleration-based system and used blend spaces for the animation transitions from walking to sprinting though this left the game with a floaty feeling. There wasn’t enough control over the character as they had to come to a halt over time rather than stopping immediately.

This meant that for more precise jumps or platform movements it was hard to judge what you had to do. After seeing that this would not work, we looked to other games that dealt with third-person controllers, one such game that stood out was The Legend of Zelda Breath of the Wild. The controller they created for Link did not use acceleration they used states, Standing, Walking, Running and Sprinting. Link was only ever in any one of those four states when moving. So, we took that idea forward and put that system into Soria and the movement immediately felt better. We made a change to the system which made the character move into a sprint after a short delay of running rather than allowing the player to trigger it. A cornerstone of creating the movement system was ensuring the animation worked as best as they could. Taking care to make the transitions looked natural and doing our best to make sure each foot hitting the floor didn’t slip or move till it came off the ground. This lead to the creation of over 60 animations for the character. Once the movement was in place, we wanted the character to react to different situations, which is when we created a balancing and wading mode. The character is slowed in each case, leaving the design the same but animation and feel for each is quite different, making the character have unique reactions to both. The video to the right shows the final system in play.

Challenges:

  • Overcoming the floaty feel in Unreal that as standard uses acceleration-based movement.
  • Ensuring that the controller felt responsive and felt great to use
  • Having the character be visually responsive with no animation snapping or slipping
  • Make the character fell more alive.

Solutions:

  • Looked to other games for how they went about solving the issue.
  • After some research, I began developing a state movement system, so the character would jump in speeds from walking to running to sprinting.
  • We tested rigorously throughout the development to tweak the system.
  • As it was tested our animator created over 60 animations for interpreting between each animation state.
  • For each state, I went frame by frame to ensure that there was minimal animation slipping on the feet.
  • With the state-machine made it was simple now to create more states for different situations like balancing on a log walking slowly.

Click HERE to see the code.


Gusting

This was a challenging mechanic as it was expensive to do. Originally this was the classics pick up and object and place it mechanic, which worked well but after some player feedback I quite “Why does every game have these moments where you are slowed down for no reason”. So we went back and looked to see what we could do to fix this, from that comment we thought “how can we still interact with the world but in a more fluid way?”. This is where the Gust came from. A gust mechanics naturally leans into the design of the character as they have a gryphon on their back which can flap its wings.

The first issue we ran into was how to go about making the gust interact with things. As well as this we wanted the gust to act similar to wind and get wider as it went along like it was dissipating outwards. We went for the simple option of just having a collision box above the character that when activated will move down and forward. As seen right:
Gusting is now used across the game as the mechanism for our character to interact with the world.


As we wanted Soria to feel alive I wanted to add an extra layer of interactivity, so I added physics foliage that the gust would interact with. It took several iterations to get right but with the design above and a couple of for loops we ended up with the solution seen below:

Click HERE to see the code.


Collecting

Interacting with a pin wheel, you can then gust it to make it spin faster. Also collecting feathers that appear on Asks hat, then if you collect 10 or more they start on Erikkis tail.


Enemies and Re-spawning

Encountering one of the enemies in Soria. These critters are designed to patrol around a spline. These critters are blind so they can only smell Ask, if they come across a path Ask has run along they will follow Asks trail until they get close enough to chase them down. If Ask is caught they then re-spawn at the checkpoint.


Gates

A wind crank method of opening a gate. The Crank needs to be gusted several times for the gate to fully open.


Locks

A sequencer lock for the gate, the locks must be gusted in the correct order to unlock the gate, otherwise it will all reset.


Wind Funnels

Activating fans to create a wind funnel that you can ride along to get places.


Platforms

A variety of ways to use the moving platforms in Soria.