Jump to content
  • 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

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!