• Advertisement
Sign in to follow this  
  • entries
  • comment
  • views

Progress report: My custom C++ game engine

Sign in to follow this  


[color=rgb(51,51,51)][font='Trebuchet MS']Hey guys, So my super custom 2D game engine is taking shape nicely. Reasons for making a custom engine are:[/font][/color]

  1. Learning stuff {Well this is a HUGE reason}
  2. No good 2D C++ game engines out there, well at least I don't like any of them. Cocos2D-x has both HORRIBLE architecture and documentation.
  3. Current 2D engines have just "fancy Views" or "frameworks" to display a bunch of images on the screen. I wanted something that does a LOT more heavy lifting under the hood such as Actor, Memory, Process, Event etc management.
  4. Portability. Currently I don't know of any good C++ engines which are widely portable to as much platforms as possible.
  5. Apart from supporting many platforms, I wanted to have a dynamic solution for the game to run on almost all device resolutions and densities.
  6. Absolute 1337 (skeletal) animation support.My Custom 2D Game Engine (I call it FEngine)

Main features:[color=rgb(51,51,51)][font='Trebuchet MS'] (Currently supported)[/font][/color]

-- Almost all code is platform independent C++

  • Supports C++ delegate functions
  • Smart pointers, unfortunately BOOST :S. Will change in future.

    -- Dynamic Letter-boxing and Content scale factor:

    • The engine is able to run the game on almost any game screen resolution, properly preserving aspect ratio and adding letter-boxing where appropriate
    • Resizes the graphics automatically depending on screen resolution and screen pixel density. For higher pixel densities it dynamically selects high-res artwork.

      -- Sprite Batching

      • The game engine dynamically batches the sprites into one huge array before sending it to the GPU in a single Draw call.
      • Supports translation, tinting, rotation, scaling, opacity etc
      • OpenGL ES 2.0 (will add other renderers in future)

        -- Process Manager

        • Simple yet VERY POWERFUL co-operative multi-tasking system.
        • You can animate, tween, synchronise, background tasks, almost ANYTHING you can imagine.

          -- Event Manager

          • Event notification system based on "observer design pattern".
          • Multi-buffered event queues.
          • C++ Delegate Functions

            -- State manager

            • A fully object oriented game state manager. I guess bit of an over-kill in the presence of process manager. I'll check it out what to do with it next time.

              -- Resource Cache

              • A central hub for managing all of the game resources.

                -- Sound Manager

                • Supports Ogg/Vorbis file format.
                • OpenAL powered !

                  -- External dependencies:
                  [color=rgb(51,51,51)][font='Trebuchet MS']|----- libPNG[/font][/color]
                  [color=rgb(51,51,51)][font='Trebuchet MS']|----- zlib[/font][/color]
                  [color=rgb(51,51,51)][font='Trebuchet MS']|----- ogg/vorbis[/font][/color]
                  [color=rgb(51,51,51)][font='Trebuchet MS']|----- glm[/font][/color]
                  [color=rgb(51,51,51)][font='Trebuchet MS']|----- tinyxml[/font][/color]
                  [color=rgb(51,51,51)][font='Trebuchet MS']|----- PennerEasing[/font][/color]
                  [color=rgb(51,51,51)][font='Trebuchet MS']|----- FastDelegate[/font][/color]
                  [color=rgb(51,51,51)][font='Trebuchet MS']|----- BOOST[/font][/color]

                  [color=rgb(51,51,51)][font='Trebuchet MS']Platforms that i would like port my current C++ code base onto in near future: (currently Windows, iOS, Android and BlackBerry will be supported)[/font][/color]
                  [color=rgb(51,51,51)][font='Trebuchet MS']|----- Windows [PowerRVR OpenGL ES2 bindings][/font][/color]
                  [color=rgb(51,51,51)][font='Trebuchet MS']|----- Mac OS X [PowerRVR OpenGL ES2 bindings][/font][/color]
                  [color=rgb(51,51,51)][font='Trebuchet MS']|----- Linux [PowerRVR OpenGL ES2 bindings][/font][/color]
                  [color=rgb(51,51,51)][font='Trebuchet MS']|----- iOS [/font][/color]
                  [color=rgb(51,51,51)][font='Trebuchet MS']|----- Android [/font][/color]
                  [color=rgb(51,51,51)][font='Trebuchet MS']|----- Blackberry [/font][/color]
                  [color=rgb(51,51,51)][font='Trebuchet MS']|----- Windows Phone [Angel project OpenGL ES2 wrappers around DirectX][/font][/color]
                  [color=rgb(51,51,51)][font='Trebuchet MS']|----- HTML5 / WebGL [using Emscripten][/font][/color]
                  [color=rgb(51,51,51)][font='Trebuchet MS']|----- Flash / Stage 3D [using Crossbridge][/font][/color]
                  [color=rgb(51,51,51)][font='Trebuchet MS']|----- Nook[/font][/color]
                  [color=rgb(51,51,51)][font='Trebuchet MS']|----- Kindle fire[/font][/color]
                  [color=rgb(51,51,51)][font='Trebuchet MS']|----- Chrome NaCl[/font][/color]

                  Near Future plans:
                  [color=rgb(51,51,51)][font='Trebuchet MS']Implement Actor manager, Scene graph, basic GUI etc[/font][/color]

                  [color=rgb(51,51,51)][font='Trebuchet MS']Following screenshots demonstrate the game running on various iOS devices in various orientations:[/font][/color]

                  - iPhone 4s 640x960


                  - [font=inherit]iPhone 6 Plus 1242x2208[/font]


                  - iPad retina 2048x1536, landscape mode

Sign in to follow this  


Recommended Comments

There are no comments to display.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Advertisement