A high-fidelity, story-driven pixel art experience crafted for the spirit of Rose Day. Designed by Ahmad Hassan (B-Ted).
Features β’ Quick Start β’ Architecture β’ Contributing
This game was crafted as a heartfelt way to express your love. Use it to wish your special someone a Happy Rose Day, customize it with your private memories, and let the pixel-art magic do the rest. It's not just a game; it's a personalized wish wrapped in code.
The Rose Day Wishing Game is more than just a project; it's a digital rose garden where code meets emotion. Crafted with love and a focus on high-fidelity storytelling, this interactive experience brings the magic of Rose Day to your screen.
Built on a professional, service-oriented architecture, it seamlessly blends engineering maturity with a heartwarming narrative of two souls, MrLover and MissLovely, as they journey through a day of dreams, napping, and heartfelt surprises.
"Like a rose, a project is beautiful not just in its bloom, but in the care put into its roots."
This project was built to demonstrate clean engineering practices in game development while providing a meaningful, personalized gift experience.
- Heartfelt Narrative: A multi-stage state machine that guides MrLover and MissLovely through their special day.
- Dreamy Environments: Hand-crafted pixel-art backgrounds that shift from the warmth of the sun to the mystery of the evening and the sparkles of a dream.
- Dancing Particles: A high-performance physics engine that fills the air with drifting snow, floating hearts, and delicate rose petals.
- Soulful Soundscapes: Integrated audio services for a continuous, immersive musical journey.
- Your Own Story: Fully customizable names, greetings, and secrets tucked away in the environment configuration.
The repository follows a modern decoupled structure, ensuring 100% cohesion and minimal coupling between systems.
graph TD
A[main.py] --> B[GameEngine]
B --> C[Service Registry]
B --> D[State Machine]
subgraph Services
C --> S1[AudioService]
C --> S2[RenderService]
end
subgraph Game Systems
D --> E1[Narrative Director]
D --> E2[Particle Manager]
D --> E3[Dialogue System]
end
subgraph Entities
E1 --> P1[MrLover Character]
E1 --> P2[MissLovely Character]
end
classDiagram
class GameEngine {
+run()
+update(dt)
+render()
}
class Character {
+update(dt)
+draw(screen)
}
class MissLovely {
+draw_sleeping()
+draw_standing()
}
class MrLover {
+holding_rose: bool
}
Character <|-- MissLovely
Character <|-- MrLover
GameEngine *-- ParticleManager
GameEngine *-- DialogueBox
GameEngine *-- Background
Rose-Day-Wishing-Game/
βββ src/
β βββ core/ # Dependency injection and event bus
β βββ engine/ # Main game loop and state management
β βββ entities/ # Character logic and pixel-art rendering
β βββ services/ # Decoupled Audio and Rendering services
β βββ ui/ # Backgrounds and dialogue overlays
β βββ utils/ # Particle systems and constants
β βββ config/ # Environment-based configuration
β βββ main.py # Application entry point
βββ docs/ # Technical specifications
βββ .env.example # Configuration template
βββ pyproject.toml # Build system and metadata
βββ requirements.txt # Project dependencies
- Python 3.12 or higher
pippackage manager
# Clone the repository
git clone https://github.com/AhmadHassan-BTed/Rose-Day-Wishing-Game.git
cd Rose-Day-Wishing-Game
# Install dependencies
pip install -r requirements.txtThe game is pre-configured with generic values in the .env file. You can modify these values to personalize the experience:
# Open .env and change names/messages
# Example: PLAYER_NAME="Your Name"python src/main.pyRun the game and share the screen with your loved one to wish them in style!
- Initialization: The
GameEngineinitializes services and registers them in the centralRegistry. - Configuration: Settings are loaded from
.envand validated via theconfigmodule. - Execution Loop:
- Handle Input: Events are captured via
pygame. - Update: Systems update based on Delta Time (
dt) for frame-independent movement. - Render: The
RenderServicecomposites the background, entities, and UI.
- Handle Input: Events are captured via
- Shutdown: Clean termination of the Pygame mixer and display.
Contributions that improve architecture, performance, or narrative depth are welcomed.
- Fork the repository.
- Create a feature branch.
- Submit a pull request with a detailed description of changes.
- Author: Ahmad Hassan (B-Ted)
- License: MIT License
- Acknowledgments: Built with the incredible Pygame community.





