Thursday 30 November 2023

Novemeber Cometh November Goeth


November has come and gone in what felt like record timing. The Steam Autumn/Fall sale is underway and I threw in Airship Dragoon for the Steam Awards category "Labor of Love", due to updating it after nine years on Valve's platform. More on that available on Steam.

November was a blur of getting the dreaded lurgy - which seemed to take forever and half a million hot toddies to clear, and testing, testing, testing ...

Testing many, many things ... 

Such as trying to lower the polycount on Monsters Loot Swag models. Previously I had used an automated plugin to reduce polycount for Level Of Detail, however this made a horrible mess of UV mapping. So I decided to try Blender's own decimation tools such as "UnSubDivide" - which would surely reduce edgeloops by simply unsubdividing the mesh ... yeah, well, actually it didn't ...

Unsubdivide edgeloops ... unsubdivides right?

Almost like it does one half of the body fine, then gets bored and just compresses the edgeloops and swaps to the other half of the body.

I am not a fan of retopology because I do not understand why it cannot be automated perfectly - especially on a model with perfectly equal edgeloops. This is the exact sort of soul destroying donkey work which should be easily automated and technically is automated if you want it to be a shyte ...

I did try a number of other programs - which I believe cool kids call "apps" these days on the grounds any word over four letters is too difficult or energy consuming to utter. One of these was MeshLab which seemed to do a fairly decent job at reducing 25K to 7K, though I still felt should have saved the UV map better. Or I could just manually retopo, but as I have avoided doing that for years I don't really want to start now ... especially as getting mesh deformation to not be shyte seems to be even more of a pain in the arse ... see below.

In addition to polycounts there has also been a whole host of messing around with the newer aspects of the engine which has been the focus of the Monsters Loot Swag BETA test build. This has been a lot of testing, fixing, streamlining and bug reporting, all of which are slowly but surely going into improving the engine and game build, though at the moment there is nothing too concrete to show as a game update.

But back to low poly.

Low poly Lara with some good low poly deformation techniques

I started making a low poly character, in a somewhat stylized plane based style. Nigh on 30 years ago I actually sculpted this type of head in concrete with a metal frame made of metal coat hangers... which proved to be a mistake when attempting to move it anywhere as I had not made it hollow, and so it weighed a ton.

Low poly mesh deformation is somewhat more of a pain in the butt than normal. Got a bad deform when bend bones? No problems, slap more edgeloops in and jiggle them about a bit. Except this cannot be done when you are modeling a plane based low poly humanoid.

Back of the elbow needs to come out somewhat

The simpler meshes get, the more horrendous deformation becomes, and the more difficult retaining versus collapsing polys are.

This is all being done for two purposes, one is for a potential low poly with hard edges/planes style future project, and the second is for more practise in reducing topology whilst keeping good movement deformation for current work.

In other news, it's cold and damp. The Pentalon Javelins - that's a type of winter spud that is harvestable at Christmas, and not a 1950s RAF experimental supersonic jet fighter; though it really sounds like it should have been -  appear to have died a death, going the way of this year's strawberry crop under the chronic wetness. I've been eyeing up designs of a padded gambeson to try and survive winter and also padded armour may help survive the GREAT HAPPENING when the lights go out and society crumbles.

December approaches ... and don't even get me started on Space Year 2024.

Tuesday 31 October 2023

Monsters Loot Swag Beta Available

 I have been stuck on this rock for 5 centuries - sorry 5 decades, feels like 5 centuries ... and more on medieval times later ...

Monsters Loot Swag has a new BETA version available on Steam. A BETA in Early Access? Well, yes.

The BETA branch is a whole new game engine ... well, actually it's kinda the same game engine with a whole new system. This system includes a fully function asset system, Physical Based Rendering (that's cool reflections of roughness and metal to normal folks), and HDR!

Want to try out the BETA branch? Go to your game library in Steam and click on Monster Loot Swag, click settings (circled in red) and bring up the drop-down menu, choose preferences and when the new window appears, go to Beta in the sidebar and select the new BETA version. You can opt-out of the BETA in the same way, by choosing default.

Don't want to play the BETA for the new game engine? No problems, the original version is still available.

Q: So why is it a BETA and not just the standard game branch?
A: Well because it's taken a fair bit of effort for updating and I need extra testing for various internal linkages that I may have missed, before I can set it to the master/default branch of the game.

Q: Is the default branch still getting updated?
A: YES! The default branch is still getting updated whilst I work on bringing the new game engine BETA version up to speed.

There have also been ~25 fixes and changes, including finalizing the models and effects for the remaining swag attacks and the special use items.

 Monsters Loot Swag now requires just 3 characters, 3 levels, 3 bosses and some extra stuff before Early Access is complete and it can be shipped. I am hoping for completion around April-May.

I've also been giving some thought about my next project to start sometime in 2024 and was thinking of making a third person medieval melee combat game, but not a Soulslike, more fighting against multiple opponents, but not a Musou-like either. Just a solid hack'n'slash.

I would like to make a massive single-player RPG but am actually thinking of something more manageable and bitesized. Something that might actually not require 5-8 years of work to finish ...

There has been quite a lot of this in the last 5 millenium ...

Behold, my new thinking cap!

Sallet. Why a sallet? Obvious really ...


Saturday 30 September 2023

Airship Dragoon Gets An Update


Airship Dragoon Update Sept 2023

 Airship Dragoon received a rare update this month. This was entirely due to me finally finding a way around using Visual Studio 2013, who's license Microsoft had locked me out of when they retired it a couple of years ago. The solution - the OFFICIAL MICROSOFT solution was  ... to hack the registry to forceably gain access to their own product ...

For more on that escapade, see the Airship Dragoon update on Steam.

Work on Monsters Loot Swag and bringing it up to the new and shiny version of the game engine continues unabated. One thing that the new engine has is a full script checker for compiling which actually looks through the scripts and reports errors - and boy did it find some. Whilst most errors were little more than referencing a wrongly named local variable and thus completely harmless, some were not, especially when trying to call function from the server for objects that did not exist at all.

And so began Monsters Loot Swag; Steam Early Access update 18; "The Big Bug Hunt".

This was quickly followed by the Monsters Loot Swag; Steam Early Access update 19; "The Big Bug Hunt Part 2" which continued to fix numerous minor issues and also got glyphs which are a fancy term for text and symbols, working for Playstation controllers and Steam Deck.

I rolled all the fixes from the new engine version into the previous version uploaded to Steam.

So back to upgrading the game to shiny PBR newness and new fangled asset system. Most of this is now done, with the actual loading/unloading having required some careful following of how the new system works to update, change and port my custom code. Single player campaign is now in and full functional with much fancy shininess to explosions due to the new HDR system. Online multiplayer is really the only thing left to finish off before I upload a full build of the new engine as a Beta Depot on Steam.

October is coming

 Next month is October and I hope to finally have a working beta of the new engine build up and running.

Thursday 31 August 2023

RIP My Strawberry Patch

There is a reason as to why I spend as much time as possible parked bollock naked outdoors, lounging by the veg patch, glass of (increasingly cheap - cost of living crisis / flagging sales / bad luck / terminal syphilis / name the James Coburn reference / etc, etc) plonk in hand and that is because of the unpredictable summers on Meme Weather Island (we used to rule the world, you know).

Here's a picture of a cut to break things up - not game related

Well it's been crap (again) and insesant (how many S's and in which order?) deluges have washed out the delicate summer fruits which barely got the chance to wither on the vine. Last year I was inundated with strawberries to the point of complaint and this year; nada. Circle of life, etc etc.

Meanwhile in the indie game development world; I have continued to port over Monsters Loot Swag to the new engine build. Art assets - mainly texutre images - had all been redone and modified as you can read from last months glorious endevours; as you can read here. And, yes, I also complain about the weather in that blog too ...

This is a cat pretending to be a dog, pretending to be a seal - not game related

This has left me to "just" - a euphemism that does not seem to carry the appropriate weight - update and transfer all of the gameplay scripts. Doing this in a methodical manner has been a long, dull, and extracting process, however I have discovered - and fixed - a considerable number of bugs, enough to make a new build patch of the game on their own, which you can see here.

Since posting that update I have hunted down and squashed more bugs and issues, which will be included in the next update. I have also ported a whole raft of shaders to the new version of the engine which can be found here.

Next up is to port over all of the user interface screens and get them working with a new input system before I can release a beta depot of the new engine build.

Tomorrow is September, and apparently Meme Weather Island is going back to 24C now that I have packed the summer shorts away ... so I'm not putting the Autumn duvet on just yet.

This is cat(girl) drinking coffee

Monday 31 July 2023

Flaming July Raining July


Behold, 693 materials converted to PBR - but the models LOD out quick so you can't see that here - trustMeBro
July has ended as Flaming June started ... flaming wet. The chances of a good strawberry crop in August diminish by the second.

Work wise, every single object in Monsters Loot Swag has been updated to the latest engine version and the fancy-pants visuals of Physical Based Rendering (PBR). All 693 materials have been changed to get rid of the diffuse and specular mapping, and brand spanking PBR compiltable albedo and Occlusion / Roughness / Metallic (ORM) maps have been created. I also settled on a standard 512 pixel size for the vast majority of objects as they are not large enough during gameplay to warrant textures any bigger (except bigger boss monsters and the such which are now 1024 pixel maps). All of this should also help reduce the total memory footprint for texture loading.

This new version of Monsters Loot Swag will be initially available as a beta on Steam, before later becoming the standard game version.

Boris The Spoder-Tank reflecting a rather barren test level in real-time

All of the terrains for the already completed 7 levels (3 more to do) have also been updated to the latest engine build, and are now filled with reflection probes to simulate the area around specific features.

A reflection probe before I realized I had to embiggen the capture radius to get objects to reflect in it

Slowly and methodically porting the game to the new engine has caused a few issues, namely my previous disregard for naming conventions. Many files ended up being called "thing_x_new4_v08_redux_final_final2" and then added to a profile, but the new engine uses an asset system so suddenly naming is important, and the file's name becomes the profile name. This was further confounded by previously having multiple files of the same name in different folders, so a fair bit of renaming has occurred, especially in the 262 audio files which needed to be called the name of their profiles.

So, next up is getting the actual old gameplay logic to work with the new asset system. I am optimistic that this will not be too difficult and that the main issues will revolve around some renaming of server and client connection commands. As ever I prefer to work methodically so that I can actual see where things have changed and understand how the new processes work - which seems infinitely preferable to ham-fistedly ramming the whole game into the "convert to new build button" and then wondering why everything is a mangled arse afterwards.

Hopefully August will also see a return to some decent sunny weather and I can get back to shorts and a t-shirt rather than continue building an Ark in a jumper ... we live, as ever, in hope ...

Friday 30 June 2023

Flaming June Raining June

June started with a jumper, June ends with a jumper

 June ends as it started ... wearing a jumper. Thankfully the bit in the middle was scorchio and I took advantage of the free vitamin D and got a nice tan. My veg patch also got a good soaking and the emergency water barrels filled up.

June has primarily been upgrading Monsters Loot Swag to a new engine build. This requires me to change all the materials from Diffuse/Spec to albedo/ORM for all of those fancy PBR reflections... and that means updating all 693 of them ... (note to self; next game go for flat shading).

Player Characters and bushes get the PBR treatment

Catgirl T-Poses over the nettles to assert dominance

HDR has proven to be somewhat of an issue in all of this - initially because I didn't realized that it was switched on by default, having not used it in previous version of the game or engine, and is now on as default. This led to some awkward automated changes in exposure for filmic tonemapping based on camera position.

Eventually, after a little fiddling with sliders and values I settled on an interpretation of ACES filmic tonemapping.

Stock ACES tonemapping with auto-Contrast - pass the light blub

Manually defined auto-contrast values for a sunny day

Whilst all of this was going on I ended up helping out with a new implementation of parallax mapping.

Old parallax mapping

New parallax mapping

Yes but actually no!

This is the start of a change in how parallax mapping works in the engine, with the original version being replaced with a brand spanking new Parallax Occlusion Mapping. And this is what that looks like! (minus the occlusion casting it's own shadowing).

Definately not the same picture ...

 The POM version required a total change of art pipeline where the alpha channel receeds from maximum height of white, downwards to lowest area of black, whilst the original parallax mapping built up and outwards from the lighter values.

So far I have the characters, bushes, trees, general vegetation, all of the level objects such as rocks completely transformed into PBR mode. So, still to do are the dynamic objects, animated explosion effects, most of the terrains and all of the monsters - and as it's a game about monsters, there are rather a lot of them ...

All that to do in Flaming July - which is not a painting by Lord Leighton.

Wednesday 31 May 2023

Boxes In Boxes


According to the weather forecast, she will need a jumper ...

After getting mild sun burn sat out by the veg patch with a bottle of wine, we are now back to standard British weather of needing a jumper for late Spring and early Summer ... Flaming June looks like it means that the fireplace will need to be lit ...

Steam brought out an update to the Steamworks SDK, sneaking it out again as they did in the previous month without any fanfair. Once again they had made changes to the authentication system, and once again I had to wade through code comments to find out what it all meant - except this time I also had to wade through the online documentation, complete with it's links to various 404 dead pages. To quote the docs at

 NOTE: This call requires a publisher API key to use this method. As such this API MUST be called from a secure server, and can never be used directly by clients!

So, yeah I'm good, this was just splitting up web-based games from the standard Steam Client authentication. Also feel free to click the api.steamworks link at the bottom of that page for more helpful advice. 😉

In April I had attempted to create a melee combat system of checking through a defending player object's hitBoxes for intersection with an attacking object's hitBox - to see if this would be faster than using a raycast system of quad edges projected from the attacker's weapon - all whilst suffering from the Dreaded Lurgy.

What I found, during illness enduced brain fog, was that there was no current system to determine whether rotated worldSpace boxes intersected (OOB) only AABB. Now without the brain fog I had another attempt at coding a solution to this, with a nice easy early out if half longest box sides added together were beyond central distance, though ended up using raycasts after all for the actual connection checks, which were oriented in worldSpace with the attacker's box and then a perpendicular test if no initial result was found.

The end result was that I found checking through the defender's 12 hitBoxes (but potentially up to 20) could easily take more than the standard 4 raycasts which I had been previously using. On top of that, box intersection would take more the boxes behind the initial hit into account, nearly doubling the struck areas, so a big melee swing would 98 damage rather than 40 something. To order these results in worldSpace would require another raycast or more maths based on location and orientation.

tl;dr - I've kept my original melee system, it works fine for what I want, but I might use the OOB intersection for weapon on weapon parrying.

So, that was the month that was. Flaming June awaits, with a promise of thick jumpers and hot cocoa ... 😒

Sunday 30 April 2023

The Dreaded Lurgy



The Dreaded Lurgy is a Rare SWAG Power-up. It is an Attack Based event which causes the targeted MONSTER to succumb to the Dreaded Lurgy. The infected MONSTER is highly contagious and will transmit the Dreaded Lurgy to any other MONSTER who they come into contact with. However, after receiving the dark gift of the Dreaded Lurgy, the victim is now immune from further infection.

Annoyingly this is also a thing in real life, and I have spent the last month suffering from The Langshan-Po Lurgy - a free internet to anyone who gets the reference, but Gen-X (greatest generation) here, is probably just showing his age.

Needless to say 3D vector maths, gimbals, quaternions, cpp and general cerebral activity, has been somewhat compromised with lurgy brain fog. In celebration at the cerebral degradation - which hopefully will only be temperory - I have revised, both the icon and the in-game activation event art, for
The Dreaded Lurgy.

However during this time, Steam has snuck out a new update to Steamworks (v1.56) ... which broke previous coded SteamGameServer::getAuthentication - thank you Valve devs for the code comments which gave a good explaination of the new changes. 

The Steam update for Monsters Loot Swag is here.

It has also spent all month raining again - just like last month. So it turned out in the end there really was enough rain for April showers. In the midst of all these downpours there has been a frequent visitor, and pidgeon numbers are being reduced.

Who's a pretty boy, then?

In the world of melee combat coding I decided to try a new way of doing things and ended up on some terrible code carousel, going round and round in circles - and having the Dreaded Lurgy did not help brain function. 

I had wanted to look down a list of the target's hitboxes and check if they were within the bounds of a weapon's hitbox. This caused far more problems than I had preceived, with a total lack of being able to get the transforms and orientation of the hitbox meshes within the model. When I could get the hitbox mesh itself it wouldn't allow me to translate it to into world space because it was the wrong class, when I had world space I could not access the hitbox mesh because that was then the wrong class.

I could test a strike against the target bounds and check for intersecting but then to get the actual hitboxes still required using a raycast against all hitboxes to get their transforms and then suddenly we were into more load than I had before.

Dave is made of hitboxes and the raycast is checking alignment of the forearm hitbox

 The only thing I can think of is to create a whole series of points within each of the target's hitboxes and and then check the Box3F of the weapon hitbox against all these points --- and once again we are into even more load, and not the less I was hoping for with just intersection checks of boxes.

Giving all of this up as a bad job, I decided to use the 4 main edges of the weapon hitbox and fire a raycast down each length for more accuracy than a single, central raycast check. This has turned out to be infinitely simpler than going down a list of up to 20 hitboxes checking for intersections.

I also coded up a fatigue system for heavy attacks, sprinting and swimming, and completely rewrote how fall damage works. I started to add attribute statistics for the player, which are fairly similiar to standard RPG stuff with STR, DEX, CON, etc, and the start of a leveling and experience system.

Next up will be to code classes and jobs with bonuses for these attributes on how fast experience points boost them.

Next month I am not certain whether I will continue with the melee action RPG prototype or start porting Monsters Loot Swag to the newest an shiniest version of the engine - I expect it will be a bit of both.

The Dreaded Lurgy is finally subsiding and I am down to a dry and somewhat sore throat with an occaisional dry cough. A pox upon the ... er ... pox!

Friday 31 March 2023

Damp Island is Damp

It seems to have been raining forever - at this rate there will be no water left for April to have showers ...

Monsters Loot Swag has had it's 13th Early Access Update! This fixed a whole load of minor issues and one major one - the awful openAL crossfade falloff has finally been slain ... with, naturally, a 2 line fix. 😫

Turns out it all that was needed was to feed openAL an ini file to tell it to stop dropping the fall off so early.

Also our leggy, harness encased, propeller powered catgirl has been testing an engine upgrade with glorious PBR! For which I made a Cornell Box in Blender 3D.

Reflections! Shiny, shiny reflections!

Now, updating the whole game to a new engine build which features not only shiny stuff like PBR, but an entire modular system is going to take some time. 

However, talking about new engine builds with funky modular features, I have been coding an animation based melee combat system in C++.

So far I have light and heavy attacks, activated by either tap or hold input. Both kinds of strike share a single Prepare Attack Animation, which works like a charge-up, and is based on weapon type. Light attacks are randomized, whilst heavy attacks are based on player input at the end of Prepare Attack Anim.

Each weapon has it's own attack speed and the player themselves have a "rage meter" which increases attack speed with the more blows they land on an opponent.

There are also primary and secondary types of damage, for instance a broadsword is primarily for slashing but can also stab. I plan on introducing different styles of armour (gambeson, lamellar, chain, plate, etc) which offer varied protection against the major types of attack damage of slash, blunt and stab.

Here's an animated gif showing a light thrusting attack - this was before I added weapon specific speed modifiers.

Light Attack - Yellow Circle Capturing Button Input

So that it was it for the wash out of a month which was March. I had was planning on setting up the Spring duvet for my bedding, but it's been so miserable and cold I think I will stick with the Winter duvet for another month. 😰

Tuesday 28 February 2023

February Is For Pumpkins and Witches


 February, the month of the year long associated with witches and pumpkins!

Yeah, no, okay it isn't ... but my latest update for the top-down swag-em-up waifu shooter Monsters Loot Swag features the first of the unlockable player characters, Pumpkin! 

*Crosses off cute witch from his list of weibo anime meme characters*

Pumpkin can be unlocked by getting the "Marathon" achievement, and her attributes are as follows:

PUMPKIN is a mix ranged, playable character with a long ranged standard attack and decent strength for knocking monsters out of the way. Her special attack is a very high damage strike to the enemy to her immediate front, whilst her evasion stuns all monsters within half the screen with a slap of her broomstick. Whilst her healing and enery recharging is somewhat low, this is made up for with her exceptionally high starting mobility.

Vital Statistics ... 38-26-34 *rimshot*

And here she is in video action.

Speaking of videos ... here's a few more.

I have been looking at updating my working game engine code to the latest release of free and Open Source Torque 3D, the version with the fancy PBR and 21st Century asset system which apparently all modern game engines consider to be a must have. 

I had also spent some time making demo code for a third person camera system that has movement input orientated in screenSpace - eg: input "left" makes the player move left along the screen. Most third person games like Elden Ring, GTA and Sleeping Dogs (which is the only one of those I've actually played), have this input-to-movement system. For years randos in the forums had asked for this type of camera based movement, and I coded it up in an afternoon. This differs importantly from the top-down system in Monsters Loot Swag, as the camera is still the property of the player object, rather than being a seperate entity that orbits the player and is beyond their immediate control. This did mean quite a bit of hacking away at the player's move function but I managed to leave in the original system for first person view.

After this I added a lock-on system, so that the camera would orientate to view a target whilst keeping the player in-frame and allowing the same screenSpace based movement input system. To test the correct rotational direction of the camera I gave the rotation speed a delay which makes it look kind of janky.

Both the third-person camera and the lock-on resources are up on the Torque3D forums, but do be aware that the lock-on code was written in a haze of sleep deprivation and the maths can be described as "fugly", the networking is good though 😅.

Next up is another unlockable character for my Early Access title on Steam, Monsters Loot Swag, and I may also start to write up some demo code for a melee based hack-and-slash game, which might use actual weapon hitbox detection rather than faking the whole thing with maths and raycasts.

Tuesday 31 January 2023

New Year, New Game Update

There's a joke in that loading screen somewhere ...

A new year, a new game update, a new level, and a new level Boss Monster to be defeated! It's Zorra, the Knife Enthusiast who guards the firey lava lakes of the Temple of Pele - that's the Hawaiian Goddess of volcanoes not the late footballer.

The update changelog can be viewed on Steam.

It's level 7 - so that is 70% of the game levels now complete, and it's the first level to introduce the environmental hazard of lava.

 As there was already a callback for entering liquid in C++ which passed the type it was fairly simple to set up a damage system when the player was immersed. However as there was no string variable for the player to record what type of liquid it was, the type would not get passed on the leave liquid callback. In the end I just used a trigger.

With another level complete, next up, will be some new cosplaying characters for the player to use. These will be the start of the unlockable characters, which is a Steam achievement in itself.