Between the Folds #011 - SpringPeople


(Happy Springies enjoying their vacation)

Idea

Since all human inhabitants except for Ernest have left Fin, his interiors would feel a bit empty without anyone else around. To counteract this, we came up with the SpringPeople, automatons that were built by Ernest’s ancestors to help them with their work. SpringPeople were invented to help accomplish tasks like cooking or gathering items. Although they look and behave human-like, they can be easily identified by having a spring instead of legs, which makes them bounce around whenever the humans would push or pull them. After all the humans (except Ernest) had left Fin, the SpringPeople began claiming the whale for themselves and built small villages and communities.


Core

The basic functionality that unites all SpringPeople is their reaction to the player’s actions. Each SpringPeople owns a WhaliumComponent (as described last week) to receive notifications whenever the player uses their magnetic gloves or pearls on the Springie. 

Dialogue

Each Springie owns two WidgetComponents for communication with the player. The HighlightWidgetComponent displays a speech bubble icon above the SpringPeople’s head whenever one of the player’s abilities is in range. Here we use the custom highlighting event in our WhaliumComponent as described in the last post.

Besides this widget, each SpringPeople owns a ConversationComponent that handles the displaying of messages above their head. The messages to display are stored in a separate DataTable and can be chosen individually per Springie. Whenever the SpringPeople is pushed or pulled by the player, the ConversationComponent chooses the next message from the DataTable and displays it above the SpringPeople’s head. Each SpringieConversation can have multiple stages to allow the Springies to respond to the level changing around them.

(The HightlightWidgetComponent signalizing that the Springie has something to say)

Besides the custom widgets, the SpringPeople can also partake in the main story conversations. For this, we only need to specify a conversation from a different DataTable in the Springie’s dialogue variable. Depending on the structure of the DataTable we then decide whether to display the text on the ConversationComponent or in the SubtitleWidget.

(A Springie engaging in the main story conversation)

React to player

To make them more lifelike we implemented functionality so that the Springies can recognize when the player is near them. When Ernest enters their vicinity, they rotate towards him and try to face him as long as he is near them. When Ernest moves out of their range they either keep their current rotation or revert back to their original one.

(Springies turning towards Ernest as he approaches them)

Variations

Despite their name, not every SpringPeople actually owns a spring. While most of them do have one that makes them bounce around whenever they are influenced by the player, some Springies are sitting in an object or vehicle and don’t need their spring.

Springie

The common SpringPeople do however have the bouncy behavior we expect from them. The bounciness stems from a PhysicsConstraint that connects the proxy component for the Spring (Stick) to the base (Anchor). The Stick (StaticMeshComponent) is influenceable through the player’s ability via the WhaliumComponent, but is not rendered. The visual representation of the spring comes from a separate CableComponent with a special material that bends and extends as the Stick wobbles around.

Attached at the top of the Stick is the Springie’s body, a SkeletalMeshComponent that visualizes their torso, head and arms. All Springies have the same SkeletalMesh and get their unique look from StaticMeshComponents like hair and accessories that can be attached at predefined sockets on their head, hands or torso.

(Structure of the basic SpringPeople, depicting Anchor, Stick, Body and spring visualization)
(Some Springies wobbling around)

Sometimes we need to move a Springie through a level and don’t want it to bounce uncontrollably. For this, we added the functionality to lock the spring by modifying the PhysicsConstraint so that it allows no motion.


NoSpring

As mentioned before, Springies of this variant have no spring because they are sitting in some sort of object or vehicle.

They have a similar setup of Anchor and Body although they have no PhysicsConstraint and therefore don’t need the Stick. In this variant, the Anchor is the influenceable part of the actor.

Currently they are mostly used for Springies which should be able to swim and therefore have a FloaterComponent (which we will cover in a future DevLog) with a special setup so that they automatically turn themselves upright when they are in the water.

(A kajaking SpringPeople doesn't need its spring but it can float)


Movement (Rails)

Sometimes we have the need to let the Springies move through a level, therefore we designed a spline based rail system which supports different movement behaviors (looping, move to specific point, follow actor). 

As an alternative we could have given them a bounce animation and implemented a simple AI with movement behavior but we felt that that would have been a bit overkill for our purposes.

(Rail systems help Springies get around the place)


Those are our Springies, we hope you like them as much as we do! As always, if you have any more questions about them, just ask!

- Andi, Ralf

Leave a comment

Log in with itch.io to leave a comment.