Dev-Diary: 120

Heyo! March was nuts~! The vast majority of my waking hours were spent at my desk non-stop working on M.I.S., which has been going amazingly! I also made some progress with my work in Flash Archiving, getting several very talented artists to submit their works! The archival process is slow, but like I said before this is going to be an on-going lifetime goal for me. ^^

Before I jump into M.I.S. stuff, some more news; I was one of eight people chosen to represent Australian indie-devs at BitSummit as part of Screen Australia‘s ‘Future Leaders Delegation’!! This is crazy big for me, and means that I’ll be trained and guided by Screen Australia to best showcase M.I.S., as well as recieve funding to travel to Japan for the expo!! You can see more about that in my post [here]. Also very excitedly, I was also chosen to showcase this month at ALT:GAMES, which you can learn more about [here]! The deadlines are real, the pressure is on, and the stakes are high!

Okay so what have I even been up to? *scrolls through change-log* Oh wow okay well then…

  • Finally Finished Restructure: This took over a month of constant coding. To bring you up to speed; my first goal coming into this year was to go through my base code and rebuild pretty much everything. Maths stuff like Seed Generation and most of the UI was going to remain untouched (for now), but everything to do with how things work in space was getting redone. The reason for this is tri-fold; I wanted to convert to a fully-2D scene, I needed to fix all the bugs that were born from rushing the prototype, and I needed to implement some new mechanics at the foundational level. This is, for all intents and purposes, done! The game runs fantastically in the new 2D scene structure, everything is smoother, the world is bigger, and things are smarter. This was a painful undertaking, and the number of change-log notes I have which are just “Fixed issue X” are daunting, but wow yeah I did it! The game is far from perfect; there are still some performance issues encountered during stress-testing, and there will be bugs till the end of days, but I’m really happy with this progress.
  • Fog of War: Remember how last time I spoke about Visibility? Well, I needed to make a visual representation for that Visibility. This was an absolute chore to implement; there are so many ways to do FoW, but many of the practices I found in my research involved set map sizes, which basically means the world has limits. Now, the world in M.I.S. also has limits, but I don’t know what they are yet haha, so I wanted to make sure that FoW was essentially near-infinitely scalable. One of the new Godot updates included Material Stencils, which essentially means the rendered material is used as a highlighted area for a shader. I thought, “what if I could invert that and cut out a piece of fog?” Turns out, Material Stencils only work in 3D. So, long story short, I created a 3D overlay sub-scene (Viewport Container) which houses a screen-overlay shader than renders a fog, which receives inverse stencil data from meshes that replicate the Visible area. I had to code a 3D camera which converts the 2D camera data (harder than you think), and voila~ Infinitely-scalable Fog of War~!
  • Ghost-References: This was something I did very wrong in my previous version that I wanted to fix. Ghost References are basically objects that reflect a temporary reference of something; in the case of M.I.S. a good example is when you go to build a Module, a Ghost Reference will be created where the Module will be built so you know something is going to be there. It’s simple! But in my alpha-demo last year I totally messed it up, instead having full duplicates of the target. This is way too much data for something so simple, and it also restricts its usefulness to a few specific scenarios. Ghosts are now fully generic, can be implemented for a variety of purposes and linked to many functions. Another big plus is they also look pretty cool…
  • Visuals: Something else I didn’t like about all my builds so far is the way Visuals, including Textures and Materials, are handled, as they are all very “set in stone”. While modding isn’t something I’ll be actually implementing for a while, I still need to ensure it is written into the game’s foundation. So, to take a step towards both modding and also just having a cleaner game structure, I’ve started setting up fully generic visuals. Colours are already globally generic; they can be fully customised and set throughout the game. Textures are now on their way to doing the same, with numerous systems such as Combat, UI, and Ghosts already either partially for fully utilising the new system. A good example of this is Bullets; instead of designing an object for what every Bullet should look and operate like, instead AttackData just has a single texture and colour ID for what visual data to apply to that Bullet. Things become easier to replicate, my workflow becomes faster, and it means when modding gets implemented it’ll be much simpler for people to load in their own data.
  • Shaders: Talking about things looking cool and fancy new visuals, I built the new universal Shader for the game’s objects. Now, I’m not unfamiliar with Shaders, but I’m also not a professional, but wow I am heccin proud of how the new Shader looks! If you saw my Prototype build; it contains a similar effect when objects would be ‘constructed’ into existence through a unique fade. This fade is now fully customisable, allowing anything to be drawn in via fancy tech-art. I spent a good few hours drawing a few very scientific ‘Fade’ maps, which tell a Shader exactly how to fade in/out. The fades also have glowing edges, so it doesn’t just clip into existence. I’ll also be expanding this to allow for multi-texture overlays, meaning additional visual layers can be added to objects, things like adding cracks to damaged objects. Coupled with playing around with the WorldEnvironment to give the game a soft glow, and it’s all coming together.
  • Trails: More visuals?! You bet! I made my own 2D trails! 3D trails were much more complex, essentially generating a curved mesh instance in real-time. It was cool, but there was a lot happening. Trails are now simple; they use a Line2D to draw a trail behind the target! Instead of updating the full mesh, I only need to update the points on the line (I’m sure the back-end is still somewhat similar in the engine, but for me it’s much simpler~). The lines fade out through a combination of Width, WidthCurve, and Point-Limit all being affected by lifetime. It’s simple, it’s clean, it looks great.
  • Combat: I rebuilt all the Combat systems o-o. Last month I spoke about how I was rebuilding Targeting, and that went incredibly well, so it was time to put it to use. As I said above, I simplified the Visuals to use a more generic system instead of constantly replicating and instantiating scenes, and that heavily applied to Combat. Missiles (or ‘Projectile Slow’) still replicate Entities, but that’s because they’re smart objects that need to think. Everything else is quick operating and simple. Bullets (or ‘Projectile Fast’) are now simple Area2D nodes that update a tiny moving Line through the world scanning for its target. Lasers (or ‘Line’) are now just a single node that draws a fancy Line to the target. The thing I’m really proud of is Multifire (or ‘Count’) and Ricochets (or ‘Repeat’); all attacks are can now properly recall multiple instances. This isn’t just “spawn two lasers”, this is “spawn two lasers, but since there’s two have them shoot in parallel, and each of those needs to bounce and hit a second target, but *different* targets!” There was a lot of thought that’s gone into this, and so much more to come, but it works so damn well and looks so awesome! I’ve also massively standardised all the AttackData so that it is easier to store, edit, and copy onto Weapons, which now simply act as vessels for whatever data you load onto them. This means that I can update the same Attack on multiple Weapons across multiple Entities, simply by changing a number in a JSON file. Oh, I also finished all the Combat NPC behaviours~
  • Regions & World-Generation: I spoke briefly about this last month, and this is what I’m literally currently working on, but it’s already looking awesome. Regions are basically areas of space; every hex coordinate either has empty space or a Region assigned to it. Regions can be anything, from static resources to visibility obstruction to places you can’t build. They give the “world” definition. Up until now, this was only used to track Visibility, which was just randomised. I am still working on it, but what I have done so far is the foundation of World Generation. I use the map’s Seed to generate NoiseMaps, which are used to figure out what areas have Regions and what areas are just empty. I’ve tested the initial systems, and I was so happy seeing actual random world being created! It still has a way to go, but hopefully I’ll have that done soon.

Anyways I did a million other things but I really need to get back to work, I have two weeks before I need to have this new build ready for the first round of showcasing, so as I said the pressure is on! If you haven’t noticed yet, I’ve been trying to be more active on social media, and while I missed this week (in favour of this post), I am posting pretty consistently most weeks! So you can follow me on [Instagram] and [YouTube] where I do most of my short-form videos, and [Bluesky] for basically everything!

Okay, back at it! Till next time, all the best~!
^,,^