Showing posts with label bug hunt. Show all posts
Showing posts with label bug hunt. Show all posts

Monday, 30 December 2024

Cosplaying Catgirl Characters Complete

Monsters Loot Swag; Final Playable Character

 As the year 2024 comes to completion, so has the list of playable characters for Monsters Loot Swag. Schiavona is the 8th playable cosplaying catgirl character and fourth and final character who has to be unlocked via achievements. She is a close range, melee based character, with fairly average physical statistics, but is very heavy on inflicting damage.

Cue video of her in action:

All that remains for work to complete the development of Monsters Loot Swag, is now the final level with boss character, and few art related pieces such as an intro containing plot, as if 8 playable cosplaying catgirls battling 8 waifu level bosses needs such flippery as plot!

Airship Dragoon has been on Steam for 10 years

Airship Dragoon got two updates at the beginning of December, the first was due to a new Steamworks SDK which had broken some of the 10 year old code for Steam integration, and the second was because, whilst testing the first update on Steam to make sure it actually worked ... I found a bug from 12 years ago ...

Thankfully, 12 years ago me ... who may still have been in his late 30s ... had left a code comment incase something happened that was not supposed to happen - and during this test of the new Steamworks code ... it happened.

The ancient code comment made it relatively simple to track the "something happened that was not supposed to happen" down to a specific function were pathfinding was sent if it completely failed - something so rare I had never had it happen, not anyone report it in the last decade, but I had not added an escape of any kind to this failure state, and so quickly scripted an emergency "move elsewere" command, so not to get stuck.

Rounding out the year work-wise, I finally filed my tax return with His Majesty's Robbers And Crooks (HMRC), something which the gubbermint has gone out of their way to make ever increasingly difficult. Their oh-so-helpful system active attempts to stop me from paying them money and every year I send feedback telling them that their crappy website has been broken for the last 7+ years and tell them how to fix it, every single year.

I ran out of characters typing into the complaint box


For 7+ years they have not done this
 

As it's Decemeber, and the time of eat, drink and get indegestion, I bought the biggest steak at a reasonable price that I could get.

Hello Vitamin B12!
 

Suitable Protective Clothing For Roasting Such A Beast

Went For Medium-Rare For Fear Of Some Folks Freaking Out If It Was Still "Bloody As Hell"

As Monsters Loot Swag comes to the end of it's development cycle, I naturally have one eye on the next project. Previously I had posted some of my test work on a third-person melee combat system. As my previous two projects have taken so long, I had been wondering about how best to make a short form game that could be expanded on if it received due interest from players.

I noticed that there had been quite a lot of complaints on the new Stalker game, about how it's open world design had broken it's previous a-life simulation, and I thought that maybe going down that route could be interesting - both in gameplay but also in coding the concept.

So, something along the lines of a 4km square map (not too big), with bands of enemy warriors from different areas or periods (Saxon, Norse, Magyar, Venetian, Chivalric, Landsknecht, etc) wandering about, picking fights, fleeing greater enemy forces, with a smattering of random loot and treasure chests, maybe some wild life plodding about.

I had a brief test to see the ballpark range of having lots of Ai players visible, having them invisible, not rendering but still having to update physics each engine tick. This was done in debug mode whilst running an IDE so naturally the framerate was terrible, but it did quickly prove what I had suspected, which is rendering 200 skinned meshes is a lot more overhead than just processing the physics for 200 Ai players.


 In a player build test without the overhead of debugging, the framerate was 500fps empty, 80fps with 200 characters rendering, and 350fps with 200 characters not rendering but still updating their physics. Not that I would ever consider having 200 Ai players battling it out right in front of the player's camera.

It will be interesting to see what sort of load I put on my processor and gpu if I remove the Ai players when they are nowhere near the player and turn them into scriptable objects who would then approximate their actions using RNG as they move around the map, out of the player/client camera fustrum and view range.

Anyhow, that is all for a later date. I hope you have had a Merry Christmas, and here's to Space Year 2025! 

Happy New Year!

 

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.


Saturday, 31 December 2022

That Was The Year That Was: Space Year 2022

Level 6 Monster Boss, Kareu The Horticulturist

So, annoyingly, I somehow missed November devblog, being the first month missed in 4 years. Bloody Embuggeration!

Not doubt I was otherwise engaged with a number of updates to Monsters Loot Swag on Steam, and trying to get the new level knocked out. This not only had Level 6 and it's monster boss, Kaeru The Horticulturist, as pictured above, but also a final fix of a long running bug issue, the dreaded "Out Of Bounds Index Array" which I had previously narrowed down to some sort of audio issue. And, eventually I had it cornered and trapped, and finally fixed, Audio Emitters had been getting their ghosting out of synch. The simplest solution was to create a delay in turning them off and then deleting them, but this had taken months of investigation.

Literally ALL the printf

 With all the bugs - that I am aware of anyhow - finally vanquished, I could finish off the newest level, finalize the missing portrait artwork for the previous level boss monsters, and get on with expanding the game. I am now on the 9th Early Access update to the game, and the fourth major update.

Level 5 Monster Boss, Lula The Non-Resident Alien

And so that is where we are now, with the game running well and up to speed, waiting for completion of levels 6-10 and the remaining 4 unlockable catgirl cosplayers ... and a few other things such as the Souvenir system I have planned, where boss monsters drop a collectable via RNG with a difficulty setting modifier.

All that and more is planned for the new year, with a final completion of the game between late Spring and early Summer. After this I might code up a melee based combat system for a hack-and-slash-cum-Soulslike to see how that works, before deciding on whether to use that as my next project or the Aeronaut vertical slice I made a year or two back.


Happy New Year, and see you in 2023!



Monday, 31 October 2022

Halloween Horror Space Year 2022

Behold The True Horror This Halloween!

 More terrifying than any cosmic horror dredged from the neurosis of HP Lovecraft ... it's the global debt clock

Okay ... have you recovered from this ghastly Halloween fright? Then we shall continue with October's dev blog.

Finally I discovered the true source of a long running bug. I have spent months slowly chipping away at this bug, narrowing down the source and timing, even fixing the crash and suppressing the Out Of Bounds Array messages. Should have known that it would be an audio emitter issue.😫


 So it turned out that a lot of events happen when a player buy's Swag in Monsters Loot Swag, effects sparkle, audio plays, icons appear, objects spawn, marker objects hide and if there's a lot of other stuff happening at the same time ... and it's a game where there's always a lot of stuff happening at the same time ... the audio emitter can get out of synch when it wants to disable.

The solution was to stop everything from happening in the same engine tick with a simple schedule to make it all happen in order, giving the audio emitter a good half second to turn itself off and make sure it's ghost update of the network doesn't go tits up. Hurray, fixed and understood the cause. 😓

And speaking of audio bugs ... years ago I  noticed that sometimes the audio went ... iffy. It would start going off-key and warble intermittently. Not long before shipping the start of the Early Access game on Steam, I realized that this was caused by the camera being offset from the player location and thus camera and player could end up fighting for who got the audio source, with the sound cutting out if the camera was further away from the audio. At the time I threw in an emergency workaround by making the radius of all audio emitters large enough to swallow the camera.

Eventually I got around to coding a proper solution, use the camera rotation and the player object's location. This took a fair bit of maths as I could not remember which column of the matrix transforms I required to get to mix together ... until help on the Torque Game Engine Discord Server pointed out that there were already helper functions for matrixes and I could just use matrix.getPosition(); in cpp - boy did I feel dumb. 😅

The Takiyasha Ornamental Water Garden - early image

So, I have spent this month working on Level 6 for the next big update ... which I was hoping to have released this week but will probably take longer as I have redesigned the boss monster twice aleady. It's the Takiyasha Ornamental Water Garden and it builds on the environmental hazards which I introduced previously in Level 5. Behold water! Water is an environmental hazard as it slows down both the player and enemy monsters. I have designed the level so that if the player wants to get somewhere fast they're wanting to go through the water, but slow movement and enemy missiles are bad, so the player could decide to stay out of the water and go around it, thus preserving speed and the ability to dodge better.

I've also coded a lava type of liquid which only damages the player - more on that in Level 7.

Level 6 early testing gameplay

Level 6 is the home of the Stone Golems, high DPS, low HP, but very strong, range-based player characters have much lower strength than melee ones and so have a hard time barging them aside, and can easily get surrounded and trapped.

Once I finish up the level boss, Lady  Kaeru The Horticulturist, who is not going to fight you, and her giant champion who is going to fight you, I will be uploading the third big update to Steam, and the Early Access game of Monsters Loot Swag will be around 60% complete.

In the meantime, don't have nightmares! https://worlddebtclocks.com

Wednesday, 31 August 2022

Monsters Loot Swag Steam Release

 

Monsters Loot Swag officially released as an "Early Access" title on Steam, and was immediately drowned under an ocean of gay, furry porn. Such is life. Early Access titles do not have access to Steam's marketing visibility rounds, which are only visible upon full release.

Naturally with any new title release, an emergency hot patch fix was uploaded within the first 24 hours, for a bug which had never happened in any of the previous years of development.

And thankfully was not too difficult to hunt down and squash

 Cue begging emails for free keys, including "pay us money and we'll give you a one word review on Steam's Curator system". lol no. I did send off a few keys via Steam Curator to groups which looked like they might fit the bill.

I did however get some feedback, that players in online multiplayer Co-Op mode wanted a radar so that they could find each other. And there wish was my command! Taking the ghosts from the local connection I could get the locations of the other players and their status, so dead players who need resusitating can be displayed with a different icon from alive players. I made the radar range fairly small, a couple of hundred metres and had players beyond that appear at the edge of the radar so that they are always visible. As the player gets closer the icons fade as they move towards the centre of the radar.

Here's the initial video of that in action, minus the fading.


So we shall continue, gearing up for the first month post release update, which will actually be 2 weeks after launch and thus a smaller update than the ones to come. This smaller update is mostly about some bugfixes and quality of life improvements, as well as the portraits of the Level 2 Monster Boss (above in desktop format), Lapin The Ranger.

Next month will be solely about working towards the first major update.

Thursday, 31 October 2019

Spooky Day: Space Year 2019


It's All Hallows Eve ... want to see something truly terrifying?

http://www.nationaldebtclock.co.uk/

Are you OK? Have you recovered? Take a few deep breaths, I know it was a terrible sight ...

In other news I have mostly been injured ... from doing nothing as usual ...


My neck went, then my shoulder went ... and now my neck has gone again ...



Okidoki, that's enough sniverling - back to the blog ...



I was testing a new binary of the PBRtastic Torque 4.0 version 5.0 build when I noticed many things were amiss. After much wailing and nashing of teeth and complaining to other people at the otherside of the planet that it was everybody elses fault ... I concluded that I was using the wrong branch ...

 Ahem ...

After this I managed to get some PBR catgirl with working transparency on show.

 Ears go up, ears go down ...
 

I also managed to break everything horribly by mistake ... but that just tends to be one of those things I do ... at least this time I knew how I did it so I can avoid doing that again ...


I tried to delete all of the shaders and ended up wiping out the ones which controlled the GUIs in the editor so none of the text would show up. Next time, delete the internal shaders manually ...

I had been planning on doing more on creating a new level featuring an abandoned and overgrown industrial site, but only got as far as stripping high density models down to a more workable poly number.


Pipes, need lots of pipes for industry ...

So, that was the month that was ... which ended up as a bit of a wash-out ... normal service shall hopefully resume November ... which incidentally, is the date in which Blade Runner happens ...


Monday, 29 October 2018

Glowing Golems And The Curious Tale Of The Non-Invertable Bind Shape Matrix

Whilst agonizing over golem design followed by golem re-design, I had a mangled LOD mesh which resulted in a crash. Making a slight change to the mesh and re-exporting fixed the crash, but I also noticed a curious error warning in the console (which probably wasn't related).

bind_shape_matrix in mesh# controller is not invertible (may cause problems with skinning)

 Wut?

 A little bit of digging around the codebase led to these most useful code comments.

   // Some exporters (AutoDesk) generate invalid bind_shape matrices. Warn if
   // the bind_shape_matrix is not invertible.

Wut? 
 
Okay that wasn't very helpful. What would the skinning problem be (I had not noticed any) and how do I fix it for export from Blender3D? Alas, the interwebz were not particularly useful in  determining how to do this, so I started a process of elimination, based on the logic available. Deducing that many of my models were rotated and vastly resized soley using the armature, I eventually found that uncoupling the mesh from the skeleton, and manually editing the mesh to resizing, rotate and align it to the bones cleaned up this error message.

The downside turned out to be how many instances of this error there was. I have so far created a variety of characters which weighed in at ~110 seperate meshes, and 85 of them needed resizing and manually aligning - and as it was the meshes which required directly editing, I couldn't just snap one object to another - which is actually part of what caused the problem in the first place. At least it was an error caught before I got to the end of character creation, but it would have been much less hassle to have found this out at the beginning, possibly with some huge flashing warning than a few red lines in hidden amongst the jumble of text in the console soley during first importation.

Golems, golems a plenty

So this brings us to golems, and the constant redesign of the little blighters. Who would have thought that creating a vaguely humanoid shape out of clay/rock/earth would have been so complicated. The problem was, I didn't really like any of the designs which I came up with, thus creating a whole array of slightly different clay men ensued. Eventaully I went back to my first design and added glowing cracks. Initially I had these cracks animated, first with a pulsing effect which didn't seem to be very obvious, so I changed that to an animated one. This looked quite cool when they were not moving but became rather busy and not particularly obvious with them running about, so in the end I decided to keep the glowing cracks static.

I made a rather interesting spawn animation from which the golems are created from animated rocks gathering together and then fall away to reveal the monster within. It looked quite fancy having it happen over time but this is an action game so the whole thing had to be compressed into one second. Likewise when a golem is slain it collapses into it's constituent parts of rock.

Golems Spawing, pre-glowing cracks

In game, the golem is a small and heavy enemy, best suited to swarming the player. As they are made from earth/rock/stone/etc they are very heavy and cannot be pushed out of the way (at least not by the physically weak gun wielding, range-based default player character). Golem has death in Hebrew written on it's face - not that you can see this at the scale and angle, but hey it does.

I also changed the overall colour scheme of the game, getting rid of the greenish colour and replacing all of the HUD elements and user interface with an old blue colour I liked.

Green out, blue in

And here's  the golem level in action.


So far I have around 70% of enemies for levels done - not including level bosses, and of course there are a number of player characters to yet create and replace that yellow cube. I am leaving those until last as they are all a variation on a theme and will share the same skeletal structure for animation.

Next up is organizing animations and data for attacks for my old "Dimensional Knights".

Soon ...

Saturday, 31 March 2018

Math Is Hard

Apparently ... as our Western cousins like to say ...

Math Is Hard

And sometimes, it actually is.

 I was attempting to redo ... reimagine ... resomethingerother ... my current game's difficulty curve. This proved harder than I was expecting, and resulted in much flagrant use of Post-It Notes(™?).

Here is the issue. 

Cash dropped by defeated enemies increases by enemy lifeforce (not to be confused with Lifeforce, the 1980s UK/US collaboration which featured this hot bird with massive ... tracks of land ...

(insert own joke, image or reference here)


This film is severley underrated ... for scifi reasons ... also boobz ...

 And back to math ... or as us colonial imperialistic types call it ... MATHS.

I had previously devised (with help of arcane magick, alchemy and winged goblins) a perfectly good manner for AI enemies to have less cash as the player progressed. Here is the CRUX of the issue (somewhat appropriate as it is Easter weekend). The player score points on ANYTHING - especially cash transactions. So limiting the available cash to buy SWAG (powerups) in later levels was good ... but also decreased points which were available to be added to the player score.

So obviously I wanted to reverse the points reduction by letting the AI enemy have a fully score ... whilst increasing the cost of buying SWAG by points x levels x f***knowswot. And f***knowswot became an issue. Much mathematics was done - insert your own doge meme here - nah have this one:





Now you'd kinda expect this to be a simple mathematical reversal ... but that didn't happen. Much toil and even more trouble and three times as much bubble occured (note the reference to prove that I am a psuedo-intellectual). Anyhow, eventually, and after using half the world's supply of Post-It Notes I managed a solution


 
Like this but way more vacant in the eyes ... also more crying

 And so I emerged victorious, after destroying all the world's rainforests in little yellow, sticky papers.

Cost of opening SWAG parcels increased in line with AI  enemy's strength. And all was well in the kingdom of ... er ... game dev.

Tune in next month for all that stuff which I promised I would be doing months ago but have still not got round to!

That stuff I said I was going to do next

Wednesday, 21 February 2018

New GamePlay Modes, New Weapons, New Fonts, New Stuff

Whilst contemplating unlockables, the obvious ones being the powerups which have to be unlocked, I turned my attention to differing gameplay modes. These things are sometimes called modifiers or mutagens and change an aspect of how the gameplay works. I came up with five ideas which I considered to be a good balance. I thought I might name them along the lines of "Trial By Whatever", as each one is an additional form of  challenge. I also thought that it might be a good idea to add a bonus score modifier to each one in use, that way if the player unlocked and chose to enable all five challenges, their score would double - thus giving an added incentive for the player to actual use them. Cue bullet point list! Note, gameplay modifier names are works in progress.
  1. Trial By Fun: Everybody drops FunBalls on death. Previously only bosses and certain enemies would drop FunBalls, but with this modifier every deceased enemy does and the original enemies drop double the amount. Expect more dodging!
  2. Trial By Strength: All attacks, whether by the player or the enemy, do critical damage. This is basically a x3 modifier to damage which makes gameplay much faster and increases the player's own vulnerability.
  3. Trial By Chance: Swag parcels full of powerups no longer spawn, instead there is a small percentage chance (based on the actual game difficulty chosen by the player at the main menu) of an enemy dropping a powerup when they are directly attacked by the player. In the proposed multiplayer co-op mode, this could create a rather amusing situation when everyone suddenly dives in to try and grab the swag for themselves.
  4. Trial By Judgement. All enemies spawn as elites. This means that not only do they have a higher capacity to take damage (somewhat negated if Trial By Strength is also enabled) but also carry a special attack of some sort, which are: radiation attack, player seeking missiles, extra health and damage, speed bonus,  electical attack and slow player on touch attack.
  5. Trail By Ordeal. Every 9 minutes or so (not certain of the acutal timings yet) some sort of enemy champion or enemy horde teleport in to harrass the player.
As stated above, unlocking and then enabling each of these challenges adds 20% to the player's score. Enabling them also makes for a much faster and more hectic game as escaping the level becomes much more urgent.

 Collecting a swag powerup dropped by an enemy

Speaking of unlockables, characters came to mind. Characters will come with their own statistics and are auto-equipped with their own weapon and evasion ability. Currently I only have one character, running around as placeholder yellow cube with a pistol and fast but short sprint for their evasion ability. Their standard attack is a single light bullet (damage 10) which has a long range (20m+), and their heavy attack (which uses energy the same as their evasion does, so the player has to wait for the recharge before being able to use either again) is a burst of four heavy bullets (damage 20 x4). Whilst tidying the finite state machines which control weapon states up, I noticed an error which had been around since the time the dinosaurs ruled the earth. Heavy attacks use onAltFire as a function call, but I had them set to the standard stateFire rather than stateAlternateFire, which meant that they were inheriting data from the standard attack. This meant that heavy attack was using particles and audio set for light attack rather than their own. Now heavy attack has a deeper, bassier gunshot and a wider spray of gunbarrel particles. I should have noticed this error much sooner.

Creating a new character I decided on "shotgun" as the weapon. This has a standard attack of solid slug (damage 50) which is much slower than the pistol in firing as it has to be cocked with a nice pump-action sound and also has a shorter range (12m). To compensate the damage is much higher. The heavy attack is a close range (5m) scatter shot, which hits all targets within a 90 degree angle (damage 20). The special evade for Shotgun is what I have called a "Ghost Run" - the ability to run through enemies for a few seconds to escape.

"Ghost Run" took some doing, as I had never had cause to go hunting around the collision code which was spread through numerous files of the engine. So what I wanted was to find out where I could extract the collision object's type (eg: AI enemies are derived from Player Class so I only wanted playerObjects) and then make a test against the class on whether this object should be ignored.

Of course it was not that simple ...



A few days and according to Windows Event Viewer, 80 crashes later, I realized that the whole thing was a lot simpler than I had originally envisioned. I created a new customCollisionMask for the Player class which emitted PlayerObjects and then made the test under the Player class's own workingCollisionList. If "Ghost Run" was enabled via a bool flag, and the object was derived from Player class then it used the customCollisionMask to ignore new playerObjects. Another bool flag issued when the state of Ghost Run changed which then renewed the workingCollisionList to remove that playerObject if it had already been added to the list, or readd it to the list if it was the last collision ignored before Ghost Run was deactivated. I felt like a coding god, regardless of having spent the previous week looking in entirely the wrong files.

I should probably read this, but to be honest my style is to make it up as I go ...

So now I had a working second character. Apart from obvious difference such as attacks and abilities I decided that characters should also have a unique strength attribute when colliding with enemies (or other players). This would be useful for barging their way past opponents. Strength should be relative to their own suited range, thus long range based characters would have a low value whilst short ranged, melee based characters would be high.

Shotgun is a medium ranged character so can push similar sized enemies around by banging into them. Pistol is a long range based character so now finds it difficult to physcially move enemies and is much more vulnerable to get swarmed at close range. However Pistol has a sprint evasion which quadruples speed and triples the force of pushing enemies, though this only lasts for a couple of seconds as energy drains away.

Shotgun in action, with Gradius Style Option/Follower trailing behind 
 
I also started thinking more about the overall look of the player's screen and HUD, and how to display information best with text. Thus began the GREAT FONT HUNT! If there is one thing which can be equated to slogging through an parched wasteland of spikey rocks, it's trying to find fonts for your game. I have a preference for condensed fonts, I think they look elegant, but elegant and easily readable with a quick glance are not always the same thing.

This looked great until I added it the actual HUD ...

 There's thin and difficult to read and then there is this ...

 Yeah, but no but really no ...

Argh my eyes ...

 One of the great problems with staring at millions of fonts is that they all end up looking the same. Currently I have this below, but found that the numbers are a little too close together. Using a font editor I managed to give them a little bit more spacing. Cue the first image in this blog being reused.


Hello it's the first image in this blog again

So that's progress. Next up are to make more characters with various abilities and give them a thorough testing for balance. After that come up with a definitive list of enemies and environments for levels, and then hopefully finally start on some model designs to chip away at all these placeholder cubes. Also somewhere on the horizon is ditching DirectX 9.0c and updating to Physical Based Rendering ... whatever the hell that is ...