top of page

Role:  Solo Project

Time of Development: 2 Months

Chaos Bumpers is a local co-op 3D bullet hell shooter that pits players against each other in an arena with arena "bumpers" that unleash different bullet fire patterns, creating chaos and unpredictable scenarios.

The game currently supports up to six players locally with controller support only! 

Engine/Tools:

Unity, Trello, Rewired Input System, Do-Tween Pro

Platform:

PC

Concept

This game was initially developed for the Bullet Hell Jam 2024. The theme was "Consequences," and I had a week to complete the project. I challenged myself to complete a game with a game loop and expandable design.

 

AI implementation was also a goal as I wanted to continue practicing using fuzzy logic (Utility AI) and custom behavior driven logic to create fun AI for players to encounter.

 

The inspiration for this game draws from arena brawlers and twin-stick shooters.

Footage from 1st Day of Game Jam

Design Goals

  • Easy Pick-Up and Play

    • I chose the direction to have simple controls as any other twin-stick shooter such as move, aim, and shoot to nail down a time for teaching casual players. 

  • Fun and Balanced AI

    • The challenge is that AI bots need to be able to provide the same fun (and challenge) with single or more players. I remember watching a GMTK video on "Good AI", the video mentioned gameplay systems being shared between the Player and AI.

  • Constant Movement

    • With bullets flying around the area, players will need to be constantly moving to avoid bullets and potential explosions to prevent any damage from taking place.

Technical Design

Base Controller Setup

​For any local multiplayer game, one of the most important factors in terms of code is to set up a base inheritance script to differentiate both player and AI logic. This makes the scripts easier to track, debug, and read as a designer who needs to implement how the game systems and features will affect those elements. 

I named the head inheritance script "Controller" to reference new features and systems scripts. I implemented several abilities and features that both controller types have including:

  • Health

  • Respawning

  • Rechargeable Dashing

  • Kill/Death Ratio Tracking

However! traversing, aim to target, and weapon equipment are scripted separately in their own derived "controller" scripts.

BaseControllerFootage.gif

GIF of Gameplay

Designing Bumpers

The original design for the bumper was centered around how pinball bumpers work with ricocheting bullets off the bumpers. Due to time constraints and inconsistency with the bullet's physics, I changed the design to be more centered around bumpers to be more of a crazy bullet pattern trigger when shot at it too much, I also made it movable to influence strategic usage against others. The result in that allowed me to experiment with different bullet patterns (hence the point of the jam's style).

Bumper Spread Turret

When triggered, projectiles are fired in a circled pattern. Required only 7 shots.

Bumper Sniper

When triggered, the bumper aims at any controller and fires a fast and high-damage shot. Requires only 12 shots.

Bumper Rotating Turret

When triggered, the bumper will rotate while firing projectiles in any direction. Requires only 10 shots.

The only ongoing problems were that this design wasn't communicating to players if a bumper was close to being triggered, AI bots mindlessly shooting at it, and the arena did not allow for much space or room to move the bumpers around. If more time is allocated in the future, I would love to experiment or combine this design with the original idea I had in mind, such as ricocheting bullets, to see how much "chaos" it could create. 

Game Results Screen

Like any shooter, with multiplayer, you want to give the game replayability and stats on their performance. I added a scoreboard to lay out match results and choose a definitive winner based on scoring.

 

How did I collect the information for the controller kills or deaths at runtime?

I designed a data entry system and scripted a custom class reference for each controller class that collects their name, kill/death stats, and the final score display on the HUD.   

DataStats.PNG

Custom data entry class on the base controller script.

2024-09-02 14-34-23 - frame at 1m28s.jpg

Ready Up! Menu

Referencing any brawler or party games. I designed the Ready Up! Menu and utilized Rewired Input Systems Hot Plugging for players' ease with joining and leaving a local match lobby. The Ready Up! Menu to allow up to six local players to join, they can customize their name and color selection.

 

Based on the number of players ready, you can add up to a certain number of AI bots to the game. 

 

I added a game modifier menu that allows players to customize the match to their preferences. The features included in the latest build include: 

  • Match Time

  • Weapon Spawn Rate

  • Camera Shaking on Hit

  • Camera Type

    • Static​

    • Dynamic

Ready Up Menu Walkthrough Footage

WeaponDrops.gif

Match Manager

​For matches, I scripted the manager to handle several factors including the following:

  • Current Match Type

  • Count For All Controllers in a Match.

  • Countdown time for the game.

  • Unity events at the start and end of the match.

  • Arena boundaries.

  • Respawning time

MatchManager.PNG

Weapons Manager

The manager handled weapons drops and spawning in the game. I scripted a "drop" class so I could add new drop types for AI and Players to pick up during matches. 

 

The bullet prefab is the reference when being fired from a weapon with only one line of code.

I added Pistols, Assault Rifles, Shotguns, and RPGs to the "drop" class.

WeaponSystem.PNG

AI Bot Implementation

AI Design

With the game design of Chaos Bumpers not being too complex, I believe that an AI game architecture such as behavior trees or FSM (Finite State Machines) wasn't necessary for this project and for the bots. With that in mind, I used enum states and fuzzy logic to power the AI bot's decision-making during the matches.

Implementing logic for AI featured knowing how they would traverse the scene, detect targets, and avoid encounters. In both AI Controller and Monitor Manager scripts, I implemented several functions that help power their logic. 

The AI currently has three enum states: ATTACKING, AVOIDING, SEARCHING

AIController.PNG

AI Controller (inherited from base Controller script)

First Footage Testing 1 Player vs 5 Bots

Managing the AI Bot Behavior

Although I wasn't using any architectures for the Bots, I believe it was important to have something managing how AI bots navigated themselves during matches. It was also important to have the appropriate reactions to other controllers based on their status.

So what did I do?

I designed an AI Monitor System to help manage most of their logic and how they behave during matches based on their health. I studied fuzzy logic in games and learned how to use Animation Curves in Unity to create natural behavioral reactions for AI in scenarios such as:

  • being shot at with low health

  • tracking targets with high health

  • encountering a weaponed controller with low health

AIMonitor.PNG

Playtest at Indie Dev Night

Playtesting

After the Bullet Hell Jam, I was eager to continue working on Chaos Bumpers to get to a presentable state. I signed up for Play-crafting's Indie Dev Night at BROOKLAN to gain new playtesters for the project. That helped me accomplish set goals and polish a build before the event. 

Watching playtesters was an experience because it was interesting to see how the game systems and AI controllers operated with one another which created different match experiences for each play tester. I wrote down tons of bug notes and design suggestions while keeping the player oblivious to any of my help or clarity during their session. 

IMG_4708.jpg

Station Setup

ChaosBumperGamepadControls.png
IMG_4714.jpg
IMG_4711.jpg
IMG_4710.jpg

PLAYTESTERS!

ChaosBumperPromotion.png

Instruction and Self Marketing Posters

Post Mortum

The goal of this project was to reassess my design and prototyping skills. With the game jam setting a week-long deadline to finish, I took on this project solo and completed a prototype.

 

Feedback was a HUGE factor for this game; letting other people test out the game loop and concept played to the success of this project. I learned about "killing your idea" regarding feature creep and what generally does not work as a mechanic.

As a game programmer, I saw how impactful 3D math in game development is when I discovered that cross-product could have solved my issues with implementing ricocheting bullets. I reached out to my mentor for tips on studying 3D math. Since then I've invested time into Udemy courses and YouTube videos to teach me the fundamentals of 3D math that I can use going forward for better implementation. (linear vectors, dot product, trigonometry, etc.)

 

As I continue to improve my design and programming skills, my future goal is to develop this further to show or potentially ship this to as many developers and players as possible for more feedback if the time is allocated. 

bottom of page