GameArchitect.net: Musings On Game Engine Structure and Design

 

Home

What It's All About

Who Is This Guy?

The List

Complete Archive

Personal 

RSS Feed

People




 

 

The List

By Kyle Wilson
Thursday, June 06, 2002

I said in What It's All About that game engine designs are pulled in all directions by a variety of requirements.  It's easy to get too lost in the details of a small subset of the game engine and write code that breaks other functionality or, more subtly, makes other features impossible to add later.

[Image]So this page is... in flux, and will probably always be in flux.  It's a place for me to jot down, with minimal organization, brainstorm-style, different features that make a good engine and different mechanisms that support solid code.  When this list achieves some kind of critical mass, I hope to go back and annotate it with the connections between items.  The connections aren't always obvious.

Every decision you make requires commitment.  Every decision you make narrows your future possibilities.  Design for flexibility when you can, but when you can't, remember that it's always better to make a decision than not to make one at all.

The List

  • name-based object registry
  • graphics
    • scene hierarchy
    • skinning
    • shadow / lighting model
    • HDR
    • decals
    • particle systems
    • shader model / material system / associated tools
    • vertex animation
    • alpha sorting
    • terrain
    • culling/occlusion
    • frame buffer post-processing effects
    • split-screen support
    • view modes (AVP2 thermal vision, etc.)
    • mirrors/reflection
    • procedural geometry
    • text rendering/font issues
    • level of detail
  • resource management
    • asynchronous loading
    • resource lifetimes
    • streaming resource scheduling
  • recording/playback
    • frame-based
    • time-based
  • file access
    • pack files
    • fastload linear file image support
  • input
    • remapping
    • force feedback (okay, it's not input...)
  • game timer - frame timer, high resolution profile timer, multiple timer support
  • saving dynamic state
  • exporting constant state
  • cross-platform compatibility - don't forget I/O byte-order issues
  • message passing
  • internal game object structure - how to separate components?
  • external game object structure - hierarchy, dependency graph?
  • in-game UI
  • in-game cinematics
  • tools
    • classes to support easy tool UI creation
    • level editor
    • terrain editor
    • particle system editor
    • model/animation viewers
    • trigger system tool
    • cinematics tool
    • MAX plug-ins - exporter(s?), material
  • profiling
  • console
  • data pipeline
    • conversion - optimization for multiple platforms
  • sound - 3D, 2D, looping, looping subrange, effects
  • music
  • scripting - Python?  Lua?  Java?  Roll your own?
    • script debugging
    • exposing code objects to script
    • deciding who writes the scripts
  • network
    • security/hacking issues
    • latency
    • bandwidth usage
  • error handling
  • physics - how to structure main loop?  frame time or independent?  interpolation between physics ticks?
    • stable integration
    • collision detection - what shapes?  continuous or discrete?
    • collision response - approximation?  impulse-based?  penalty methods?
    • inverse kinematics
    • line of sight/ray queries
  • AI
    • fuzzy logic
    • state machines
    • path-finding
    • tools
  • animation and controllers/dynamics - for transforms, colors, floats
    • lip-sync/sound synchronization
    • interaction of animation and physics
  • memory management
  • RTTI - use C++?  Roll your own?  Do unsafe casts?
  • exception safety ala Herb Sutter
  • levelization ala John Lakos
  • localization
  • enhancing concurrency/multi-threading

If you can think of anything I've missed -- and you probably can, since this isn't a well-bounded question -- drop me an e-mail..

I'm Kyle Wilson.  I've worked in the game industry since I got out of grad school in 1997.  Any opinions expressed herein are in no way representative of those of my employers.


Home