|
| 1 | +# Arena Rush |
| 2 | + |
| 3 | +Arena Rush is a first-person 3D arena shooter built from scratch using C++ and OpenGL, following an Entity-Component-System (ECS) architecture. The player is dropped into a closed urban arena and must survive increasingly difficult waves of enemies while managing limited health and ammunition. |
| 4 | + |
| 5 | +## Features |
| 6 | + |
| 7 | +### Enemies |
| 8 | + |
| 9 | +The game features three distinct enemy archetypes: |
| 10 | + |
| 11 | +- **Brute (Monster)**: A slow, heavily-armoured melee enemy that deals devastating close-range damage. |
| 12 | +- **Charger**: A fast, aggressive melee enemy that rushes the player at high speed. |
| 13 | +- **Drone (Flyer)**: A ranged flying enemy that orbits the player and fires projectiles from a distance. |
| 14 | + |
| 15 | +### Arsenal |
| 16 | + |
| 17 | +The player has access to three switchable weapons: |
| 18 | + |
| 19 | +- **Automatic Rifle (AR)**: Fully automatic, high rate of fire, moderate damage. |
| 20 | +- **Hunting Rifle**: Semi-automatic, very high damage per shot, slow fire rate. |
| 21 | +- **Deagle**: Semi-automatic pistol, balanced damage and fire rate. |
| 22 | + |
| 23 | +### Technical Highlights |
| 24 | + |
| 25 | +- **Graphics & Rendering**: PBR and Blinn Phong shading, Bloom post-processing, HDR tone-mapping, and a blood-splatter screen effect. Full model loading with multiple meshes, materials, and textures. |
| 26 | +- **Animation**: Skeletal animation for all enemy and map models (GLTF). |
| 27 | +- **Physics**: Bullet-physics-based collision with capsule colliders and GImpact & BVH Triangles mesh colliders. |
| 28 | +- **Artificial Intelligence**: Context-steering AI for ground enemies and orbital AI for flyers. |
| 29 | +- **Gameplay Systems**: A data-driven, JSONC-configured wave progression system with 10 escalating waves. |
| 30 | +- **Audio**: Spatial audio via OpenAL (ambient, weapon fire, enemy attacks, reload). |
| 31 | +- **User Interface**: Menu system (Main, Pause, GameOver) with HUD elements including health bar, ammo counter, weapon icon, wave countdown, crosshair, and enemy health bars. |
| 32 | +- **Movement Mechanics**: Sprinting, crouching, sliding, dashing, and jumping with full collision response. |
| 33 | + |
| 34 | +## Getting Started |
| 35 | + |
| 36 | +This project uses `CMake` and `just` (a command runner) for its build system, with optional support for `Nix`. |
| 37 | + |
| 38 | +### Build Commands (using `just`) |
| 39 | + |
| 40 | +- **`just dev`**: Enter the Nix development environment (if using Nix). |
| 41 | +- **`just build`**: Configure and build the project using CMake and Ninja. |
| 42 | +- **`just run`**: Run the game using a dedicated Nvidia/AMD GPU. |
| 43 | +- **`just run-int`**: Run the game on the integrated GPU. |
| 44 | +- **`just clean`**: Remove the `build` and `bin` directories. |
| 45 | +- **`just package`**: Package the project using Nix. |
| 46 | +- **`just desktop`**: Create a desktop entry for the game. |
| 47 | + |
| 48 | +Alternatively, you can manually build using CMake: |
| 49 | + |
| 50 | +```sh |
| 51 | +cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug |
| 52 | +cmake --build build |
| 53 | +./bin/ArenaRush |
| 54 | +``` |
0 commit comments