It's the end of the year highlights show - which I am fairly certain no one likes. So first, here's what happened in December.
I got PTSD from Christmas shopping. Shopping is a terrible thing at any time of year but when the entire country is in panic mode over a certain approaching date this gets amplified even more.
I put on half a stone (that's 7lb or 45grams in new money) in 4 days, and the amount of nibbles that I still have lying around doesn't look like it's going away anytime soon.
I got back into modeling - you know, that thing that I am actually supposed to be doing - and created an animation for the defensive airstrike powerup.
And here's a video of it all in action. It's a defensive powerup so it has a chance to be triggered whenever the player takes damage.
So onto the boring recap.
With the addition of tentacles, I finally completed all the basic enemies and their various special attacks, finally relegating the need for the red placeholder cube enemies which had been the standard for x years too many.
Levels started to get designed (I am about half way through them) and the flat grid world was finally relegated to history.
I eventually upgraded to the latest version of Blender 2.8, after having previously been using the 2007 version which I had found more than adequate for the last 12 years - read as; I don't like unnecessary change for it seems to be a right old faff around.
This change was partially enforced as it deleted another Blender version 2.7 I used for editing normals when v2.8 installed and then it was a simple case of "oh bugger, no going back now".
Thus I was forced by circumstance and the slings and arrows of outrageous fortune to get with the 21st century and learn how to export models and animations anew.
The good thing about upgrading to the latest version of Blender was that PBR suddenly became available, though it was another thing to learn on-top of everything else. Whilst I work on PBR related materials and design, my main test engine is still Dx9.0c for the time being, but will be updated later to brand new fancy Physically Based Rendering capable Dx11.
Ears go up ...
Ears go down ...
Placeholder Player yellow cube was also retired, and replaced with what will hopefully be the first of several playable characters. It's GunGirl, leggy catgirl strapped into a propeller driven harness.
I made a start on boss monsters for each level.
And that was the year that was. Somehow doesn't seem enough. Progress continues next year.
I've made one ...
tl;dr Some things happened, something didn't.
So onwards and upwards. Can't wait for the Olympics next year.
If you want to be pedantic, it's actually a rectangle.
And here's it's replacement going all John Woo/Chow Yung Fat/Revy with dual wielding pistols.
Ooooh looks gamey!
But first to Blender3D 2.8. It's the newest version of Blender3D with a whole host of changes - like inverting mouse buttons for selection ... which is gonna take some getting used to after 15 years of it being the other way ...
However it did have a new addon I wanted to test out, an addon for generating LODs (level of detail) for my high poly mesh by creating retopology of the mesh automatically. What I wasn't expecting was for the new Blender 2.8 to hunt down and retire my older version of 2.78c which was in a totally different directory location.
So it turned out to be time to learn the new Blender whether I really wanted to or not ...
This was going to happen anyway due to the new Blender being all PBR and stuff ... it's just that I wanted to worry about that later, but now I had to worry about that now. The first problem was ... well ... PBR, and the fact that no materials or textures would render without creating some sort of spaghetti of virtual nodes - and this was just to get textures to show up on the model. And of course PBR textures won't render without both roughness and metal values.
Spagbol junction in the left pane, just to make textures visible in the right ...
Catchick hanging with the TripleA Thicc Squad in PBR land
Which is when I found out that transparency was broken and filed an issue report on the code repository, github ... by which I mean I whined in the discord server to the power's that be, because github is my mortal enemy for reasons of never having been able to successfully create a working pull request that didn't get rejected ...
So, back to that auto-retopology LOD generator I wanted to test. It's called Game Asset Generator and is looks like a pretty nice piece of kit. I had a model with around 27K triangles and beefed it up to a completely ridiculous 440K using some catfish-bob subsurfing (or whatever the hell it's called).
From "USE ALL THE TRIANGLES!!!!" to "use a more reasonable number of triangles in one simple click ...
The real down side to it was that it completely mangles the original UV maps into one horrible mess, and these were something which I wanted to try and preserve.
Whisky Tango Foxtrot on the left, as opposed to the original on the right
Now this is why people go about the arduous and rather boring process of manually retopology on high resolution meshes. But I want some sort of quick fix and my cake and eating that cake and still having cake, so I set about a cunning plan and broke the model up into separate sections based on the UV island layout, before automagically creating a lower topology. I then checked that the seams were still intact and adding new ones if they were not and recreated an approximation of the UV map, stitched all the parts together again and finally baked the textures from the original high poly mesh. Whew ...
And that all worked quite nicely. It wasn't "quite" as automated as I would have liked, and wasn't "quite" as good at retaining mesh loops as I had hoped for, but it did work. Having said that perhaps taking the extra time to manually retopology the high poly mesh into a lower poly mesh may be worth it ...
Next up was to rig the whole model with an armature for animation, and export as we would normally via the COLLADA exporter. Except the new Blender3D 2.8's COLLADA exporter has a whole range of new and completely undocumented options. So, in usual fashion I just went and dived in testing what worked and what didn't.
Nope
Nah
Eventually I got a rigged armature exported. It turned out it didn't like being parented to the actual skeleton directly and could pick it all up via the armature modifier. Now for animations!
Dancing on ice? Close but no banana as far as a nice clean export goes ...
To successfully export an animated model required making disabling exporting of all actions and relying on keyframes only, whilst keeping bind info and sorting objects by name to prevent a duplicate armature from arriving for no particular reason ...
I wrote a more detailed thread up on the forums here.
And eventually I got a working, and fully animated character out of Blender3D 2.8 and into the game.
Those Taoist charms say no and they mean no
Whilst trying to get the more hardcoded movement-to-attack animations working I came across numerous issues (which is just kinda part of life as an indie dev to be honest, especially when you're a One Man Army). The first was an unexpected naming convention for attack/recoil animation which took a day and a half to solve. This would have been a lot quicker if I had just gone and looked through the source code instead of thinking that something else was wrong.
The second was that the weapon finite state machine (FSM) kept overriding my second fire state with the first. The character has two handguns and I wanted them to fire each in turn for the standard light attack, and then both together in a heavy attack, except only the first light attack would work and occasionally half the animation for the second would attempt to play. It turned out that because I was using a hardcoded "stateFire=true;" setting, on loading it would store the animation, audio and particles for the fire state into memory and reuse it in any other state that had stateFire. However, stateFire does not actually launch any attacks or projectiles as that is all done via each states script, so by disabling stateFire on the second light attack I could prevent it from overriding the state and have the left handgun shoot.
And here is the game in all of it's post-yellow cube glory. This is the old DirectX9 version and not the new PBR one, recorded at a slightly janky 30fps because my upstream internet is bad.
So, that was the month that was ... I learned the new Blender and PBR by accident, pummelled exporting and animation until it worked, and finally replaced placeholder cube with an actual working character. And tomorrow is the first day of meteorological autumn.
Achievements Have been achieved. Function creep has creepeninged (!?!?!?) ... Really dumb bugs which I had not noticed before have been fixed. Post-it notes have been posted - to the bin. Embarrassing anus related typos have become history!
Maybe that should be anals of history have been rectumfied ...
There had been a sudden outbreak of the dreaded Function Creep lurgy and some alterations and additions found their way in. Some new animations, a lot of messing around with audio - the majority of which I then discarded after compeleting it because it sounded awful - and the introduction of Achievements ... which ... as expected ... introduced a shed load of new bugs which required hunting down and giving the thrashing of their lives.
I'll have to admit, I'm not a real fan of Achievements, nor of gamepads --- but I understand some people are, and the functionality for both are now in.
I did have fun thinking up a few of the names.
Both of the campaigns - Pangea, the Main Campaign where the dirigibles of the player's chose regime compete to conquer the Strategic map against the 5 Ai factions, and the Pirate Citadel, bonus Campaign where the player fights their way through enemy territory to storm the base of the Dastardly Pirates of Pangea - now have their own little intro screens, just to add a little description and background story flavour.
Also each of the regimes which the player can take control of or fight against now have their own visual description which displays the standard trooper alongside light and heavy armoured versions (stealth armour version isn't shown as it's the same as the light armoured trooper but in camouflage depending on the environment - and there are 5 of them, so that would have meant displaying 5 more models and it seemed a bit too much). Each regime also has a quote from it's leader - all with a heavy lean towards comedy, whether it's the Zulu Nation's horror at the cliche of leopard skin, Invincible President SteamLincoln's annoyance at having his opera disturbed and his hat singed, to a good old joke about the noble British crumpet.
Anyone good with Roman numerals? :P
I updated the whole single battle system ... for those who don't want to fight a 90+ battle campaign and just want a single, one off taste of tactical combat - apparently some people have lives ...
The new additions are the Task Force size - how many troops are deployed - and the level of technology available (each class has 4 levels of specialist items). There are seven - count 'em - levels of difficulty which increase or subtract troop experience, troop numbers, technology and budget for the battle.
Amongst all of this finishing stuff off - like the new dirigible models, new charge/sprint animations - guess which numpty couldn't get them to work before because of using the wrong naming convention even thought he coded the naming convention *cough*derp*cough* - there was a whole lot more bug fixing. Most of it was caused by the function creep, but some of it was exposed because of the function creep. In fact a couple of days ago I declared myself "bug free"! And within 5 minutes had found a new one ... I got twittered a joke about "day 1 patching".
But now, we are, bug free! Which means ... I have fixed all the bugs! ... which I know of ...
Okay, we haven't ... but we did get noticed in the Saturday Screenshot and mentioned in an indie news site, which was all very, very nice. And then my inbox melted under the retweets and mentions. This was pandemonium for a fella who's lucky to get 1 email a day ...
So, my post-it note pad is empty ... well, actually it's not, it's just free of fixes and functions to do. It is currently got a few notes on it about creating a "Release Candidate" and demo version. Ah, yes, the demo version I hinted at over a year ago ... and still haven't got round to doing ... ahem ...
There's a few things which I need to sort out, both code and logistics-wise for the shipping versions, and having a look at beamNG's demo release was a great help! They included the dx9updater because ...
As I've completely gone off tangent-wise, best to end, on a video of the action, menus, regimes, instructions, options, and a little bit of the Pangean Campaign in a "Sloop" class dirigible. Starting dirigble is now randomly generated for all factions - and it really does play differently between the fast, low troop capacity one and the huge, ultra slow Dreadnought version.
Looks nice full screen on HD ... but you knew that already ...
Anals of History ... *sigh* ... Annals - what a difference a letter makes ...
Worked out how to get better looking and less over-the-top normal maps. Started having a quick mess with shaders like emissive and glow, giving some tracer which really traces.
Also think I've worked out a level/environment building solution that should look good without sacrificing performance.