top of page

THE CORE

Game Info

  • Players: Single Player

  • Genre: Top Down shooter, Dungeon Exploration.

Development Info

  • Role: Programmer, Artist, Designer

  • Team Size: 1

  • Development Time: 5 Months

  • Game Engine: Unity

Quick Summary

In The Core" is a top-down bullet hell shooter featuring diverse weaponry like guns, bombs, and a grappling hook. Players navigate through a dungeon filled with unique enemy types, including mini-bosses and an end boss. The game implements efficient data-saving mechanics, automatically preserving player progress during scene transitions for seamless gameplay.

PortfolioPiece.gif

Project Goals

As a Game Programmer, I aimed to apply my learning by creating a dynamic gaming experience. This included designing enemies with diverse behaviors and implementing advanced AI pathfinding algorithms. I also developed various guns, each with unique characteristics to offer players a range of strategic choices. In addition, I crafted a robust inventory system to manage player resources efficiently. To showcase my skills, I created an engaging boss battle featuring multiple challenging phases. Finally, I implemented a reliable save and load system to ensure players could seamlessly continue their gaming experience.

Weapon fire select 0.png

Weapons

I opted to centralize shooting input within the gun script to streamline the system. This choice stemmed from the need to accommodate various gun types and firing modes, categorized into distinct enums for clarity. By consolidating shooting logic in one place, I could seamlessly implement different gun functionalities, including semi-automatic, full-automatic, or charge-based weapons. This approach afforded me the flexibility to craft diverse weapons with unique combinations of firing mechanisms.

GooGun

The Goo Gun is a charge type weapon that shoots based on how long the player holds down the fire button. While the player holds the button down, the charge strength scalar gets incremented each second. Upon release of the button is when the gun shoots and the distance of the bullet is determined by that charge strength. I wanted to display a charge bar filling up, to show the player how much the gun has been charged. If the charge bar fills up past a certain threshold the gun gets a boost shooting the goo bullet farther. 

GooGun.gif

Homing Gun

Homing Gun.gif

The Homing Gun shoots out bullets that tracks the enemy and turns towards it. The biggest issue I had with this, was the bullet choosing which enemy to track. To fix this, while the bullet is traveling it will check to see if any enemy colliders are within a radius and it gets added to a list of enemies. With this approach I noticed that it gets enemies even behind the bullet, so to avoid that, I used the Dot Product to determine if the enemy is in front. When the list is done getting filled, I just determine which of these enemies is closer to the bullet and select that as the target. 

Pathfinding

I wanted the enemies to find the best path to the player while avoiding areas that are considered impassable, such as walls and pits. So I used the AStar pathfinding algorithm. To create the nodes for each section of the dungeon I created a function that would create the nodes based on the width and length that I would set in the Inspector. This allowed me to have the freedom to either create sections of a dungeon that can have more or less nodes . I had a spawner that would get the starting node, and when the enemy spawns I run Astar once to get the goal position. But when the player moved is when

I had the most trouble. I had to find a way for the enemies to update the new goal position every time the player moved. I thought that running AStar every update would fix this problem, but it caused some performance issues. So to fix this problem, I timesliced AStar and I also executed AStar whenever the player moves away from the original goal at a distance.

A-StarNodes.gif
EntityPathfind.png

The Green Nodes show passable areas whereas the red nodes show that it is impassable. Also the red lines are showing the path it will take to the goal.

Tremor Boss

Boss Phase 279.png
Boss Phase 0.png

Phase 1

I decided the boss should have 2 attacks for phase 1 so this could be used to teach the player how to move around the arena so that they are ready for phase 3.

1.) Machine Gun

2.) Circle Shot

I had the boss shoot the machine gun and and then the Circle Shot in that order for 3 times. This let me teach the player how to move around the arena. After that 3rd sequence I decided to change the attack patterns to be random so that the player can be surprised of the sudden change to test their skills.

Tremor Boss Phase 1.gif

Phase 2

Dungeon1BossPhase2.gif

I wanted to express that the Tremor Boss digs underground and creates a sand whirlpool that sucks the player and the bombs in. I thought it would be interesting to have the boss only be damaged by the bomb. This simulated the bombs being sucked into the pool and damaged the boss underground.

 

To get the effect of the whirlpool pulling the player in, I subtracted the players position from the swirl's position and normalized it to get the direction of where the player is getting pulled to, I then used a float scalar to determine the strength of the pull. 

SwirlPullEquation 0.png

As for the Homing Projectiles, I used Craig Reynolds' Seek Steering Behavior algorithm. To understand this algorithm, I watched a series of Youtube videos called "Steering Behaviors" by The Coding Train, and I read various articles named "Understanding Steering Behaviors" by Fernando Bevilacqua.  I also set a timer to where the projectile will shoot forward charging the player's direction.

In Phase 2 I also added in the mini Spike Tremors so that they shake the player off the wall when the player decides to use the grappling hook on a wall to keep from fighting the pull from the swirl. I wanted to represent the tremors by shaking the screen.

HomingProjectile.gif

Phase 3

With phase 3 this was where I wanted to increase the difficulty of the boss a bit by having the boss mix its machine gun style shooting and circle shot. To get the spinning effect I found it easier to just create a parent bullet position with 16 child blank game objects, and set those as the positions for the circle shot so that I for phase 3, I could just rotate the parent object at a specific speed.

Phase3.gif

Phase 3 Bullet Hell Attack

bottom of page