SlideShare ist ein Scribd-Unternehmen logo
1 von 100
Downloaden Sie, um offline zu lesen
Eight Rules For Making Your First Great Game
Nick Prühs
About Me
“Best Bachelor“ Computer Science
Kiel University, 2009
Master Games
Hamburg University of Applied
Sciences, 2011
Lead Programmer
Daedalic Entertainment, 2011-2012
Co-Founder
slash games, 2013-2016
Technical Director
Daedalic 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 control
o 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
 EMHQ
o Data
– Icons
– Images
– Sprites
– Textures
o Resources
– Icons
o UI
– Common
» Sprites
 EMHQ_gfx_export
o Textures
 GUI
o Assets
– Images
21 / 79
Bad Example
• Assets
 EMHQ
o Data
– Icons
– Images
– Sprites
– Textures
o Resources
– Icons
o UI
– Common
» Sprites
 EMHQ_gfx_export
o Textures
 GUI
o Assets
– Images
22 / 79
Bonus Objective:
- Find the icon for the Main
Menu button.
Bad Example
• Assets
 EMHQ
o Data
– Icons
– Images
– Sprites
– Textures
o Resources
– Icons
o UI
– Common
» Sprites
– Base
» HUD
• Sprites
 EMHQ_gfx_export
o Textures
 GUI
o 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
 FreudBot
o 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
 FreudBot
o 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 / 12
Source: 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 possible
in the development process. Our initial priority was to
get a guy moving around on the screen and hacking
monsters. This is what players would be doing most of
the 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 content
creation, but then abandoned them. Too often, we
decided to keep using inferior tools because we
thought we were almost done with the game, and
didn't want to take the time to improve them.
Unfortunately, in most of these cases, we were not
really 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:GamesHearthstoneHearthstone_DataManagedICSharpCode.SharpZipLib.dll (this
message is harmless)
Loading D:GamesHearthstoneHearthstone_DataManagedICSharpCode.SharpZipLib.dll
into Unity Child Domain
Platform assembly: D:GamesHearthstoneHearthstone_DataManagedPlayMaker.dll
(this message is harmless)
Loading D:GamesHearthstoneHearthstone_DataManagedPlayMaker.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 its
huge degree of randomness and its nearly infinite
character skill and equipment paths, required a
Herculean 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-based
Sorceress unable to continue in Hell Mode?”
Thank you for listening!
https://github.com/npruehs
@npruehs
nick.pruehs@daedalic.com

Weitere ähnliche Inhalte

Was ist angesagt?

OGDC 2014: Component based entity system mobile game development
OGDC 2014: Component based entity system mobile game developmentOGDC 2014: Component based entity system mobile game development
OGDC 2014: Component based entity system mobile game development
GameLandVN
 
Y1 gd engine_terminology ig2 game engines
Y1 gd engine_terminology ig2 game enginesY1 gd engine_terminology ig2 game engines
Y1 gd engine_terminology ig2 game engines
Lewis Brierley
 
Y1 gd engine_terminology ig2 game engines
Y1 gd engine_terminology ig2 game enginesY1 gd engine_terminology ig2 game engines
Y1 gd engine_terminology ig2 game engines
Lewis Brierley
 

Was ist angesagt? (19)

Game Programming 12 - Shaders
Game Programming 12 - ShadersGame Programming 12 - Shaders
Game Programming 12 - Shaders
 
Style & Design Principles 03 - Component-Based Entity Systems
Style & Design Principles 03 - Component-Based Entity SystemsStyle & Design Principles 03 - Component-Based Entity Systems
Style & Design Principles 03 - Component-Based Entity Systems
 
Scrum - but... Agile Game Development in Small Teams
Scrum - but... Agile Game Development in Small TeamsScrum - but... Agile Game Development in Small Teams
Scrum - but... Agile Game Development in Small Teams
 
Game Programming 02 - Component-Based Entity Systems
Game Programming 02 - Component-Based Entity SystemsGame Programming 02 - Component-Based Entity Systems
Game Programming 02 - Component-Based Entity Systems
 
Game Models - A Different Approach
Game Models - A Different ApproachGame Models - A Different Approach
Game Models - A Different Approach
 
Game Programming 06 - Automated Testing
Game Programming 06 - Automated TestingGame Programming 06 - Automated Testing
Game Programming 06 - Automated Testing
 
Game Programming 09 - AI
Game Programming 09 - AIGame Programming 09 - AI
Game Programming 09 - AI
 
GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"
GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"
GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"
 
Entity Component Systems
Entity Component SystemsEntity Component Systems
Entity Component Systems
 
Game Programming - Cloud Development
Game Programming - Cloud DevelopmentGame Programming - Cloud Development
Game Programming - Cloud Development
 
OGDC 2014: Component based entity system mobile game development
OGDC 2014: Component based entity system mobile game developmentOGDC 2014: Component based entity system mobile game development
OGDC 2014: Component based entity system mobile game development
 
Developing applications and games in Unity engine - Matej Jariabka, Rudolf Ka...
Developing applications and games in Unity engine - Matej Jariabka, Rudolf Ka...Developing applications and games in Unity engine - Matej Jariabka, Rudolf Ka...
Developing applications and games in Unity engine - Matej Jariabka, Rudolf Ka...
 
Game Programming 08 - Tool Development
Game Programming 08 - Tool DevelopmentGame Programming 08 - Tool Development
Game Programming 08 - Tool Development
 
Game Programming 04 - Style & Design Principles
Game Programming 04 - Style & Design PrinciplesGame Programming 04 - Style & Design Principles
Game Programming 04 - Style & Design Principles
 
Unreal Engine Basics 01 - Game Framework
Unreal Engine Basics 01 - Game FrameworkUnreal Engine Basics 01 - Game Framework
Unreal Engine Basics 01 - Game Framework
 
Y1 gd engine_terminology ig2 game engines
Y1 gd engine_terminology ig2 game enginesY1 gd engine_terminology ig2 game engines
Y1 gd engine_terminology ig2 game engines
 
Y1 gd engine_terminology ig2 game engines
Y1 gd engine_terminology ig2 game enginesY1 gd engine_terminology ig2 game engines
Y1 gd engine_terminology ig2 game engines
 
Choosing A Game Engine - More Than Frames Per Second
Choosing A Game Engine - More Than Frames Per SecondChoosing A Game Engine - More Than Frames Per Second
Choosing A Game Engine - More Than Frames Per Second
 
Y1 gd engine_terminologY
Y1 gd engine_terminologYY1 gd engine_terminologY
Y1 gd engine_terminologY
 

Andere mochten auch

Andere mochten auch (10)

Tool Development A - Git
Tool Development A - GitTool Development A - Git
Tool Development A - Git
 
Game Programming 03 - Git Flow
Game Programming 03 - Git FlowGame Programming 03 - Git Flow
Game Programming 03 - Git Flow
 
Game Programming 10 - Localization
Game Programming 10 - LocalizationGame Programming 10 - Localization
Game Programming 10 - Localization
 
Game Programming 11 - Game Physics
Game Programming 11 - Game PhysicsGame Programming 11 - Game Physics
Game Programming 11 - Game Physics
 
Designing an actor model game architecture with Pony
Designing an actor model game architecture with PonyDesigning an actor model game architecture with Pony
Designing an actor model game architecture with Pony
 
Entity System Architecture with Unity - Unite Europe 2015
Entity System Architecture with Unity - Unite Europe 2015Entity System Architecture with Unity - Unite Europe 2015
Entity System Architecture with Unity - Unite Europe 2015
 
ECS architecture with Unity by example - Unite Europe 2016
ECS architecture with Unity by example - Unite Europe 2016ECS architecture with Unity by example - Unite Europe 2016
ECS architecture with Unity by example - Unite Europe 2016
 
The Next Generation of Game Planners
The Next Generation of Game PlannersThe Next Generation of Game Planners
The Next Generation of Game Planners
 
Diversity in NPC AI
Diversity in NPC AIDiversity in NPC AI
Diversity in NPC AI
 
Clean, fast and simple with Entitas and Unity - Unite Melbourne 2016
Clean, fast and simple with Entitas and Unity - Unite Melbourne 2016Clean, fast and simple with Entitas and Unity - Unite Melbourne 2016
Clean, fast and simple with Entitas and Unity - Unite Melbourne 2016
 

Ähnlich wie Eight Rules for Making Your First Great Game

Engine terminology
Engine terminologyEngine terminology
Engine terminology
thomasmcd6
 
the productive programer: mechanics
the productive programer: mechanicsthe productive programer: mechanics
the productive programer: mechanics
elliando dias
 
Engine Terminology
Engine TerminologyEngine Terminology
Engine Terminology
kamkill
 
I don't know what I'm Doing: A newbie guide for Golang for DevOps
I don't know what I'm Doing: A newbie guide for Golang for DevOpsI don't know what I'm Doing: A newbie guide for Golang for DevOps
I don't know what I'm Doing: A newbie guide for Golang for DevOps
Peter Souter
 
Abusing bleeding edge web standards for appsec glory
Abusing bleeding edge web standards for appsec gloryAbusing bleeding edge web standards for appsec glory
Abusing bleeding edge web standards for appsec glory
Priyanka Aash
 
Supersize your production pipe enjmin 2013 v1.1 hd
Supersize your production pipe    enjmin 2013 v1.1 hdSupersize your production pipe    enjmin 2013 v1.1 hd
Supersize your production pipe enjmin 2013 v1.1 hd
slantsixgames
 

Ähnlich wie Eight Rules for Making Your First Great Game (20)

Y1 gd engine_terminology
Y1 gd engine_terminologyY1 gd engine_terminology
Y1 gd engine_terminology
 
Y1 gd engine_terminology (1)
Y1 gd engine_terminology (1)Y1 gd engine_terminology (1)
Y1 gd engine_terminology (1)
 
Engine terminology
Engine terminologyEngine terminology
Engine terminology
 
Y1 gd engine_terminology
Y1 gd engine_terminologyY1 gd engine_terminology
Y1 gd engine_terminology
 
the productive programer: mechanics
the productive programer: mechanicsthe productive programer: mechanics
the productive programer: mechanics
 
Introduction to html5 game programming with impact js
Introduction to html5 game programming with impact jsIntroduction to html5 game programming with impact js
Introduction to html5 game programming with impact js
 
Our Puppet Story (GUUG FFG 2015)
Our Puppet Story (GUUG FFG 2015)Our Puppet Story (GUUG FFG 2015)
Our Puppet Story (GUUG FFG 2015)
 
Engine Terminology
Engine TerminologyEngine Terminology
Engine Terminology
 
Protect Your Payloads: Modern Keying Techniques
Protect Your Payloads: Modern Keying TechniquesProtect Your Payloads: Modern Keying Techniques
Protect Your Payloads: Modern Keying Techniques
 
Cameron mc rae y1 gd_engineterminology no videos
Cameron mc rae y1 gd_engineterminology no videosCameron mc rae y1 gd_engineterminology no videos
Cameron mc rae y1 gd_engineterminology no videos
 
Y1 gd engine_terminology
Y1 gd engine_terminologyY1 gd engine_terminology
Y1 gd engine_terminology
 
Engineterminoligy finished
Engineterminoligy finishedEngineterminoligy finished
Engineterminoligy finished
 
Universal Userland
Universal UserlandUniversal Userland
Universal Userland
 
Understanding ScratchX Extensions with JavaScript
Understanding ScratchX Extensions with JavaScriptUnderstanding ScratchX Extensions with JavaScript
Understanding ScratchX Extensions with JavaScript
 
I don't know what I'm Doing: A newbie guide for Golang for DevOps
I don't know what I'm Doing: A newbie guide for Golang for DevOpsI don't know what I'm Doing: A newbie guide for Golang for DevOps
I don't know what I'm Doing: A newbie guide for Golang for DevOps
 
Abusing bleeding edge web standards for appsec glory
Abusing bleeding edge web standards for appsec gloryAbusing bleeding edge web standards for appsec glory
Abusing bleeding edge web standards for appsec glory
 
Supersize your production pipe enjmin 2013 v1.1 hd
Supersize your production pipe    enjmin 2013 v1.1 hdSupersize your production pipe    enjmin 2013 v1.1 hd
Supersize your production pipe enjmin 2013 v1.1 hd
 
How to reverse engineer Android applications
How to reverse engineer Android applicationsHow to reverse engineer Android applications
How to reverse engineer Android applications
 
How to reverse engineer Android applications—using a popular word game as an ...
How to reverse engineer Android applications—using a popular word game as an ...How to reverse engineer Android applications—using a popular word game as an ...
How to reverse engineer Android applications—using a popular word game as an ...
 
44CON 2013 - Browser bug hunting - Memoirs of a last man standing - Atte Kett...
44CON 2013 - Browser bug hunting - Memoirs of a last man standing - Atte Kett...44CON 2013 - Browser bug hunting - Memoirs of a last man standing - Atte Kett...
44CON 2013 - Browser bug hunting - Memoirs of a last man standing - Atte Kett...
 

Mehr von Nick Pruehs

Mehr von Nick Pruehs (8)

Unreal Engine Basics 06 - Animation, Audio, Visual Effects
Unreal Engine Basics 06 - Animation, Audio, Visual EffectsUnreal Engine Basics 06 - Animation, Audio, Visual Effects
Unreal Engine Basics 06 - Animation, Audio, Visual Effects
 
Unreal Engine Basics 05 - User Interface
Unreal Engine Basics 05 - User InterfaceUnreal Engine Basics 05 - User Interface
Unreal Engine Basics 05 - User Interface
 
Unreal Engine Basics 04 - Behavior Trees
Unreal Engine Basics 04 - Behavior TreesUnreal Engine Basics 04 - Behavior Trees
Unreal Engine Basics 04 - Behavior Trees
 
Unreal Engine Basics 03 - Gameplay
Unreal Engine Basics 03 - GameplayUnreal Engine Basics 03 - Gameplay
Unreal Engine Basics 03 - Gameplay
 
Unreal Engine Basics 02 - Unreal Editor
Unreal Engine Basics 02 - Unreal EditorUnreal Engine Basics 02 - Unreal Editor
Unreal Engine Basics 02 - Unreal Editor
 
Game Programming - Git
Game Programming - GitGame Programming - Git
Game Programming - Git
 
Game Programming 00 - Exams
Game Programming 00 - ExamsGame Programming 00 - Exams
Game Programming 00 - Exams
 
Tool Development 10 - MVVM, Tool Chains
Tool Development 10 - MVVM, Tool ChainsTool Development 10 - MVVM, Tool Chains
Tool Development 10 - MVVM, Tool Chains
 

Kürzlich hochgeladen

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 

Kürzlich hochgeladen (20)

[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 

Eight Rules for Making Your First Great Game

  • 1. Eight Rules For Making Your First Great Game Nick Prühs
  • 2. About Me “Best Bachelor“ Computer Science Kiel University, 2009 Master Games Hamburg University of Applied Sciences, 2011 Lead Programmer Daedalic Entertainment, 2011-2012 Co-Founder slash games, 2013-2016 Technical Director Daedalic Entertainment, 2016 2 / 79
  • 9. Game Development “Games are insanely complex.” - Warren Spector
  • 10. Rule 1 Make testing as easy as possible!
  • 11. 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
  • 13. Make testing easy! 13 / 79 This was arguably the best idea we had throughout the project.
  • 14. 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
  • 17. Deploy often! 17 / 79 Creating a new version can involve a step or two:  Accessing source control o 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
  • 18. Deploy often! You wouldn’t wanna do all that by hand. Every time. Do you? 18 / 79
  • 20. Rule 3 Use a bullet-proof, feature-based project structure!
  • 21. Bad Example • Assets  EMHQ o Data – Icons – Images – Sprites – Textures o Resources – Icons o UI – Common » Sprites  EMHQ_gfx_export o Textures  GUI o Assets – Images 21 / 79
  • 22. Bad Example • Assets  EMHQ o Data – Icons – Images – Sprites – Textures o Resources – Icons o UI – Common » Sprites  EMHQ_gfx_export o Textures  GUI o Assets – Images 22 / 79 Bonus Objective: - Find the icon for the Main Menu button.
  • 23. Bad Example • Assets  EMHQ o Data – Icons – Images – Sprites – Textures o Resources – Icons o UI – Common » Sprites – Base » HUD • Sprites  EMHQ_gfx_export o Textures  GUI o Assets – Images 23 / 79 Bonus Objective: - Find the icon for the Main Menu button.
  • 24. Feature Folders • Project Root  FingerGestures  FreudBot  HOTween  NGUI  NData  Unity Test Tools 24 / 79
  • 25. Feature Folders • Project Root  FingerGestures  FreudBot o 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
  • 26. Feature Folders • Project Root  FreudBot o Scripts – Ads – Analytics – Comics – Core – Debug – Dialogue – IAP – Mobile – Progression – Sound – UI 26 / 79
  • 27. Feature Folders • Project Root  FreudBot o Scripts – Ads » Components » Events » Systems 27 / 79
  • 28. Feature Folders This way, features and plugins can easily be updated or removed without having to scan the full project tree. 28 / 79
  • 29. Rule 4 Listen to your players!
  • 32. Analytics 32 / 79 This is okay. (Endboss)
  • 33. Analytics 33 / 79 This is not. (Intermediate level)
  • 34. Rule 5 Fix bugs immediately!
  • 35. 35 / 79 Why you should always start debugging immediately
  • 36. 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
  • 39. 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); }
  • 48. Pair Programming 48 / 12 Source: University of Utah, UIT
  • 49. And if nothings helps … 49 / 12
  • 50. And if nothings helps … 50 / 12 Try again tomorrow!
  • 51. Some are really nasty … • Remote systems • Race conditions • Mobile development, embedded systems, drivers • “Release Mode only” bugs 51 / 12
  • 52. 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
  • 53. You need a repro. Period. How can you be sure you’ve fixed it? 53 / 12
  • 55. 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 possible in the development process. Our initial priority was to get a guy moving around on the screen and hacking monsters. This is what players would be doing most of the time, and it had to be fun.”
  • 56. Rule 7 Learn from others!
  • 57. Because you wouldn't use a screwdriver on a nail... 57 / 60 StarCraft II Galaxy Editor
  • 58. 58 / 60 StarCraft II Galaxy Editor Because you wouldn't use a screwdriver on a nail...
  • 59. 59 / 60 StarCraft II Galaxy Editor Because you wouldn't use a screwdriver on a nail...
  • 60. 60 / 60 StarCraft II MakeCombat Because you wouldn't use a screwdriver on a nail...
  • 61. 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 content creation, but then abandoned them. Too often, we decided to keep using inferior tools because we thought we were almost done with the game, and didn't want to take the time to improve them. Unfortunately, in most of these cases, we were not really almost done with the game.“ Because you wouldn't use a screwdriver on a nail...
  • 62. Genre Standards 62 / 60 StarCraft II Screenshot
  • 63. Genre Standards 63 / 60 StarCraft II Screenshot
  • 64. Genre Standards 64 / 60 StarCraft II Screenshot
  • 65. Genre Standards 65 / 60 StarCraft II Screenshot
  • 66. Genre Standards 66 / 60 StarCraft II Screenshot
  • 67. Genre Standards 67 / 60 StarCraft II Screenshot
  • 68. Genre Standards 68 / 60 StarCraft II Screenshot
  • 69. Genre Standards 69 / 60 StarCraft II Screenshot
  • 70. Genre Standards 70 / 60 Unreal Tournament 3 Splash Screen
  • 71. Genre Standards 71 / 60 Unreal Tournament 3 Login Screen
  • 72. Genre Standards 72 / 60 Hostile Worlds Screen Transitions
  • 73. Genre Standards 73 / 60 Steam Server Browser
  • 74. Genre Standards 74 / 60 WarCraft III Lobby
  • 75. Genre Standards 75 / 60 WarCraft III Loading Screen
  • 76. Genre Standards 76 / 60 WarCraft III Score Screen
  • 77. Genre Standards 77 / 60 StarCraft II Options Screen
  • 78. Open Game Sources 78 / 60 Doom 3 GPL Release on GitHub
  • 79. Open Game Sources 79 / 60 Blizzard on GitHub
  • 80. Open Game Sources 80 / 60 Blizzard QT on GitHub
  • 81. Open Game Sources 81 / 60 Blizzard Premake on GitHub
  • 82. Project Structure 82 / 60 Windows 10 - System32 Folder
  • 83. Project Structure 83 / 60 > 3000 Libraries
  • 84.
  • 85. Project Structure 85 / 60 Hearthstone Asset Bundles
  • 86. Project Structure 86 / 60 Hearthstone Data Files
  • 87. Project Structure 87 / 60 StarCraft II “Mods”
  • 88. Project Structure 88 / 60 StarCraft Game Folder Size
  • 89. Project Structure 89 / 60 StarCraft MPQ Files
  • 90. 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.
  • 91. 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
  • 92. 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>
  • 93. Log Files 93 / 60 Hearthstone Log File Platform assembly: D:GamesHearthstoneHearthstone_DataManagedICSharpCode.SharpZipLib.dll (this message is harmless) Loading D:GamesHearthstoneHearthstone_DataManagedICSharpCode.SharpZipLib.dll into Unity Child Domain Platform assembly: D:GamesHearthstoneHearthstone_DataManagedPlayMaker.dll (this message is harmless) Loading D:GamesHearthstoneHearthstone_DataManagedPlayMaker.dll into Unity Child Domain
  • 94. 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
  • 96. Development Blogs 96 / 60 Post-Mortem of WarCraft
  • 97. Developer Conferences 97 / 60 Post-Mortem of Ochestrator
  • 98. Rule 8 Commit to quality!
  • 99. 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 its huge degree of randomness and its nearly infinite character skill and equipment paths, required a Herculean 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-based Sorceress unable to continue in Hell Mode?”
  • 100. Thank you for listening! https://github.com/npruehs @npruehs nick.pruehs@daedalic.com