Elysian Shadows

Falco Takes Over

[b]Rewritten Framework[/b]

The first two days of my endeavors were actually pretty miserable. I was not half as familiar with Marcel's code as he was, my knowledge of the toolkit was scattered, and I had quite a bit of studying to do before I could even do anything better than it had already been done. I sucked it up, studied every line of fucking code, tore the bastard to shreds, and essentially rewrote from ground up. Much of the code is still the same, but is now using a rewritten back-end. After all of my hard work in this area, working on the toolkit is officially "fun" again, and implementing new things should honestly take no time at all (there is no reason the engine should ever get this far ahead of the toolkit again once we're through here). 

[b]Project/Level/Area[/b]

The most reasting portion of the previous endeavor was the manner in which "assets" were handled. The main assets in the toolkit are Projects, Levels, and Areas. "Project" is the entire directory containing everything that the engine will ever load. It's essentially the root of Elysian Shadows. Within the "Project" is the level directory, containing every level or zone within Elysian Shadows. Levels have their own tilesheets/objectsheets associated with them. Areas are zones within levels that share the same tilesheets/objectsheets (and later on other assets such as enemy/NPC templates). Areas have their own associated maps and entities that utilize these assets. This organization allows us to keep loading from "Forest 1" to "Forest 2" to a minimum, while going from "Forest 1" to "Cave 2" will require an obvious small loadtime for swapping assets.

So anyway, the manner in which this data is represented and delegated to other classes within the toolkit is now pristine. It was previously a singleton (which led to all kinds of terrible design decisions, imagine that?) The toolkit is essentially a collection of "AssetManagers" which are subsystems, dialog windows, classes, and widgets that perform some kind of operation upon this asset data.

[b]AssetIO Reintegration[/b]

As you should know by now, the "AssetIO" is the portion of the Elysian Shadows engine that pertains to the loading, saving, and representation of assets for the game. This portion of code is now shared between the Toolkit and Engine (enabling us to NEVER have to worry about synchronizing the two pieces of software again). The only problem was that the toolkit was so outdated that the AssetIO had gotten light-years ahead. 

The toolkit is now utilizing the most current version of the AssetIO framework found in the engine. I have tested this out by loading levels containing entities with new components such as conversations, behaviors, lua scripts, and things that are brand new additions to the engine. The toolkit is now able to load/save these assets flawlessly. The only problem is that the Toolkit does not "represent" this data yet (Entities aren't rendered on the map, there is no way to access the components through a GUI, etc), but this data is in RAM, ready and waiting for us to make a front-end to manipulate it.

[b]Tile Management[/b]

Tile management has been written in a manner that will enable everything in Pritam's previous post (which was fucking awesome, btw) to be possible. Each sheet is split into individual images at load-time. These images for individual tiles are then used to reproduce the complete sheet when the level is saved. This will enable us to let level designers create tilesheets on the fly (by importing tiles from other sheets, dragging them around in the current sheet, etc). This functionality is something we plan to implement in the near future. I honestly don't foresee it being too hard, since QT is taking care of the majority of the hardcore things (image processing).

[b]Tabs/TreeView[/b]

My biggest area of progress at this point has been this aspect of the UI. You are now able to load a complete "Project" and swap the current level/area that you are editing around with a user-friendly tree-view. The tab bars also correspond to the current level. This will allow us to literally have every level in the Project repository open at once for editing. It's pretty spiffy.

[b]Debug Log[/b]

Surely you guys have all realized by now that I'm a debug/log whore. Especially in such an early phase of development, it's goddamn important to me to have plenty of debug output/error messages when things fuck up. In a piece of software as layered as the toolkit (utilizing code from the engine as well), there's an enormous amount of things that can fuck up while you are using it. I designed the debug log so that we can easily see what's going on internally with the Toolkit. Now should it fuck up, you will have an easy way of reporting the error to me and Marcel.

The checkboxes are for toggling on and off output from the Toolkit itself and output from the Engine's AssetIO framework. 

[b]Today and This Week[/b]

Like I said, I'm literally sitting at Starbucks right now preparing to spend at least the next 6 hours here pounding the shit out of this toolkit. My next goals are to implement "Entity View" which will display a list of every entity in the current area (clicking its name will auto select the entity from the scene). I want to get the toolkit to a point where it can FINALLY edit/manage more than just simple terrain. I want fucking entities with attachable components VERY soon.

I'm also working on reintegrating a flawless invoke engine. I want you to simply be able to push one button and have the engine pop up so that you can run through your current level.

The ONLY catch here is that [i]there is no tile selecting/laying implemented in the toolkit[/i]. I broke this code as I was rewriting, and this task has been delegated to Marcel. As far as I know, he should be working on it right this minute. He wants to support fancy features such as multiple tile selection rather than just simple click and lay. After he's done with that, his next task was going to be implementing some kind of tilesheet manager similar to the one Pritam mentioned above.

All of this code is in the Toolkit repository. It's all compiling and ready to run (as long as your Project/Engine repos are up-to-date as well). I haven't put a standalone build in the Project repository yet just because you can't actually edit the map yet. I'll do that as soon as Marcel finishes his shit!

Back to work for me, gentlemen. Keep up the good work! Soon we'll rule this world.

Falco Girgis
Falco Girgis is the founder and lead software architect of the Elysian Shadows project. He was previously employed in the telecom industry before taking a chance on Kickstarter and quitting his job to live the dream. He is currently pursuing his masters in Computer Engineering with a focus on GPU architecture.