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.

Friday, 29 December 2017

Tests, Checks And Gameplay Balancing

It's that time of year again folks, when you feel like this ...


And end up looking like this ...


Of course some of us are still working hard on "muh gaem dev" - and this month it's been mostly playtesting to try and create game balance, and hunt down a few elusive bugs. And when I say "elusive", I of course mean badly/drunk coded.

Like the Rocketrix offensive smart bomb attack. It picks the most dangerous group of enemies so it can do the most damage, swoops in and ... blows the player to smithereens. Yep, pretty sure that is not supposed to happen. Turns out I was calling the attack from the enemy target instead of through the player. Simple mistake by passing the opposite variable, possibly explained by the following image:


One thing that extended playtesting has shown is that stacking powerups - repeatedly collecting the same swag - does not happen as often as I thought it would. Even with 15+ items available each level, there are a total of 108 seperate bonuses (including upgrades to weapon drones). Whilst this does not really effect offensive or defensive events (which are added to an array list for chance of activation during attacss/damage), it does mean that permanent bonuses (health, speed, energy, etc) to attributes do not happen as often as originally planned, and individual bonuses confer too little benefit to the player.

Boosting the effect of permanent bonuses is the obvious way to balance this unforeseen lack of reward. For instance increases to player health are now percentage driven rather than a stock value, and speed is now hiked much higher as the original gain was meaningless beyond the first few game levels.

Another event that did not quite live up to it's predictions is the "Momento Mori". This is a sort of "rage gauge" which fills each time the player kills an enemy, but reduces each second. Enemies killed by heavy attacks fill the gauge faster than light attacks, and all other attacks (drones, swag events, etc) even less. The bar can fill multiple times, changing colour and conferring a multiplication bonus to the player's scoring.

"Gore Gauge" - Orange Bar and x3 Text, top right

Originally the player would fill the "rage gauge/kill bar" three times - now forever to be known as the "Gore Gauge" ;) - at which point the player would be healed and for the next thirty seconds the Gauge would stick at 4, multiplying the player's scoring.

To make this more of an actual event for the player to aim for, I increased the fill trigger level to 4, at which point it leaps to score multiplication x8 (4 = death, 8 = wealth), the player is healed 100% and for the next 30 seconds whilst the Momento Mori lasts is also invulnerable to all damage, which is a really big help in crowded and frantic later game levels.

Momento Mori event triggered. Red bar and x8 text top right (GUI still needs some work)

The GUI incorporating the Gore Gauge needs a bit more work, such as an icon to show what it represents like the XP/LevelUp, health and energy bars top left (a small skull would probably be a good fit here).

Momento Mori in action from ~02:02. Gore Gauge starts at x3.

Of course, what was missing from the above video is an indicator for the player that the Momento Mori event is still on-going and not yet ended. After a quick bit of modeling, texuting and scripting, I created what I felt would be a suitable aura type object to mount on the player to signify that the event was active.

Behold, one visual indicator, brought to you in the format of GIF

There have also been numerous other bugfixes and tweaking of code and gameplay - it's not all been eat, drink and be merry this Decemeber. ;)

So, next up is more gameplay balancing, but I am at the stage of development that this requires creating the actual data for the enemies which the player will be encountering in the game worlds, and their unique attributes and characteristics for attack and movement. This also requires drawing up a list of boss types rather than the singular one which I have at the moment.

Roll on 2018 ...

Tuesday, 28 November 2017

Test Tweak Twiddle

With a basic level blocked out, the past month has been mostly about testing, tweaking and twiddling with gameplay. This meant a lot of playtesting followed by minor adjustments to scripts and code, as well as the usual "let's streamline everything" followed by the equally usual "oh god everything is broken now", followed by fixing it. None of this makes for particularly interesting pictures of videos.

One thing which is "screenshotable" is the new level based statistics screen which now pops up at the end of the level. Previously at the end of each level a continued game progress screen would display, giving various statistics on the player's progress that run. Now a minor version detailing statistics from the previously completed level displays with information and percentages relating to player activity.


From the top; time taken to complete level (or die a horrible death, whichever comes sooner), score for that level, swag parcels opened, cash looted, enemies killed, overall percentage for that level/world and finally the pre-existing, remaining cash on exit converted to points. Once art and animation are the priority "something interesting" will fill the left side of the screen too - probably the players character with a celebratory animation corresponding to level completedness.

This level statistic interface then fades into the standard game progress screen which gives a more indepth view of statistics which the player has achieved.


I had also started to list the various types of enemy and player characters and abilities which I want to feature in the game. Variation is the nemesis of repetition and thus a wide assortment of enemies and capabilities is something to strive for. Currently in the way of hostile attacks I have a simple melee enemy, a charging enemy and projectile shooting one. These are certainly the main themes for the opposition which can feature good variations. On top of this I have already coded "elite" enemies who have special abilities ranging from contact based damage to temporarily slowing the player for a few seconds. These elites carry a certain colour and aura to distinguish themselves to the player as extra inhospitable. They also carry more hit points.

Hit points carry cash which is used to open swag parcels for the player to gain powerups and useable items. Each level the cost of powerups increase, but as the player becomes more powerful and enemies more numerous the amount of lootable coins also increased rather too fast. I have had to reduce the amount of cash enemies drop in later levels as a result of this.

The entire system for usable items has had an overhaul. Previously the player could collect items and be able to use the current highlighted one on screen. Every three seconds thecurrently  sclected item would advance to the next. This became incredibly infuriating when in the throes of combat to try and time using the right item at the best time and often led to the wrong item being used. This has now changed to allow the player to manually cycle through the list of useable items with a simple button press to choose which will be active.

So there we have it. I am continuing to list enemy types, and their abilities in prepartion of when they become actual models. Until then, huzzah for placeholder cubes!