A Story-Driven 2D Action-Adventure Game
Chirping Unicorns is a 2D action-adventure game developed as a capstone project for the Integrated Computer Science (ICS 499) program at Metropolitan State University.
The game follows the journey of Archibald, a young boy with no formal skills or training, who embarks on a perilous quest of revenge after a fearsome dragon destroys his family's farm. Players must navigate through a variety of environments, engage in dialogue, and make critical choices that determine the outcome of the story and the fate of the world of Moorhollow.
- Dynamic Narrative: A complex branching storyline where player choices influence the "path" of the hero, villain, or coward.
- Blurb System: Unique narrative delivery utilizing three types of "Blurbs":
- No-Sided: Environmental narration and exposition.
- One-Sided: Inner monologues and character-specific internal thoughts.
- Two-Sided: Interactive dialogue between two characters.
- Active Rendering Engine: Implemented a custom active rendering loop to ensure precise frame rate control (30 FPS) and eliminate screen tearing issues common in standard Swing implementations.
- State Management: A robust state machine architecture handles transitions between the Main Menu, Pause Menu, Inventory, and various "Game States" (Combat, Exploration, Conversation).
- Persistence System: Full implementation of a Save/Load/Delete system with dedicated save slots to preserve player progress.
- Customizable Experience: In-game settings for music, sound effects, and resolution scaling.
This project was built using a Layered Architecture to ensure modularity and maintainability:
- Outer Layer (Infrastructure): Handles global systems like resource loading (images/audio), preference management, and the primary game loop.
- Inner Layer (Game Logic): Manages the specific logic of the current scene, including entity updates, collision detection, and state-specific rendering.
- Active Rendering: We chose active rendering over passive rendering to gain full control over the
Graphicsobject lifecycle, ensuring that UI updates are immediate and frame rates remain consistent. - Abstract GameState: By utilizing an abstract
GameStateclass, we were able to decouple the game's core engine from specific content (levels/cutscenes), making it easy to add new "states" without modifying the primary framework.
- Language: Java
- Graphics Library: Java Swing & AWT
- Audio Handling: Java Sound API
- Architecture: Layered Architecture, State Pattern, Observer Pattern (for Input handling).
- Clone the repository:
git clone https://github.com/verna-stack/chirping-unicorns.git
- Navigate to the project directory:
cd chirping-unicorns - Compile and Run:
- Ensure you have JDK 8 or higher installed.
- Run the
GameFrameworkclass (or use your IDE's "Run" button).
src/
├── com/cu/ag/
| ├── framework/ # Core framework (GameClock, GamePanel, Engine)
| ├── game/ # Entry point (GameFramework.java)
| ├── game_objects/ # Items used by players in the game
| ├── interfaces/ # Components of the user interface
| ├── screens/ # Menus end rendered environments
| └── utilities/ # Input handling and helper classes
├── preferences/ # Specific game scenes (DemoState, ConversationState, etc.)
├── resources/ # Images, Sounds, and Data files
└── saves/ # Reference points (player_data_slot-1)
- Hanna Prussog - UI Design & Lead Narrative
- Khang Tran - Systems Engineering
- Daniel Duvernais - Core Framework
- Waathiq Juma - Logic Implementation
- Blouneu Yang - Mechanics & Systems
- Thomas Carney - Graphics & Integration
This project was completed as part of the ICS 499 Capstone Course at Metropolitan State University.