CMSI 5998 - AI in Game Development

Professor Andrew Forney • Andrew.Forney[at]lmu.edu

CMSI 5998 is a 3-Unit course providing the introductory theory behind, and practice implementing, a wide variety of AI techniques used in modern game development. This primarily includes programmatic tools used to craft dynamic agents, procedurally generated environments, and novel methods of interaction like through natural language. Students will implement concrete examples of these topics in scaffolded mini-games, with the opportunity to extend their ideas in creative directions for inclusion in portfolios.


Learning Outcomes

By the course's end, students will:

  • be introduced to the many commonly applied AI techniques in game design, including some subset of: expectimax search, planning, user preference / behavior modeling, genetic algorithms / artificial evolution, procedural content generation, NLP-enabled dialogue systems & dynamic storytelling, memory-augmented networks & RAG, and multi-agent systems.

  • learn to use or construct implementations to these concepts like through: finite state machines, behavior trees, causal decision networks, planning graphs / GOAP (Goal Oriented Action Planning), imitation learning.

  • gain practice doing some subset of the above in the Unity game engine by: first principles, using Unity's ML Agents Toolkit, crafting dynamic and challenging agents, dynamic difficulty adjustment, increasing non-player character (NPC) dynamism, evolving agent strategies, robust procedural level generation, AR object recognition, and team-oriented agent design.

  • creatively extend and add custom spins on the above techniques in their own portfolio-ready projects.


Prerequisites

Note: before taking this course, it is assumed that you have a matured grasp on topics from Data Structures (CMSI 2120), Algorithms (CMSI 2130), and Game Development (CMSI 3752). We will spend little time in-class reviewing each!

  • Data Structures Refresher: although in Java for its code examples, you can consult my course archives for the last offering of CMSI 2120.

  • Algorithms Refresher: my lecture archives have code-agnostic lessons on all of the needed concepts; see last offering of CMSI 2130.

  • Unity Review: consult the Unity Learning Pathways below for review -- I expect you to have at least a grasp of the essentials pathway. For specific tutorials check:

  • Git Refresher: you should be comfortable with the fundamentals of Git and managing GitHub repositories as GitHub Classroom will be used to distribute and collect all assignments in the course. Need a refresher? See the Git links below.

  • Windows PC: although the lab (PER 126) will have Windows machines available for your development, if you wish to use a personal computer for this class' assignments, a Windows PC is suggested -- there are many issues with Unity development on Macs for the skeletons we'll be using.

LMU CMSI Resources

Unity Learning Pathways

GitHub Basics

GitHub Tutorials


Texts

This class uses only Open / Alternative Textbook (OAT) reading resources, and has no textbook necessary to purchase -- all will be provided free of charge.

There will be a number of reading sources required:

  • Course slides detailing required AI concepts.

  • Course tutorials / specs for assignments authored by me.

  • Curated Unity tutorials for added detail atop the foundations of concepts from lecture.


Lecture Attendance

  • Not mandatory to attend: lecture attendance is strongly advised since you'll otherwise miss out on all of our inside-jokes. Less importantly, you'll be missing out on lecture content that may not be summarized in the course notes, like questions asked by peers, classwork exercises, and hints for homework.

    There is one exception to this: the final project presentations on the last day!

  • No need to inform me of missed lecture: I'll just assume you'll be making things up by reading online / asking friends.

  • Lectures are participatory: come prepared to ask and answer questions to make the most out of your education!

Technology permitting, I will attempt to record the lectures, but you should not rely on lecture recordings for keeping up with content!


Workload Expectations

The university's workload expectations for a 3-unit, 6-week summer course are roughly 12-16 hours per work per week, including time in-class, spent studying, and working on assignments.

  • As this is a summer 3-Unit class, it is expected that you will be allocating an average of 6-10 hours outside of lectures per week working on course assignments, reading, and studying. You should manage your time appropriately.

  • Some weeks will have less material to keep you busy, and others more, but be aware that this is a work-intensive course that may require you to spend a lot of time reading and programming!


5998 Expectations

Graduate Level Expectations: this is also a 5000-level course! This means the following in terms of expectations:

  • High independence required: although I'm always happy to answer questions, I expect you to follow the Personal Empowerment Protocol (PEP) to try to answer them yourselves first.

  • Honest investment in outside work: if you're not meeting the unit expectations of time spent outside of class working on this class, you need to schedule it ASAP. I believe anyone can master this class, but there's a lot of outside studying / tutorial work required!

  • Programmatic maturity: I expect you to have several programming languages mastered already and be capable of picking up C# quickly and with few lessons in-class.

...that said, this is also a 5998 Special-Studies course, which means it's still a bit experimental! This syllabus is thus subject to change in its topics or assessments as feedback demands. Let me know if you have any comments or feedback at any time!



Finding Help for the Course

LMU CMSI has a ton of resources and people who are thrilled to help you succeed! See the following opportunities and avenues for getting help in this class' material.


Slack Messaging

Alongside email exchanges, you may reach me via the Slack messaging service (Slack is a chat client that can be downloaded here) in the LMUCS channel (lmucs.slack.com) and username forns.

  • Feel free to reach out any time -- in the worst case, I have to step away from my desk and will answer your message when I return!

  • Please try to send your note / question in a single message rather than splitting it into like 9 different messages that make my computer sound like it's making popcorn.


Student / Office Hours

Student / Office Hours are times during which I'm available for nothing but you, the students! I can help you: review course material, debug your programs, provide guidance on further exploration, and more!

  • W 1:00pm - 3:00pm, via Zoom (see link in course welcome email)

  • Questions by Slack / Email ANY time!

Steps for Remote Office Hours Attendance:

  1. I do not publicly post my Zoom office-hours link, but just send me a note on Slack *in advance of office hours* to see where I'm at (the "Starter Pack" email I send at the beginning of the semester also has this information).

  2. My office hours tend to be well attended, so if you join into a waiting room, it means I'm helping other students and will admit you as soon as I'm free.

  3. Once you've been admitted, you / your group will be placed into a Zoom Breakout Room with priority given to the order in which you joined. Wait in here and I'll be with you as soon as I can!




Tentative Schedule of Topics

The following constitutes the tentative schedule for topics to be covered in the course. This is largely an approximation for what we will cover each lecture, and is subject to change. For each topic, the relevant chapter of the textbook is also given, however, you are only required to understand the sections of each chapter that correlate with the material in the course notes -- the rest are for your curiosity and edification!

* CN = Course Notes, indicating topics that will be covered and listed on our course website but are not found in the textbook, even though *all* topics will have an accompanying page in our course notes.

Note: Assignment deadlines are not listed on this page as they are sensitive to the pace of the lectures -- see the associated Homework and Classwork tabs on the main course page for these.


Item Date Topic
Lecture 1-1
Lecture 1-2
Lecture 2-1
Lecture 2-2
Lecture 3-1
Lecture 3-2
Lecture 4-1
Lecture 4-2
Lecture 5-1
Lecture 5-2
Lecture 6-1
Final


Assignments & Grading

Grade Decomposition

Grades will be assigned based on the following weighted coursework:

  • [75%] Assignments: Large assignments with heavy reading, research, then coding required. Expect roughly 4 assignments in total, apportioned once every ~1.5 weeks.

  • [25%] Final Project: A single, final project that will extend one or more of the homework assignments in a creative way (spec will contain more details) OR allow you to implement one of the paradigms in a project of your own. A portion of this grade will be adherence to the rubric and to the quality of your final presentation of your project on the final day of classes.

Because of the density of course content, assignments can be completed in groups of up to 2 students.


Final Grades

Final letter grades are given based on the university scale of grade percentages:

  • A: 93 - 100

  • A-: 90 - 92

  • B+: 86 - 89

  • B: 83 - 85

  • B-: 80 - 82

  • C+: 76 - 79

  • C: 73 - 75

  • C-: 70 - 72

  • D: 65 - 69

  • F: 64 and below

Fractional grade percentages at 0.5 or over will be rounded up, so an 89.5% will be considered a 90% (A-), but an 89.4% will be considered an 89% (B+) on the above scale.

That said, these are only the guaranteed grade assignments: if your "final" grade is an 82%, you are guaranteed a B- or better, but you might still get an A if 82% is the top score.


Extra Credit

There are no extra credit opportunities in this class.


Submission Standards

Each of your submitted assignments are subject to the following constraints:

  • Group Size Limit: You are free to work in groups for the course's assignments. The maximum group size for this semester is 2 students.

    Moreover, it is expected that ALL groupmembers contribute to any project and although you are free to divy-up responsibilities, ALL members are responsible for UNDERSTANDING what another groupmember has written.

  • Assignment posting: all assignments (classwork, homework, or otherwise) will be announced in class and posted on this site with due dates. You are responsible for attending the lectures / checking this site / your email for any updates to assignments and their associated deadlines.

  • Late Policy: assignments are due at exactly the time indicated by the method specified. Assignments that are late by 0 - 24 hours over the deadline receive only 80% of the credit they otherwise would have. Assignments late by more than 24 hours receive a 0. There are no exceptions to this rule, plan accordingly.

    • Time management is one of the most important meta-skills to learn in this class -- avoid the risk and try to finish at *least* one day in advance of each deadline.

    • Good habits: read the specs the *day* they come out to let the topics simmer, put blocks in your calendar that you plan on working on the assignments.

  • Submission Errors: "I forgot to push to GitHub" is not a valid excuse for late assignments; always double check your remote repository to make sure that your submission is present before the deadline. Moreover, assignments that contain syntax errors or deviate from given skeletons will receive a 0.

  • Style: assignments which are sloppily submitted without proper formatting, style, and comments are subject to penalties. We will discuss what constitutes such offenses in the style guide, though you should be familiar with clean coding standards from your introductory courses.

  • Understanding: it is expected that you have fully understood any work that you submit as your own. If you submit any work that you cannot explain in technical detail, you may not receive credit for this work and may be liable for academic dishonesty. It is up to the instructor's discretion to quiz or interview you as evidence for understanding of submissions (or lack thereof). See Academic Honesty sections of syllabus for more detail and rationale.


Academic Honesty

Students are encouraged to talk and think about problems in groups, but each submission should be their own, containing no code that has been copy-pasted from another student. We take plagiarism very seriously, and each submission will be run through a similarity-checking mechanism to ensure fairness. Code or homework which we believe to be shared inapropriately between students or copied from the internet is subject to severe disciplinary action (not that you would, just sayin'). The following are examples of unacceptable behavior in this course:

  • Copying non-trivial amounts of code from the ANY other source into an assignment (excluding small things from StackOverflow like how to use Python list comprehension to simplify some code). This includes code found on the internet that solves an assignment.

  • Copying code from another student's submission, or having them verbally explain their submission line-by-line and you copying that.

  • Copying another group's solutions on an exercise (sharing between group members is encouraged... that's what it means to... you know... group up).

If you plan to copy anything from the internet, ask first!

The following slides provide more CMSI-specific standards for academic honesty; it is expected that by reading this syllabus you are aware of these standards.

CMSI Academic Honesty Standards


Rule of thumb: if anyone but you is responsible for your submitted work, you are liable for academic dishonesty! Remember that it is YOU taking this course to learn the tools of your chosen trade, your degree will be useless otherwise!

Because this is a Graduate-level, accelerated, summer course, use of generative AI tools like ChatGPT and Cursor are ALLOWED for assignments so long as you UNDERSTAND the code these tools produce. Never let GenAI prevent your learning.



Resources

Note: this is an abnormally impacted section of this course! Your patience and hard work are appreciated in advance; we'll make the most out of this semester together!

With that said, here are some things you can expect from this class, and what I expect from you:


Community Agreement

Just as I have certain expectations of you in this course, you may have certain expectations of me. Here is a high-level list of each:

My Responsibilities Your Responsibilities

Answer your questions and curiosities in office hours, over Slack, and via email with a turnaround of at most 36 hours.

Be responsible with use of your time, class time, office hours, email, and the Keck Lab TAs. Last minute pleas for help on assignments may not be enough time to get you the assistance you need.

Provide you with an educational experience superior to that which could be gleaned from a textbook or online source alone.

Keeping up with material, doing outside study, and asking questions when you're stuck -- I'm happy to help, but can't read minds.

Give you feedback on your submissions and individualized instruction on how to maximize your gain from this class.

Don't provide answers or solutions to assignments that are not your own.

Ensure that any group work is productive and encouraging; I'm always happy to mediate if conflict occurs in a group.

Be respectful of group mates: do not expect someone to do all of the work (including yourself) and try to hear ALL group members' voices.

Be as welcoming, inviting, and judgment free as possible -- I want you to learn and get excited about this class!

Be respectful and supportive of classmates -- we're all learning together.


Tips for Success in this Class

Here are a few tips for succeeding in this class (and college, in general); they're not meant to sound patronizing, but rather, are simply pearls of wisdom to hand down from someone who has recently trodden your path!

  • Ask questions: this is a brave space where inquiry is the heart of your education -- don't waste the opportunity!

    • Chances are good that someone else has the same question, free karma!

    • I might have made a mistake / typo and your question can correct it -- we're all human (I think)!

    • Don't feel like asking in-class? Jot a ? in your notes to ask later via email, Slack, or in Office Hours!

  • Fear not the specter of error: it may not feel great to be wrong, especially publicly in a college class -- but I'm here to tell you there's no better time to be wrong!

    • You'll never be wrong about what you were wrong about again -- free studying!

    • In-class is the perfect time to be wrong -- there are no stakes for being wrong, unlike in an interview, exam, or while you're coding on the job!

    • We celebrate being wrong in here because everyone can learn from mistakes -- you'll be admired as the brave one who volunteered.

  • Indulge your curiosity: and no, that's not some tagline stolen from a Vegas day-spa (actually, it might be, don't quote me on that).

    • We only have time to scratch the surface of class topics -- don't let your learning stop there, especially on topics that resonate!

    • Google related projects, experiment with questions of "what if" on different algorithms -- go forth and explore!

  • Remember that you belong: no matter what you look like, believe, etc. remember that if you have a passion for computing and the hunger to learn, you are a welcome member of this class, department, and institution.

    • This includes having a growth mindset: even if you feel like you're behind or unprepared, know that everyone who has the drive can learn computing -- we believe in you!

    • No need to feel like impostors -- this material is challenging but will help you grow -- if it were easy, you wouldn't get anything from it!

    • Always feel free to let me know if you feel otherwise on any of the above: if you're feeling excluded for ANY reason, let me know, because if I can't help you, I'll find someone who can.


University Resources

Here are some LMU links for University Resources that might be of interest:



  PDF / Print