Slides from GDC2012 Level Design in a Day - Joel Burgess session on pursuing elegance as a game developer. Full talk transcript is available at www.joelburgess.com
Any intelligent fool can make
things bigger, more complex, and
more violent. It takes a touch of
genius – and a lot of courage – to
move in the opposite direction.
E.F.Schumacher, 1973
“The poor architect succumbs
to every temptation and the
good one resists it.”
Ludwig Wittgenstein
Developers are Problem-Solvers
● Long-term Appeal of Development
● Solving Imaginary Problems
● Pride in Hard Work and Cleverness
● …both of which are largely irrelevant
(a somewhat large videogame)
● Full Scale Production: < 3 years
● Team Size: 90+ Developers
● Outsourcing: Limited
● Level Design: 300+ Locations / 8 LDs
● Hit Ship Date – No Delays
Studio Culture
“We can do anything, but we
can’t do everything.”
● Ambition
● Compromise
● Everyone Is Accountable
The Idealist The Realist
• Ambitious Ideas Be Of Two Time Conscious
• The “Right Way” Perspective
• Fears Not Scope Minds Expedient
Asking “So What?”
● Usually the more Ideal Solution
● Greater Player Expression
● Doing Nothing is Efficient
● Easier than any alternative 100% of the time
Radiant Story
● Broad Data Awareness
● Semi-Procedural Experiences
The Radiant Assassin
● Successful Use of Story System
● Appears If:
● Player Level >= 10
● Player is not Dark Brotherhood Member
Mistaken Possibility
? Identity Space
Authored
Story ? ? ?
The Jarl An Assassin
Purchased was sent to Romance
Political
The Contract kill me!
?
?
? ?
?
?
Revenge
bool function playerHasTools()
if Game.GetPlayer().GetItemCount(pickaxe01) > 0
; player has a pickaxe. Return true.
return TRUE
Else
; player has no pickaxe. Return false.
return FALSE
endIf
endFunction
if Game.GetPlayer().GetItemCount(pickaxe01) > 0
if Game.GetPlayer().GetItemCount(pickaxe01) > 0
OR
Game.GetPlayer().GetItemCount(pickaxe02) > 0
if Game.GetPlayer().GetItemCount(pickaxe01) > 0
OR
Game.GetPlayer().GetItemCount(pickaxe02) > 0
OR
Game.GetPlayer().GetItemCount(pickaxe03) > 0
bool function playerHasTools()
if Game.GetPlayer().GetItemCount(mineOreToolsList) > 0
; player has an item in tools list. Return true.
return TRUE
Else
; player has no items in tools list. Return false.
return FALSE
endIf
endFunction
Barred Doors This door is
You must
barred the
raise from
bar to open
the other
This door is this door.
side.
barred from
the other
side.
Toggle bar
if barred == true && actor == game.getPlayer()
if actor.getDistance(Door) < actor.getDistance(LockBar)
; I cannot be opened from this side!
barredMSG.show()
else
; player must be on the "right" side
UnlockMeMSG.show()
endif
Scripting Literacy
● 60+ Years of Shared Knowledge
● Readable Code is Good Code
● Logical Design is Universal
● Designers & Coders – Unite!
Justifying Critter Complexity
● Pioneer Test of Scripting System
● Richer Player Experience
● Repetition Of System
● Player Experience
● Workflow
Artist
Artist Artist
Artist
Artist Artist Artist
Artist Artist
Artist Artist Artist
Implementers
Designer
Artist Artist Artist
Artist Artist Artist
Artist Artist
Designer
Programmer Designer Designer
Users
Designer Designer
Programmer Designer Designer
Designer Designer