Heya folks!
So right after the busy month of June, July decided to continue the stress and bless me with Covid. This knocked me out for over a week, and the continued to affect me for most of the month. ==” After some recovery though I have been able to continue pushing with work for Management In Space! Still mostly back-end stuff, which is going to be an continuing trend as I want to ensure I establish the framework of the project as correctly as possible, but it is slowly making its way forward to more fun things. So let’s cover some of the bigger updates I’ve made!
- Flight (again): Despite having a nice chat about the Flight system last month, I ended up reviewing it and then subsequently reworking some of the inner functions. The way I’ve built Flight to work in MIS is, unless the object is drifting or hard-stopping, it will have a target it is flying to and a behaviour it is using to fly to it. Using the selected behaviour, a ‘Flight Target’ will be calculated, essentially the point in the world where the object should try to fly towards. Every behaviour will calculate this differently; Fly-To will simply have the Flight Target on the target itself, Strafe will have the Flight Target off to the side of the target, and Orbit will place the Flight Target in a way to lead the object to circle the target. Objects fly to their targets according to a few stats, but the most important are forward acceleration and angular acceleration. I noticed that the previous Flight system wasn’t correctly applying these accelerations to the velocity, especially while braking, but instead directly affecting the velocity itself by manipulating the maximum possible velocity.
I’ve since corrected this, tuned up the velocity calculations, and included a new sub-system that figures out braking. A lot of this ended up being less about physics, and more about figuring out why a ship would choose to speed up or slow down, or to turn sharply or slowly. Braking is now predictive, and a special sub-system now figures out when it’s important to focus on turning, or when to hit the accelerator. It still might be something I come back to down the line to tune-up further, but it works a lot better now and feels like things are actually flying the ships! You can actually check out my Instagram post showing a quick demonstration of it here: [Instagram Post]
- UI Overlay & Bars: Okay, so ‘Health Bars’ and the like mightn’t seem the most important system to be building at this stage, but it’s actually very helpful in me figuring out certain other systems I am and will be working on, such as Module construction and damage. So I spent a bit of time getting the Overlay system set-up. I looked into how Godot handles UI (or Canvas) objects in 3D space, and all the resources I found encouraged developers to add a Viewport screen onto every object that you wish to have UI elements applied to. MIS intends to have 100+ objects on screen simultaneously, and each of them rendering their own Viewport screen will get rather clunky (I know from a similar experience when working on roll).
I decided to take a different approach. Instead, all the Overlays are generated and controlled on a single Canvas layer called the Overlay Manager. This manager can be asked to generate an Overlay Object onto any world object. It will create an Overlay Container that is assigned to track that world object, and the Overlay Object is controlled within the Container. This process allows me to have multiple bars, texts, and images rendered at the UI layer but assigned to any object in the world, all on a single layer. Overlay Objects also have sorting priority, so they are automatically arranged within a container to remain uniform. On top of that, Overlays such as Bars (Health, Status, etc) have numerous automated features such as value listening, timeout, and synchronisation with other Bars. On top of this, I’ve also added custom Overlay Object generation! Overlay Objects can be generated from a JSON file (similar to how the Prefabs are generated) and called upon at any time. This will be useful not just for myself, but also for modders down the line.
- Chunks & Targeting: In the Prototype, I integrated a relatively common system in games that divides the world into ‘Chunks’. In the case of MIS, this assigns all world objects into their own chunk groups. This is a pre-optimisation to help with the Targeting system when scanning for world objects within a certain area. I’ve been trying to avoid pre-optimisation where possible; during development on roll I had to constantly optimise as I went due to the hardware limitations, but MIS doesn’t have those limitations. However I know from working on the Prototype and from the intended scope of the project that certain things do need to be optimised as early as possible, and this is one of them. The game can now scan any area and get a single, multiple, or all the world objects within range. It starts by checking all the viable Chunks within range, and sending back all the objects in those Chunks. It then scans through the list, skipping objects that don’t match the Filter and selects a target (or targets) based on the targeting method. The Filter is still in its early days, but it is a sub-system used to check if the potential target meets certain requirements. Currently it can only check the object type (Module or Entity) but it will be expanded to also check for things such as size, health, threat, priority, etc. The Targeting system works wonderfully, and was important to build now as it is a core function within numerous other up-coming mechanics, such as weapons, shielding, and drone tasks.
That’s it from me for now. I’m feeling much better compared to the start of the month, so I’ll be knuckling down and working to ensure MIS is ready for con-season in October! I’ll talk about where I’m going to be appearing and showcasing when that information becomes public, so look out for that! Also go follow my [Instagram] which I have just started becoming active on; I’ll be posting short-form video updates there!
That’s it from me! Till next time, all the best~!
^,,^