
ASSIMILATION
Epic Mega Jam 2017 Winning Entry
SUMMARY
Assimilation is a game made over the course of seven days during my first game jam within a group of two other developers. The submission was awarded as one of the three finalist winners.
​
My primary role was game designer where I worked on the player character movement, creating gameplay elements and implementing the menu/end game flow.
The platform style game has the player playing as a wisp that attempts to free other wisps in the world, awaken the spirit trees and ultimately reach the light tower to release its light upon the world once more.
​
Theme : "However vast the darkness, we must supply our own light"
Download link : http://goo.gl/puL9pg
Article : https://www.unrealengine.com/en-US/blog/the-2017-epic-megajam-results-are-in
DESIGN
During the design stage we decided to keep the game as simple as possible by having the player go from A-B whilst collecting orbs, reaching checkpoints and survive the journey. That way, we were able to focus primarily in the player movement, create obstacles and creating an immersive environment within a short timeframe.
​
We decided for a sci-fi theme to allow more creative freedom and produce an exciting unknown world to explore. Using a light vs darkness, this would help tie into the announced theme for the game jam and provide a mild horror feel.
​
Mechanic/Puzzle designs:
Player movement/Dashing: We wanted the player to feel they were playing as a wisp so movement were adjusted to feel "floaty" and provided a dash to make long jumps/out manoeuvre dangers.
Collectable Wisps: Provides the player with a sub-objective as they traverse the world and a reason to explore.
Spirit Trees: A form of beacon to show the player is heading in the right path and acts as a checkpoint when the player revives them.
Idle/Moving platforms: Provides the player traversal challenges in hopes to create a feel of achievement when overcome and to compliment with the player characters floating movement.
Patrolling enemies/Watch Tower: Dangerous obstacles for the player to avoid or out manoeuvre during their journey and provide a form for the plot antagonists.
Hidden timer/collectable counter: Once the player reaches the end of a level their performance is displayed, providing future replay value.
​
Plot element:
Machines have taken over a world inhabited by Wisps of light and as the last remaining Wisp, must bring back light into the world.




MY RESPONSIBILITIES
Production:
Prioritize tasks allocated and fulfil them within given time.
Syncing with the team on a daily basis to inform each other of the status and plan for the day.
Discuss with the team on any time consuming tasks regarding design or implementation and suggest alternatives.
Familiarize myself with Perforce and hook up into Unreal editor for version control and asset management.
​
Development
Create player character actor fundamentals and create editable variables for movement reiteration.
Creating game play elements such as moving platforms, enemy watch tower and interactive actors.
Checkpoint and respawn system.
Hidden timer and collectable counter.
​
UI
Main menu/End game UX.
Working in UMG to implement UI animations, component anchoring and positioning.
Creating UI assets.
PLAYER CHARACTERÂ IMPLEMENTATION
We wanted the player to feel that they were playing as a free-floating wisp, so we aimed to implement movement that made the player feel like the were gliding and have subtle buoyancy.
A dash and jump ability was added so the player could dodge past obstacles and gain high air time whilst having air control to further boost that glide feeling and traverse long distances.

To drive the player character to float, a constant line trace is fired in the z-axis with a exposed "Fly Height" variable to control the length of the line trace, allowing us to determine the default idle float height. From there we perform the calculation to add force to push the character up if too low to the ground and with the character physics/gravity enabled by default, have the character fall subtly back down.

With the character by default set to gravity enabled and simulating physics, I primarily used the "Add Force" node for movement control. For the dash ability I used the "Add Impulse" node so the player gains a burst push in the current movement direction and added a "Set Timer by Function Name" node which acts as cooldown and resets the ability. The jump ability is controlled by a timeline that represents how long force is provided to the character before stopping to let the player fall back down.

To drive the player character to float, a constant line trace is fired in the z-axis with a exposed "Fly Height" variable to control the length of the line trace, allowing us to determine the default idle float height. From there we perform the calculation to add force to push the character up if too low to the ground and with the character physics/gravity enabled by default, have the character fall subtly back down.
GAMEPLAY ELEMENTS
I created a number of gameplay related actors to aid with game design, this allowed us to simply drag and drop into the world then edit exposed variables to tune accordingly.

A simple actor with a sphere collision component and when the player character enters within the bounds, triggers on-collection visuals and adds one to the wisp counter variable stored in the player character.

Similar to the collectable wisp actor, when player character enters the sphere collision boundary then trigger visuals and set the tree location as the latest checkpoint.

Highlighted in the image are two billboard components which allows us to move them in world space to set the start/end points of the watch tower's search path when the actor is placed in the world.

A simple actor with a sphere collision component and when the player character enters within the bounds, triggers on-collection visuals and adds one to the wisp counter variable stored in the player character.
POST-MORTEM
During the game jam we encountered a number of issues:
​
A lot of time was spent play testing with the player character in attempts to achieve the desired floating feeling and free movement. The player character went through many iterations involving using different physics-related actor components, nodes and variable changes. Issues found included character movement felt too sharp or too slow in reactions, the jump ability was too strong/prone to abuse and collision handling conflicting with level/main path design. We eventually found the sweet spot and achieved what we wanted.
A couple of members were unable to commit to the jam full time due to full-time jobs, so the gameplay design had to be very basic and focused on immersion via art/lighting and gameplay feel.
We lacked in a number of team members to fill the role of character/environment artist, so we adapted by using a basic spherical shape for the character with an emissive material/VFX trail so it would visually be less boring and tillable textures/mesh instancing for rapid environment creation during level design.
​
I felt that as a team we adapted to a lot of the issues throughout extremely well.
Being my first time participating in a game jam, I learnt a lot during the process and thoroughly enjoyed the experience.
CREDITS
Kenneth Ma: Game Designer/UI Artist
Shaun Baker: 3D Artist/Lighting/Audio/Additional Designer
Sean Herron: Level Designer/AI