Showing posts with label gui. Show all posts
Showing posts with label gui. Show all posts

Tuesday, 30 June 2026

User Ergonomics 2026

Cute Feet

 Flaming June was particularly flaming, at least that's what the troglodytes of the MSM would want us to believe. At one point I found my father wearing a Christmas Jumper in the hope of staving off hypothermia ... admittedly that was only a single and abbarent occaision, and it has mostly been "PIGGING HOT".

So, ignoring straining CPU/GPU fans, we have still been productive on the development front.

This has mostly been about a continuation of enlistment with the AI raiding parties, and interfacing information of what the hecking doolalies the NPC are doing, so the player does not feel random embafflement as they just follow the Ai around blindly.

 This has all been part of upgrading the ergonomics, aka user comfort, of having an actual human bean, interfacing with the whole game environment, and not expecting them to be telepathic as to what my actual intentions were when designing the game. This has naturally been more of pain in the bottom than expected, and taken longer than desired due to faffing with GUIs.

There has also been some faffing with testing engine upgrades, due to Sony, that massive billion dollarooney corporation having created the model format the game engine relies on, somewhat ignoring it's own creation over the years, leading to Blender 3D dropping the exporter plugin recently. This has resulted in FBX becoming the dominant format, and a whole lot of engine rewriting to make certain that it actually works as intended.


 So after a month of mostly record breaking sweatiness, interspaced with a small period of freezing bloody cold, we have come to the stage of having to create the final parts of the User Interface, so the squidgy human (at least we hope it's going to be human but you can't tell these days) can actually get the game to work as the designer intended.

Next up, some branding images, and the long processes of a Steam submission, hoping that I have remembered all of the things required to pass said Steam submission process. 

Thursday, 30 April 2026

Classic RPG Inventory For Classic RPG Attributes

 A little difficult to have a game that heavily features looting - without having an inventory to buy, sell, upgrade and equip that loot! So the last month has been mostly spent making an interactive inventory system.

The system is fairly simple, sell loot at campfires for XP, then upgrade your stats so that you can equip and wear better combinations of the weapons and armour that you have looted!

The game features a rather classic RPG attributes system of STR, DEX, CON, etc as well as two career paths, of High Knight Noble and Low Knight Errant, which increase the player's wearable AP stat. The High Path costs more XP whilst increasing Rage Bar buffs - when critical strikes in battle negate enemy defence and massively increase damage - whilst the Low Path allows for quicker AP increases for far less Rage buffing. No more running about in your underpants once you unlock an armour type.

STR and DEX stats allow ever increasing weapon equipment, whilst CON is HP and STA allows for more sprinting, dodging, jumping, and heavy attacks. There is also ATH(letics) for faster running and further jumping and dodging. All very classic RPG style statistics and behaviours that any gamer (video or tabletop) would recognize - to the extent that I've only used the 3 letter abbreviations for the names (except ATHlectics which could equally be called AGIlity).

Whilst I might keep saying "simple" in this blogpost, actually getting the inventory working was a huge mix of trial and error (especially with gamepad only usage) and took the whole month of development.

And here it is in video action!


 With the player now able to loot and gain XP from it, and spend that XP to enhance and equip their character, the next big development milestone is to allow interaction with the NPC warbands. Whilst the various factions happily play the game all by themselves that is not particularly interesting for the squidgy humanoid sat behind the screen - so next up is making friends and enemies of the roaming NPC raiders! And after that, it's sorting out a page on the Steam Store for early access release! (which looks like it will be after the summer sale with the vetting time).

Wednesday, 31 July 2024

More Third Person Melee Mayhem

Finally, summer has arrived in the dreary part of grim northern climes, though July started as June ended, with weather best described as "crap", and a sudden return to wearing jumpers.

Game development-wise things have continued much as before, with the vast majority of effort being aimed at the third person melee project demo.

I had long wondered what the best way of getting different clothing and armours onto a model would be. Many moons ago there was a turn-based RPG there was a post-apocalyptic neo-Roman game ... who's name escapes me ... and they literally had to load every piece of armour that the player could wear onto a single model and use the "hide/unhide" commands. 

Well many moons on from this and it looks like the only way to accomplish such things appears to be in the same manner, as you cannot just mount meshes and have them conform to the character's skeleton and mesh weight painting. Deciding that making a single model with EVERY PIECE OF CLOTHING that could ever be considered was not a great method for potential later updates, I delved into the engine to see how best this could be accomplished with code and script. The answer was to add a list of meshes to the character model's constructor, though this did mean it all had to be done at preload and was thus impossible on the fly, so once again, we are back to "hide/unhide" commands. However, at least this way it could be automated to search for all available meshes (and their LODs, which have to be added seperately per mesh), rather than sticking it all in the model and never being able to change it later.

Behold The Hat Of The Ages!

The Shape Constuctor code for adding meshes was somewhat out of date and relied on directory locations, so I updated it to deal with the engine's asset system. I'm thinking it would be best to have a function look for all relevant assets - probably from a folder naming system - and then add them all at runtime preload to the character mesh, followed by immediately hiding the added meshes and then only displaying them on the model when specifically called for; eg: when the player slects clothing or armour. I am not currently certain what the limitations on numbers of meshes would be this way.

Orientated Box Outline In WorldSpace

 Speaking of coding, it took long enough to get my custom code and the debug drawer to agree exactly how an oriented box works in world space. I had an idea for testing for blocking and parrying by using the actual strike/bounds box of an object, except weapons are not actually objects at all but are virtual due to the FSM system. After some testing I decided it was going to be difficult enough to make a successful parry this way and will probably go down the Dark Souls route of using animation frame timings - though unlike Elden Ring, I very much want to avoid this being tested on the client side as that appears to highly exploitable to hacks.


 Whilst I had coded a lock-on target system a few years earlier, in practise at melee attacks it was not always easy to actually strike the target, regardless of it being screen centre, and quite often I could miss and my strikes would go just wide. I decided to code a toggleable "face target" system, thus allowing the player to decide whether they wanted to absolutely aim for the enemy at the loss of movement speed due to circling side to side or backing away.

This worked fine but seeing the player spin in place to face the opponent seemed very 20 years ago, so I went back into the animation system and coded a speeded up sidestep when doing it.

Artifacting gif is artifacting ...

Whilst adding things to the lock-on system, I thought it might help to distinguish which target it was by having a health or status icon. I started off with a health bar over the target that reduced in size the further away, eventual throwing the lock-on off if the target was too far away. After this I thought I might create a central lock-on icon, for instance Elden Ring has a tiny white dot at the centerpoint of the target. I found this and the opponent health bar to be a little too busy on screen, so made the central icon a circle which changed colour depending on the target's health.

Whilst testing lock-on I discovered an issue with my original code from a few years back, I had always tested it with the player moving around the target, but not the target moving. This turned out to cause some nasty jitter due to the client being a tick behind the server. Rather than mess around in the depths of prediction I just took some old "target heading and velocity aimpoint" code from my old Aeronauticals air combat demo, and retrofitted it to have the client look 0.064 ahead, 1 server tick and 1 extra tick for the client being an engine tick behind. I added this code to my resource on the Torque3D website and slightly rewrote some of the original lock-on code to make sure that everything was using the render transforms that the client was seeing rather than the actual server positions of objects, something which I had previously noted in code about displaying names above objects whilst looking into coding the health bar for the target.

In other news some muppet crashed half the world's computers and offered discount pizza as way of apology. It turned out at some point other computer systems had been updated too, and Monsters Loot Swag no longer worked on Linux due to changes with Wine and so the DirectX driver needed updating ... but apparently no one mentions these things and you just have to use The Force to find out. Turns out there was a slightly larger D3dCompiler47.dll which needed to replace the slightly smaller one. Monsters Loot Swag now once more works on SteamDeck.

And that was pretty much July, numerous other things happened which I cannot remember, I got a tan when summer eventually arrived because you just don't know when the free vitamin D is going to disappear around here. After months of drowning in a seemingly perpetual deluge of rain, I am back to hoping for some wet stuff coming out of the sky as my water barrels are empty and the veg patch is parched.

Next month is the 10th anniversary of Airship Dragoon being on Steam. I thought about maybe doing "something" but the models were all exported using a system which doesn't exist anymore (pre-Collada), so anything new would not be compatible with older animations ... which is a bit of a bummer. The past is a foreign place where they do things differently ... so I think I will just let sleeping dogs lie on that one.

Sunday, 31 July 2022

Preparing For Release

This is a bunny. This bunny rides dinosaurs.

 So I have spent the month gearing up for Steam release ... which ended up with me failing Valve's build review. Part of this was due to the testers not realising that the player hosts games on their own box, whilst they had expected online dedicated servers ... and if their testers had not realized that, then I surmised players would also be likely to make the same mistake, and so I changed the whole multiplayer selection screens to be more obvious, state exactly how online play works and also tell them to unblock port 28000 on their router if they are hosting.

Resubmitting the build review I realised that time was ticking on, and with it taking around a week to get feedback, I moved the date of release back. It is now Thursday 18th August. Thankfully my build passed review once I had made a few more corrections based on Valve's feedback.

This is the dinosaur the bunny rides

 I had been working on boss monsters, level two has a bunny riding a dinosaur, level 3 has a sailor driving a mechanical spider called Mecha-Boris.

You can't stop Mecha-Boris!

Stop Boris was a game with a lightgun and spider when I was a kid. The advert was awesome and it's a shame I can't find it on the internet. Here's someone playing it though.

 Due to a deprived childhood I never had Stop Boris and this has led me to become the broken shadow of a man that you see before me. That and the PlayPeople(Mobil) Operating Theatre which I always wanted to finish off my hospital collection. From then on spiders were always known as Borises. The Who had a song called Boris The Spider.


 I also got footsteps and dust emitters working, finding some broken code that would lead to a crash to desktop if the emitter was invalid. Probably been there for 10 years. A quick check for nullptr fixed that and it got sent to someone who can actually use github to upload to the engine's master head build.

Insert Coins - now with added insert coins

A tester had mentioned that they had been unaware of how to trigger the exit node to spawn the level boss due to the GUI being transparent and a lot of action happening on screen, so I made the above GUI to make sure that players can actual see it.

Catgirl Golfgirl

Playable cosplay character four is a golfgirl. Everybody likes golf, except me who was around 40 over par on the crazy putting golf round the back of the pub.

Monsters Loot Swag releases Thursday 18th August 2022 - in the meantime here's a video of Mecha-Boris before I added dust puffs to movement.





Saturday, 30 April 2022

The Steam Upload And What Was I Thinking When I Wrote This Steam Stats System

 Monsters Loot Swag is on Steam and available for wishlisting here.

So, after a few months of testing off Steam, I have uploaded a build to a Steam depot ... and then immediately started to fix everything that didn't work ...

Who's Best Girl? You're Best Girl! If you don't get ganked ...

 Primary here was the minor issue that to finalize the build I had encoded the script files - and that my own script reading function only dealt with unencoded script files ... this could have been forseen but because it has been so long since I shipped a game to Steam *** 26th August 2014 *** I had forgotten about this sort of thing ... What I hadn't forgotten about was my system for storing Steam Stats.

This May Have Explained My Overly Convoluted System ...

Overly convoluted seems a little weak ... even reading through my own code comments it is best described as baffling. I clearly wanted a system which saved as much as possible on server calls but this was truly was absolute gibberish even if, most terrifyingly of all, it worked. All the same, it still had to be rewritten to make the whole thing readable again.

How Much!??!?!

Something else which I had overlooked was size - and in particular the minor issue that I had completely forgotten to trim my master files for things like artwork and audio. After some careful pruning the required HD space dropped to around a single gigabyte.

Steam Cloud save system is also fully up and running, and the Swag unlocks recorder fully functioning and integrated with User Interface so that the player can look through what Swags and Power-Ups that they have unlocked at a more leisurely pace, outside of the frenetic nature of the game.


As ever, there has been mountains more of work, but I can never seem to remember it all when it comes to the month blog write.

Monsters Loot Swag has been accepted for Steam NextFest, the forthcoming showcase of indie games on Steam, which runs from the 13th-20th of June, so look out the freely available demo coming at the end of May. So that's the next major job.

Thursday, 31 March 2022

Players Can Interface With The Interface Part Deux

 March comes to an end ... with me starting a blog in the same manner as February, whinging about the weather ...

I had hoped to bravely remove the winter duvet but I got snowed and hailed on earlier and the wind is coming directly from the Artic. The winter duvet is staying in place.

Behold Stats!

What Does What

Other things which can be construed as mildly irritating is the amount of time I have spent making the Game User Interface, actually useable to the game user ...

As ever, whatever part of indiedev appears somewhat straight forwards suddenly become incredibly convoluted and the gamepad useable menu system has been just this. This included making a brand new input system for button selection that uses both vertical and horizontal selection, including uneven rows and columns.

Blast Monsters

 The statistics were not such a problem as setting out the tutorial in a way that the player could easily digest. Highlighting individual HUD elements seemed the best way of doing this and giving a brief explanation of what the player was seeing in game with any key/button related actions to that element, based on the player's currently selected input type. Now there are some stock engine ways of doing this but instead I wrote my own so all button selection goes through a custom input script.

Win Loot

 This useful and problematic in it's own manner, especially with the input system losing focus if you tabbed out or opened the console, but did give immediate response for sudden changes of input. I wrote my own custom key/input remapping system.

 

Get Swag!

So after a monumental kerfufle, the userable user interface is finally useable by people who are not me and do not know what everything does or means.

Next up is actually getting a build uploaded to Steam.


Monday, 28 February 2022

Players Can Interface With The Interface

February comes to an end. February, a month when the weather is so bad that it was shortened, so it would end quicker. The fence blew down, I got soaking wet and snowed on.

Anyhoo, that is enough of Johnny Britisher's favourite past-time of whinging about the weather.

Whilst the actual gameplay of the game has been working fine for years - the actual getting to and from said gameplay has been a bit of an unreadable mess. It has long been a spaghetti of various and conflicting buttons for starting a new game and hidden console commands for loading saved data.

 First screen when starting a game gives the player the opportunity to load a saved game - if there is one. This gives basic information about the saved file such as the player's previously chosen character, level progress and difficulty. It also displays the character portrait and the portrait of the level boss. If either of these cannot be found it defaults to showing the "unknown" portrait, which is a tentacle who's shape resembles a question mark.

  Starting a new game allows the player to first chose difficulty - which still requires some artwork for the settings - and then moves to the character selection screen. In the stock game there will eventually be a choice of 8 cosplays to dress you catgirl up in, each with their own stats and ability displayed. At initial release there will be 4.


This is "Sunrise", she likes walks on the beach, drinking cocktails and large calibre handguns. She is a range-based class with medium maneuverability, low strength (for pushing monsters out the way) and her evasion is a simple speed boost. Bonus points if you can name the movie this character references.

This is "Southern Hospitality" - because I don't want suing by some US drinks corporation. She likes riding through mud, drinking bourbon and blasting gators with a sawn-off. She is slower rate of fire but high damage, mixed range class, with medium maneuverability, medium strength for shoving, and an evasion which allows her to both vanish and run through monsters to escape.

And here is what it all looks like in action on video:


So, that was the shortened and rather soggy month of February 2022, were I made the interfaces for getting the game to actual work to be player friendly. There's still a few things to finish off like extending this to settings and adding statistics button to the Main Menu screen, but things are at least working quite nicely now.

Saturday, 31 July 2021

Selection Screen: Aircraft and Insignia

 What's a plane game without a pre-mission briefing and selection screen? Lacking that's what. So here it is.

Choose Your Fighter! Literally in this case ...

Here is where you get to choose stuff for the forthcoming mission. The overview screen is where the menu is, as well as a reminder of the mission objectives and the important specifications of the currently chosen aircraft, which boils down to maximum level speed, stall speed, and at what speed the ailerons completely lock-up and you wish you weren't in a 90 degree vertical dive whilst holding down the turbo button.

The aircraft selection screen details all pertinent statistics of the aircraft, displayed as a percentage bar based on the min-max of all other aircraft; 

(range max - range min) * (value - min value) / (max value - min value) + range min = percentage

All except, that is, for Lock Start which is based on percentage of Max Speed, and Lock End which is based on Max Speed * 2.

The Fastest Paint Job Changes In The West

The Insignia screen is where the player can choose their aircraft skin. I was going to call it Paint Job but insignia seemed more fitting. In fact I had a good trawl through the thesaurus for flag, badge and logo before deciding on insignia.

Any skin which can be carried over to other aircraft will be added to newly selected aircraft back in the Aircraft Selection Screen, or default to Dazzle Camo if not.

I am splitting aircraft up into distinct roles (fighter, interceptor, striker/bomber) which have differing effects for lock-up, turbo (WEP; War Emergency Power), stall turns, etc, and am naming these after cavalry units.

So, still to do for the pre-mission screen;

  • Create a Briefing overview where the player can select which aircraft they want to conduct the mission as. Different wings of aircraft will have different roles as mentioned above. Really hate escorting strike aircraft to attack a target? No problem, fly the strike aircraft and have the Ai do the escort mission. This style of play also lends itself rather well to online multiplayer co-op mode.
  • Create a Payload Selection screen that allows aircraft that have external hardpoints to fit bombs and rockets. Also need to create a system for the use of bombs and rockets, as we only have primary and secondary guns coded at the moment.
  • Integrate all of the player choices into the actual mission when it starts.

And here is the whole thing as it currently stands in video. There are three aircraft and about ten skins each.


And that was the month that was. It started with me in shorts getting sunburnt and has ended with me soaked to the skin and wearing a jumper. Classic British summer.

Monday, 31 August 2020

Character Selection Screen

So I've knocked up a character selection screen that, currently is rather devoid of any art work. It's failry simple, uses an array which the player can flick through, each character (currently a whole 2) then display an image of the character (which is currently a placeholder) and more importantly a series of statistics relating to the character at the side. These include the basics such as speed of movement, health and energy replenishment and strength for pushing enemies aside. This is followed by the 3 types of attack and evade, and their relevant statistics, so the player can move through character selection and view the differing statistics for comparison.

I have since changed the buttons to something less awful using a bitmap array and text.

Having finally dispensed with DirectX 9.0c in favour of DX11 and OpenGL, I set about converting some of my custom shaders with ... not particular success.

Yeah, I'm pretty sure that isn't supposed to look like that ... This appears to have something to do with hardware skinning being controlled by the GPU when previously it was the CPU. As this only affects a few things I have come up with some workarounds for the fancy custom materials and will come back to this at a later date.

I've also had more of a play around with my XP-Pen display tablet and started to become familiar with the artist app Krita. I am planning on using this for the 2D art in game, and especially the selection screen for character portraits.

Drawing of an old oil painting I did some time years ago.


I also thought about reworking the artwork for Airship Dragoon, and knocked up a colour sketch idea for composition. Might not actually replace the original artwork but could use a new one for Steam's new capsule formats for updates - then again I could go the whole hog and use it for complete new rebranding.
 

I also did a whole load more stuff this month but can't actually remember what it was ...
 
Anyhow, onwards and upwards ...

Sunday, 30 June 2019

Assimp Does Magic Stuff And I Get Distracted

This was a bit of a surprise.

 That says Blend file that does

Whilst playing around and looking for bugs in the latest beta of open sourced Torque3D game engine, I accidentally imported a BLEND file from free open source(ish) Blender3D modelling program. Obviously this by accident, because I would never have thought that it would work.

I had found some ripped game models and other sculpts (see Tifa above) and was looking at them in Blender3D for modelling reference. I had experimented with various export options and was loading them into the engine when I accidentally double clicked the Blend file rather than the exported DAE file. Et voila, it actually loaded with all materials correctly mapped.

This is due to the new Assimp importer which appears to be able to read pretty much anything and import it because magic.

Literally my understand of how Assimp works ...

Assimp also comes with a metric ton of options - none of which I really understand so I just kept using the defaults except for maybe rotating the up axis to Z when needed - and it kept importing models fine as long as I had multiple mesh objects set to be read as a single sized LOD.

When the Beat-Em Up waifus are extra thicc

I had tried various other model formats and found FBX and BLEND to be the easiest at automagically loading the corrects textures into the material slots. Amusingly - or not as the case may be - the original DAE importer was the worst and created the most hassle. Not all the models I had found on the internets had their textures setup for a standard PBR material, hence the rather off colour Chunners.

DAE->OBJ->FBX->BLEND

I had also seen someone using the normals editing tool in Blender in a way that I had not thought of before. For foliage and tree leaves they had placed the mesh inside of a huge sphere object and then targeted it. This made the leaf faces orient outwards to the nearest sphere point. For my current project all leaf and foliage mesh faces are orientated nearly vertically upwards, targeting a node high above, because that's pretty much where the player's camera is for a top-down perspective.

No normal editing target->Vertical target->Spherical target

Did I mention distraction? Yes I did. I had been harassed by "The Idea Fairy" and suddenly had the urge to make a Dieselpunk Ace Combat style game. I ended up writing up a design document and fairly in depth statistics of how the whole thing would play, utilising real world 1930s and 1940s aircraft. I imagined it would play rather like the old Freespace space combat simulator, only in high altitude clouds rather than space. Aircraft would ... well, aircraft, and airships would make up an equivalent of a real world navy. I also ended up playing through Freespace 2 and the original Freespace mod for it. For the first time ever, I have a state of the art gaming PC and use it for playing 20 year old games.

This thing needs keeping on a short leash ...

So that was the distraction that stymied this month's progress. I did however get some work done on the current project, the one that I am supposed to be working on, by transferring some heavily used scripts for targeting to C++ code to take a bit of weight off the processor when they are called so often. I also added went mad for statistics and added rankings for player performance on to the already percentaged data. I went for the Japanese obsession with S which may or may not mean SPECIAL, so the highest rank is SSS, SS, S before getting into a more standard alphabetical descent, and it goes down all the way to F for FAILED MISERABLY.

Yo Dawg I heard you like Statistics ...

Of course the real reason I did all of this stuff was simply to avoid having to model 3D hair because it's boring. Yep, that was it. An entire month of obfuscation to not doing something that is time consuming and dull. I also got poisoned with a chemical gas leak for two weeks having had an engineer out to investigate a gas leak, then getting a methane detector thinking that it was a gas buildup in the drains before eventually finding the source leaking out of a vat, and I was also immobilised with a back injury for another week, which was caused by just bending over the sink. So not a great month in general.

Next month, getting back to what I should have been doing this month ... allegedly ...

Friday, 28 September 2018

Jugular Spurtiness, Engineered Brutes And Boolean Modifiers

Scorching heatwaves have faded into Autumn and the oversized fan I went to so much trouble to get hold of is now packed badly into it's box. At one point I was swarmed by the "Idea Fairy" for other game ideas.

Actually footage of me defending myself from new game ideas

Back on the gamedev front, I added GUI markers to the interface for when the player gets a temporary boost or decline. Previously such events were heralded with an informative element saying what had just happened and how long it would last for, but there was no actual timed element to let the player know whether it was still on-going or had stopped. I decided to change that with a simple "up arrow" icon for boosts next to Experience, Health, Energy and a "running man up/down arrow" for temporary speed changes. Once the temporary change is over, the icon vanishes. Having a speed boost also now protects the player from slowing attacks.

Boosts!
I also gorified the decapitations. Not only do head explode and blood splatter but now jugular veins spurt and throw extra splatter on to the ground near the neck when the corpse finally comes to a halt.

Boom! Headshot!

A long time ago in a galaxy far, far away I had coded some custom homing missiles. However they would cause a crash if their target was deleted - even though I had told them to reset and lose height if there was no target.The hacky workaround was simply not to have any deceased target permenantly delete faster than the lifespan of a missile. Recently I realized that I had failed to add a "isProperlyRemoved" for the target deletion check, and this fixed the crash.

Getting on with modeling and coding new enemies, I eventually found that Blender 3D has a csg style tool called "Boolean Modifier". This can slice, delete and merge two different meshes. Annoyingly I found all of this information out after I had been doing the whole thing manually ... (insert autistic screeching here).

 Nobody Cared Who I Was Until I Put On The Mask ... and then beat the player to death ...

Previously I had modeled a plasma-rifle wielding alien based on the old Manits Man character, and named it the "Kralmok Warrior" after the name of the weapon it carried. This enemy has now been renamed again as the "Hive Warriror" - which is a little easier to say, never mind spell as I found "Kramlok" appearing in my code quite often. The Hive Warrior is a level 5 enemy and is now accompanied by an Engineered Brute.

Brutes with a Hive Warrior and a human sized zombie for scale

The "Engineered Brute" is a genetically engineered ... er ... brute. A large and relentless enemy with a melee attack which whilst slow, recovers quickly. They are the sort of solid enemy which the player will find difficult to push out the way, especially the default ranged weapon (gun) based player character. It spawns by teleporting in just like the Hive Warrior and gives out a gutteral snarl to announce it's entrance in overly dramatic style.

Dramatic Entrance Is Dramatic

Now that I am at testing level 5 enemies all together I realised that I had not created an easy function for this and instead would have to play through the other levels first. Which is fine apart from the time taken - unless I get chomped on by giant spiders in level 3 and it's all game over and start again. To rememdy this I coded a little function which starts the game at the desired level with the player upgraded through typical experience leveling and powerup collections from previous levels.

My Face When I Didn't Do This Earlier ... 

10 whole minutes of testing combat against Level 5 enemies. I got pwned in the 10th minute and never escaped the level.


So, that was the month that was. I fixed and tweaked loads of stuff, got level 5's enemies modeled, animated and working, and found a whole new and easier workflow inside Blender for modeling.

Saturday, 27 January 2018

Welcome To Space Year 2018 - Now With More Catgirls And FunBalls

We are so into the future, and it is only another 2 years until the Tokyo Olympics. I can't wait.

Soon ... (ish)

And so to the New Year, which began with great productivity (once the hangover wore off) and "Dry January" commenced. More on that later.

First up was going back over some old ground and changing things ... which to be honest, appears to be 90% of what consumes my development time. I had used a small number of open source/creative commons/CC0/CC-BY images. I ended up stripping these out and replacing them with custom imagery. The most used one was of a cat, which was changed to be a tiger.


I dropped the sole icon I was using from http://game-icons.net/ (a really useful resource) and replaced it with my own custom one. This had been for the "Tough Skin" powerup, which during playtesting I had thought was underpowered for a rare item and so doubled the amount of damage it stopped from 10 to 20 percent.

 
"Tough Skin" Rare Powerup, Now With Less Gauntlet And More Catgirl 

The overall layout of the player's interface/HUD went through another iteration, and a skull was added to the kill/gore gauge which fills up and changes colour until it completes level 4 and a Momento Mori is triggered. Upon this the player becomes invincible for 60 seconds and scoring multiplies by 8  (that's the old 4/8, death/wealth for the Far East), and all attacks now deal critical damage to enemies.

 Object which mounts to the player to signify that the Momento Mori has been activated, and they are now Shinigami, God of Death.

Kinda like this guy but you have to make your own atatatatatatatata sound

I also altered the textures for the Gradius style followers which can be picked up and upgraded via powerups, giving them each a little sheen which passes over them. They are little weapon platforms which follow the player around and increase firepower. I spent a while in the depths of C++ changing their start/stop movement to make them move much smoother than they had before.

I am most proud about getting this gif to loop seamlessly :P

One thing I noticed about collecting offensive and defensive powerups is that there could be a disconnect between the information displayed to the player and what the actual effect is. This is because special attack and defend abilities are triggered using an RNG. The more abilities the player has, the greater chance of an activation. However this doesn't mean that the last powerup will trigger next, so I changed that so that it always triggers on the next attack or defence - thus giving the player a clear idea of the ability of the object which they just picked up.

Collect "Magic Bullet" offensive powerup, immediately see it used on your next attack

And so onto FUNBALLS. If the esoteric words "RoR, /v/, Git Gud and Host When?" mean anything to you, then this should give an inclining as to what comes next.

This is a FunBall. You can tell it's a FunBall due to the word "FUN" written on it and it's murderous grin 

FunBalls are fun - okay, they're not really, they're bombs which some enemies will drop. I also intend to create an unlockable challenge mode when everything will drop FunBalls upon death.

I am using a slightly basic collision and physics system (hello rigidBody) for speed and convenience. FunBalls didn't look very good as standard objects due to sudden rotation changes when they bounced. To combat this I made the object a billboard so that it always faces the camera and used a scrolling texture to give the illusion of smooth, spinning movement. I then created four variations, leaving one central and rotating the others (off-left, off-right and upside down) so that when a number of FunBalls burst from a deceased enemy, they have plenty of variation but the player can always see the grin at some angle.


FunBalls in action! Audio has since been changed.

And upon all of this, there have been numerous little tweaks and changes to how things work, as well as much planning on the data of enemy types as the levels progress (though everyone is still a placeholder cube right now).

Did I mention "Dry January"? My performance at darts really suffered so halfway through the month this kinda happened ... 


Next up, more sorting out data and attack types for enemies, and some considerable reading up on this new fangled thing called PBR.