3.15.2018 - A DASH OF SYNERGY
Firewalker in action
This week, we'll follow up on some of our recent progress in mutations, which are the heart of the combinatorial goodness we're working on. Those of you who are watching our Dev Streams (Thursday nights at 5 pm PST on the Skullbot Games Twitch channel) saw the beginning of the creation of Firewalker - a mutation that gives fire immunity as well as the sexy power of leaving behind a fire trail whenever you Dash.
Dash is one of those fundamentals we like to mutate in addition to the wallops and projectiles we talked about last week. For mutations, the goal isn't so much to add new keystrokes or button sequences on the gamepad to memorize, but rather to add new goodness onto your fundamental ways of interacting with the game. Weapons however, add new attacks and attack combos, while Carnage Items change the behavior of your "Do A Cool Thing When I've Gained Enough Carnage" button.
Your basic Dash covers a lot of utility. It's your basic key for "I wanna cross that pit" as well as a good closer during combat and a way to escape from enemy attacks heading your way. It also does a small knock back to move enemies, barrels, or other movable objects around without causing them damage. It can sometimes be very useful to position an explosive barrel or nudge an enemy to line up the perfect shot!
So any of these functional uses of Dash are fair game for us to mutate! Sometimes we'll make it more useful in one way and slightly less useful in another, sometimes it will be a straight up rocking upgrade, and some mutations might be good for audience amusement but less good for, ya know, your own survival.
Firewalker straight up rocks, of course. Leaving a trail of flames and getting fire immunity are a sexy combo. On the utility front, Cash Dash adds coins whenever you collide with an enemy - why not make some money while incinerating your foes?
Either work especially well combined with the probably-too-similarly-named Dash Crash, which actually turns those gentle enemy nudges from your basic Dash into full damaging wallops. This adds some great utility when you are using weapons like the Missile Launcher which have weak or non-damaging wallops themselves, meaning other great wallop synergies like Spike Strike or Acid Strike can now be used with those weapons!
Mildly OP Shotgun Mutants checking that projectile optimization went well
Anyhoo, we just wanted to give a little insight into recent mutation work. This week has also seen the unsexy-but-critical implementation of optimizing projectiles which means we can now spawn hundreds of them with low overhead. Fear our mighty test shotgunner firing 100 bullets per wave! Sadly, he's gone back to his wimpy 3-unless-otherwise-mutated-shot version after his moment of glory.
We'll show more next week! Check out the Dev Stream Thursdays at 5 pm as well for live updates and feel free to ask questions or give feedback either here in comments or then in Twitch chat!
Edit: Further update after a reddit thread developed on the subject on the cute little shotgun mutant spam test gif above:
Even more OP Shotgun Mutants shootin' death spirals
To push bullets to where it started breaking, I set seven of them to each shoot 101 bullets per burst, with each bullet .01s apart from the previous one, is where it knocked our FPS down to <30*. That's actually not bad for being largely unoptimized IMO (though we tend to do optimization passes at least gently every few months). Go, Unreal Engine!
The next culprit looks like ProjectileMovementComponent ticking in the engine code, so we'll probs need to write a custom one of those at some point. Since we're not really a bullet hell game (well we'll probably do a boss or two that way to mix it up) per se we might never need to do more TBH, but projectiles are usually one of the things you tend to optimize the heck out of over a project since there are lots of the little buggers.
*Caveats: running in the editor, and while running OBS, and with non-nativized Blueprints, on a beefy but 3 year old machine. The pedantic programmer in me can't resist giving context for pros and cons...