ESA is a 3rd person action platformer that takes place on a hostile planet. You play as Richard, brilliant scientist and adventurer, who has managed to accidentally crash into the planet. During the landing, some parts of the ship came loose and fell off. Richard can't take off and leave the planet unless he retrieves those parts! As you play, you help richard reclaim his ship parts and battle whatever hostile life forms you may encounter on the planet.
During this project I was responsible for AI programming and enemy behavior design, as well as fixing ragdoll physics on all character models, making sure they mixed with animations well.
Richard's main power in the game is his grapplehook. With it, he can swing himself over treacherous pits, pull down obstacles and even close the gap between himself and enemies. The game is designed around the grapplehook mechanic, especially in areas such as level design and enemy placement.
Richard is also equipped with an energy sword he uses to cut down his enemies! Enemies defeated by his sword also drop energy globes, which Richard can pick up to enhance his equipment through a talent system.
Richard's robotic companion who can offer advice if Richard gets stuck on anything. In the first level, she can be found hovering near the wreckage of the ship, and provides most of the backstory. The player can, if they so choose, ask M.S.P. to follow them while they play and give hints on what to do next.
Making a flying NPC who follows a character that grapplehooks around a level was quite a challenge. By default, the navigation bounds and behavior trees in Unreal 4.25 are only tied to walkable surface, making flying NPCs more difficult to work with. My first attempt at making her work used an octree, and constantly checking positions of both Richard and her. This slowed the game down dramatically, and wasn't viable for the end product.
Instead, I added a couple "get ready" functions in her code. In essence, she would notice the player trying to grapple and "get ready" to fly. When the player ended the grapple, she would then get the players location with the navmesh and quickly fly to the position the player was at. This then kept the illusion of the grapple being really fast, as she was always rushing to keep up with the player.
As my main focus on this project was the NPCs and AI, I spent a lot of time working on the enemies in the game. We wanted to have enemies that were indeed alien, but at the same time made sense in the environment we made. It had to be believable that these creatures actually lived on the planet.
Our main enemy type was the squidbirds, seen on the far right of the enemy character concepts. They were designed to be ambush hunters, standing still and swaying in the wind to imitate plants. When prey walks too close, the spring to life and chomp down on whatever was unlucky enough to get close.
In gameplay, they do look similar to the plants found on the surface, though their large black beaks are a dead giveaway. They'll wait until Richard gets close, and give chase!
The second enemy type, seen on the left of the enemy character concept, was the flame gulper. A small, round reptile found in the toxic forests of the planet. Eating and drinking in this highly acidic environment has made the flame gulpers stomach acid extremely dangerous. They gulp up and spit their bile at prey to wound and incapacitate it, so that they may get a tasty meal.
During gameplay, these creatures wander around the forest floor until they spot their next meal. When they do, they run close enough to be able to spit their projectiles and try to keep that distance. They do get a little tired after their attack, so the strategy is to dodge and get close.
The final enemy type sadly didn't make it to the finished game. The concept was a giant stone minotaur living in the canyons whom Richard would have to grapple onto and get behind, but we didn't pursue this enemy type due to time constraints. We did however use some of the combat design in a different part of the game.
I had a lot of fun working with the enemy behavior in ESA. In my free time, I started playing around with values like movement speed, detection range, animation range and such. While doing this, I came up with the idea of making enemy variations. Creatures had adapted to their environment and would have differing behaviors.
We named the first variation "rabid squidbird". Smaller and faster, but also weaker. These would not wait until prey got close, but would rather run them down and attack until their target fell.
The team was very positive to this addition, so I kept making more. In the end we had 4 different squidbirds and 2 different flame gulpers;
Firstly, we had the regular squidbird explained in the last section.
Then the "rabid squidbird" would rush the player and wear them down with quick attacks.
"Leaping squidbird" would sit in wait like a regular squidbird, but would jump after the player when they got too close.
"Giant squidbird" inherited from the design of the minotaur, being too big to be grappled, it would instead pull the player closer if grappled.
In addition to the regular flame gulper, I created the "gatling gulper" which did not get tired after attacking. It would rather keep shooting a barrage of projectiles at the player, forcing them to stay on the move.
We wanted a bossfight with the feel like those from classic action platformers like Mario 64 or Crash Bandicoot. Our boss was the queen squidbird. A massive version of the regular enemy towering over the entire level leading up to her. Her tentacles even served as timed platforms during the level to show just how massive she really was.
I made the fight to be in the same vain as those classic bossfights; dodge attacks for a while and then get in a punch on a weakspot. The boss area consisted of 5 lilypads Richard could stand on. The queen would raise her tentacles and smack down 2 of the pads before coming down closer to see if she had hit the player. at that moment, the player had to launch the grapplehook into her eye. This repeats 2 more times, with the queen increasing the amount of lilypads she struck per attack. In the final phase she would also shoot a beam of acid out of her eye as a last desperate attempt.
Ali Al-Awadi - Lead programmer, gameplay programmer, engine programmer, game design
Hans-Petter Kristoffersen - UX developer, level building, programmed dialogue system and in-level objects, game design
Irrjan Jernsletten - Project lead, concept artist, rigging and animation, game design
August Erle - Lead 3D artist, project manager, modelling, rigging and animation
Luis Seterholtet - Lead animator, concept artist, texturing
Kristian Whittle Stensland - AI and NPC behavior, enemy behavior design, group secretary, game design