Project: Ship Customization SHMUP
Overview:
In this bullet-hell shooter, players face increasingly difficult enemy waves generated by a fully customizable spawn system. Between rounds, you collect upgrades and modify your ship by equipping new weapons and modules. The game tracks which upgrades are installed, allowing you to remove or swap them to adapt your playstyle for the next wave.
Key Features:
Custom-built dynamic wave system using a modular SpawnManager
Intermission-based ship customization with drag-and-drop upgrade slots
Upgrade tracking and swap system for strategic flexibility
Multiple enemy types with distinct behavior patterns
Progression and scoring system to encourage replayability
Time Frame: 4 weeks
My Responsibilities (Solo Developer)
This was a solo-developed SHMUP project centered around modular ship customization and dynamic wave-based enemy encounters. The project combines fast-paced combat with player-driven upgrade decisions between rounds.
My key contributions included:
Wave & Enemy Management
Created a structured, editor-friendly SpawnManager with nested waves, groups, and units
Used coroutines to control timed enemy spawning, adjusting pacing based on group composition
Integrated fallback logic that triggers additional spawns if players fail to clear waves in time
Tied enemy spawning to player position and event triggers for dynamic combat flow
Ship Customization System
Built a modular system for equipping and managing upgrades using a slot-based layout
Allowed players to assign collected upgrades to specific ship nodes with full placement freedom
Tracked upgrade quantities and handled equipping/removal logic with real-time visual feedback
Designed upgrade application via a standardized IUsable interface for consistent in-game behavior
Input & UI Integration
Integrated Unity's new Input System to handle ship customization controls
Developed a navigation and selection system for browsing ship slots and upgrades
Implemented confirmation, cancellation, and preview mechanics to streamline customization UX
Gameplay Logic & Persistence
Managed persistent upgrade data between rounds, allowing players to collect, reuse, and replace equipment
Ensured synchronization between visual state (equipped upgrades) and logical state (collected inventory)
Used a singleton pattern for central access to customization data and systems across gameplay scenes
This system combines real-time combat with strategic preparation, giving players a satisfying loop of intense gameplay and meaningful ship-building decisions.
I developed a modular SpawnManager system to handle dynamic wave-based enemy spawning using a nested structure of waves, groups, and units.
Key responsibilities include:
Orchestrating enemy waves and groups through serialized, inspector-friendly data structures
Using coroutines to spawn enemies at timed intervals, with automatic pacing adjustments based on group size
Triggering fallback spawns if players fail to clear a wave in time, maintaining game pressure
Integrating with an event-driven system to trigger wave spawning when the player reaches key positions
Designed as a singleton for centralized access and consistent state management across gameplay sessions
This system allows for clean separation of spawning logic, enabling scalable and flexible wave design for level-based combat scenarios.
I created a modular Ship Customization system that allows players to collect, manage, and assign upgrades to their ship between gameplay rounds.
Key responsibilities include:
Structuring upgrades with a slot-based layout that supports dynamic weapon/module assignment
Managing collected upgrades with internal tracking and reusable prefab logic
Supporting input-driven navigation and selection using Unity's new Input System
Allowing players to freely equip, remove, or replace upgrades on specific ship nodes
Using a singleton pattern for centralized control and persistent access throughout the game
Integrating with a real-time upgrade usage system that triggers assigned behaviors via an IUsable interface
This system enhances gameplay depth by combining strategic loadout management with interactive UI and flexible customization logic.
I made a Modular Projectile System for Dynamic Combat that makes the collectable upgrades feel more unique as each can have a different bullet with multiple properties.
Key responsibilities include:
Provides a base projectile class that manages movement, collision, damage, and visual effects for bullets
Implements an interface-driven damage system for flexible target interactions
Supports automatic cleanup of projectiles when leaving screen bounds or on impact
Extends base behavior with homing capability that dynamically seeks nearest valid targets using efficient distance sorting
Utilizes Unity physics and real-time rotation to smoothly track and pursue targets
Designed for easy expansion with varied projectile types enhancing gameplay combat depth and variety