16-465: Game Engine Programming

Time: Tuseday and Thursday, 14:30 - 16:20
Location: HL 106B ("Studio A" -- yes, the lettering is weird)
Instructor: Jim McCann, jmccann@cs.cmu.edu
Office Hours: HL106B; Thursday, 16:30 - 17:30 or by appointment

This course is designed to help students understand, modify, and develop game engines. The game engine creation process is inherently a dialogue among artists, programmers, and those that span both of those categories; this course will focus not only on the technical details of engine creation, but on the artistic consequences of these technical details (and visa-versa).

Game engines consist of reusable runtime and asset pipeline code. They provide game-relevant abstractions of low-level system services and libraries, making it easier to create bug-free games that work across multiple platforms. Game engines also handle content creation, providing or integrating with authoring tools for sounds, images, scripts, and other content to ease the process of creating high-fidelity games.

In this course, we will discuss the problems game engines attempt to solve, examine how current state-of-the-art engines address these problems, and create our own engines based on what we learn. We will cover both the content authoring and runtime aspects of engines. In the first half of the course, we will be developing our own game engine, suitable for use in the LD48 game-making competition. In the next half, groups will be working to extend a modern engine of their choice.

All work will take place in groups with diverse skill sets. Technical communication among group members will play an important role.

Languages and Tools

Prior knowledge will not be assumed. A will to learn will be.

Languages: C++, Javascript (browser, nodejs), and a smattering of Python.

Revision Management: Git.

3D Modeling: Blender.


Much of the work of this course will occur in class and in groups. We will use a design-then-build-then-evaluate process, which tends to involve more talking about code than actually writing it.

Arc One

Students will discuss and design different subsystems of an engine suitable for creating single-page HTML5 games for the Ludum Dare 48 hour competition.

Arc Two

Students will work in groups to extend an existing commercial engine. Topics will be selected through a pitching process.


All exercises with a deliverable are graded out of 1 point, so there are (approximately) 1-2 points per week. Projects will have points assigned relative to the number of weeks they occupy.


There is a lot of code floating around on the internet. Feel free to read and learn from it. If you use it as part of code you write for the class:

If there is a doubt in your mind about whether you need to mention where you got the code, mention where you got the code. Plagiarism is anathema to me as an academic. If I discover that you have used code that is not your own without properly crediting the source you will fail the course and I will do my best to make sure you are removed from Carnegie Mellon.


week oftopicworknote
Jan 12 Game Engines Exercise: build system
Jan 19 Timing, Images Exercise: main loop, scenes work day on the 20th
Jan 26 2D Graphics; Tile Maps; Sprite Sheets Exercise: 2D map pipeline work day on the 29th
Feb 2 Collision and 2D Physics D2: collision math C2: collision code
Feb 9 SALD Review D+C3: SALD cleanup
Feb 16 Sound and Music A4: synth E5: crate
Feb 23 3D Graphics Exercise: 3D model pipeline
Mar 2 pre-spring/GDC break
Spring Break
Mar 16 Modern Game Engines; UE4; C++ A6: UE4 C++
Mar 23 Scene Graphs; Components Project: Pitches (Concept, Design)
Mar 30 (project time) Project: Pitches (Plan)
Apr 6 Arithmetic Coding; Level Of Detail; Culling
Apr 13 A*, Navigation Meshes, and their ilk
Ludum Dare on Apr 17! Use our engine!
Apr 20 Lea Albaugh guest lecture on Tuesday. Project Midpoint due on the 23rd
Apr 27 (Bonus Material: Everything I Forgot To Mention) Project: Final due on the 30th
May 4(Final Exam Week; no class exam)