15-466/666: Computer Game Programming (original) (raw)
Computer Game Programming (Fall, 2020)
TR 9:50-11:10AM via Zoom (link in calendar invite; if you don't have the calendar invite, ask via e-mail)
Taught by Jim McCann (Virtual Office Hours by appointment -- just e-mail!)
We use Piazza for discussion and announcements.
Games
In this class, we made a bunch of small games, which you can see here:
We also produced seven final games, which are linked below. You can also check out the trailer.
- Enviro, a barrel-pushing, tile-based puzzle game.
- PlayComet, a comet-flying game.
- Conquer, a two-player territory-capture game.
- Hexapus Jump!, a 3D platforming game.
- Wing Person, a co-op visual novel with platforming elements.
- Magic Castlevania, a rouge-like 2D platformer.
- Color Space, a color-changing top-down shooter.
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, lua), 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 '19,Game Programming '18,Game Programming '17,Game Programming '09.
Work
Students will be graded out of 20 + 3_N_ + 3 points, divided as follows:
Points | Work |
---|---|
3 | In-Lesson Exercises |
3_N_ | Small Games |
20 | Final Game |
You will be reading lesson materials asynchronously, then discussing the material in class; there is a small number of points associated with completing in-lesson exercises. Small games will be assigned roughly weekly to highlight basic game-related functions. The Final Game will be larger undertaking by groups of 3-4.
There are no late days; however, there is enough slack in the grading to support completely missing one small game.
Life Advice
Being sick isn't fun.University health services often has flu vaccine available starting in September (though this year things may work a little differently). Your standard anti-SARS-CoV-2 measures might 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 a form of 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.
Work Together
This is a course that involves writing a lot of code. Please, by all means, work together!
- For all assignments, feel free to share code, as long as you understand the code you use, have permission to use the code, and give credit. (You still need to make different games than each-other.)
- For game1-game6 (not game0), you can work in group (up to 3) and turn in a single game. I will expect more of a group than an individual (approximately, one "extra, fancy thing" in the game per extra person), and I will need to interview your group to ensure your contribution was equitable. Also, please don't work with the same people all the time.
Resources
The course does not have a textbook. However, there are several documents available on the internet that you may find useful:
- The OpenGL Specifications (of particular interest: OpenGL 3.3 and GLSL 3.30)
- SDL Documentation
- cppreference.com the slightly-better documentation wiki for modern C++
- Advances In Real-Time Rendering SIGGRAPH course notes covering advanced rendering techniques being used in games
- Blender API Documentation, useful when writing or modifying export scripts.
There are also some great, cross-platform content-creation tools that we will use in our asset pipelines:
- GIMP is a 2D raster graphics editor
- Inkscape is a 2D vector graphics editor
- Blender is a 3D modelling, animation, and rendering suite
- Audacity is a decent free sound editor
And some places to get free game assets:
- Kenney.nl has 2D and 3D assets, creative-commons licensed
- HDRI Haven has a great collection of free HDR images, perfect for image-based lighting
- Texture Haven has some nice-looking free PBR textures
- FreePD free, public domain music
- Incompetech royalty-free (but make sure you credit the author) music
- freesound various CC-licensed sound effects
- gameaudioegdc large pack of royalty-free game sound effects
Schedule
(NOTE: schedule subject to change.)
- August
- Start Sep. 1
Due Sep. 8 (before class) - Start Sep. 8
Due Sep. 15 (before class) - Start Sep. 15
Due Sep. 22 (before class) - Start Sep. 22
Due Sep. 29 (before class) - Start Sep. 29
Due Oct. 8 (before class) - Start Oct. 13
Due Oct. 20 (before class) - Start Oct. 20
Due Oct. 27 (before class) - Start Oct. 29
Due Nov. 5 (before class) - Start Nov. 5
Due Nov. 17 (before class) - Start Nov. 17
Due Dec. 8 (before class) - Start Dec. 8
Due Dec. 10 (before class) - September
- T
2020
9-1
- Course intro
- In Class: compile basecode, start game0
- R
2020
9-3
- Before Class: finish Timing + Main Loop
- In Class: continue game0
- T
2020
9-8
- Before Class: start Asset Pipelines
- In Class: start game1
- R
2020
9-10
- Before Class: finish Asset Pipelines
- In Class: game0 showcase
- In Class: Asset Pipeline Code-Share
- In Class: continue game1
- T
2020
9-15
- Before Class: start Meshes, Scene Graphs, Materials
- In Class: Mesh Loader Code-Share
- In Class: Building a Blender Model
- In Class: start game2
- R
2020
9-17
- Before Class: finish Meshes, Scene Graphs, Materials
- In Class: continue game2
- T
2020
9-22
- Before Class: start Sound; try to finish at least one of the tutorials.
- In Class: sound loading/mixing code
- In Class: start game3
- R
2020
9-24
- Before Class: finish Sound
- In Class: game2 showcase
- In Class: continue game3
- T
2020
9-29
- Before Class: start Text + Fonts
- In Class: start game4
- In Class: code jam -- text rendering, dialog parsing
- October
- R
2020
10-1
- Before Class: finish Text + Fonts
- In Class: continue game4
- This weekend: Ludum Dare 47 -- do a 48-hour "compo" game, get 1pt of extra credit!
- T
2020
10-6
- Before Class: turn in game4 for +0.25pts
- In Class: text rendering code review
- R
2020
10-8
- In Class: start Collision
- T
2020
10-13
- Before Class: finish Collision
- In Class: start game5
- Note: Walkmeshes lesson can help with game5.
- R
2020
10-15
- Before Class: look at Walkmeshes lesson (not graded, but a big help on game5)
- In Class: continue game5
- In Class: theme cards
- T
2020
10-20
- Before Class: start Networking
- In Class: start game6
- R
2020
10-22
- Before Class: finish Networking
- In Class: continue game6
- T
2020
10-27
- In Class: theme selection
- In Class: set up group infrastructure
- In Class: planning docs
- R
2020
10-29
- In Class: prototype work time
- November
- T
2020
11-3
- In Class: prototype work time
- R
2020
11-5
- Before Class: prototype due
- In Class: prototype playtest
- In Class: vertical slice planning / work time
- T
2020
11-10
- In Class: vertical slice work time
- R
2020
11-12
- In Class: vertical slice work time
- T
2020
11-17
- Before Class: finish vertical slice
- In Class: "keynote" demos + "show floor" playtesting
- In Class: build out planning / work time
- R
2020
11-19
- Before Class: finish Framebuffers
- In Class: build out work time
- T
2020
11-24
- R
2020
11-26
- No Class: Thanksgiving Holiday Break
- December
- T
2020
12-1
- Shadows (mini-lesson)
- Before Class: set up web page / distribution (itch.io?)
- In Class: build out work time
- R
2020
12-3
- Before Class: finish Distribution+Press
- In Class: build out work time
- T
2020
12-8
- Before Class: build out builds posted
- In Class: final game bug hunting
- In Class: polish + presskit planning / work time
- R
2020
12-10
- Before Class: polish + presskit due
- In Class: retrospective
- In Class: final game show and tell
- F
2020
12-11
- Final Game Livestreams! (Schedule: TBD)