A real-time multiplayer brawler game built in C with a focus on systems programming, networking, and graphics.
Note
This is a learning project, not a polished commercial product. The focus is on implementation depth and understanding, not feature completeness. However, the core gameplay is fully implemented and works very well.
This is an educational game project exploring core concepts in systems programming, real-time applications, networked multiplayer systems, and graphics programming. Networking is implemented using ENet (reliable UDP), and rendering is handled by Raylib (OpenGL-based). The game features a fully functional local multiplayer experience over the network with robust client-side prediction to ensure responsive gameplay.
- Real-time Multiplayer Networking — Host a game server on any port and connect up to 5 players remotely via IP and port number
- Client-Side Prediction & Reconciliation — Ensures responsive, low-latency gameplay while maintaining consistent server-authoritative state
- Physics & Collision Detection — Real-time physics simulation with bullet and player collision handling
- Particle Effects System — Dynamic visual feedback for gameplay events
- Tile-Based Map System — Structured level design with collision support
- Custom OpenGL Rendering — Hardware-accelerated graphics with custom shader support and tile rendering
- Input Handling & Player State Management — Smooth player movement and action input
- Status & Info Overlays — Real-time game state and player information display
- Language: C (with platform-specific Objective-C for macOS)
- Graphics: OpenGL + Raylib (rendering library)
- Networking: ENet (reliable UDP networking)
- Build System: CMake
- Platforms: Linux, macOS, Windows
- CMake 3.10+
- A GCC or Clang C compiler (with C17 support)
- Libraries: OpenGL, ENet, RayLib (automatically fetched by CMake)
Initialize the CMake build directory:
cmake -B buildFor Windows with MinGW:
cmake -B build -G "MinGW Makefiles" -DCMAKE_C_COMPILER="<path to MinGW clang/gcc>"Configure options with the interactive CMake GUI:
ccmake buildBuild the project:
cmake --build buildRun the game:
./build/paintgameThis project serves as a practical exploration of:
- Low-level networking with UDP and socket programming
- Real-time state synchronization across distributed systems
- Client-side prediction techniques for responsive gameplay
- Physics simulation and collision detection
- Graphics programming with OpenGL and custom shaders
- Memory management and performance in systems programming
- Cross-platform development in C