Eight Rules for Making Your First Great Game

Post on 13-Jan-2017

47 views 0 download

Transcript of Eight Rules for Making Your First Great Game

Eight Rules For Making Your First Great GameNick Prühs

About Me

“Best Bachelor“ Computer ScienceKiel University, 2009

Master GamesHamburg University of AppliedSciences, 2011

Lead ProgrammerDaedalic Entertainment, 2011-2012

Co-Founderslash games, 2013-2016

Technical DirectorDaedalic Entertainment, 2016

2 / 79

Diversity of Games

3 / 113

Diversity of Games

4 / 113

Diversity of Games

5 / 113

Diversity of Games

6 / 113

Diversity of Games

7 / 113

Diversity of Games

8 / 113

Game Development

“Games are insanely complex.”

- Warren Spector

Rule 1

Make testing as easy as possible!

Make testing easy!

11 / 79

At the beginning of Campus Buddies, Christian had the idea of creating

a debug web page containing links for several debug functions

creating and logging in a test user

adding points for the current user

unlocking achievements

and many, many more

Make testing easy!

12 / 79

Make testing easy!

13 / 79

This was arguably the best idea we had throughout the project.

Make testing easy!

14 / 79

• Debugging can be a pain in the ass

especially when network communication is involved

• Our debug page saved us lots of blood, sweat and tears

• The earlier you set up your debugging tools, the more you’ll benefit

from them

15 / 79

Rule 2

Deploy often!

Deploy often!

17 / 79

Creating a new version can involve a step or two:

Accessing source controlo Syncing working copy

o Creating tags

Writing version numbers

Performing the actual build

Packaging the build result

Publishing the game on a build page

Running unit tests

Sending email notifications

Deploy often!

You wouldn’t wanna do all that by hand.

Every time.

Do you?

18 / 79

Deploy often!

19 / 79

Rule 3

Use a bullet-proof, feature-based

project structure!

Bad Example

• Assets

EMHQo Data

– Icons

– Images

– Sprites

– Textures

o Resources– Icons

o UI– Common

» Sprites

EMHQ_gfx_exporto Textures

GUIo Assets

– Images

21 / 79

Bad Example

• Assets

EMHQo Data

– Icons

– Images

– Sprites

– Textures

o Resources– Icons

o UI– Common

» Sprites

EMHQ_gfx_exporto Textures

GUIo Assets

– Images

22 / 79

Bonus Objective:

- Find the icon for the Main Menu button.

Bad Example

• Assets

EMHQo Data

– Icons

– Images

– Sprites

– Textures

o Resources– Icons

o UI– Common

» Sprites

– Base» HUD

• Sprites EMHQ_gfx_export

o Textures

GUIo Assets

– Images

23 / 79

Bonus Objective:

- Find the icon for the Main Menu button.

Feature Folders

• Project Root

FingerGestures

FreudBot

HOTween

NGUI

NData

Unity Test Tools

24 / 79

Feature Folders

• Project Root

FingerGestures

FreudBoto Animations

o Atlases

o Fonts

o Localization

o Prefabs

o Scenes

o Sounds

o Sprites

o Scripts

HOTween

NGUI

NData

Unity Test Tools

25 / 79

Feature Folders

• Project Root

FreudBoto Scripts

– Ads

– Analytics

– Comics

– Core

– Debug

– Dialogue

– IAP

– Mobile

– Progression

– Sound

– UI

26 / 79

Feature Folders

• Project Root

FreudBot

o Scripts

– Ads» Components

» Events

» Systems

27 / 79

Feature Folders

This way, features and plugins can easily be updated

or removed without having to scan the full project

tree.

28 / 79

Rule 4

Listen to your players!

Analytics

30 / 79

Analytics

31 / 79

Analytics

32 / 79

This is okay. (Endboss)

Analytics

33 / 79

This is not. (Intermediate level)

Rule 5

Fix bugs immediately!

35 / 79

Why you should always start debugging immediately

Why you should always start debugging immediately

• Code entropy says your code will get worse, all the time, unless you

actively invest in preventing that

• Broken windows theory says the worse your code is, the worse it will

become

• Tracking down bugs is harder in a larger code base

• Tracking down bugs is harder in a buggy code base

36 / 12

Code Quality Tools

37 / 12

Code Quality Tools

38 / 12

Code Quality Tools

39 / 12

/// <summary>

/// Attaches the passed component to the entity with the specified id.

/// Note that this manager does not check whether the specified id is valid.

/// </summary>

/// <exception cref="ArgumentNullException">

/// Passed component is null.

/// </exception>

/// <exception cref="InvalidOperationException">

/// There is already a component of the same type attached.

/// </exception>

public void AddComponent(int entityId, IEntityComponent component)

{

if (component == null)

{

throw new ArgumentNullException("component");

}

if (this.components.ContainsKey(entityId))

{

throw new InvalidOperationException(

"There is already a component of type " + component.GetType() + " attached to entity with id "

+ entityId + ".");

}

this.components.Add(entityId, component);

this.OnComponentAdded(entityId, component);

}

Divide-and-conquer

40 / 12

Divide-and-conquer

41 / 12

Divide-and-conquer

42 / 12

Divide-and-conquer

43 / 12

Divide-and-conquer

44 / 12

Divide-and-conquer

45 / 12

Logging

46 / 12

On-Screen

47 / 12

Pair Programming

48 / 12Source: University of Utah, UIT

And if nothings helps …

49 / 12

And if nothings helps …

50 / 12

Try again tomorrow!

Some are really nasty …

• Remote systems

• Race conditions

• Mobile development, embedded systems, drivers

• “Release Mode only” bugs

51 / 12

Quoting My Tutor

“If the bug is not where you expect it to be,

you better start looking for it where you’re not expecting it to be.”

- Hagen Peters

52 / 12

You need a repro. Period.

How can you be sure you’ve fixed it?

53 / 12

Rule 6

Gameplay first!

Gameplay First

55 / 60

Erich Schaefer. Postmortem: Blizzard's Diablo II. http://www.gamasutra.com/view/feature/131533/postmortem_blizzards

_diablo_ii.php

“First, we make the game playable as soon as possiblein the development process. Our initial priority was toget a guy moving around on the screen and hackingmonsters. This is what players would be doing most ofthe time, and it had to be fun.”

Rule 7

Learn from others!

Because you wouldn't use a screwdriver on a nail...

57 / 60

StarCraft II Galaxy Editor

58 / 60

StarCraft II Galaxy Editor

Because you wouldn't use a screwdriver on a nail...

59 / 60

StarCraft II Galaxy Editor

Because you wouldn't use a screwdriver on a nail...

60 / 60

StarCraft II MakeCombat

Because you wouldn't use a screwdriver on a nail...

61 / 60

Erich Schaefer. Postmortem: Blizzard's Diablo II. http://www.gamasutra.com/view/feature/131533/postmortem_blizzards

_diablo_ii.php

“In many cases we created tools to speed up contentcreation, but then abandoned them. Too often, wedecided to keep using inferior tools because wethought we were almost done with the game, anddidn't want to take the time to improve them.Unfortunately, in most of these cases, we were notreally almost done with the game.“

Because you wouldn't use a screwdriver on a nail...

Genre Standards

62 / 60

StarCraft II Screenshot

Genre Standards

63 / 60

StarCraft II Screenshot

Genre Standards

64 / 60

StarCraft II Screenshot

Genre Standards

65 / 60

StarCraft II Screenshot

Genre Standards

66 / 60

StarCraft II Screenshot

Genre Standards

67 / 60

StarCraft II Screenshot

Genre Standards

68 / 60

StarCraft II Screenshot

Genre Standards

69 / 60

StarCraft II Screenshot

Genre Standards

70 / 60

Unreal Tournament 3 Splash Screen

Genre Standards

71 / 60

Unreal Tournament 3 Login Screen

Genre Standards

72 / 60

Hostile Worlds Screen Transitions

Genre Standards

73 / 60

Steam Server Browser

Genre Standards

74 / 60

WarCraft III Lobby

Genre Standards

75 / 60

WarCraft III Loading Screen

Genre Standards

76 / 60

WarCraft III Score Screen

Genre Standards

77 / 60

StarCraft II Options Screen

Open Game Sources

78 / 60

Doom 3 GPL Release on GitHub

Open Game Sources

79 / 60

Blizzard on GitHub

Open Game Sources

80 / 60

Blizzard QT on GitHub

Open Game Sources

81 / 60

Blizzard Premake on GitHub

Project Structure

82 / 60

Windows 10 - System32 Folder

Project Structure

83 / 60

> 3000 Libraries

Project Structure

85 / 60

Hearthstone Asset Bundles

Project Structure

86 / 60

Hearthstone Data Files

Project Structure

87 / 60

StarCraft II “Mods”

Project Structure

88 / 60

StarCraft Game Folder Size

Project Structure

89 / 60

StarCraft MPQ Files

Data Structure

90 / 60

https://en.wikipedia.org/wiki/MPQ

MPQ (Mo'PaQ, short for Mike O'Brien Pack, named after its creator[citation

needed]), is an archiving file format used in several of Blizzard Entertainment's games.MPQs used in Blizzard's games generally contain a game's data files, including graphics, sounds, and level data. The format's capabilities include compression, encryption, file segmentation, extensible file metadata, cryptographic signature and the ability to store multiple versions of the same file for internationalization and platform-specific differences. MPQ archives can use a variety of compression algorithms which may also be combined.

Data Structure

91 / 60

Hearthstone Localization Files (GAMEPLAY.txt)

TAG TEXT COMMENT

GAMEPLAY_COIN_TOSS_LOSTYou get an extra card

GAMEPLAY_COIN_TOSS_WON You go first

GAMEPLAY_FATIGUE_TITLE Fatigue

GAMEPLAY_FATIGUE_TEXT Out of cards! Take {0} damage.

GAMEPLAY_FATIGUE_HISTORY_TEXT Trying to draw from an empty deck

deals increasing damage to your hero.

GAMEPLAY_END_TURN END TURN

GAMEPLAY_ENEMY_TURN ENEMY TURN

GAMEPLAY_YOUR_TURN Your Turn

GAMEPLAY_ERROR_PLAY_REJECTED Too late! Your turn is over.

GAMEPLAY_MOBILE_BATTLECRY_CANCELED Battlecry canceled.

GAMEPLAY_MANA_COUNTER {0}/{1} 0=unused mana 1=current total mana

Data Structure

92 / 60

Hearthstone Data Files (BOARD.xml)

<?xml version="1.0" encoding="UTF-8"?><Dbf><Column name="ID" type="Int" /><Column name="NOTE_DESC" type="String" /><Column name="PREFAB" type="AssetPath" /><Record><Field column="ID">1</Field><Field column="PREFAB">Assets/Game/Boards/STW/STW</Field><Field column="NOTE_DESC">Stormwind</Field></Record><Record><Field column="ID">2</Field><Field column="PREFAB">Assets/Game/Boards/ORG/ORG</Field><Field column="NOTE_DESC">Orgrimmar</Field></Record>

Log Files

93 / 60

Hearthstone Log File

Platform assembly:

D:\Games\Hearthstone\Hearthstone_Data\Managed\ICSharpCode.SharpZipLib.dll (this

message is harmless)

Loading D:\Games\Hearthstone\Hearthstone_Data\Managed\ICSharpCode.SharpZipLib.dll

into Unity Child Domain

Platform assembly: D:\Games\Hearthstone\Hearthstone_Data\Managed\PlayMaker.dll

(this message is harmless)

Loading D:\Games\Hearthstone\Hearthstone_Data\Managed\PlayMaker.dll into Unity

Child Domain

Log Files

94 / 60

League of Legends Log File

Function: Spell::Effect::SpellFXRenderer::Update

Expression: false

001567.413| 0.0000kb| 0.0000kb added| ERROR| Assertion

failed!

File: E:/jenkins/workspace/game-code-Releases-4-18-public-

win32/code/Game/LoL/Spell/Effect/Client/SpellFXRenderer.cpp

Line: 854

Art Guides

95 / 12

Development Blogs

96 / 60

Post-Mortem of WarCraft

Developer Conferences

97 / 60

Post-Mortem of Ochestrator

Rule 8

Commit to quality!

Commit To Quality

99 / 60

Erich Schaefer. Postmortem: Blizzard's Diablo II. http://www.gamasutra.com/view/feature/131533/postmortem_blizzards

_diablo_ii.php

“The task of testing a game of Diablo II's scope, with itshuge degree of randomness and its nearly infinitecharacter skill and equipment paths, required aHerculean effort. […] Would a party of five Paladins,each using a different defensive aura, be untouchable?After more than 100 hours of play, is a fire-basedSorceress unable to continue in Hell Mode?”

Thank you for listening!

https://github.com/npruehs

@npruehs

nick.pruehs@daedalic.com