Overview
The core of Cursed Tomorrow lies in its simplicity and the weight of its atmosphere. Every movement, jump, and collision is tuned to resonate with the player's experience of navigating a world that feels both fragile and hostile.
Core Pillars
- Atmospheric Isolation: A world designed to feel empty yet occupied.
- Precision Mechanics: Character movement that respects physics and player intent.
- Modular Design: A robust C++ foundation built for extensibility and performance.
Visual Showcase
Architecture Documentation
The project architecture prioritizes decoupling and clear ownership. It is built to scale from a simple prototype to a complex production-grade game.
High-Level System Flow
graph TD
subgraph "Engine Loop"
Main[main.cpp] --> |Initialize| Game[Core::Game]
Game --> |Frame Start| Input[HandleInput]
Input --> |Update| Logic[UpdateLevelLogic]
Logic --> |Physics| Phys[Entities::Character]
Phys --> |Render| Draw[Draw]
Draw --> |Frame End| Game
end
subgraph "Asset Management"
Game -.-> |Request| RM[ResourceManager]
RM --> |Cache/Load| Disk[(Disk Assets)]
end
Module Relationship
The interaction between modules is strictly managed through the CursedTomorrow namespace.
| Module |
Responsibility |
Internal Coupling |
| Core |
Window lifecycle, state machine, and main loop orchestration. |
High (Orchestrator) |
| Entities |
Individual game actors, physics, and local state. |
Low (Independent) |
| Resources |
Centralized asset caching and memory safety. |
Zero (Utility) |
| Config |
Global constants and engine parameters. |
Static Only |
Internal Systems
Request & Data Flow
The data flow follows a strict unidirectional pattern during the update phase to ensure deterministic behavior.
sequenceDiagram
participant P as Player
participant G as Game
participant C as Character
participant RM as ResourceManager
G->>G: HandleInput()
G->>C: Update()
C->>C: Move() & Jump()
C->>C: ApplyGravity()
G->>G: UpdateLevelLogic()
G->>C: Draw()
C->>RM: LoadTextureResource()
RM-->>C: Texture Data
C->>G: Render Complete
Repository Structure
.
├── .github/ # CI/CD Workflows & Templates
├── assets/ # Game Resources (Audio, Textures)
│ ├── audio/ # Atmospheric soundscapes
│ └── mainScreen/ # Visual interface components
├── docs/ # Detailed Technical Documentation
├── include/ # Header Files
│ └── CursedTomorrow/ # Project Namespace
│ ├── Core/ # Engine & State Logic
│ └── Entities/ # Actor definitions
├── src/ # Implementation Files
├── scripts/ # Automation and build helpers
└── CMakeLists.txt # Build System Configuration
Development Workflow
The development process is designed to be contributor-friendly while maintaining high engineering standards.
1. Environment Setup
Ensure a C++17 compiler and CMake (3.15+) are installed. Raylib is the primary dependency and can be automatically fetched during the build process.
2. Build Pipeline
# Configure with external Raylib fetch
cmake -B build -D FETCH_RAYLIB=ON
# Build the project
cmake --build build --config Release
# Run Unit Tests
ctest --test-dir build
Technical Pipeline
graph LR
Code[Code Change] --> Lint[Linting Check]
Lint --> CMake[CMake Config]
CMake --> Build[Binary Build]
Build --> Test[Unit Testing]
Test --> Deploy[Release Artifact]
Academic Resources
This project is supported by extensive documentation and presentation materials detailing its design and theoretical foundations.
| Resource |
Description |
Format |
| SRS Document |
Software Requirements Specification and Data Structures (DSA) concepts. |
PDF |
| DSA Presentation |
Technical walkthrough of the concepts implemented in Cursed Tomorrow. |
PPTX |
Credits & Vision
This project is a solo endeavor by Ahmad Hassan (B-Ted). It represents a commitment to clean code, intentional design, and the pursuit of digital atmosphere.
- Lead Engineer: Ahmad Hassan (B-Ted)
- Framework: Raylib (Special thanks to the community)
- Vision: To create a space where code and human emotion intersect.
New people are welcomed to explore, contribute, and fork. The goal is to build a community around intentional game engineering.
"Tomorrow is coming, but it might be cursed."