The Demon Pendant of Alodas (DPA) was my first foray into creating a custom Game Engine. It's built on the XNA Framework, which has been discontinued. I learned a lot about some more advanced features of the C# language, Tool Development, Content Pipelining, AI, GUIs, and Physics Simulations during the course of development, spanning my senior year in High School to my second year in college.
While DPA used an example XNA platformer project as a base, it is now completely unrecognizable as such, as every aspect of it has been expanded to fit the needs of the project. One such system to see an overhaul was in the loading and management of resources. Initially, all resources were loaded up-front. This was fine for the small example project, but would become a major problem for the scope of game I had in mind. Instead, resources were set up to be loaded in when requested, typically at level start, and unloaded when no longer needed, such as at level end.
Like the resource manager, the original physics system was too basic to work for DPA's psychic power system. After attempting to construct a physics system, the Farseer Physics XNA compatible 2D library was downloaded and integrated. The introduction of the physics system made level construction more complicated, but it allowed for the development of one of the game's core mechanics: the telekinesis power. This power allowed the player to pick up physics objects and guide them with the mouse, as well as fling them at opponents.
With the introduction of a physics system, as well as the need to introduce transitions and events, a level editor became necessary. The level editor was built using the WPF and C#, using a tab system of canvases and several info panels and popups to manage multiple levels and their data simultaneously. Entities in DPA were given attributes that defined many of their modifiable properties and event/trigger data. The editor used reflection over these attributes to auto-populate detail edit panels and data trees. Once all the backgrounds, entities, music, triggers and other such data were structured, the level editor used a compile stage to convert the data into a level object that could be read by the Game Engine.
In addition to the serialized level data objects, the state of levels and the state of the player were carefully tracked during gameplay, allowing level loading to restore the level to how the player left it.
Since the GUI had to be constructed to work within the Game Engine, standard Windows GUI APIs could not be used. Consequently, a custom GUI framework had to be constructed and implemented. This included HUDs, Dialogs, Menus, and Buttons.
In Conjunction with the physics system, the player was given many different movement options and gameplay features based on the theme of psychic abilities. The main character could double-jump, wall-jump, climb edges, climb select surfaces, remotely pick up and throw objects, and shoot blasts of energy, with more powers that were planned to be added eventually.
The last part of the system that was in development was the AI and Multiplayer mechanics. A second controllable character was added, with the ability for a player to take control of him at any time, as well as to drop out with equal convenience. When not directly controlled, the second character, NPCs, and Enemies navigated the environment with a pathfinding system that was adjusted to accommodate multiple movement types, such as edge grabbing and jumping.