Game Design and Development

Date:2009-04-26

So, Who is This Guy?

Jakob Schmid (Copenhagen, Denmark):

Overview

  • Introduction
  • Idea
  • Game Design
  • Implementation
  • Getting Started

Introduction

Introduction: Why Video Games?

  • Video game development is one of the most creative IT branches.
  • Video games draw on many interesting topics from different fields:
    • Object oriented analysis and design
    • Linear algebra
    • Calculus
    • Newtonian physics
    • Complexity theory

Introduction: What this Talk isn't

My talk is not about:

  • How to deploy full-scale video game development.
  • How to publish a video game.

Introduction: What this Talk is

My talk is about:

  • How to design a video game.
  • How to implement a video game.

Idea

Idea: Brainstorming

  • Try to make something that hasn't been made before.
  • Try to figure out what you really like in a game.
  • Make a game for yourself, one that you would like to play.
  • Think small!

Idea: Sketches

  • Make lots of paper sketches of what your game could look like.
  • Do not think about implementation details yet.

Idea: Dimensions

  • 2D gameplay
    • Certain types of games like strategy games, puzzles, or platform games work best in 2D.
    • Most RTS's have 2D gameplay.
    • Complex and original gameplay ideas are often easiest to develop in 2D.
  • 3D gameplay
    • First Person Shooters (FPS) and third person shooters have 3D gameplay.

Idea

  • Don't start making the game until you have some good ideas.
  • A couple of really good ideas can quickly lead to an interesting game design.

Game Design

Game Design: First Steps

Define core gameplay mechanics:

  • Remove anything but the simplest possible representation of your ideas.
  • Don't add any other features yet. (But note them for later addition)
  • Don't start by making a MMO.

Game Design: Recording

Record design decisions using a concise, algorithmic syntax, e.g.:

  • When player ship collides with enemy ship, remove rand(0,10)+10 from player hit points
  • If player has key A in inventory, door opens.

Game Design: Mock-up

  • When the design is reasonably mature, create a mock-up and test it.
  • Be critical and don't be afraid to discard design elements or rethink the basic mechanics.
  • If the game is fun with cardboard and dice, it will be fun as a video game.

Game Design: Iterations

Iterative development:

  • Keep testing the game.
  • Change or remove design elements that become annoying over time.
  • Continue making changes to the design throughout the development.

Game Design

  • Spend a lot of time in the game design stage.
  • Discuss the design with others.
  • The design stage and the implementation stage will run side-by-side until the game is finished.

Implementation

Implementation: Engines

Choose your game engine carefully, based on:

  • Features
  • Ease of use
  • Scripting languages
  • Cost

Implementation: Engines

Or, you can make your own engine:

  • Possible to implement crazy features like raytracing.
  • But, remember to make it extremely simple!
  • Use SDL to get cross-platform graphics output.

Implementation: Language

Language choice is of course related to engine choice.

Most common game languages:

  • C++ - powerful, high performance, industry standard, required by many proprietary engines.
  • C# - powerful, reasonable performance, clean language design.
  • C++ > C#

Implementation: Engineering

  • It is impossible to make a good game without changing the design during the process.
  • ISO development doesn't work.
  • Rapid development and refactoring works.
  • A reasonable degree of code re-use between projects is possible.
  • Defensive programming is recommendable, as debugging can become quite hairy in games.

Implementation: OO

  • Games are obvious candidates for object orientation, as they are simulations.
  • Use classes to represent game object types.
  • Use inheritance to share code between related game object types.
  • Use virtual methods to implement different behaviours in different game object types.

Implementation: Performance

  • Choose your data structures wisely. Check time complexity for element insertion and look-up.
  • High-complexity algorithms may be fine if they are only run once.
  • Algorithms that run each frame must be low complexity.
  • Multi-threading or manual scheduling enable running more complex algorithms across multiple frames.
  • Beware of the pitfalls of multi-threading.

Implementation: Graphics

You will need graphics for your prototype.

Get together with a graphic artist; failing that, make it yourself:

  • Use primitives like cubes and spheres.
  • Generate your own meshes using knowledge of 3D geometry.
  • Don't use human characters - artist required.

Implementation: Graphics

Advanced graphics ideas:

  • Generating meshes each frame enables interesting morphing objects.
  • Do off-line complex light computations and 'bake' into textures.
  • Make interesting full-screen effects like ripples.

Implementation

  • Stay agile - refactor as game design changes.
  • Design your classes carefully.
  • High-complexity algorithms are OK, unless they should run each frame.
  • Programmers can make graphics like noone else.

Getting Started

Getting Started: Research

  • Research is very important.
  • Stay informed with the latest games - read/watch video game reviews.

Getting Started: Research

  • Video game research is playing video games.
  • The cheap way:
    • Classic games are a good place to start.
    • SNES or MAME emulation.
    • Casual games like those on www.newgrounds.com may also serve as an inspiration.
  • The not-so-cheap way:
    • Buy a console like Wii, Xbox 360, or PS3.

Getting Started: How to Work

Know all the basics of your field:

  • If you're doing a game with 3D graphics, you should know and have an intuitive understanding of the basic topics:
    • 3D spaces (object, world, eye space)
    • The rendering pipeline
  • If using an engine, read about the rendering algorithm.

Getting Started: Engine

XNA

  • Scripting language is C#.
  • Target platforms: Windows, XBox 360.
  • XNA Game Studio ~ Visual Studio.
  • Simple, powerful, low-level engine.
  • Usable for current-generation games.
  • Free.

Getting Started: Engine

Unity

  • Scripting language is C#.
  • Target platforms: Windows, Mac OS X, web plugin.
  • Extra target platforms: Wii, iPhone.
  • Powerful high-level engine with nice graphical IDE.
  • Usable for last-generation games and rapid deployment.
  • Free 30-day trial. (License costs 200$.)

Getting Started: Engine

Ogre

  • Scripting language is C++.
  • Target platforms: Windows, Mac OS X, Linux.
  • Works with Visual Studio or any other IDE.
  • Powerful high-level engine, usable for current-generation games.
  • Free - open source.

Getting Started: Literature

Basic Game Development

  • Verth, Bishop: Essential Mathematics for Games and Interactive Applications
  • Fernando, Kilgard: The Cg Tutorial (free at http://developer.nvidia.com)

Advanced Graphics Programming

Getting Started

  • Making games is fun and challenging.
  • Be creative.
  • Start small - when you have finished making 5 small games, you can start making a bigger game.

Contact

I'll be happy to help you get started.