Jump to content
Sign in to follow this  
  • entries
    3
  • comment
    1
  • views
    5447

Progress report: My custom C++ game engine

Sign in to follow this  
fakhirshaheen

2035 views

[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



                  FEngine_iPhone_4s_640x960_82349284923.jpg


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

                  FEngine_iPhone_6_Plus_1242x2208_82349284923.jpg


                  - iPad retina 2048x1536, landscape mode

                  FEngine_iPad_retina_2048x1536_82349284923.jpg
Sign in to follow this  


0 Comments


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.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!