Skip to content

Repository files navigation

Cursed Tomorrow

A platforming descent into the atmospheric unknown.

CI License: MIT Version C++ Raylib


Cursed Tomorrow is not just a game; it is a manifestation of tension and the human struggle against an encroaching, atmospheric darkness. Designed and engineered by Ahmad Hassan (B-Ted), this project serves as a technical showcase of modular C++ game design and atmospheric storytelling through interaction.

OverviewShowcaseArchitectureSystemsResourcesDevelopment

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

The World of Tomorrow Main Menu The gateway into the descent.


Gameplay Level Selection
Gameplay Level Select
Navigating the void. Choosing the path.
Atmosphere Death
Warning You Died
Signs of what's to come. The inevitable end.

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
Loading

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
Loading

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]
Loading

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."

About

A 2D horror-survival and escape game built from scratch in C++. Navigate unsettling levels, survive the glitches, and escape the nightmare. Features a custom C++ game core, robust asset management, and comprehensive system architecture documentation.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages