becoming indie

162
Becoming Indie A Professional Game Developer Change To The iPhone Noel Llopis Snappy Touch http://snappytouch.com Tuesday, March 3, 2009

Upload: john-wilker

Post on 18-May-2015

841 views

Category:

Technology


0 download

DESCRIPTION

Noel Llopis - Becoming Indie. 360|iDev san Jose '09

TRANSCRIPT

Page 1: Becoming Indie

Becoming Indie A Professional Game Developer Change

To The iPhone

Noel LlopisSnappy Touch

http://snappytouch.com

Tuesday, March 3, 2009

Page 2: Becoming Indie

Tuesday, March 3, 2009

Page 3: Becoming Indie

Tuesday, March 3, 2009

Page 4: Becoming Indie

Tuesday, March 3, 2009

Page 5: Becoming Indie

0

75

150

225

300

1998 2000 2002 2004 2006 2008

ProgrammersDevelopers

Team Sizes

Tuesday, March 3, 2009

Page 6: Becoming Indie

Tuesday, March 3, 2009

Page 7: Becoming Indie

Tuesday, March 3, 2009

Page 8: Becoming Indie

Part I: What’s Inside?

Tuesday, March 3, 2009

Page 9: Becoming Indie

Hardware Specs

Tuesday, March 3, 2009

Page 10: Becoming Indie

• CPU: 32-bit RISC ARM

Hardware Specs

Tuesday, March 3, 2009

Page 11: Becoming Indie

• CPU: 32-bit RISC ARM

• Memory: 128 MB RAM

Hardware Specs

Tuesday, March 3, 2009

Page 12: Becoming Indie

• CPU: 32-bit RISC ARM

• Memory: 128 MB RAM

• Graphics: PowerVR MBX Lite

Hardware Specs

Tuesday, March 3, 2009

Page 13: Becoming Indie

• CPU: 32-bit RISC ARM

• Memory: 128 MB RAM

• Graphics: PowerVR MBX Lite

• Extra features: Multi-touch screen, GPS, camera, accelerometer, WiFi, microphone.

Hardware Specs

Tuesday, March 3, 2009

Page 14: Becoming Indie

Development Tools

Tuesday, March 3, 2009

Page 15: Becoming Indie

Development Tools

• XCode. Great IDE

Tuesday, March 3, 2009

Page 16: Becoming Indie

Development Tools

• XCode. Great IDE

• Familiar tools: gcc, gdb

Tuesday, March 3, 2009

Page 17: Becoming Indie

Development Tools

• XCode. Great IDE

• Familiar tools: gcc, gdb

• Great performance and analysis tools: Instruments

Tuesday, March 3, 2009

Page 18: Becoming Indie

Programming LanguageMost iPhone-related stuff in Objective C

Tuesday, March 3, 2009

Page 19: Becoming Indie

Programming LanguageMost iPhone-related stuff in Objective C

... but you can write all C and C++ you want!

Tuesday, March 3, 2009

Page 20: Becoming Indie

Programming languageYou can even write assembly if you want!

void MyFunction(){// do some stuffint value = 57;asm volatile ("mov %0, %0, ror #1" : "=r" (value) : "0" (value)

);}

Tuesday, March 3, 2009

Page 21: Becoming Indie

Unit Testing

Tuesday, March 3, 2009

Page 22: Becoming Indie

Unit Testing

• Any C/C++ unit-testing framework

Tuesday, March 3, 2009

Page 23: Becoming Indie

Unit Testing

• Any C/C++ unit-testing framework

• Biased towards UnitTest++ of course (http://unittest-cpp.sourceforge.net/)

Tuesday, March 3, 2009

Page 24: Becoming Indie

Unit Testing

• Any C/C++ unit-testing framework

• Biased towards UnitTest++ of course (http://unittest-cpp.sourceforge.net/)

• How to get it to run as a postbuild step?

Tuesday, March 3, 2009

Page 26: Becoming Indie

Unit Testing

Tuesday, March 3, 2009

Page 27: Becoming Indie

Unit Testing• Run script as part of

build process.

Tuesday, March 3, 2009

Page 28: Becoming Indie

Unit Testing• Run script as part of

build process.

• Build and you’re done.

Tuesday, March 3, 2009

Page 29: Becoming Indie

Unit Testing• Run script as part of

build process.

• Build and you’re done.

• Super fast in simulator.

Tuesday, March 3, 2009

Page 30: Becoming Indie

Unit Testing

Tuesday, March 3, 2009

Page 31: Becoming Indie

Unit Testing

• Also frameworks for Objective C: OCUnit, SenTestingKit

Tuesday, March 3, 2009

Page 32: Becoming Indie

Unit Testing

• Also frameworks for Objective C: OCUnit, SenTestingKit

• I haven’t used them yet

Tuesday, March 3, 2009

Page 33: Becoming Indie

Unit Testing

• Also frameworks for Objective C: OCUnit, SenTestingKit

• I haven’t used them yet

• Some people modified UnitTest++ to work with Objective C

Tuesday, March 3, 2009

Page 34: Becoming Indie

Unit Testing

• Also frameworks for Objective C: OCUnit, SenTestingKit

• I haven’t used them yet

• Some people modified UnitTest++ to work with Objective C

• Also mock frameworks: OCMock

Tuesday, March 3, 2009

Page 35: Becoming Indie

Build Servers

Tuesday, March 3, 2009

Page 36: Becoming Indie

Build Servers

• Continuous integration was a key practice in large teams.

Tuesday, March 3, 2009

Page 37: Becoming Indie

Build Servers

• Continuous integration was a key practice in large teams.

• Even with a one or two-man team it was extremely useful.

Tuesday, March 3, 2009

Page 38: Becoming Indie

Build Servers

• Continuous integration was a key practice in large teams.

• Even with a one or two-man team it was extremely useful.

• CruiseControl or Hudson

Tuesday, March 3, 2009

Page 39: Becoming Indie

CPU

Tuesday, March 3, 2009

Page 40: Becoming Indie

CPU

• CPU: 32-bit RISC ARM

Tuesday, March 3, 2009

Page 41: Becoming Indie

CPU

• CPU: 32-bit RISC ARM

• iPhone @ 412MHz

Tuesday, March 3, 2009

Page 42: Becoming Indie

CPU

• CPU: 32-bit RISC ARM

• iPhone @ 412MHz

• iPod Touch @ 535MHz

Tuesday, March 3, 2009

Page 43: Becoming Indie

CPU

• CPU: 32-bit RISC ARM

• iPhone @ 412MHz

• iPod Touch @ 535MHz

• Can go as high as 620MHz

Tuesday, March 3, 2009

Page 44: Becoming Indie

Floating Point

Tuesday, March 3, 2009

Page 45: Becoming Indie

Floating Point• The main CPU has no

floating point support.

Tuesday, March 3, 2009

Page 46: Becoming Indie

Floating Point• The main CPU has no

floating point support.

• Compiled C/C++/OC code uses the vector floating point unit for any floating point operations.

Tuesday, March 3, 2009

Page 47: Becoming Indie

Thumb Mode

Tuesday, March 3, 2009

Page 48: Becoming Indie

Thumb Mode• CPU has a special thumb

mode.

Tuesday, March 3, 2009

Page 49: Becoming Indie

Thumb Mode• CPU has a special thumb

mode.

• Less memory, maybe better performance.

Tuesday, March 3, 2009

Page 50: Becoming Indie

Thumb Mode• CPU has a special thumb

mode.

• Less memory, maybe better performance.

• No floating point support.

Tuesday, March 3, 2009

Page 51: Becoming Indie

Thumb Mode• CPU has a special thumb

mode.

• Less memory, maybe better performance.

• No floating point support.

• It’s on by default!

Tuesday, March 3, 2009

Page 52: Becoming Indie

Thumb Mode• CPU has a special thumb

mode.

• Less memory, maybe better performance.

• No floating point support.

• It’s on by default!

• Potentially HUGE wins turning it off.

Tuesday, March 3, 2009

Page 53: Becoming Indie

Thumb Mode• CPU has a special thumb

mode.

• Less memory, maybe better performance.

• No floating point support.

• It’s on by default!

• Potentially HUGE wins turning it off.

Tuesday, March 3, 2009

Page 54: Becoming Indie

Floating Point

Tuesday, March 3, 2009

Page 55: Becoming Indie

Floating Point• The VFP stands for “vector”

Tuesday, March 3, 2009

Page 56: Becoming Indie

Floating Point• The VFP stands for “vector”

• Work on up to four 32-bit floating point numbers at once.

Tuesday, March 3, 2009

Page 57: Becoming Indie

Floating Point• The VFP stands for “vector”

• Work on up to four 32-bit floating point numbers at once.

• The compiler won’t help you though.

Tuesday, March 3, 2009

Page 58: Becoming Indie

Floating Point• The VFP stands for “vector”

• Work on up to four 32-bit floating point numbers at once.

• The compiler won’t help you though.

• See the vfpmath library in Google Code

Tuesday, March 3, 2009

Page 59: Becoming Indie

Memory

Tuesday, March 3, 2009

Page 60: Becoming Indie

Memory• 128 MB RAM

Tuesday, March 3, 2009

Page 61: Becoming Indie

Memory• 128 MB RAM

• 11 MB for video

Tuesday, March 3, 2009

Page 62: Becoming Indie

Memory• 128 MB RAM

• 11 MB for video

• System can use up to half of that.

Tuesday, March 3, 2009

Page 63: Becoming Indie

Memory• 128 MB RAM

• 11 MB for video

• System can use up to half of that.

Video11

Your app53

OS64

Tuesday, March 3, 2009

Page 64: Becoming Indie

Graphics

Tuesday, March 3, 2009

Page 65: Becoming Indie

Graphics

• 320x240 resolution

Tuesday, March 3, 2009

Page 66: Becoming Indie

Graphics

• 320x240 resolution

• OpenGL ES 1.1 API + a few extensions

Tuesday, March 3, 2009

Page 67: Becoming Indie

Graphics

• 320x240 resolution

• OpenGL ES 1.1 API + a few extensions

• OpenGL great for 3D but also 2D games with need for performance.

Tuesday, March 3, 2009

Page 68: Becoming Indie

Graphics Hardware

Tuesday, March 3, 2009

Page 69: Becoming Indie

Graphics Hardware• PowerVR MBX Lite:

Texturing and rasterization

Tuesday, March 3, 2009

Page 70: Becoming Indie

Graphics Hardware• PowerVR MBX Lite:

Texturing and rasterization

• PowerVR VGP Lite: Vertex processing.

Tuesday, March 3, 2009

Page 71: Becoming Indie

Graphics Hardware• PowerVR MBX Lite:

Texturing and rasterization

• PowerVR VGP Lite: Vertex processing.

• No shaders!

Tuesday, March 3, 2009

Page 72: Becoming Indie

Graphics Hardware• PowerVR MBX Lite:

Texturing and rasterization

• PowerVR VGP Lite: Vertex processing.

• No shaders!

• Tile-based

Tuesday, March 3, 2009

Page 73: Becoming Indie

Graphics Hardware

Tuesday, March 3, 2009

Page 74: Becoming Indie

Graphics Hardware• Triangles per second:

500K/sec (16K polys per frame at 30fps)

Tuesday, March 3, 2009

Page 75: Becoming Indie

Graphics Hardware• Triangles per second:

500K/sec (16K polys per frame at 30fps)

• Fill rate: 25 million pixel per second (5.4 screen redraws per frame at 30fps)

Tuesday, March 3, 2009

Page 76: Becoming Indie

OpenGL ES Extensions

Tuesday, March 3, 2009

Page 77: Becoming Indie

OpenGL ES Extensions• Frame buffer objects

Tuesday, March 3, 2009

Page 78: Becoming Indie

OpenGL ES Extensions• Frame buffer objects

• Memory mapped vertex buffers

Tuesday, March 3, 2009

Page 79: Becoming Indie

OpenGL ES Extensions• Frame buffer objects

• Memory mapped vertex buffers

• Point sprites

Tuesday, March 3, 2009

Page 80: Becoming Indie

OpenGL ES Extensions• Frame buffer objects

• Memory mapped vertex buffers

• Point sprites

• PVRTC texture format

Tuesday, March 3, 2009

Page 81: Becoming Indie

OpenGL ES Extensions• Frame buffer objects

• Memory mapped vertex buffers

• Point sprites

• PVRTC texture format

#define GL_EXT_texture_filter_anisotropic 1#define GL_EXT_texture_lod_bias 1#define GL_IMG_read_format 1#define GL_IMG_texture_compression_pvrtc 1#define GL_IMG_texture_format_BGRA8888 1#define GL_OES_blend_subtract 1#define GL_OES_depth24 1#define GL_OES_framebuffer_object 1#define GL_OES_mapbuffer 1#define GL_OES_rgb8_rgba8 1#define GL_OES_texture_mirrored_repeat 1

Tuesday, March 3, 2009

Page 82: Becoming Indie

Texture Combiners

Tuesday, March 3, 2009

Page 83: Becoming Indie

Texture Combiners• Two texture units

Tuesday, March 3, 2009

Page 84: Becoming Indie

Texture Combiners• Two texture units

• Multi-texturing

Tuesday, March 3, 2009

Page 85: Becoming Indie

Texture Combiners• Two texture units

• Multi-texturing

• Per-pixel lighting

Tuesday, March 3, 2009

Page 86: Becoming Indie

Texture Combiners• Two texture units

• Multi-texturing

• Per-pixel lighting

• Many interesting effects

Tuesday, March 3, 2009

Page 87: Becoming Indie

OpenGL And UIKit

Tuesday, March 3, 2009

Page 88: Becoming Indie

OpenGL And UIKit

• They mix, but not perfectly

Tuesday, March 3, 2009

Page 89: Becoming Indie

OpenGL And UIKit

• They mix, but not perfectly

• UIKit on top of OpenGL can cause performance issues

Tuesday, March 3, 2009

Page 90: Becoming Indie

OpenGL And UIKit

• They mix, but not perfectly

• UIKit on top of OpenGL can cause performance issues

• Can have OpenGL views in a regular app

Tuesday, March 3, 2009

Page 91: Becoming Indie

OpenGL And UIKit

• They mix, but not perfectly

• UIKit on top of OpenGL can cause performance issues

• Can have OpenGL views in a regular app

• Multiple OpenGL views possible too.

Tuesday, March 3, 2009

Page 92: Becoming Indie

OpenGL And UIKit

• They mix, but not perfectly

• UIKit on top of OpenGL can cause performance issues

• Can have OpenGL views in a regular app

• Multiple OpenGL views possible too.

Tuesday, March 3, 2009

Page 93: Becoming Indie

Audio

Tuesday, March 3, 2009

Page 94: Becoming Indie

Audio

• Several APIs: OpenAL, Audio Sessions, or AVAudioPlayer (2.2 SDK)

Tuesday, March 3, 2009

Page 95: Becoming Indie

Audio

• Several APIs: OpenAL, Audio Sessions, or AVAudioPlayer (2.2 SDK)

• Custom music is huge. Let people play their tunes.

Tuesday, March 3, 2009

Page 96: Becoming Indie

Comparison

Tuesday, March 3, 2009

Page 97: Becoming Indie

Comparison

Tuesday, March 3, 2009

Page 98: Becoming Indie

Comparison

Tuesday, March 3, 2009

Page 99: Becoming Indie

Comparison

Tuesday, March 3, 2009

Page 100: Becoming Indie

Why We iPhoneFlash PC Consoles

PSNXBLA

Phones iPhone

Short timeframes x ? x x

Small budgets x ? x x

Unified platform x x x x

Powerful hardware ? x x x

Great tools x x x x x

Large audience x x x x x

Easy payments x x x

Direct access to users x x x

Development access x x x

Tuesday, March 3, 2009

Page 101: Becoming Indie

Tuesday, March 3, 2009

Page 102: Becoming Indie

Part II: Developing Games

Tuesday, March 3, 2009

Page 103: Becoming Indie

Asset Pipeline

Tuesday, March 3, 2009

Page 104: Becoming Indie

Asset Pipeline

• Huge deal in large teams

Tuesday, March 3, 2009

Page 105: Becoming Indie

Asset Pipeline

• Huge deal in large teams

• Not as much of a big deal for a single developer (or small team)

Tuesday, March 3, 2009

Page 106: Becoming Indie

Asset Pipeline

• Huge deal in large teams

• Not as much of a big deal for a single developer (or small team)

• Put whatever assets in XCode and let it bundle it with the rest of the app.

Tuesday, March 3, 2009

Page 107: Becoming Indie

Asset Pipeline

Tuesday, March 3, 2009

Page 108: Becoming Indie

Asset Pipeline

• If you have some dedicated artists, or especially contractors, they need to run XCode to see new content.

Tuesday, March 3, 2009

Page 109: Becoming Indie

Asset Pipeline

• If you have some dedicated artists, or especially contractors, they need to run XCode to see new content.

• Set up a small web server locally (simple python script) and have the app try to load from there first.

Tuesday, March 3, 2009

Page 110: Becoming Indie

Baking resources

Tuesday, March 3, 2009

Page 111: Becoming Indie

Baking resources

• You want to bake resources to their final format for fast load times.

Tuesday, March 3, 2009

Page 112: Becoming Indie

Baking resources

• You want to bake resources to their final format for fast load times.

• Textures: texturetool

Tuesday, March 3, 2009

Page 113: Becoming Indie

Baking resources

• You want to bake resources to their final format for fast load times.

• Textures: texturetool

• Sound: afconvert

Tuesday, March 3, 2009

Page 114: Becoming Indie

Baking resources

• You want to bake resources to their final format for fast load times.

• Textures: texturetool

• Sound: afconvert

• 3D models: You’re on your own

Tuesday, March 3, 2009

Page 115: Becoming Indie

Assets

Tuesday, March 3, 2009

Page 116: Becoming Indie

Assets

• iPhone games have much smaller asset sizes than current PC/console games.

Tuesday, March 3, 2009

Page 117: Becoming Indie

Assets

• iPhone games have much smaller asset sizes than current PC/console games.

• Most iPhone games are under 30MB. DVD-based games fill up all 8GB.

Tuesday, March 3, 2009

Page 118: Becoming Indie

Assets

• iPhone games have much smaller asset sizes than current PC/console games.

• Most iPhone games are under 30MB. DVD-based games fill up all 8GB.

• Source assets probably add up to 200-300MB. Makes asset management and version control a lot simpler.

Tuesday, March 3, 2009

Page 119: Becoming Indie

Data-Driven Games

Tuesday, March 3, 2009

Page 120: Becoming Indie

Data-Driven Games

• AAA games with huge teams are almost fully data driven.

Tuesday, March 3, 2009

Page 121: Becoming Indie

Data-Driven Games

• AAA games with huge teams are almost fully data driven.

• HUGE amount of overhead in terms of performance, work, and complexity!

Tuesday, March 3, 2009

Page 122: Becoming Indie

Data-Driven Games

• AAA games with huge teams are almost fully data driven.

• HUGE amount of overhead in terms of performance, work, and complexity!

• Makes sense with 30 programmers and 150 content creators.

Tuesday, March 3, 2009

Page 123: Becoming Indie

Tuesday, March 3, 2009

Page 124: Becoming Indie

Data-Driven Games

Tuesday, March 3, 2009

Page 125: Becoming Indie

Data-Driven Games

• With small iPhone games, not so much.

Tuesday, March 3, 2009

Page 126: Becoming Indie

Data-Driven Games

• With small iPhone games, not so much.

• Fast build times, so changing data is easy.

Tuesday, March 3, 2009

Page 127: Becoming Indie

Data-Driven Games

• With small iPhone games, not so much.

• Fast build times, so changing data is easy.

• Expose assets, simple variables, level layout.

Tuesday, March 3, 2009

Page 128: Becoming Indie

Tuesday, March 3, 2009

Page 129: Becoming Indie

Tuesday, March 3, 2009

Page 130: Becoming Indie

More Than Programming

Tuesday, March 3, 2009

Page 131: Becoming Indie

More Than Programming

• Programming is only part of it. You wear many hats!

Tuesday, March 3, 2009

Page 132: Becoming Indie

More Than Programming

• Programming is only part of it. You wear many hats!

• Designer, of course but also...

Tuesday, March 3, 2009

Page 133: Becoming Indie

More Than Programming

• Programming is only part of it. You wear many hats!

• Designer, of course but also...

• Public relations, producer, testing coordinator, contractor manager, content creator, web developer, video editor, etc, etc.

Tuesday, March 3, 2009

Page 134: Becoming Indie

Content Creation

Tuesday, March 3, 2009

Page 135: Becoming Indie

Content Creation

• Most projects need multiple people for content creation: UI elements, textures, models, animations, audio.

Tuesday, March 3, 2009

Page 136: Becoming Indie

Content Creation

• Most projects need multiple people for content creation: UI elements, textures, models, animations, audio.

• Contracting works well for some of the content.

Tuesday, March 3, 2009

Page 137: Becoming Indie

Tuesday, March 3, 2009

Page 138: Becoming Indie

PR

Tuesday, March 3, 2009

Page 139: Becoming Indie

PR• Creating a great app is half the

battle.

Tuesday, March 3, 2009

Page 140: Becoming Indie

PR• Creating a great app is half the

battle.

• PR is the other half.

Tuesday, March 3, 2009

Page 141: Becoming Indie

PR• Creating a great app is half the

battle.

• PR is the other half.

• Extremely time consuming and hard to do effectively.

Tuesday, March 3, 2009

Page 142: Becoming Indie

PR• Creating a great app is half the

battle.

• PR is the other half.

• Extremely time consuming and hard to do effectively.

• Build grass-roots support. Add viral components to your app.

Tuesday, March 3, 2009

Page 143: Becoming Indie

PR• Creating a great app is half the

battle.

• PR is the other half.

• Extremely time consuming and hard to do effectively.

• Build grass-roots support. Add viral components to your app.

• Good reason to use a publisher.

Tuesday, March 3, 2009

Page 144: Becoming Indie

Part III: The Future

Tuesday, March 3, 2009

Page 145: Becoming Indie

Tuesday, March 3, 2009

Page 146: Becoming Indie

Tuesday, March 3, 2009

Page 147: Becoming Indie

Tuesday, March 3, 2009

Page 148: Becoming Indie

Tuesday, March 3, 2009

Page 149: Becoming Indie

Tuesday, March 3, 2009

Page 150: Becoming Indie

• The big guys are coming to play.

Tuesday, March 3, 2009

Page 151: Becoming Indie

• The big guys are coming to play.

• They’ll be able to throw many more resources and make a difference.

Tuesday, March 3, 2009

Page 152: Becoming Indie

Tuesday, March 3, 2009

Page 153: Becoming Indie

• Rumours of a premium App Store area.

Tuesday, March 3, 2009

Page 154: Becoming Indie

• Rumours of a premium App Store area.

• Big companies + big games = Bigger price tags

Tuesday, March 3, 2009

Page 155: Becoming Indie

• Rumours of a premium App Store area.

• Big companies + big games = Bigger price tags

• What will it mean for us indies?

Tuesday, March 3, 2009

Page 156: Becoming Indie

Tuesday, March 3, 2009

Page 157: Becoming Indie

15+ million iPhones and growing

Tuesday, March 3, 2009

Page 158: Becoming Indie

Tuesday, March 3, 2009

Page 159: Becoming Indie

Tuesday, March 3, 2009

Page 160: Becoming Indie

Thank you!

Tuesday, March 3, 2009

Page 161: Becoming Indie

Questions?

Noel [email protected]

Snappy Touch

Tuesday, March 3, 2009

Page 162: Becoming Indie

Questions?Slides will be available from my blog Games from Within (http://gamesfromwithin.com)

Noel [email protected]

Snappy Touch

Tuesday, March 3, 2009