At UCSD, CSE 125 is a unique class: students are divided into groups of 7 or 8, and each group creates a 3D multiplayer game from scratch in 10 weeks. No game engines, just C++ and OpenGL. I was lucky enough to be a part of this wonderful class in Spring 2025 (I mean that literally, as there was an application to get into this class), and this was our game: Moonlight Revelry.
Our game is something like a free-for-all, 4-player capture the flag, set on a massive, open-air map with lots of verticality. The players all have various movement and attack abilities to spice things up. Whoever holds the flag when the clock hits zero wins.
Implementation
We implemented quite a few features, from scratch, in those 10 weeks. Some of the more notable ones are listed below:
Custom Render Pipeline in OpenGL: Phong-based BRDF, shadows (shadow-mapping), point and directional lights, transparent clouds, skybox
Asset Pipeline and Animation: Custom asset design in Blender, asset import pipeline using Assimp, keyframed and smooth-skinned character animations
Water, Fog, and Particles: Stylized water with thresholded noise-based color patterns and FBM waves, exponential distance-based fog, underwater effects. Particle system for explosions, damage, and character trails.
Physics System: Built fully from scratch, no libraries. Forces, velocities, and positions per object. Sympleptic Euler Integration for position resolution. AABB Colliders for collision detection.
UI: Extensive onscreen UI, including text, vignettes, and moving tooltips, to aid the player.
Networking: TCP/IP, custom packets. Low latency on a local network.
Level Design and Game Logic: Creative placement of floating platforms, decorations, pickups to produce balanced level. Implementation of interesting powerup abilities like grappling hook and repulsor. Extensive playtesting prior to demo.