Welcome everyone, my name is Missing The Moon, Im working on a fast paced 2D roguelike and this is what Ive been working on in the last week. This update was all about the player! I was thinking about giving you more control over things, make everything feel faster and more responsive. All that finally came together in this beautiful update! Honestly I really like how this turned out, even though Im aware of the fact that I probably work over it another time to perfect it.
Player Update
Basic and Empowered Abilities
First I changed the way I look at all the abilities the player has. On an Xbox controller you have the X, Y, A, B buttons. Now 4 basic moves are located on them. They are: dash, swing attack, stab attack and heal. If you use the shield (LB or RB) and do a basic move, the basic move becomes a stronger version of itself. There are 3 empowered moves yet.
Swing → Tatsumaki
Stab → Dragon Strike (no one knew what an IAI draw is so we renamed it)
Dash → Roll
Heal → Not yet added
These empowered abilities cost energy. Energy is refilled over time and is used for having the shield active. The shield lets you block any attack and is therefore really useful.
The Dragon Strike used to have a cooldown. The cooldown was shown below the health and hype at the top left. Therefore it was hard to see while being really important. Energy is shown unless its full. It is right next to the player and therefore really easy to see at all times. It needs to be since it it really important. Therefore making dragon strike cost energy instead makes a lot of sense for the UI. But it also makes the energy an even more interesting ressource. Because now there is more choices to make with it. Do I turtle and defend myself? Do I dragon strike myself into safety as a last resort? Do I dragon strike to fastly kill enemies?
Before the tatsumaki was a counter, which you triggered by attacking right after blocking an attack. This was really similar to the parry for which you have to shield right before you get attacked, therefore I wanted to change it for a while to make both more distinct from each other. Making it that the tatsumaki costs energy and can be done at any time makes the player a lot stronger but also feels more expressive. I can now just dash into a lot of enemies and just kill them all with one tatsumaki. Before I needed to wait for one of them to hit me. That slowed the pace down though and was also not really effective for the same reason.
Roll was always like this and made sense from the start. For coherency having other abilities like this makes so much more sense though! Now basic moves have stronger versions and you trigger them all in the same way. Simple to understand and hard to master. I love it!
Stab Attack
The stab attack is new and works similar to the swing attack. You have 3 stabs. The first one is really fast, in its recovery you can press the Y button again and do the stab chain attack. Holding the Y button keeps you in this state in which you constantly stabbing in front of you. This does constant damage but you can not stay in this forever. You can stop it by releasing the Y button. In the stab chain attack's recovery you can press the Y button to do the stab lunge attack. Similar to the dragon strike you move forwards fastly and damage enemies in a straight line.
I wanted some faster move and I wanted a basic move for the Dragon strike for we already had that as a cool ability. The interesting thing in this comes here: If you do stab 1 you can do stab 2 after and then stab 3. The same goes with the swing attacks. And if you do swing 1 and then stab, you do stab 2 not stab 1. Meaning you can mix stab and swing in any way.
Misc
The slow effect when parrying an attack is now a lot more juicy. Enemies are more effected by the timeslow than the player. Also they dont just instantly go back to 1 from their slow, they lerp back to it.
After a dash you can do another one which is a bit longer and faster. This skips the dash's recovery time and can be really useful. The timing felt off though so I adjusted it to be more around when the recovery starts instead of only when after it starts.
Animations
Animate Importer / Workflow
All the art we have right now is fill in. We will not even do pixel art, but the workflow with aseprite is so god damm good and fast that I use it for the fill in regardless. So for the future I wanted a similar workflow.
I checked out Adobe animate (flash) and it is as good as I hoped it would be. Here and there I need to understand some more things but overall it is really powerful! BUT the animation importing into Unity normally is a pain the ass. I dont want to create each animation in Unity. Therefore I wrote a copy of the “Animation importer” script that I have from github.
Now all I need to do is export the png sequence from adobe into a folder for each animation. Put these folders into Texture packer pro. In Texture packer I create a spritesheet and put it into Unity and voila, the script I wrote automatically does its magic. The spritesheet needs to be in the right folder, then the script will create a animation folder inside, creates the animation clips with the sprites from spritesheet and puts them into the folder. Then it creates an animation controller and puts the animations in there too.
It also updates when the spritesheet is changed. So if we change animations we just export into the same folder. Texture packer updates and we export and bam! Its taken over in Unity and we need to do nothing since its already done.
Timeslow
A thing no one had noticed yet, but was really obvious in this update was that the players timeScale is different from all other timescales. Meaning everyone updates at the normal framerate multiplied by 1. Unless I slow the time by 40% then they update by framerate * 0.4 … Well the player doesnt.
Sometimes I want to slow the enemies and not you, because it feels great! So the player has their own framerate multiplier or as its called in unity timeScale. The problem with this is that the animations update at the normal framerate / timescale with the multiplier everyone else uses which is fine for everyone else. So I set the players to just ignore any timeslow. The player therefore was often slowed in the state, but the animation was running at normal speed. Therefore the last frame of an animation was often longer than supposed to.
There is a timescale multiplier in the Animator as a parameter. And all animation clips inside can be set to use this. Simple, yet I had no idea about that until recently and was finally able to fix this!
Misc:
We did a bunch of small things that Im quickly gonna run you through:
Screenshake on boss shooting attack is softer and feels a lot better now
Remaining time gold bonus is bigger to give more reward for faster playing
IAI strike is now called Dragon Strike because no one knows what an IAI strike is. If you do, I tip my fedora for you.
Settings are now safed when pressing “Restart Run”
Gold is smaller -> less eye catchy. And there is 3 sizes now instead of just 2
I set up a Level System to prepare for the next update. We use scriptable ojects for this.
Boss health now disappears after beating him and also the hp is not above the items anymore
Screenshake overworked because I felt that it gets to strong when hype is full. Yes the hype influences the screenshake and makes it 3.5 times stronger. It was 4 and I felt that was a bit to much.
Well thats it, I probably still didnt mention everything. Often things come up on the spot, but this time I tried to write down more of the things I do to make this more transparent. If you read so far I guess you liked it or skipped to the end, regardless thank you for taking your time to read this! Also if you feel so inclined this update feels god damm good and you can give it a try right now :)
Have a good day everyone!