class: center, middle # Creación de Videojuegos ### I Ciclo 2019 --- # Instructor and Schedule * Instructor: Dr. *Markus* Eger * Assistant: Guillermo Venegas * Email:
markus.eger.ucr@gmail.com
* Office hours: Tuesday, Friday, 2-2.55pm, Office 3-23 * Class: Tuesday, Friday, 3-5pm --- # About Me * Originally from Austria --- # About Me
--- # About Me * Originally from Austria * BSc and MSc in Computer Science from University of Technology Graz, Austria * PhD in Computer Science from NC State University, USA * Hablo un poco de Español * Games: Smite, Guild Wars 2, Incremental Games * I also like board games --- # About Me
--- # About You * Name * Games * Fun facts? --- # Class Resources * Website:
http://bit.ly/CI-2807
* Piazza:
http://piazza.com/ucr.ac.cr/spring2019/ci2807
* Submission: Email (GDD), github (prototype and final submission) --- # Class contents * Game Design - Genres, mechanics, game worlds, narrative, etc. - Goal: Learn to formulate game ideas in a structured way * Game Development - Game Engines, Graphics, AI, Physics, Networking - Goal: Learn how to actually build a game * Game Publishing - User Experience, Testing, Monetization, Publishing - Goal: Learn how to finish a game --- class: small # Class schedule * Game Design: 15/3 - 26/3, 12/4-23/4 * Game Engines: 29/3 - 9/4 * Graphics: 26/4 - 7/5 *
Mid term exam: 24/5
* AI: 14/5 - 31/5 * Physics: 4/6 - 7/6 * Networking: 14/6 - 18/6 * Publishing: 21/6 - 28/6 *
Final exam: 9/7
--- # The Project * The main focus of this class is the *project* * There will be *one* semester-long project * In this project, you will design, implement and finish a game * Work in groups of 4 * Three milestones: Design document, prototype, finished game * Progress update *every Tuesday* (usually 5 minutes per group) --- # Project Goal * You can make any game you want (more or less) * Requirements - Single player play has to be possible - Three distinct zones/levels/maps/environments - Some form of computer-controlled characters with "interesting" behavior ("AI") - NEW: Use Markov Chains to generate content or for AI - Unity strongly recommended, other options only with prior approval --- # Status Updates * Every Tuesday I want you to tell me about your progress * Keep your presentations to five minutes * It's OK if progress is slower some weeks * Every game has to have a website where you post screenshots, or even WebGL builds, that you use for the presentations * Not every team member is required to speak, except at the first presentation next week where you introduce your group --- # An Example From Last Semester
--- # Project Schedule * Form groups: 19/3 * Design document: 31/3 * Check-in (not graded): 27/5 * Prototype: 9/6 * Prototype discussions: 11/6 * Final submission: 3/7 * Project showcase: 5/7 --- # Grading * Midterm: 20% * Final: 20% * Project: 60% - Progress Updates: 7% (0.5% each for 14 weeks) - Game Design Document: 8% - Prototype: 20% - Final Submission: 25% --- # Unity * Unity is a game engine/middleware that simplifies many aspects of game development * Free for personal/educational use! * Asset store with many free assets * WebGL export capabilities * Install as soon as possible! --- # Lectures * The lectures work alongside the project * There are some lectures that teach concepts necessary for the project early on * Other lectures contain theory and more advanced algorithms and methods * If the need arises, I can shuffle lectures around * There will be *two* exams, mid-term and final * Questions about *your* project might be part of the exam --- # Support * You will be learning Unity/C# as part of the project * Many excellent tutorials online * If you encounter problems: Ask on Piazza, maybe others have encountered similar problems * Help each other! * Of course I will also be answering questions --- # Markov Chains - Markov Chains consist of states and transition probabilities - To "run" a chain, start in one of the states, and randomly move to the next state (according to the probabilities) - States can represent anything: - Letters or words - Enemy types - NPC mode (aggressive, defensive, patrolling, ...) - Tiles in a level - etc. - For your project you should use Markov Chains to dynamically generate *something* - If you want, you can also use a more sophisticated approach instead --- # Markov Chains: Challenges - Where do you get the transition probabilities from? - Hand-pick values to have control over output - Learn transition probabilities from some input - How do you make sure the output is reasonable? - Put constraints on the output - Test if generated level is beatable - Generate multiple options and score them --- # Markov Chains
-- How do we get the transition probabilities? --- # Markov Chains: Training Let's use a set of words: - tree - see - tier - rest - set - ire - is - it "e" is followed by: "e" twice (40%), "r" once (20%), "s" once (20%), and "t" once (20%) --- # Markov Chains
--- # Markov Chains: Generation - We can now start at a random state, and run the chain for a few steps - By noting which states we visit we can generate words that seem vaguely English - For example: - serese - reseer - treeti - street - tiseet - The input words determine what the output words may look like! --- # Markov Chains: More Interesting Example - You can play around with [this online Markov Name Generator](https://www.samcodes.co.uk/project/markov-namegen/) - There are many different data sets you can use as inputs, and other settings - For example, instead of using single letters, it may be better to use pairs or triples of letters - Sample output from using names of data structures as input: ``` Brodalqueap Routingtree Xorlinger Xorlinktree Quadedgram Associatist ``` --- # Some Project Ideas * A shooter game in which you defend a medieval town that's located in the middle of a frozen lake with a bow and arrow. You can walk on the lake, but you'll slide around. The incoming enemy waves are generated by a Markov Chain. * Because Winter is Coming! * Some Assets: - [MedievalTownExteriors](https://assetstore.unity.com/packages/3d/environments/fantasy/medieval-town-exteriors-free-27026) - [Peasants](https://assetstore.unity.com/packages/3d/characters/lowpoly-medieval-world-lowpoly-medieval-peasant-122225) - [Modular Fantasy Bridges](https://assetstore.unity.com/packages/3d/environments/fantasy/modular-fantasy-bridges-99940) - [Zombie](https://assetstore.unity.com/packages/3d/characters/humanoids/zombie-30232) --- # Some Project Ideas * An incremental/idle game (like [Cookie Clicker](http://orteil.dashnet.org/cookieclicker/), [Kittens Game](http://bloodrizer.ru/games/kittens/), [Crusaders of the Lost Idols](http://www.codenameentertainment.com/?page=idle), etc.) in which your champion (or champions) fights monsters on your behalf, while collecting coins and equipment (or parts, and you can craft items?). Item names are generated using a Markov Chain. * Some Assets: - [Space Worm](https://opengameart.org/content/space-worm) - [RPG Weapon Icons](https://opengameart.org/content/swords-maces-staves-dawnbringer32-palette) - [Armor Icons](https://opengameart.org/content/armor-icons-32x32-px-painterly) --- # Some Project Ideas * A wizard school game, where the player has to learn different spells by drawing the right shape on the screen with the mouse. The shapes for the spells (and maybe the names, too?) are generated by a Markov Chain, to give the game more replayability. * Avada Kedavra! * Some Assets: - [Spell Icons](https://opengameart.org/content/spells-icons) - [Wands](https://assetstore.unity.com/packages/3d/props/weapons/3d-items-free-wand-pack-46225) - [Fantasy GUI](https://assetstore.unity.com/packages/2d/gui/fantasy-wooden-gui-free-103811) --- # To Dos * Find a group for the project (Piazza) * Give your group a name (can be funny, a pun, a reference) * Work on 3-5 game ideas, think about what you want to generate * Present your group, name, and game ideas next Tuesday, March 19 * Each group has 10 minutes! --- # References * Unity:
http://unity3d.com
* Piazza:
http://piazza.com/ucr.ac.cr/spring2019/ci2807
* [Markov Chains for 2D Level Generation](https://www.aaai.org/ocs/index.php/AIIDE/AIIDE15/paper/viewFile/11518/11380) * [Procedural Content Generation Book (free)](http://pcgbook.com/) * [Student Games from last semester](https://yawgmoth.github.io/CI-2700/games/) * [Markov Chain Name Generator](https://www.samcodes.co.uk/project/markov-namegen/)