Kostas Anagnostou Game developer Adjunct Lecturer in Videogame Technologies
Who am I? <ul><li>Freelance game developer </li></ul><ul><li>Adjunct Lecturer in Videogame Technologies, Ionian University...
What is this talk about? <ul><li>Making great games! </li></ul>
What is this talk about? <ul><li>Not really, I don’t have the recipe for that… </li></ul>
What is this talk about? <ul><li>How to  enable  talented and creative people to make great games! </li></ul>
How are great games made? <ul><li>It is a trial-and-error, iterative process. </li></ul><ul><li>Mechanics and content must...
Who creates a great game? <ul><li>Game designers and artists mainly </li></ul><ul><li>All effort in game development must ...
Data-driven development <ul><li>Decouple game data and logic from game code </li></ul><ul><li>Let data determine game beha...
Data-driven development (DDD) <ul><li>Data-driven game development requires more initial work </li></ul><ul><li>Much easie...
Benefits of DDD for artists <ul><li>Much easier to add new content </li></ul><ul><li>Much easier to add new behaviour </li...
Benefits of DDD for programmers <ul><li>Tighter, easier to maintain code </li></ul><ul><li>Flat class hierarchy </li></ul>...
Elements that can be data-driven <ul><li>Level design/content </li></ul><ul><li>Game object data/behaviour </li></ul><ul><...
How can data affect game behaviour? <ul><li>Data driven development goes nicely with a Component-based engine architecture...
Requirements of DDD <ul><li>Some form of data description </li></ul><ul><li>Efficient and artist-friendly tools </li></ul>
Levels of Data driven development <ul><li>#define ENEMY_KAMIKAZE_HP 20 </li></ul><ul><li>void  ApplyEnemyDamage(Enemy* ene...
Levels of Data driven development <ul><li>File: EnemyHitPoints.txt </li></ul><ul><li>ENEMY_KAMIKAZE_HP 20 </li></ul><ul><l...
Levels of Data driven development <ul><li>File: EnemyDefinitions.xml </li></ul><ul><li><?xml version=&quot;1.0&quot;?> </l...
Levels of Data driven development
First taste of Data Driven Development <ul><li>At Rare we focused on the content pipeline a lot! </li></ul><ul><li>Extensi...
First taste of Data Driven Development <ul><li>Rare’s solution focused on data/game entity customization </li></ul><ul><li...
Space Debris by Rotten Fish Games <ul><li>Space Debris is a retro Space Shoot’em Up </li></ul><ul><li>Designed for smartph...
Data-Driven system design <ul><li>Game Entity is a container for data/behaviour </li></ul><ul><li>By default only supports...
Hierarchical structure of XML files Level.xml spritesheets.xml animations.xml spawners.xml bonuses.xml enemies.xml explosi...
Sample XML definitions layout <ul><li><?xml version=&quot;1.0&quot;?> </li></ul><ul><li><stages> </li></ul><ul><li><stage ...
Sample XML definitions layout <?xml version=&quot;1.0&quot;?> <spawners> <spawner  type=&quot;S1LNKamikazeeHunterChase&quo...
Sample XML definitions layout <?xml version=&quot;1.0&quot;?> <spawners> <spawner  type=&quot;S1LNKamikazeeHunterChase&quo...
Game data specification
Game data specification
Experiences from the DD system <ul><li>Programmer becomes obsolete!   </li></ul><ul><li>Designer can iterate level design...
A few weaknesses <ul><li>Some initial coding overhead </li></ul><ul><li>We should have used a visual editor </li></ul><ul>...
Let’s wrap it up! <ul><li>DDD can benefit even small teams </li></ul><ul><li>Content decoupling and iteration are importan...
Thank you for listening! <ul><li>Kostas Anagnostou </li></ul><ul><li>[email_address] </li></ul>
Upcoming SlideShare
Loading in...5
×

Data Driven Game development

3,090

Published on

In this presentation we discuss the need to decouple game code and game data in current games. Viewing games as
data-independent, data-processing systems can empower the designer and artist to easily add new content and to
experiment and fine-tune the game mechanics potentially leading to better and more expandable games. To put the
discussion into context we present the way we have structured the data-driven system in Space Debris and the flexibility it
provided during level design.

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,090
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
34
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Data Driven Game development

  1. 1. Kostas Anagnostou Game developer Adjunct Lecturer in Videogame Technologies
  2. 2. Who am I? <ul><li>Freelance game developer </li></ul><ul><li>Adjunct Lecturer in Videogame Technologies, Ionian University </li></ul><ul><li>Game Engine programmer at Microsoft Game Studios (Rare, UK) </li></ul>
  3. 3. What is this talk about? <ul><li>Making great games! </li></ul>
  4. 4. What is this talk about? <ul><li>Not really, I don’t have the recipe for that… </li></ul>
  5. 5. What is this talk about? <ul><li>How to enable talented and creative people to make great games! </li></ul>
  6. 6. How are great games made? <ul><li>It is a trial-and-error, iterative process. </li></ul><ul><li>Mechanics and content must be tried and fine tuned in-game </li></ul>
  7. 7. Who creates a great game? <ul><li>Game designers and artists mainly </li></ul><ul><li>All effort in game development must be focused on making their jobs easier </li></ul><ul><li>What we call Power to the Artist ! </li></ul>
  8. 8. Data-driven development <ul><li>Decouple game data and logic from game code </li></ul><ul><li>Let data determine game behaviour/aesthetics </li></ul><ul><li>Make data accessible to all </li></ul>
  9. 9. Data-driven development (DDD) <ul><li>Data-driven game development requires more initial work </li></ul><ul><li>Much easier to hardcode everything! </li></ul><ul><li>Why should we care? </li></ul>
  10. 10. Benefits of DDD for artists <ul><li>Much easier to add new content </li></ul><ul><li>Much easier to add new behaviour </li></ul><ul><li>Faster iteration times </li></ul><ul><li>Reduces artist dependency on programmer </li></ul>
  11. 11. Benefits of DDD for programmers <ul><li>Tighter, easier to maintain code </li></ul><ul><li>Flat class hierarchy </li></ul><ul><li>No artists bugging us!  </li></ul>Scott Shumaker, Outrage Games
  12. 12. Elements that can be data-driven <ul><li>Level design/content </li></ul><ul><li>Game object data/behaviour </li></ul><ul><li>UI/localisation </li></ul><ul><li>Game configuration </li></ul>
  13. 13. How can data affect game behaviour? <ul><li>Data driven development goes nicely with a Component-based engine architecture </li></ul><ul><li>Game Entities are just containers </li></ul><ul><li>Data specify which components/functionality are required </li></ul>Scott Shumaker, Outrage Games
  14. 14. Requirements of DDD <ul><li>Some form of data description </li></ul><ul><li>Efficient and artist-friendly tools </li></ul>
  15. 15. Levels of Data driven development <ul><li>#define ENEMY_KAMIKAZE_HP 20 </li></ul><ul><li>void ApplyEnemyDamage(Enemy* enemy) </li></ul><ul><li>{ </li></ul><ul><li>if (enemy->Type == ENEMY_KAMIKAZE) </li></ul><ul><li>{ </li></ul><ul><li>enemy->Shield -= ENEMY_KAMIKAZE_HP; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  16. 16. Levels of Data driven development <ul><li>File: EnemyHitPoints.txt </li></ul><ul><li>ENEMY_KAMIKAZE_HP 20 </li></ul><ul><li>ENEMY_KILLER_HP 10 </li></ul><ul><li>ENEMY_BRUTE_HP 2 </li></ul><ul><li>ENEMY_BOSS2_HP 2 </li></ul><ul><li>… .. </li></ul>
  17. 17. Levels of Data driven development <ul><li>File: EnemyDefinitions.xml </li></ul><ul><li><?xml version=&quot;1.0&quot;?> </li></ul><ul><li><enemies> </li></ul><ul><li><enemy type=&quot;Warrior&quot; texture=&quot;enemies_sheet.png&quot; shield=&quot;100&quot; speed=&quot;30&quot; weapon=&quot;Laser&quot; explosion=&quot;Muffled&quot;> </li></ul><ul><li><frames interval=&quot;0.3&quot;> </li></ul><ul><li><frame x=&quot;0&quot; y=&quot;0&quot; w=&quot;32&quot; h=&quot;32&quot;></frame> </li></ul><ul><li><frame x=&quot;32&quot; y=&quot;0&quot; w=&quot;32&quot; h=&quot;32&quot; /> </li></ul><ul><li></frames> </li></ul><ul><li></enemy> </li></ul><ul><li><enemy type=&quot;Kamikaze&quot; texture=&quot;enemies_sheet.png&quot; shield=&quot;50&quot; speed=&quot;40&quot; weapon=&quot;&quot; explosion=&quot;Strong&quot;> </li></ul><ul><li><frames interval=&quot;0.3&quot;> </li></ul><ul><li><frame x=&quot;0&quot; y=&quot;32&quot; w=&quot;32&quot; h=&quot;32&quot; /> </li></ul><ul><li><frame x=&quot;32&quot; y=&quot;32&quot; w=&quot;32&quot; h=&quot;32&quot; /> </li></ul><ul><li></frames> </li></ul><ul><li></enemy> </li></ul><ul><li></enemies> </li></ul>JSON is quite trendy too!
  18. 18. Levels of Data driven development
  19. 19. First taste of Data Driven Development <ul><li>At Rare we focused on the content pipeline a lot! </li></ul><ul><li>Extensive framework built around Maya and the in-house game engine. </li></ul><ul><li>The artist could fully customize assets in Maya </li></ul><ul><li>One click asset deployment </li></ul><ul><li>Enabled iterative development </li></ul>
  20. 20. First taste of Data Driven Development <ul><li>Rare’s solution focused on data/game entity customization </li></ul><ul><li>No game engine support for components/data driven behaviour </li></ul><ul><li>Still, artist empowerment was huge! </li></ul>
  21. 21. Space Debris by Rotten Fish Games <ul><li>Space Debris is a retro Space Shoot’em Up </li></ul><ul><li>Designed for smartphones (iPhone and later Android) </li></ul><ul><li>15 multilayered levels in total, tens of enemies, lots of weapon/weapon upgrades, bonuses, animations etc </li></ul><ul><li>We relied on a data-driven system to set all that up. </li></ul>
  22. 22. Data-Driven system design <ul><li>Game Entity is a container for data/behaviour </li></ul><ul><li>By default only supports transform/rendering </li></ul><ul><li>Designer can add weapons, animations, sprite animations, bonuses, upgrades, sound effects, explosions etc externally </li></ul><ul><li>Game stats are set externally as well </li></ul>
  23. 23. Hierarchical structure of XML files Level.xml spritesheets.xml animations.xml spawners.xml bonuses.xml enemies.xml explosions.xml
  24. 24. Sample XML definitions layout <ul><li><?xml version=&quot;1.0&quot;?> </li></ul><ul><li><stages> </li></ul><ul><li><stage </li></ul><ul><li>name=&quot;stage1&quot; </li></ul><ul><li>spritesheets=&quot;spritesheets.xml&quot; </li></ul><ul><li>enemies = &quot;enemies.xml&quot; </li></ul><ul><li>spawners = &quot;spawners.xml&quot; </li></ul><ul><li>weapons = &quot;weapons.xml&quot; </li></ul><ul><li>animations = &quot;animations.xml&quot; </li></ul><ul><li>bonuses = &quot;bonuses.xml&quot; </li></ul><ul><li>explosions = &quot;explosions.xml&quot; > </li></ul><ul><li><levels> </li></ul><ul><ul><li><level </li></ul></ul><ul><li>name= &quot;s1level1&quot; </li></ul><ul><li>file= &quot;tilemap_s1l1.tmx&quot; </li></ul><ul><li>music = &quot;STAGE1_LEVEL_1.mp3&quot;> </li></ul><ul><li></level> </li></ul><ul><li><level </li></ul><ul><li>name= &quot;s1level2&quot; </li></ul><ul><li>file= &quot;tilemap_s1l2.tmx&quot; </li></ul><ul><li>music = &quot;STAGE1_LEVEL_2.mp3&quot;> </li></ul><ul><li></level> </li></ul><ul><li></levels> </li></ul><ul><li></stage> </li></ul><ul><li></stages> </li></ul>Enemy definitions Bonus definitions Level tilemap
  25. 25. Sample XML definitions layout <?xml version=&quot;1.0&quot;?> <spawners> <spawner type=&quot;S1LNKamikazeeHunterChase&quot; enemytype=&quot;Kamikazee_Hunter&quot; spawn=&quot;Chase&quot; animation=“ ZigZag&quot; number=&quot;6&quot; rate=&quot;2&quot; bonus=&quot;Invisibility&quot;> </spawner> </spawners> <?xml version=&quot;1.0&quot;?> <enemies> <enemy type=&quot;Kamikazee_Hunter&quot;> <parts> <part sprite=&quot;alien_kamikazee_hunter“ shield=&quot;1&quot; weapon=&quot;EnemyKamikazee1&quot; explosion=&quot;MediumExplosion&quot;> </part> </parts> </enemy> </enemies> <?xml version=&quot;1.0&quot;?> <spritesheets> <spritesheet name=&quot;spritesheet_normal.png&quot;> <sprite name=&quot;alien_kamikazee_hunter&quot;> <frames interval=&quot;0.3&quot;> <frame x=&quot;432&quot; y=&quot;96&quot; w=&quot;48&quot; h=&quot;48&quot;></frame> <frame x=&quot;0&quot; y=&quot;144&quot; w=&quot;48&quot; h=&quot;48&quot;></frame> </frames> </sprite> </spritesheet> </spritesheets> <?xml version=&quot;1.0&quot;?> <animations> <animation name=&quot;SPath&quot; type=&quot;Bezier&quot; track=&quot;Player&quot;> <parts count=“3&quot;> <part p0=&quot;0 0&quot; p1=&quot;1 0&quot; p2=&quot;1 -0.25&quot; p3=&quot;0 -0.25&quot; duration=&quot;3&quot;></part> <part p0=&quot;0 0&quot; p1=&quot;-1 0&quot; p2=&quot;-1 -0.25&quot; p3=&quot;0 -0.25&quot; duration=&quot;3&quot;></part> <part p0=&quot;0 0&quot; p1=&quot;1 0&quot; p2=&quot;1 -0.25&quot; p3=&quot;0 -0.25&quot; duration=&quot;3&quot;></part> </parts> </animation> </animations>
  26. 26. Sample XML definitions layout <?xml version=&quot;1.0&quot;?> <spawners> <spawner type=&quot;S1LNKamikazeeHunterChase&quot; enemytype=&quot;Kamikazee_Hunter&quot; spawn=&quot;Chase&quot; animation=“ SPath&quot; number=&quot;6&quot; rate=&quot;2&quot; bonus=&quot;Invisibility&quot;> </spawner> </spawners> <?xml version=&quot;1.0&quot;?> <enemies> <enemy type=&quot;Kamikazee_Hunter&quot;> <parts> <part sprite=&quot;alien_kamikazee_hunter“ shield=&quot;1&quot; weapon=&quot;EnemyKamikazee1&quot; explosion=&quot;MediumExplosion&quot;> </part> </parts> </enemy> </enemies> <?xml version=&quot;1.0&quot;?> <spritesheets> <spritesheet name=&quot;spritesheet_normal.png&quot;> <sprite name=&quot;alien_kamikazee_hunter&quot;> <frames interval=&quot;0.3&quot;> <frame x=&quot;432&quot; y=&quot;96&quot; w=&quot;48&quot; h=&quot;48&quot;></frame> <frame x=&quot;0&quot; y=&quot;144&quot; w=&quot;48&quot; h=&quot;48&quot;></frame> </frames> </sprite> </spritesheet> </spritesheets> <?xml version=&quot;1.0&quot;?> <animations> <animation name=&quot;SPath&quot; type=&quot;Bezier&quot; track=&quot;Player&quot;> <parts count=“3&quot;> <part p0=&quot;0 0&quot; p1=&quot;1 0&quot; p2=&quot;1 -0.25&quot; p3=&quot;0 -0.25&quot; duration=&quot;3&quot;></part> <part p0=&quot;0 0&quot; p1=&quot;-1 0&quot; p2=&quot;-1 -0.25&quot; p3=&quot;0 -0.25&quot; duration=&quot;3&quot;></part> <part p0=&quot;0 0&quot; p1=&quot;1 0&quot; p2=&quot;1 -0.25&quot; p3=&quot;0 -0.25&quot; duration=&quot;3&quot;></part> </parts> </animation> </animations>
  27. 27. Game data specification
  28. 28. Game data specification
  29. 29. Experiences from the DD system <ul><li>Programmer becomes obsolete!  </li></ul><ul><li>Designer can iterate level design faster </li></ul><ul><li>Easier for the team to work remotely </li></ul><ul><li>Cleaner code, almost flat Class hierarchy </li></ul>
  30. 30. A few weaknesses <ul><li>Some initial coding overhead </li></ul><ul><li>We should have used a visual editor </li></ul><ul><li>XML files not artist friendly enough </li></ul><ul><li>Tiled editor was a halfway solution </li></ul>
  31. 31. Let’s wrap it up! <ul><li>DDD can benefit even small teams </li></ul><ul><li>Content decoupling and iteration are important </li></ul><ul><li>Some coding overhead, usually acceptable </li></ul><ul><li>Need good tools to exploit DDD fully </li></ul><ul><li>Give power to the artist to express herself! </li></ul>
  32. 32. Thank you for listening! <ul><li>Kostas Anagnostou </li></ul><ul><li>[email_address] </li></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×