   Designing a 2d Engine
  I've been working on a 2d game engine for a while now, and so far it has various rendering functions, support for a mouse and keyboard, basic audio playback, and other bare essentials.What else should I add it?   
  Start making a game and you will quickly see what parts you are missing.   ;  Resource Systems?Animation Systems?Particle Systems?Sound Systems?UI Systems?Savegame/Profile Systems?Video Playback?:)*laughs*its a never-ending list...   ;  Thanks!  Looks like I've got alot of work to do.   ;Quote:Original post by Matt_D(...)*laughs*its a never-ending list...No, it's not. As mmakrzem already mentioned, just build a game. Then you'll see which items you really need, as opposed to what you assume you'll need.If you develop something without tangible specifications ('2d game engine' is rather unspecific), you easily end up wasting time on features that turn out to be unnecessary or impractical. If you develop a game instead, and then another, and another, you can keep some code from each game, modify it a bit to suit the next game, and eventually you'll end up with a framework that has proven itself to be useful.So, what should you add? Simple: what your game needs. ;)   ;  1. Tell time2. Draw textured quads3. Get user input4. Play soundsThat's it.  Everything else (particles, etc) is on top of that.  Physics is part of the game, not the engine.  Though you might use a physics engine for it (see Chipmunk or Box2D).   ;  In the engine I keep: - common utility classes (list, array, string, hash, time, etc) - debug utility (memory tracker, log messages, guard/unguard, etc) - file system (disk, zip, memory files with manager supporting files in archive pak file) - input system (keyboard, mouse, joystick(s)) - audio system (simple play and streaming support, audio codecs for ogg, mod, etc) - render system (dx/ogl wrapper with support for textures, material/shaders, meshes) - various draw functions 2d/3d (triangles, sprites, lines, 3d primitives, etc) - models (mesh, skeleton, animation, model) - math functions (vec3, mat4, primitives, collisions, etc) - game base app class (create window, handles some messages, etc)You can also add support for a scripter like LUA or similar.The rest I recommend to include in the game depending on specific needs.