top of page
ProfilePicture800x800.png

Sebastian Wallin 

SYSTEMS & TECH

GAME DESIGNER

Work in progress...

Pink Poppy Flowers


Project Specifications:

pc_icon white.png

   Windows

unrealengine3.png

   Unreal 5.6.1

online-coop.png

   2 Player Online Co-op

MutantFire.png

   Action RPG


Responsibilities & Roles:

Management:

My responsibilities included data organization, perforce and I was the tech lead.
 

System design and implementation:

I was responsible for the health system, element system and spacial UI on entities, among other things.
 

The Game:

Cosmosis is an action-adventure game set in a dystopian post-apocalyptic world consumed by cultists and eldritch horrors.

 

As a starslinger, wield the elemental power of the stars to stand against them and reclaim what remains of a dying world beset by darkness.

 

Designed for a co-op experience but playable solo; Cosmosis blends dynamic combat, strategy and teamwork in a fight against a greater evil.

Game Project Theme and Constraints:

The challenge of this project was to make a game inspired by a song. We had four songs to chose from, and  we chose Wandering Star, by Portishead. Using that as our main pillar for the game, we dug into the lyrics, and looked into different uses of the term wandering star.

Click here to read more...

Click to hide ↓

A "wandering star" can be several things:

  • In the bible, signifying immoral people only caring for themselves, people doomed to darkness, preying on others.

  • In historical astronomy, a planet (meaning wanderer, looks like a star but will not remain in the same place on the night sky)

  • In modern astronomy it refers to a very old literal star, that exists between galaxies.

  • Indian traditions, a gods vehicle moving through the cosmos, symbolizing freedom and exploration. 

From the lyrics we took inspiration from lines such as:

  • "Please could you stay awhile to share my grief" → which we associated with "Stay awhile an listen" from Diablo games.

  • "And the masks, that the monsters wear, to feed, upon their prey" 

With this as inspiration our concept is featuring:

  • Mechanics and Systems inspired by games like Diablo, Hades and Magica

  • Narrative with Cosmic horrors twisting the minds and bodies of people.

  • Cultists sacrificing the world for their own selfish rewards.

  • Dark and gritty setting where most people have turned into horrors or died.

  • The player/players being the last hope in this otherwise doomed world.

  • Powers from beings claiming to be actual Stars.

calendar.png

   2025

time-stopwatch-solid-svgrepo-com.png

   4 weeks

team-member-svgrepo-com.png

   9 members

COSMOSIS Title Test3.png

The Health and Element systems

To make health and element systems easy to use, I made:

  • A function library that covered most use cases.

  • Components covering different parts of the systems, that also worked alone by themselves.

  • Event dispatchers from the different components to make it easy to update relevant behaviors and UI.


The Function Library:

Underline2.png

The function library consists of 5 functions:

  • Damage Actor

  • Kill Actor

  • Heal Actor

  • Revive Actor

  • Element Damage and Effect to Actor

The last function covers all cases for dealing damage and applying element effect, to make it easy for anyone making abilities, attacks or hazards. While "Damage Actor" was used early on before the element system was usable.

 

My early plan and thoughts about the element system, from Miro:

ElementSystemMiro2.png
  Element Damage and Effect to Actor:
  Damage Actor:
  Kill Actor:
  Heal Actor:
  Revive Actor:


The Element Master Component:

Underline2.png

This component is there to, spawninitialize and keep track of almost everything that is needed for full use of the element system on an entity. It has event dispatchers covering every relevant update.

Initially it was made to also cover all the interactions between elements, but I later moved those to the individual elements themselves, to enable interactions even if only specific parts of the system were in use.

  Begin Play:
  Call Element Event Dispatcher:
  Toggle Invincibility:


The Health Component:

Underline2.png
Health 2.gif

The health component keeps track of health and contains functions to alter health, deplete health, revive health, and activate a short invulnerability, as well as necessary set and get functions. 

It also has event dispatchers for any health updates and death that is used by UI and responding behaviors. 

  Alter Health:
  Deplete Health:
  Revive Health:
  Activate invulnerability:


Stun Manager Component:

Underline2.png

A component that keeps tracks of and decides if a character is stunned, shocked or frozen, and if these states are interrupted.

It applies the effects, stopping enemies from functioning entirely and changing their animations according to the effect. 

Stuns Cropped2.gif
Stun Character:


The Element Response Base Component:

Underline2.png

A base component class for the different elements to host shared variables and functionalities, such as reducing element effect build up over time and keep track of how big of an effect should be applied on the entity. It holds a function for updating element specifics, that is overridden by each element

It currently holds a function checking for extra damage conditions that includes interactions with another element, but this being changed into a function that will be overridden by each individual element, to allow more complicated and interesting interactions. 

  Add Element Accumulation:
  Tick (Turned on and off as needed):
  Extra Damage Conditions:
  Replicated Impact Effect:
  Max Out Element Accumulation:


The Elements:

Underline2.png

Our plan was always to have at least 6 elements available to the player and we all agreed that we should start out with fire and ice to get some contrast and from there see what else could work.

The total ended up being 10 different elements, 6 for the player, 1 extra for the enemies, 2 that could be applied by the environment and 1 that appear only through Interactions between certain elements.

Underline3.png

Player Ability Elements

Underline3.png
Fire
T_FireSigil_02_Transparent.png
Ice
T_IceSigil_01_Transparent1.png
Lightning
T_LightningSigil_01_Transparent.png
Wind
T_WindSigil_02_Transparent.png
Earth
T_EarthSigil_01_Transparent.png
Light
T_LightSigil_01_Transparent.png


Fire:

Underline2.png
Fire Cropped2.gif

The fire effect build up causes damage over time. If an Entity's build up is maxed out they also start damaging other entities in a small area around them. This AoE damage is handled by a child actor called "BP_Ablaze".

Ablaze Actor

The AoE damage does not contribute much to other entities buildup, as that turned out to be overpowered vs hordes. In the first iteration of this feature the fire spread too easily and would end up burning down all the enemies chasing the player as they just kept setting each other on fire

  Update Fire Specific:
  BP_Ablaze - Event Graph:
  BP_Ablaze - Burn Surroundings:


Ice:

Underline2.png

The Ice elements slows down an entity depending on how much their build-up bar is filled. When the build-up is maxed out they become frozen solid

While frozen solid, the entity is protected from further build-up until they are able to move again. This was to prevent this feature from being too powerful.

Ice Cropped2.gif
  Update Ice Specific:


Lightning:

Underline2.png
Lightning Cropped2.gif

The lightning element has chance to shock (stun) an entity. The chance and length of this depends on the effect strength and on the targets tolerance. The length and chance of shock is also increased if there is a critical hit, if the entity is drenched in water or if a hit's effect is stronger then the entity's tolerance.

It also features and a higher default critical hit chance then other elements. 

  Update Lightning Specific:


Wind:

Underline2.png

If an entity is hit with the wind element it receives a knock-back effect. The higher the element effect is the further the entity is launched. The direction is decided by the attack/ability. 

This allows for enemies to be knocked off platforms and die, which was something a lot off players enjoyed.

Wind2.gif
  Update Wind Specific:


Earth:

Underline2.png
Earth Cropped1.gif

This element, is the same as the one for any physical damage and the attacks will have a staggering effect to enemies if the build up is maxed out. Build up effect is double from critical attacks. This build-up is invisible to the player.

The physical/stagger element is also used for enemies with physical attacks.

  Update Earth/Physical/Stagger Specific:

Light:

Underline2.png

The light element features no critical hits and has a healing effect to players. It is currently not interacting with any other element.

The logic for this went into the abilities instead to allow for more customization. 

Light Cropped1.gif
  Update Light Specific:

UI on Entities


Enemy Status Bars, Component and Widget:

Underline2.png

The status bars for enemies consist of a health bar at the top and three element build up bars. Under the health bar, the build up bars with build up in them will always be at the top, but they never switch place otherwise. 

The bars used in the vertical box are put in an array. Whenever a bar changes to or from the value zero, there are checks to see if the order needs to change. If change is needed, the elements switch index numbers accordingly and the vertical box is then emptied and refilled in the new order

BuildUpBars Cropped1.gif
  Enemy Status Bars Component
  Event Graph:

  Status Bars Widget
  Change Status Bar Order:
  Event Graph:
  Update Element Bar (Ice):


Damage Numbers:

Underline2.png
Damage Numbers Player Cropped1.gif
Underline3.png
Damage Numbers Enenmies Cropped.gif

The Actor was started on, featuring only red numbers of the same size, before they became my responsibility.

 

The goal was to give the players better feedback. When an entity takes damage the color depends on whether is an enemy or a player, and then there are slight changes for any modifiers to the damage. The color turn green if it heals the entity. 

 

The size also varies depending on how much damage is dealt and increases more if there are bonus damage modifiers attached. The thought was to give the player an understanding of what the numbers reflected and provide more satisfaction when critical hits or interactions between elements happened.

  Damage Numbers: EventGraph

Management

Lead Tech:

Underline2.png

We decided to not have any lead roles on paper, but similar responsibilities were still put on members suited to them. My responsibility was to help out with blueprints, workflow and structure as well as communicate with programmers. We aimed to learn from each other and help each other grow.


Data Organization:

Underline2.png
DataDoc.png

We aimed for structure in this project. To achieve that we used a document with the data structure used in my previous group project, Røsvik, as a base and updated it

Everyone read through the document and together we made changes to it to suit our needs. By involving everyone in the process we hoped it would become more natural to follow the structure. The responsibility to make sure the document was followed fell on me.


Perforce Responsible:

Underline2.png

We were only two who felt more confident in our knowledge of perforce and the other one was our unofficial lead programmer. The main responsibility fell on me with the lead programmer as backup (as he was main responsible for multiplayer replication as well).

bottom of page