Game Development Challenges
-
Upload
nick-pruehs -
Category
Technology
-
view
117 -
download
0
Transcript of Game Development Challenges
Game Development Challenges
Nick Prühs
About Me
“Best Bachelor“ Computer ScienceKiel University, 2009
Master GamesHamburg University of Applied Sciences, 2011
Lead ProgrammerDaedalic Entertainment, 2011-2012
Co-Founderslash games, 2013
2 / 113
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
Diversity of Games
9 / 113
Game Development Roles
Programming
10 / 113
Game Development Roles
2D Art
11 / 113
Game Development Roles
3D Art
12 / 113
Game Development Roles
Game Design
13 / 113
Game Development Roles
Sound Design
14 / 113
Game Development Roles
Cinematic Art
15 / 113
Game Development Roles
Game Author
16 / 113
Game Development Roles
Level Designer
17 / 113
Game Development Roles
Technical Artist
18 / 113
Game Development Roles
Localization
19 / 113
Game Development Roles
Producer
20 / 113
Game Development Roles
QA & Support
21 / 113
Game Development Roles
Marketing
22 / 113
Game Development Roles
PR
23 / 113
Game Development Roles
Community Management
24 / 113
Game Development Roles
Analytics
25 / 113
Art Pipelines
26 / 113
Art Pipelines
27 / 113
Art Pipelines
28 / 113
Art Pipelines
29 / 113
Game Engines
30 / 113
Game Engines
31 / 113
Game Engines
32 / 113
Game Engines
33 / 113
Game Engines
34 / 113
Example: Physics
35 / 113
Example: Physics
36 / 113
Example: Physics
37 / 113
−𝜖𝑣𝐴𝐵𝑛 = 𝑣𝐴𝐵′ 𝑛 definition
coefficient of restitution
= (𝑣𝐴′ − 𝑣𝐵
′ )𝑛 definitionrelative velocity
=(𝑣𝐴 +
𝑗
𝑀𝐴𝑛 − 𝑣𝐵 +
𝑗
𝑀𝐵𝑛)𝑛
definitioncollision impulse
=𝑣𝐴𝑛 +
𝑗
𝑀𝐴𝑛𝑛 − 𝑣𝐵𝑛 +
𝑗
𝑀𝐵𝑛𝑛
distribution
=𝑣𝐴𝑛 − 𝑣𝐵𝑛 +
𝑗
𝑀𝐴𝑛𝑛 +
𝑗
𝑀𝐵𝑛𝑛
commutative property
=𝑣𝐴𝐵𝑛 +
𝑗
𝑀𝐴𝑛𝑛 +
𝑗
𝑀𝐵𝑛𝑛
definitionrelative velocity
Lessons Learned
38 / 113
Campus Buddies
39 / 113
Campus Buddies
40 / 113
Campus Buddies
41 / 113
Campus Buddies
42 / 113
Campus BuddiesFeatures• Sharing ads using multiple channels (Email, Facebook, Twitter, Google+)
• Lead verification as specified by Yourfone
• Authentication by different providers (username/password, Facebook)
• Classical gamification mechanics (achievements, level ups, …)
• Periodic competitions resolved by the server
• Dynamic news stream
• Full moderation backend
• Responsive mobile version
• Facebook OpenGraph integration
• Friend referral program
• Customized reportings
• Secure reward shop
• Stateless Scalable Web Application
• SSL-Encryption
43 / 113
Campus BuddiesFeatures
44 / 113
Development Scope
10 Weeks
Lessons Learned
45 / 113
Gotcha!
LESSON 1:
Expect changes of external APIs!
46 / 113
External APIs
47 / 113
• Integrated three of the major social platforms: Facebook, Twitter and Google+
• During the development process, both Facebook and Google+ changed their APIs…
• … effectively turning some of our code into useless rubbish
• Took about a day or two to get everything up and running again
External APIs
48 / 113
External APIs
49 / 113
• Talking to other web developers, we learned that social platform providers tend to change their APIs regularly
• They won’t notify you about that.
• Neither before, nor after.
• Never.
Hint
LESSON 2:
Avoid doing everything yourself!
50 / 113
Don’t Reinvent The Wheel
51 / 113
• Got a problem that is not exactly related to just your application?
• Maybe someone else has already solved it.
• There’s lots of smart people having spent tens of hundreds of hours on your problem.
• Use that knowledge!
Don’t Reinvent The Wheel
52 / 113
Hint
LESSON 3:
Make testing as easy as possible!
53 / 113
Make testing easy!
54 / 113
At the beginning of the project, Christian had theidea of creating a debug web page containing linksfor 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!
55 / 113
Make testing easy!
56 / 113
This was arguably the best idea we had throughout the project.
Make testing easy!
57 / 113
• 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
Hint
LESSON 4:
Make deployment as easy as possible!
58 / 113
Deploy often!
59 / 113
Creating a new version can involve a step or two:
• Accessing source control• Syncing working copy• 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!
60 / 113
Deploy often!
You wouldn’t wanna do all that by hand.
Every time.
Do you?
61 / 113
Campus BuddiesLessons Learned
62 / 113
Hint
LESSON 5:
Mock network interaction for testing!
63 / 113
Mocking
• Everything that involves network communication is annoying to test.
• We mocked parts of the remote interaction of our application• sending e-mails
• verifying leads
• Whenever a mail was sent, it was written to the console instead, for instance.
64 / 113
Mocking
2013-05-19 19:36:29,980 - [INFO] - from applicationMOCK MAILER: send email
2013-05-19 19:36:29,982 - [INFO] - from applicationFROM:"yourfone.de Campus Buddies" <[email protected]>
2013-05-19 19:36:29,983 - [INFO] - from applicationTO:"Nick" <[email protected]>
2013-05-19 19:36:29,985 - [INFO] - from applicationTEXT:
<html><head><title>...
65 / 113
Mocking
This allowed us to check all parts of our applicationthat include sending mails without having to spamour (or everyones…) inboxes.
66 / 113
Campus BuddiesLessons Learned
67 / 113
Gotcha!
LESSON 6:
Standardize your code style!
68 / 113
Consistent Code Style
• If you aren’t alone (and I sincerely hope you’re not), you’ll want to standardize your code styles.
• Be clear about tiny details such as tabs vs. spaces• greatly increases maintainability
• reduces the number of merge conflicts
69 / 113
Merge Conflict
70 / 113
StyleCop
71 / 113
StyleCop
72 / 113
Eclipse
73 / 113
Eclipse
74 / 113
Lessons Learned
75 / 113
FreudBot
76 / 113
FreudBot
77 / 113
FreudBot
78 / 113
FreudBot
79 / 113
FreudBot Features
• 46 levels, 17 animated characters, 10 screens, 137 cards, 4 comics, 10 000 words, 45 sounds
• Dedicated website and social media channels
• Multiple ad providers and in-app purchases
• Fully localized to five different languages
• Full analytics integration
• Cloud savegames
• Native mobile features (loading screen, snap mode, suspend, charms, toasts)
• Marketing (fan art, card contest, trailer, contests)
• Multi-platform release on iOS, Android, Windows Store, Windows Phone (Windows and Mac to come)
80 / 113
Lessons Learned
81 / 113
Hint
LESSON 1:
Use a feature-based project structure!
82 / 113
Feature Folders
• Project Root• FingerGestures
• FreudBot
• HOTween
• NGUI
• NData
• Unity Test Tools
83 / 113
Feature Folders
• Project Root• FingerGestures• FreudBot
• Animations• Atlases• Fonts• Localization• Prefabs• Scenes• Sounds• Sprites• Scripts
• HOTween• NGUI• NData• Unity Test Tools
84 / 113
Feature Folders
• Project Root• FreudBot
• Scripts• Ads• Analytics• Comics• Core• Debug• Dialogue• IAP• Mobile• Progression• Sound• UI
85 / 113
Feature Folders
• Project Root• FreudBot
• Scripts• Ads
• Components
• Events
• Systems
86 / 113
Feature Folders
This way, features and plugins can easily be updated or removed without having
to scan the full project tree.
87 / 113
Hint
LESSON 2:
Collaboration first!
88 / 113
Collaboration first!
89 / 113
Collaboration first!
Excel CSV XML Game
90 / 113
Collaboration first!
Excel CSV XML Game
91 / 113
FreudBotLessons Learned
Let everyone work with the tools they’re most experienced with, and provide a tool chain for
data conversion as soon as possible.
92 / 113
Hint
LESSON 3:
Listen to your players!
93 / 113
Analytics
94 / 113
Analytics
95 / 113
Analytics
96 / 113
This is okay. (Endboss)
Analytics
97 / 113
This is not. (Intermediate level)
Gotcha!
LESSON 4:
Don‘t forget the tutorial!
98 / 113
Tutorials
99 / 113
Tutorials
• Have players test your game early on• Don’t talk, just watch and listen.
• Don’t underestimate the time required for implementing your tutorial. It introduces many special cases, such as• Prohibiting player actions (e.g. use ability, end turn)
• Triggering unusual events (e.g. let turn timers expire)
• Tweening UI in step by step
• Providing fixed outcomes (e.g. always same card hand)
100 / 113
Hint
LESSON 5:
There‘s 2D skeletal animation!
101 / 113
Spine
102 / 113
Spine Atlas Image
103 / 113
Spine Atlas File
104 / 113
Spine Animation File
105 / 113
FreudBotLessons Learned
106 / 113
Gotcha!
LESSON 6:
Localization is a bitch!
107 / 113
Localization Sheet
108 / 113
Localization Pipeline
109 / 113
Game
XML
CSV
Excel
CSV
XML
Localization Best Practice
• Use unique, immutable localization keys• Changing any localization keys will invalidate any sheets
handed out to your localization team
• Highlight new texts, changed texts• These additional texts will have to be localized later
• Provide a playable version of your game, as well as rich background information (e.g. characters, places)• People need to know the game before they can localize it.
• Allow instant integration of the localized texts, if possible• Localization team can check for encoding issues, overlapping
labels, missing texts immediately
110 / 113
And there is more…
• Learn from others!
• Stick to your plan!
• Build prototypes!
• Use automatic testing!
• Setup proper version control workflows!
111 / 113
And there is more…
• Learn from others!
• Stick to your plan!
• Build prototypes!
• Use automatic testing!
• Setup proper version control workflows!
See Game Programming
http://www.npruehs.de/teaching/game-programming/
Monday, 8.30 am, E 45
112 / 113
Thank you for your attention!
Contact
Blog
http://www.npruehs.de
@npruehs
Github
https://github.com/npruehs
113 / 113