Game Design Patterns CS 4730 Computer Game Design

  • Slides: 23
Download presentation
Game Design Patterns CS 4730 – Computer Game Design Credit: Some slide material courtesy

Game Design Patterns CS 4730 – Computer Game Design Credit: Some slide material courtesy Walker White (Cornell) CS 4730

Architecture Big Picture Credit: Walker White 2 CS 4730

Architecture Big Picture Credit: Walker White 2 CS 4730

OO to MVC • We’ve discussed how OO doesn’t quite work for games –

OO to MVC • We’ve discussed how OO doesn’t quite work for games – Not that we have to throw it all out of the window, but class bloat can be a problem • We have also discussed MVC in which – We have a lightweight model representing world objects – We have a heavyweight controller in the game loop – We have a drawing method 3 CS 4730

The Decorator Pattern • Remember when we discussed the decorator pattern? • The idea

The Decorator Pattern • Remember when we discussed the decorator pattern? • The idea was that we could have objects that we “hung” various functionality bits on that would handle how that object behaved in the world • What if we could take that to the extreme? 4 CS 4730

Entity-Component-System • Another game architecture pattern is Entity. Component-System • First really described by

Entity-Component-System • Another game architecture pattern is Entity. Component-System • First really described by Scott Bilas of Gas Powered Games and then by Adam Martin • ECS is a pattern in which each object in the world is completely unique (as in, is represented by a single “primary key” integer) • In fact, ECS works kinda like a database… 5 CS 4730

What is an Entity? • This might be a bit hard to swallow for

What is an Entity? • This might be a bit hard to swallow for OO programmers • What is an Entity? – An Entity is a globally unique number – For every discernible thing in your game-world, you have one Entity (not one class, one actual Entity) – Entities have no data and no methods 6 CS 4730

What is a Component? • A Component provides an aspect of state to an

What is a Component? • A Component provides an aspect of state to an Entity – Want an Entity to have position in the world? Give it a Spatial Component – Should the Entity have health? Add a Health Component – Does it have velocity like a bullet? Fantastic – add the Velocity Component 7 CS 4730

What is a Component? • Martin: “ALL the data goes into the Components. ALL

What is a Component? • Martin: “ALL the data goes into the Components. ALL of it. Think you can take some “really common” data, e. g. the x/y/z coords of the in-game object, and put it into the Entity itself? Nope. Don’t go there. As soon as you start migrating data into the Entity, you’ve lost. BY DEFINITION the only valid place for the data is inside the Component” • Why is this? 8 CS 4730

Abstraction • Everything is abstracted away! • An Entity is just a “place to

Abstraction • Everything is abstracted away! • An Entity is just a “place to hang” stuff • It’s the combination of Components that creates a unique in-game object! • The Entity is simply a “primary key” that holds all the Components together • Then how do things get updated? 9 CS 4730

What is a System? • A System is a cohesive set of functionality that

What is a System? • A System is a cohesive set of functionality that does all of one thing in the game (i. e. it holds all the behaviors) – Collision Detection – Player Input – Enemy AI and Movement – Rendering – Enemy Spawning – Physics 10 CS 4730

Systems 11 CS 4730

Systems 11 CS 4730

What good does this do? • It makes the game MUCH more modular •

What good does this do? • It makes the game MUCH more modular • You can plug-and-play pretty much anything • You can change out functionality without affecting the rest of the game • And most importantly, it can make your design data-driven 12 CS 4730

Data-Driven Design • Who is involved in making a video game? 13 CS 4730

Data-Driven Design • Who is involved in making a video game? 13 CS 4730

Data-Driven Design • Who is involved in making a game? – Programmers – Level

Data-Driven Design • Who is involved in making a game? – Programmers – Level designers – Dialogue writers – Visual artists – Musicians – Sound effects designers – Etc… • Not all of these folks are programmers… 14 CS 4730

Data-Driven Design • The idea is that all content is NOT hardcoded into the

Data-Driven Design • The idea is that all content is NOT hardcoded into the game system • This includes: – Art – Music – Levels – Dialogue – AI scripting – Etc… 15 CS 4730

Data-Driven Design • Why? – Optimize the game creation pipeline; multiple folks working on

Data-Driven Design • Why? – Optimize the game creation pipeline; multiple folks working on different things – Makes your job of creating content MUCH easier in general (put all the levels in one folder – when the game starts, it loads all the levels in that folder!) – Could support the community to create their own content – Easier to reuse code later (not tied to the specifics of that game) 16 CS 4730

Formats • How should you create your data files? • Art assets should be

Formats • How should you create your data files? • Art assets should be standard formats • Scripts, dialogue, and other text info? – XML is a reasonable option and C# has libraries to parse it – JSON could be an option as well, but might require more parsing 17 CS 4730

ECS meets Data-Driven • Users can have more control over the game if you

ECS meets Data-Driven • Users can have more control over the game if you let them • Steam Workshop, for example • And your process should be a lot easier as well • Consider… 18 CS 4730

World of Warcraft – Stock UI 19 CS 4730

World of Warcraft – Stock UI 19 CS 4730

World of Warcraft – Modded UI 20 CS 4730

World of Warcraft – Modded UI 20 CS 4730

A Game Within A Game • I can’t tell you how much time I’ve

A Game Within A Game • I can’t tell you how much time I’ve spent finding Wo. W mods… • Example lua code for Wo. W: function Hello. World() print("Hello, World!"); end 21 CS 4730

A Game Within A Game • XML Document that goes with it: <Ui xmlns="http:

A Game Within A Game • XML Document that goes with it: <Ui xmlns="http: //www. blizzard. com/wow/ui/" xmlns: xsi="http: //www. w 3. org/2001/XMLSchemainstance" xsi: schema. Location="http: //www. blizzard. com/wow/ ui/. . Frame. XMLUI. xsd"> <Script File="Hello. World. lua"/> <Frame name="Hello. World. Frame"> <Scripts> <On. Load> Hello. World(); </On. Load> </Scripts> </Frame> </Ui> 22 CS 4730

Star. Warrior Example • See the Star. Warrior Mono. Game example using the Artemis

Star. Warrior Example • See the Star. Warrior Mono. Game example using the Artemis ECS Framework! 23 CS 4730