Date: 2009-04-26
Jakob Schmid (Copenhagen, Denmark):
- Introduction
- Idea
- Game Design
- Implementation
- Getting Started
- 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
My talk is not about:
- How to deploy full-scale video game development.
- How to publish a video game.
My talk is about:
- How to design a video game.
- How to implement a video game.
- 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!
- Make lots of paper sketches of what your game could look like.
- Do not think about implementation details yet.
- 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.
- 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.
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.
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.
- 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.
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.
- 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.
Choose your game engine carefully, based on:
- Features
- Ease of use
- Scripting languages
- Cost
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.
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#
- 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.
- 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.
- 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.
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.
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.
- 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.
- Research is very important.
- Stay informed with the latest games - read/watch video game reviews.
- 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.
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.
- 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.
- 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$.)
- 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.
- Verth, Bishop: Essential Mathematics for Games and Interactive Applications
- Fernando, Kilgard: The Cg Tutorial (free at http://developer.nvidia.com)
- GPU Gems for shader programming (free at http://developer.nvidia.com)
- 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.
I'll be happy to help you get started.
- E-mail me at jakob@schmid.dk
- See my webpage for further contact information: http://schmid.dk