Assignment Three

Handball

Assignment Three: AI and NPCs



Project Description

In this assignment, you will add AI to your previous game's single-player mode. This AI will include simple decision-making and navigation. You will need at least two types of agents (e.g. a single enemy type and a friendly NPC, or two enemy types), and each AI type will support at least 3 behaviors (e.g. attack, retreat, dodge). By the end of this project, you will have multiple agents of each type within your single-player game mode.

The underlying functionality should be build in GDExtension, and you should be thinking about your AI system from a tools/plugin perspective. That is to say, ask yourselves "how can I make this AI system modular enough such that someone else could use my GDExtension base to build out their own AI features in GDScript/C#?" While you can certainly build out your own game's "high level" functionality in C# to create a compelling game experience, remember that this class is about the underlying system functionality, and one of this project's central goals is to create a useful tool for facilitating the game creation process.

Basic Requirements

Extra Credit

Milestone 1

  1. Documentation: You will turn in a document with the following information:

    • Overall design of your AI system. What system are you implementing? How will you program specific agent behaviors within this system? How will you debug unexpected AI behaviors?
    • Software architecture and plan. What data structures will you use to represent behaviors and transitions? How will your AI update itself? Polling or event-driven? What classes will you need to create to handle the AI behaviors, and how will it associate with the individual agents? Estimate how much work it'll take to incorporate each of the required capabilities. If it looks like you won't be able to meet your deadline, how can you scale back during the second week?
    • Division of labor. In terms of the delivered capabilities, who is responsible for which parts of the code, and what is your plan for meeting up? My experience is that teams, who meet up and code together on a regular basis create a more cohesive, functional project than teams where everyone works autonomously and tries to come together at the end. Keep this in mind during your planning stage.

  2. Project Demo: You will also submit a link in the milestone report containing any initial demo code of your proposed game for Milestone 1.

    This demo can be simple, but we need to see rudimentary versions of the expected AI capabilities, so we can gauge whether or not you're on track.

    This demo should compile and run, and you will provide instructions on controls and how the pieces of the demo in some way address your proposed creation (see final game deliverables). These pieces do not need to be at 100%, but they do need to exist.

Final Submission

You should turn in link to your GitLab like you did in the previous assignment. Make sure you have your file structure and SCons files set up correctly, along with your .gitignore and .gitattributes, to minimize build pains. Please also make sure you included all relevant files, including those related to the Godot project, and your own source/library files. Also include:

Getting Started

This is the most open-ended project yet in this class, which is why it is essential for you and your teammates to start coordinating early! You have a lot freedom in terms of deciding the behaviors you want and how you will implement it, so you will need to do your own research into AI implemenation details that will be relevant to your project. Gamasutra and Game Programming Gems are good places to start.

In terms of building out these systems, remember to start very small and implement very simple behaviors initially. AI generally requires a lot of testing and tuning, so take that time into consideration when designing and implementing behaviors. Think about how fun the Pacman AI is despite being quite simple, and how frustrating more complex, but broken, AI can be. Taking this into consideration when starting this project as well.

You may be tempted to make general upgrades to your game in addition to the AI requirements outlined above. Perhaps you didn't finish some things last time. Perhaps you finally figured out what you want to do, or how to do it. Such upgrades are cautiously encouraged, provided you make your first priority getting the basic requirements done. Any additional upgrades will be considered for extra credit to mitigate points lost on Assignment 2.

Turning it in

We'll use Canvas as with previous assignments. Only one teammate needs to turn in the assignment as a link to your Gitlab. Make sure you have the project you'd like us to consider on a branch called code-freeze and that you add both me and the TA.

Grading

Grading will be handled the same as Assignment 2: C quality work is implementing the features in a way that is mostly working, but may be buggy or not scalable. B quality work is implementing the features in a way that works but may have scaling issues, or lacks consideration for tuning and iterating. A quality work is implementing the features in robust, polished way that demonstrates consideration for tuning and scaling.

Make sure you meet the requirements before doing additional enhancements. And when considering enhancements, realize that improving the UI/gameplay/etc is generally a better place to spend your time than adding bells and whistles. If you end up showing this off to people later, you'd much rather they get involved in playing it than for you to have to hang over their shoulder showing off your special effects and apologizing that you never actually got it to a playable state.


Last modified: 10/06/23 by Sarah Abraham theshark@cs.utexas.edu