Logo made by Rasmus Hartonen

Streamer vs aliens

  • Genre: First-Person shooter
  • Timeframe: 15 weeks (20h/week)
  • Engine: In-house Engine (TEMP engine)
  • Reference game: Call of Duty: World at War Zombies

My Contributions

  • AI
  • World mechanics
  • Visual scripting
  • Debug console
  • Various post process effects


UML diagram of AI behaviour

The AI in this game works on a behaviour tree with a somewhat simple behaviour.

  1. If outside: go to entrypoint
  2. If at entrypoint: attack entrypoint
  3. if entrypoint open: walk to player
  4. If at player: attack player

The attack is a bit special though, if the enemy has started attacking; but the player has moved out the way. The enemy will not change behaviour and instad follow through with its attack until it is done.

Enemy following through with attack

World mechanics

We have a couple of world mechanics. Just like our reference game, we have purchasable doors, weapons, perks and repairable entrypoints. All of these mechanics are driven by visual scripting. 

Here is an example of the door mechanic being driven by visual scripting. And subsuequently the other world mechanics works in a similar manner to the door.

Debug console

I saw on a previous years portfolio that they had made a debug console using Windows RtlCaptureStackBackTrace, which I thought looked pretty neat. So I decided to try and make my own Unity-esque debug console.

In our engine we have multiple macros for the debug console such as:

  • LOG_ERROR Just takes in a message and logs it as an error
  • LOG_ERRORF Takes in a message and formats it like Printf and then logs it as an error.
  • LOG_WARNING, LOG_WARNINGF, LOG_MESSAGE,LOG_MESSAGEF works like the ones mentioned above but for their own respective purposes.

Every log-type has a map of logs associated with them, the purpose of this is to cache the different types of logs that can happen. So we don't have to call RtlCaptureStackbackTrace every single time we wanna log something. Though normal messages are being handled a bit differently, this is due to the fact that not all messages are the same; and caching all of them would eat memory.

The logs are then passed to our console window, which prints them out as selectables and if double clicked; will open up the respective files where the log was called.

This is the result

Post process effects

I made some simple post processing effects.

Lens distortion
Chromatic aberration


This article was updated on April 10, 2024