I'm quite impressed by your work. I hope you go and make great video games! :D
A downloadable game
Fight against the odds for your survival against a combat ready machine!
Dark Circuits is a third person shooter where you play as a robot fighting for its survival against a superior machine equipped with a wider arsenal of weapons in a 1-on-1 battle. Dodge bullets, missiles, and other attacks as you rely on limited firepower to emerge victorious in this battle.
This was a final year project created by a team of 2 programmers within a span of 5 months using the Unity engine to be played on PC. All models and visual effects were created from scratch. Animations were downloaded from mixamo.com. During development, up to 148 iterations of the game were made, with many boss attacks and abilities discarded or modified to achieve the final version of the game. This game was also nominated for Best Student Project at the SEA Game Awards during the Level Up KL 2017 Event.
This game was a challenge to develop as the team did not have a dedicated artist to assist us and we were both programmers with minimal experience with design. We did our best to create the visual effects in the game using what Unity had while still minimizing the amount of UI on the screen to convey instructions. Our goal was to deliver the best possible player experience we could with our limitations. Developing this game was an eye opener and great fun as we got to fill roles we never might have gotten to in a larger team and as a result, learned a lot more. It allowed me to enjoy the benefits and challenges faced by working a small team.
This game is available to download at the bottom of this page.
Lead Programmer, Environment Artist
Below are the details and my thoughts on my contributions to this project.
- Enemy Attack System
- This system allowed us to control the interval between each attack, and which attack the enemy will use next. All attacks have a startup period where attack values are initialized. Values are adjusted during the second phase of the battle in order to ramp up the difficulty.
- The enemy checks the distance between itself and the player to choose which attack to use next. After each attack, the enemy chooses whether to teleport to another spot in the arena, or recharge its energy if needed.
- Each attack can be interrupted if the player shoots the enemy's weak point.
- Creating this system allowed me to learn how to manage AI states to allow values to be initialized and reset properly after each attack. It was also set up in a way that new attacks could be created and added in at any time.
- Homing Rocket Attack
- The enemy fires 3 rockets that home in onto the player after a short period of time after being launched. The rockets will self-destruct after a while if they do not hit anything before then.
- The rockets can be shot and destroyed by the player in order to interrupt or damage the enemy through the explosions from the rockets being shot. Players can also opt to take cover behind one of the arena's covers in order to avoid the rockets from reaching them.
- This attack was very fun for me to develop as it was the first time I created a homing object where the orientation of the object mattered as opposed to homing spheres for example. The turning and travelling speed of each rocket can be changed to adjust the difficulty of avoiding this attack.
- Circular Bullet Attack
- The enemy spins on the spot and fires bullets rapidly at the same time, creating a wave of bullets that the player has to avoid.
- This attack uses an object pool for the bullets because it is a large amount of bullets fired and destroyed in a short time and I wanted to try to optimize the game wherever I could.
- Enemy Weak Point
- The enemy can only be damaged if it is shot at its weak point on its back. This weak point is protected by covers and is only exposed after every few attacks or when the enemy is charging its energy.
- I created a system to open or close those covers as needed. As an additional visual cue, I added steam particles that are emitted when the weak point opens, allowing players to know when to strike.
- This system was slightly challenging for me as I needed to control when the weak point was truly exposed for the player to shoot. As we wanted to reward the player for precision, the enemy will take damage if the weak point was shot at any time of exposure. Therefore, I needed to ensure that the covers would return to their original positions after the weak point had been shot.
- Energy Charging System
- The enemy has a limited amount of energy charges and it uses one for each attack. After an attack, if energy levels are low, the enemy will teleport to the light spot farthest from the player to recharge. While recharging, the enemy exposes its weak point.
- This system is tied to the arena's light spot system. Whenever the enemy goes to recharge, the light spots are forced to randomize their positions again. The light spots only revert back to the arena's system after the enemy is done recharging or is interrupted.
- This system was tricky to implement at first because it was an AI affecting another system in the arena. I learned to control the states the light spots could be in (flickering, on, and off) using two different systems.
- Light Spot System
- This system controls the position, timing, and state of the light spots that are in the arena. Only 2 light spots are allowed to be active at a time, with the exception of the starting 1 spot before the battle begins. Every light spot flickers before changing its state and is not considered active if flickering.
- If the enemy decides to recharge its energy, this system is overridden until the enemy stops recharging. Instead, the light spot farthest from the player will activate and the enemy will teleport there, allowing it to recharge while not exposing itself too near the player.
- The player also relies on light spots to recharge their gun's bullets.
- Cover Spawning System
- Up to 3 covers spawn at any of the predetermined positions in the arena.
- When one is destroyed, another one will spawn after a set amount of time in any of those positions if there isn't already a cover there.
- Cover Damage System
- The covers around the arena take damage from the enemy's attacks and will self-destruct if they take too much, preventing the player from relying on them too much to survive.
- When self-destructing, the covers will flash for a period of time and then emit an explosion which will hurt the player if they are too close.
- High Score System
- The top 5 times are saved and shown in the main menu. Players are allowed to enter their name(up to 3 characters) if they manage to win the battle.
- The times are retained even after the game is closed.
- This was the first time I created a high score system and it has proved useful in other projects I've worked on.
- Menu navigation
- All menus in the game are navigated using keyboard keys only.
- Player reticle
- As the player charges up their gun, a white circle in the reticle fades in.
- Enemy health bar
- The enemy's health bar is segmented in order to inform the player how many more hits the enemy can take.
- The portion of the enemy's health that is lost from each hit depletes slowly in order for players to notice the drop in the enemy's health as a result of their actions as opposed to a sudden change in the health bar.
- I modeled the arena into an octagonal shape and applied a gradient onto the walls to simulate light in order to make the enemy more visible against the walls.
- The floor is tiled in order to help the player find their bearings in the arena.
- I modeled the health bar on the back of the player. The health bar is encased in a translucent box to mimic a container and is a bright color to help bring focus to it. When the player's health is low, the health bar changes color and flashes.
1. Download the 'Dark Circuits' file.
2. Extract the files from 'Dark Circuits.rar'.
3. Run the 'Dark Circuits' application.