ULTRAHELL is a first-person arena shooter where you fight endless waves of zombies across handcrafted arenas. Built entirely from scratch using modern OpenGL and C++17, the project features a complete custom game engine with an Entity-Component-System architecture, a Bullet Physicsโdriven simulation, PBR lighting with multi-source shadow mapping, skeletal animation, a progression/power-up system, and a full audio pipeline powered by OpenAL.
Computer Graphics Course โ Cairo University, Third Year, Second Semester
- Wave-Based Survival โ Endless waves of zombies with progressive difficulty scaling (HP, speed, and damage ramp with each wave).
- 6 Weapons Arsenal โ Kimber K6S revolver, Sig P365 XL, Simeon North 1826, AK-47, FAMAS, and Scar 20 โ each with unique fire rate, recoil, spread, reload animation, and sound design. Weapons unlock progressively as you survive deeper waves.
- Melee Punch & Bullet Parry โ Press
Fto punch nearby enemies and parry incoming ranged projectiles, reflecting them back with doubled damage. - Advanced Movement โ WASD movement, multi-dash system (Shift) with cooldown and FOV punch, crouching, sliding (Ctrl while moving), ground-slam (Ctrl mid-air), and slam-jump combos for increasing jump height.
- Hitscan Combat โ Physics-accurate raycasted shooting with headshot detection (2ร damage), hit markers, camera recoil, procedural camera shake, and weapon sway/bob.
- 4 Enemy Types โ Zombie Grunt (standard), Bulky Zombie (250 HP tank), Sprinter Zombie (fast, low HP), and Zombie Spitter (ranged projectile attacker) โ each with weighted spawn probabilities and unique stats.
- XP & Leveling System โ Earn XP from kills (type-weighted), wave completions, parries, slam combos, and style kills. Persistent progression saved to disk.
- 6 Special Powers (activated with
Q):Wave Power Effect 3 โ๏ธ FlightSoar above the arena for 8s 5 ๐ฅ Berserker Damage ร3, Speed ร1.5 for 10s 7 โณ Time Warp World slows to 25% for 6s 10 ๐ฅ Bullet Storm Unlimited ammo, Fire rate ร3 for 8s 12 ๐ป Phantom Invincible + ghost speed for 7s 15 ๐ God Mode All powers combined for 5s - Story Events โ Typewriter-style lore text appears at specific waves, building the narrative as you progress deeper.
- Leaderboard โ Top 5 runs tracked by wave reached, kills, and time survived, with a "New Record" celebration on personal bests.
- Custom Forward Renderer โ Full OpenGL 3.3 rendering pipeline with opaque/transparent sorting, sky sphere rendering, and post-processing.
- PBR Lighting (Cook-Torrance BRDF) โ Physically-based rendering with albedo, metallic, roughness, ambient occlusion, and emissive texture maps. Supports up to 16 dynamic lights (directional, point, and spot).
- Multi-Source Shadow Mapping โ Directional light shadow maps (4096px), point light omnidirectional cube map shadows (up to 4), and spot light perspective shadows (up to 4), all with PCF soft shadow filtering.
- Skeletal Animation โ FBX model loading with bone-driven vertex skinning and per-enemy animation blending (walk, attack, death clips at variable playback speeds).
- Particle System โ GPU-friendly billboard particles with gravity, floor settling, additive blending, and automatic lifetime management. Used for muzzle flashes, blood splatter, bullet impacts, zombie spawn VFX, and blood drip puddles.
- Post-Processing Pipeline โ Full-screen hell-fire shader with procedural FBM noise for dynamic scrolling fire overlay, warm color grading, and a red damage flash effect.
- Bullet Trail Rendering โ Visual tracer rounds that travel from muzzle to impact point with proper 3D orientation.
- Debug Overlays โ Collision wireframe rendering (F3), A* navigation grid visualization (F4), and Bullet Physics body/manifold debug panel (F8).
- A* Pathfinding โ 2D XZ navigation grid built from physics raycasts with obstacle inflation, slope rejection, diagonal corner-cutting prevention, and terrain-height-aware path queries.
- Bullet Physics Integration โ Full rigid body simulation with capsule/box/sphere colliders, character controllers, kinematic body support, gravity, ground contact detection via manifolds, and step-up terrain traversal for enemies.
- Enemy AI State Machine โ Chase โ Attack state transitions with aggro ranges, animation-synchronized attack timing, line-of-sight checks for ranged enemies, and fall-off-the-world handling.
- OpenAL-Powered Audio โ Complete audio pipeline with WAV loading, one-shot and looping sound effects, and automatic cleanup of finished sources.
- Per-Category Volume Control โ Independent Master, Music, and SFX volume sliders with settings persistence to disk.
- Contextual Sound Design โ Footstep sounds (running, sliding), jump/land audio, dash whoosh, weapon-specific fire + 3-phase reload sounds (clip out โ clip in โ bolt pull), zombie attack sounds, hit damage feedback, and separate music tracks for menu, gameplay, and death screen.
- Animated Main Menu โ Procedural GLSL shader background animation with layered logo text effects, hover sounds, and smooth reveal transitions.
- Map Selection Screen โ Card-based map picker with gradient preview thumbnails, hover glow, pulsing selection border, keyboard/mouse navigation, and a threaded background loading screen with animated progress bar.
- In-Game HUD โ Health, speed, dash charges, ammo counter with reload state, wave indicator, crosshair with reactive hit markers, and 3D-to-2D projected enemy health bars.
- Pause Menu โ Resume, Settings (audio sliders), Restart, and Exit options with stylized dark theme.
- Death Screen โ Typewriter-reveal "SIMULATION OVER" with NEW vs BEST stats comparison, leaderboard display, and restart button.
- Progression HUD โ XP bar strip, level badge, story text overlay, weapon unlock toast notifications, and a special power ring indicator with arc-based cooldown/duration display.
- Onboarding Tutorial โ 7-step interactive tutorial (move, look, shoot, reload, dash, switch weapon, enter arena) that triggers on first play.
- Entity-Component-System (ECS) โ Data-driven world with serializable entities and components loaded from YAML configuration files.
- YAML-Driven Configuration โ Shared assets, per-feature entity files (player, weapons, zombies, lights, scoreboard), and per-map environment files loaded from a structured
config/directory. The engine auto-loads every.yamlfile from the entities directory. - Hot Reload (F5) โ Live scene reload from disk while preserving the player's transform.
- Multi-Map Support โ Map-specific entity directories with per-map spawn configuration (player spawn point, zombie spawn center/radius).
- Threaded Asset Preloading โ Map entity YAML is parsed on a background thread while the loading screen animates, then consumed by the play state on the main thread.
- Free Camera / Noclip (F6) โ Debug fly camera that decouples from the player physics body.
| Layer | Technology |
|---|---|
| Graphics API | OpenGL 3.3 Core |
| Language | C++17 |
| Build System | CMake (minimum 3.10) |
| Physics | Bullet Physics (btBulletDynamicsCommon) |
| Audio | OpenAL (AL/ALC) |
| Windowing / Input | GLFW (vendored) |
| GL Loader | GLAD (vendored) |
| GL Extensions | GLEW (system, Linux) |
| Math | GLM (vendored headers) |
| Debug GUI | Dear ImGui (vendored) |
| Serialization | nlohmann/json |
| Model Loading | Custom OBJ + FBX (via Assimp for skinned models) |
sudo apt update
sudo apt install cmake g++ libglew-dev libgl-dev libx11-dev libopenal-dev libbullet-dev gdbmkdir build && cd build
cmake ..
make -j$(nproc)From the project root directory:
./bin/GAME_APPLICATION -c config/app.yaml| Key | Action |
|---|---|
W A S D |
Move |
Mouse |
Look |
Left Click |
Shoot |
R |
Reload |
Left Shift |
Dash |
Left Ctrl |
Crouch / Slide / Ground Slam (mid-air) |
Space |
Jump |
1 / 2 |
Switch weapon slot |
F |
Punch / Parry |
Q |
Activate Special Power |
Escape |
Pause Menu |
F3 |
Toggle collision wireframes |
F4 |
Toggle A* nav grid overlay |
F5 |
Hot reload scene |
F6 |
Toggle free cam (noclip) |
F7 |
Print physics body count |
F8 |
Toggle physics debug panel |
Graphics-Project/
โโโ assets/
โ โโโ icons/ # Window/app icons
โ โโโ models/ # OBJ meshes + FBX skinned models
โ โโโ shaders/ # GLSL vertex & fragment shaders
โ โ โโโ postprocess/ # Post-processing (hell fire overlay)
โ โ โโโ menu/ # Procedural menu background
โ โโโ sounds/ # WAV audio (music, SFX, weapons)
โ โโโ textures/ # PBR maps, skybox, weapon skins
โโโ config/
โ โโโ app.yaml # Engine config (window, renderer, shared assets)
โ โโโ entities/ # Per-feature YAML (player, weapons, zombies, lights, scoreboard)
โ โโโ maps/ # Per-map environment YAML
โ โ โโโ arena/ # Hell Arena config
โ โ โโโ squid/ # Pika Island config
โ โโโ leaderboard.json # Persistent top-5 run history
โ โโโ progression.json # Persistent XP/level/kill stats
โ โโโ settings.json # Audio volume settings
โโโ source/
โ โโโ main.cpp # Entry point & state registration
โ โโโ common/ # Engine core
โ โ โโโ animation/ # Skeleton, AnimationClip, Animator
โ โ โโโ audio/ # OpenAL AudioSystem & SoundEffect
โ โ โโโ components/ # ECS components (Camera, Enemy, Weapon, Collider, etc.)
โ โ โโโ ecs/ # Entity-Component-System framework
โ โ โโโ input/ # Keyboard & Mouse abstraction
โ โ โโโ material/ # Material & PipelineState
โ โ โโโ mesh/ # Mesh & SkinnedMesh loaders
โ โ โโโ physics/ # Bullet Physics integration
โ โ โโโ shader/ # ShaderProgram wrapper
โ โ โโโ systems/ # Game systems (renderer, player, enemies, weapons, HUD, etc.)
โ โ โโโ texture/ # Texture2D & Sampler
โ โโโ states/ # Game states (Menu, Map Select, Play)
โโโ vendor/ # Third-party libraries (GLFW, GLAD, GLM, ImGui, etc.)
![]() @Mag-D-Anas |
![]() @tonynagyy |
![]() @ZiadMontaser |
![]() @karimzakzouk |






