Dracomaton is a top-down roguelike bullet hell where you swap between multiple playstyles on the fly. Equip yourself with various Forms that have different strengths and weaknesses, or Mod existing Forms with the characteristics of other ones!
Role: Gameplay Programmer & UI Programmer
Team size: 13
Engine: Unity
In Dracomaton, items add variety to the gameplay by giving players positive or negative effects that impact their abilities and strategy.
I set up the item system’s foundation, including how new items are created, how each item’s unique
effects work, and how these effects are applied to the player. Using Unity’s
ScriptableObjects, I
created a BaseItem
class as the core for all items, establishing shared behaviors, such as
cooldown management, while allowing specific items to have custom logic. This setup uses
inheritance and
polymorphism to make the item framework both scalable and adaptable.
Resource Management System for organizing in-game assets.
To handle stat changes, I used a StatsModifier
collections that
manage each item's status and stats modifiers. These modifiers are dynamically applied or removed when
items are equipped, allowing for flexible adjustments to player stats like damage or health.
Since designers would be working with items too, I designed the system to be easy to adjust directly in Unity’s Inspector. This setup lets designers test and fine-tune item strength just by changing values in the Inspector, making it faster to balance items without needing to touch the code.
In Dracomaton, random items and rewards appear in different scenarios, such as shops or as rewards after clearing rooms. To manage these dynamic elements efficiently, I developed a Resource Management System as a central controller for all in-game assets, including UI icons, items, VFX, and more. This system acts as a flexible helper function, simplifying resource organization and retrieval for both the Reward System and the Shop System.
The ResourcesManager.cs
is a singleton class that loads various resources (like prefabs)
from project folders into organized lists when the game starts. To keep the codebase clear and
maintainable, I used a partial class structure that separates each resource type into
its own manager.
This structure allows for easy access to specific resources through dedicated functions, making it
simple to spawn any item as needed. Additionally, each resource manager operates independently, so
programmers can create and manage single resource types without cluttering a primary script.
In Dracomaton, players receive different rewards based on the type of room they complete. For example, completing a health room grants a health potion. As the game progresses, various room types appear, each offering unique rewards.
I created a Reward Spawner object that stores different reward prefabs, enabling dynamic and specific item drops.
When a room is cleared, the Reward Spawner selects the appropriate reward type and checks for nearby available tiles to place the reward. Since tile maps are grid-based, I searched the tiles in a Spiral Pattern outward from the player within a specific range. This will help find the nearest available tile by only checking necessary tiles.
I implemented a responsive and event-driven reward system using UnityEvents and delegates. This approach enables the reward spawner to be triggered directly by room events, reducing redundant references and keeping the code structure clean and modular.
For the Shop System, I was responsible for setting up three items in each shop room, providing players with varied options every time they entered. To achieve this, I created a Shop Item Position Prefab that can be easily placed anywhere in the scene. I also made a dynamic system that allows each shop item position to spawn either randomized or fixed items. The shop system also uses weighted randomization for shop item generation, making rarer items less likely to appear.
In Dracomaton, the Mod Menu is a key part of the game’s UI, built to handle two slot types: Form Slots (upper) and Mod Slots (lower). The menu allows players to customize their setup by dragging and swapping forms and mods between these slots.
To make sure the UI changes reflected in the gameplay, I used Unity’s Drag and Drop (IDropHandler, IBeginDragHandler, and IDragHandler) Interface with a custom Draggable Item class. I structured the slots into Form Slot and Mod Slots to simplify tracking and syncing the UI with the player's actual equipment status. If an item can’t be equipped, the system displays visual cues to guide the player.
Top