Welcome back! I was told to wake someone up when September ends, but I seemingly forgot. I put together a video, which Bert will conveniently have edited by the time all is said and done, with (most?) of the updates that were quantifiable and demonstrable.
One of the biggest updates that came through — the engine finally had the last traces of Linq were removed from the actual engine. Some technical-ese now, for those not familiar: Linq is a convenience library that helps do some queries that would otherwise take a lot of code to write out. It’s a developer’s friend… but only when you don’t really care about every possible frame of performance. In .NET (and other managed languages, like Java), there are points of garbage collection, where the runtime takes time to clean up anything unused. As it happens, Linq creates many instances of garbage that need to be cleaned up — resulting in a micro-stutter every now and then. How bad is the micro-stutter? In all cases that it was measured, it was less than 10-12ms, once every 30 seconds or so.
However, I wasn’t happy with that, so I manually replaced it all. What does that look like?
Last month, this sample was running with a framerate in the mid-800’s. Granted, it is a small map that doesn’t have a lot going on, but the performance is drastically improved. It is likely that you will see significant gains overall in performance and frame rate.
There was a significant upgrade to how the enemy battle programs operate, per request of several of the architects. The big point for this was to create multiple phases of a boss battle for our 2D sample — as such, I added roughly eight new battle program elements (actions that an enemy can take), as well as completely rebuilt the user interface to make it cleaner.
That’s a lot more options — and everything is setup to work even more cleanly. In addition, you probably notice the “Interrupts Battle” checkbox there.
Interrupts are done instantly in a battle, as soon as the conditions are met. This means that you can make an enemy that reacts to specific attack or performs one final action before it dies. “Prevent Battle Phase Update” prevents the interrupt from allowing the battle manager to check victory/defeat conditions or applying status effects (e.g. marking an enemy or hero as dead). “Prevent Further Interrupts” prevents additional interrupts from occurring in the possible chain of responses.
A compass list user interface element was also added — which allows you to set list items in cardinal directions (and the center). In the preview, I’ve only set up the Northwest, North, Default, and South. You’ll be able to make menus reminiscent of Super Mario RPG, Xenogears, Breath of Fire, Shining Force, and more, with this!
Parallax layers and sky spheres also got an update this month — they now support animation! One of the issues with this, prior, was that you can get pixel-rounding (most 3D games support a pixel margin/frame around a texture, wherein the border would round to what’s on the other edge of the image — just in case. That was added late in August, but I was able to make good on it this month.
Apologies — my samples are always a little rough, but you can definitely see the sky sphere in the background changing, as well as the floating parallax dot layer changing. Someone far more artistic will be able to do cooler things, like make clouds that change over time, or have animated water (or something similar) for the parallax.
In other news, we’ve started on the “final” version of the 2D demo… or at least what we think is going to be the final version. It’s going to take a while to get there — probably end of the year or early next year — but it will serve as a good “example” of what RPG Architect can do. It’ll be complete with story, random encounters, an airship (unless someone decides to change it), and a lovable cast of unlikely (read: spunky) heroes.
Outside of this, a number of bugs were addressed — things like vehicle scripts not working perfectly (sorry, Matt), variables not syncing up correctly in the editor, billboards being flipped in first person mode, and a few minor physics bugs. Additionally, a few other commands were added to help initialize or access a local variable on another entity — meaning you can spawn an entity now, set some of their local variables or switches, and/or get values from another local entity’s variables/switches without needing to use a global to swap it.
I had intended to get tile tags a little further along this month, but I broke in the enemy AI, which seemed like a “better” thing to do at the moment. Likely, they will be worked in sometime in October!
Next month, I’ll be working on path-finding. This is a problem I’ve never actually written a solution for in my programming career, but one that I understand fairly well (it’s not too different than routing problems — it’s just graph theory) — and have several examples because it is so often done. I suspect it will take the whole month, but hopefully I’ll get the opportunity to work in some other things as well. Commands/movement will be built in for trying to move a character to a position as well, so there will be that in addition.
That’s it for September!
As always:
Thank you so much for your support so far. I’m looking forward to building this community further and giving you the engine you may not have known you always wanted!