|
Assignment 3: AI and Networking |
You will build on the concepts from Assignment 1 and 2 by building a basic AI system as well as a networked experience. This project will be more open-ended than the previous, so you can decide additional genre and mechanics details. We will be grading based on how well you implement the specifications below (factoring in ambition of project and additional features), but all other decisions are up to your team. You will also include a report write-up describing the software architecture choices you made and why, as well as video footage of your game to show off its features.
Your game will contain the following features:
The exceptions are things where working in C++ actively ignores the tools provided by UE5 (rather than working with the tools provided). Things you should consider working with Blueprints directly are: Animation Blueprints, use of Timelines and Sequencer for other animation sequences, and constructing Behavior Trees.
You will be working from a C++ Blank Template as always, and you do not need to include the Starter Content, but you are welcome to do so if you'd like to use it. You can also reuse classes and assets from previous projects using the Migrate functionality.
You will want to take some time to think about the game experience you want to create and architect the basic systems you will ultimately be building. Note that as an open-ended assignment, this requires more pre-planning on your part, so please figure out what you are trying to create before starting to code.
You can choose how you want to implement your AI, but this assignment will be a good excuse to explore Behavior Trees since UE5 supports them by default (you will need to create any other AI implementation yourself). Regardless of the system your team chooses, you will need to create at least one type of agent using this system. All agents should have at least two behaviors they can perform based on stimulus, but you can choose how many agents your game needs (for example, you may choose to make a more complex companion AI, swarms of simpler enemies, or one complex "boss" AI). For working with AI and C++, I'd recommend reading this blog/tutorial: Unreal Engine 4, C++ | Artificial Intelligence. It goes into the details of setting up agents that I did not cover in class (but you will hopefully notice it is a similar process to creating a Player Character!).
You can choose how you want to implement your networked play, but in general, UE5 assumes a client-server model. We will assume there is no dedicated server (i.e. the "host" player's game is the server, and any players that connect are clients). If you want to set up some sort of dedicated server that helps with the matchmaking process, you are more than welcome to, but that will count as extra credit rather than minimum requirements! For the sake of simplicity, we are only going to require demostrating multiplayer functionality in the editor, as setting up a Lobby or Match-making service is more involved. There are some more details on testing multiplayer in the editor here.
Games require goals (either player-created or built into the systems) and gameplay systems built to support achieving those goals, and this assignment is no different. You should set up your gameplay such that it respects the stated goals of the game. This can mean implementing a weapons system for an arena shooter, so they can accrue points by defeating other players/bots, or a dialogue system for an story-based game, so the player can make choices and unlock new questlines. I am keeping this section intentionally vague as play varies wildly between games, and if you want to make a gacha game or a visual novel that has AI and networking, I will not try to stop you. Just make sure you explain your choices in the documentation and that you consider the technical challenges of each game genre, so you can better scope the game.
Games generally require additional props (i.e interactive and setting elements) and win/lose conditions to make it a compelling experience. What those requirements are for your game are up to you, but they must be documented in your report (and milestone) and reasonable given your game genre and play experience. So if you choose to make a shooter, you will need to handle player death and game rounds. If you choose to make a walking simulator, you will need to handle item detection and inspection and triggered events in the world. If you have questions about what props we'd consider reasonable for a given genre, or what behaviors and conditions we'd expect, please ask early, as these decisions can be very hard to change later in development.
Note that extra credit points will only be available after completing the minimum requirements.
In practice, our game would need additional networking infrastructure and possibly dedicated servers for setting up lobby systems for LAN-style games, match-making if we want to create networked experiences like Dark Souls or Journey, or persisten servers if we want to make an MMO. This is not a trivial task (especially if you want it to be robust) but it will certainly make for a more compelling game experience. You will get credit based on the difficulty and complexity of your approach.
AI is more interesting when it's able to interact not only with the player but with other AI agents in the game. Build a system with either a "swarm" intelligence where the AI agents of a particular type coordinate, or build a system with multiple types of AI agents that react to each other in emergent ways. You will get credit based on the difficult and complexity of your approach.
You will be working in UE5.2, so first ensure all team members have downloaded the exact same version of UE5. Create a C++ blank project from the templates and name it CS354p_A3. Please do not use the existing templates. They are good for learning, but it's always best to customize your project to your exact needs rather than trying to fit another project into meeting your approximate needs.
Once you have a project created, now is the time to get your project connected to a git repo. This means creating a .gitingore, and .gitattributes (via git-lfs).
Networking and AI are both big, non-trivial tasks, and while you will implement both of these, I am fully expecting you to focus on one or the other. So while you must meet minimum requirements for both, you will not receive full credit on these projects if both AI and networking only meet minimum requirements. That is to say, if you focus on AI and have minimum networking, I expect more than two states, or more than two AI types, with more complex behaviors and interactions. If you focus on networking with minimal AI, you should create more complex network scenarios such as handling more than two players, player joining/leaving, and/or multiple gameplay modes.
The only required submission for Canvas is a link to your project's repository. The TA will be looking at the branch called codefreeze, so make sure you have created and committed working code to this branch before the deadline. Any commits made after the deadline will result in that day being deducted from your late slip pool. You project's repository should also include the following: