as some of you might know I'm working on this game engine called Duality, and this thread aims to be a mixture of occasional devblog and discussion platform for anything related to it. There's been a lot of progress in the past months, and I'm slowly beginning to think that this project can be of actual use to others, so... let's find out!
What is Duality?
It's a 2D game engine that comes with a visual editor.
Both engine and editor are Open Source (MIT license).
It's all based on C# and OpenTK.
The frameworks architecture incorporates a plugin system with hotswap support.
It is highly extensible, even without touching the original source code.
Work on this project began somewhere around November 2011. It's still in active development.
Why does it exist?
My initial goal was to stop writing a new engine for every game I made, and instead create one framework that can serve as a basis for all of my future projects, regardless of genre or gameplay elements. This would allow me to spend less time on engine coding and more time on making games. Ironically, where I ended up at first is doing even more engine coding for quite a while - but by now, Duality has grown to be pretty usable, and I've developed a lot of projects just using it.
Duality exists, because I've always wanted a C# framework like this, but there was none that "had it all": Focused on 2D games, fast iteration times and visual editing, but at the same time free, Open Source and designed to be vastly extensible. While there are a lot of products on the engine market that do a really great job, most of them are still closed systems: Something that you might buy in a shop and use regularly, but wouldn't bother modifying, because it is generally a bad idea or downright impossible. On the other hand, Duality is kind of a construction kit.
Also, I have always been a fan of modding, i.e. being able to take an existing game as a player, and add my own stuff. One of the core ideas behind Duality is, that you, the developer, will use it to build your game and extend it wherever necessary. It's visual editor can serve as level editor, content database, sandbox and testing environment. When releasing your game - just leave the editor in there. It doesn't cost you anything, but your players get to use the same editing system you had: Duality, tailored exactly to fit your game.
What can it do?
Content and Resource Management Serialization, Importing and Updating Content, Custom Resource format using Binary or XML data, Friendly to Version Control systems, Robust in case of errors and old data
Scene Graph and Object Management Component based GameObjects, Parent-child relations and transformation, Shared extensible Component interfaces, Scene queries
Audio Playing and configuring sound effects and music, Streaming, Randomized sounds, 3D audio
Rendering Camera based, Multiple Renderpasses, Postprocessing, Automated Batching and Z Sorting, Fake perspective using parallax scaling and scrolling
Physics Based on a custom OpenTK version of Farseer Physics, Collision Detection, Rigidbody Physics, Visual Shape Editing
User Input Keyboard, Mouse, Joysticks, Gamepads, Open to Custom Input methods
Visual Editor What-You-See-Is-What-You-Get, Resource Hotswap, Plugin Hotswap, User Advice based on XML code comments, Extensive Dragdrop support, Multiple Views, Docking based on WeifenLuo library
A lot of other fancy stuff Profiling, Logging, Text Formatting, Animation, Prefabs, Cloning, etc.
Where can I find more information?
You can get a quick overview on the framework on the > main info page <, or one of several > other info pages <.
There is a lot of Q&A going on in the > community forums <.
Take a look at the > project Wiki < on GitHub.
Listen to BatCat Games talking about why they use Duality in > this .Net Rocks! podcast <, starting roughly at 13:00.
Read the article on how to get started > here on GameDev <.
Watch some old videoblog entries about Duality in my > YouTube channel <.
Well, I guess that's up to you. Maybe take a closer look on Duality? Use it for your upcoming project? Or even contribute to the project yourself? Whatever it is, feedback is always welcome and I'm looking forward to versatile discussions and constructive criticism. Let me know what you think!