Computer Game Programming (Fall, 2023)

TR 15:00-16:50 in Posner Hall 151.

Taught by Jim McCann (Office Hours after class in EDSH 229 or by appointment.)

With TA help from Alan Lee (Office Hours Monday 17:00-19:00 in the Smith Hall second floor common area; e-mail here.)

Games

In this class, we made a bunch of small games, as well as five final games. These games were launch[ed] live and in person on Friday, December 8th at 4-7pm in Tepper Simmons B.

Course Goals

Computer Game Programming will help you build the programming skills needed to turn ideas into games. This means we'll be covering both runtime systems and the asset pipelines to fuel them, along with some game-design exercises (with an eye to thrifty code).

The philosophy of this course is to learn by building games, from (nearly) the ground up — this means lots of C++ and OpenGL hacking, a smattering of scripting (shell, python, javascript), and a lot of documentation-reading. You do not need to be an expert in any of these things, but it would help if you are familiar with C++ and the modern OpenGL (3.3+) API.

Previous years with similar content: Game Programming '22, Game Programming '21, Game Programming '20, Game Programming '19, Game Programming '18, Game Programming '17, Game Programming '09.

Work

Students will be graded out of 20 + 3N + 6 points, divided as follows:

PointsWork
6Class Participation
3NSmall Games
20Final Game

You will often be reading lesson materials asynchronously, then discussing the material in class; your class participation score will be based on your contributions to these discussions (as well as the written answers in the lesson materials). Small games will be assigned roughly weekly to highlight basic game-related functions. The Final Game will be a larger undertaking by groups of 3-4.

There are no late days; however, if your lowest small game score is less than 3, it will be replaced by a 3 when computing your grade.

Life Advice

Being sick isn't fun. University health services often has flu vaccine available starting in September. Anti-SARS-CoV-2 measures may also work well against influenza.

Mental health is an important aspect of physical health. CMU's CaPS services exist to help you manage your mental state.

If you have a disability and are registered with the Office of Disability Resources, I encourage you to use their online system to notify me of your accommodations and discuss your needs with me as early in the semester as possible. I will work with you to ensure that accommodations are provided as appropriate. If you suspect that you may have a disability and would benefit from accommodations but are not yet registered with the Office of Disability Resources, I encourage you to contact them at access@andrew.cmu.edu.

Don't Steal

Using other people's code or data without giving credit is plagiarism. Plagiarism is an immoral activity that I take very seriously. If you plagiarize, you will fail the class, and I will do my best to make sure you are removed from CMU entirely.

All you need to do to avoid plagiarism is to make sure to give credit for the code and data you use in you project. Something as simple as the comment "//based on https://wiki.libsdl.org/SDL_CreateWindow" can save your academic career from ruin.

Additionally, most human-created works are covered by copyright and thus subject to some sort of license agreement. Make sure that code and data you use has a license agreement compatible with this course. For example, I am unwilling to pay for a license for a library so I can compile your code, or sign a non-disclosure agreement so I can read it.

"AI" note: treat the output of generative "AI" tools as you do web search results. They are distillations of other people's work. You did not make them, you queried for them. Don't try to pass them off as your own work, do cite properly, do consider the licenses of any potential constituent work.

Finally, there are two course rules which restrict your use of others' code beyond the basic requirements of ethics and legality:

  1. Avoid code from previous iterations of this course. There is a lot of it out there, but just don't look at it. You will learn less.
  2. Follow any game-specific rules. (E.g., some games require you to author all assets yourself so you understand the tools.)

Work Together

This is a course that involves writing a lot of code. Please, by all means, work together!

Resources

The course does not have a textbook. However, there are several documents available on the internet that you may find useful:

There are also some great, cross-platform content-creation tools that we will use in our asset pipelines:

And some places to get free game assets:

Schedule

Schedule subject to change.

Due dates "before class" unless noted otherwise.

August
Tues 29 Aug
Thur 31 Aug
September
Tues 5 Sep
Thur 7 Sep
  • Before Class: finish Meshes
  • From Blender to your game.
  • Scene efficiency.
Tues 12 Sep
Thur 14 Sep
  • Before Class: finish Sound ("Sound" part)
  • Design a sound API
Tues 19 Sep
  • Before Class: finish Sound ("Music" part)
  • Game2 Showcase
  • Music Theory by and for beginners
Thur 21 Sep
Tues 26 Sep
  • Game3 Showcase
  • Dialog and choice pipelines
Thur 28 Sep
  • Before Class: finish Collision
  • Build fast collision checks
  • Note: Participate in the Ludum Dare #54 game jam over the weekend and get +1pt extra credit
October
Tues 3 Oct
  • Before Class: finish WalkMesh
  • Game4 Showcase
  • WalkMesh code share
Thur 5 Oct
  • Before Class: finish Networking
  • sockets warm-up
  • HTTP
Tues 10 Oct
No Class: Jim is at SCF.
Thur 12 Oct
  • Game5 Showcase
  • Theme selection
  • Set up group infrastructure
  • Write planning docs
Tues 17 Oct
No Class: Fall Break
Thur 19 Oct
No Class: Fall Break
Tues 24 Oct
  • Game6 Showcase
  • The ECS Paradigm
  • Team check-ins
  • Prototype work time
Thur 26 Oct
  • Before Class: finish Framebuffers
  • Linear Blend Skinning Example Code
  • Prototype work time
Tues 31 Oct
November
Thur 2 Nov
Tues 7 Nov
No Class: Democracy Day
Thur 9 Nov
Tues 14 Nov
  • Before Class: finish Shadows
  • Shadow Maps Example Code
  • Game Theory, Planning, and Value Functions
  • Build out work time
Thur 16 Nov
Tues 21 Nov
  • Writing nifty shaders (water, ambient occlusion, edge detection, GPU particles)
  • Build out work time
Thur 23 Nov
No Class: Thanksgiving Break
Tues 28 Nov
  • set up distribution (itch.io?)
  • Build out work time
Thur 30 Nov
  • Bug hunting
  • Polish + presskit planning + work time
  • Leave early for the Carnegie Mellon Graphics Colloquium lecture (4:30-5:30)
December
Tues 5 Dec
  • The confusing state of cross-platform graphics APIs
Thur 7 Dec
  • Retrospective
  • Final game show and tell
Fri 8 Dec
Final Games Launch Party (Tepper Simmons B; Setup 3-3:30pm; Special Guests 3:30-4pm; Public 4-7pm.)
OUT Aug 29 Game1: Sprite-Based Game DUE Sep 7
OUT Sep 7 Game2: The Virtual World DUE Sep 14
OUT Sep 14 Game3: Require Sound DUE Sep 21
OUT Sep 21 Game4: Choice-Based Game DUE Sep 28
OUT Sep 28 Game5: Walkmesh DUE Oct 5
OUT Oct 5 Game6: Multiplayer DUE Oct 12
OUT Oct 24 final A: Prototype DUE Oct 31
OUT Oct 31 final B: Vertical Slice DUE Nov 9
OUT Nov 9 final C: Build Out DUE Nov 30
OUT Nov 30 final D: Polishing & Presskit DUE Dec 7