Wayfarer Games

View Original

Day Sixty Four

Hello from the past - I hope the future is good. This is one of a couple of scheduled posts that I’ve written just in case I’m ill/there’s a family emergency/I don’t have any internet at all. I hope I’m never in a position where I have no internet at all, that would suck.

Since this could be posted ✨ at any time ✨ I won’t be able to tell you about specific content… So lets talk about movement!

The original game was made for a game jam with the theme “stuck in a loop” - which I obviously took incredibly literally 😉 the original game was just a single boss (a hexagon), and the movement was… bad.

The “A” key moved you anticlockwise, the “D” key moved you clockwise. Movement was incredibly fast, there was a little bit of inertia, and it was basically impossible to be precise. Oh, and the controls appear to reverse when you’re in the top half of the ring!

This meant that everyone stayed at the bottom of the ring, so “A” moves you left and “D” moves you right, which feels natural. You’re also basically forced to be hit by a load of bullets sometimes, and unavoidable damage feels crap in games like this.

However, being stuck on a ring posed a really interesting challenge, design wise. The game is essentially 1D, with only one way to move, kinda like space invaders if it had screen wrapping.

The controls needed to change, that much was obvious. I toyed with a ton of different things, but ultimately I went with “your position on the ring is precisely the position of the thumbstick”. I thought it was really cool that I could make the whole game playable with just a single joystick. That’s a neat accessibility consideration, there are very few games designed for teenagers and adults that are built around being played with just one hand. It’s also a really interesting input method that gives the player full control… and it is wonderfully simple to code - literally just:

player.position = thumbstick.normalized * radius;

You can be at any point on the ring at any time, and you use the joystick in a different way - generally holding it all the way to the edge for the majority of play. It never goes to rest, and it moves around a lot.

There’s one major issue with this input scheme, however - cheap controllers will not work. Cheap controllers use digital input, which is fine for most games but in Polyfury it means you only have either 8 or 16 possible positions. That obviously doesn’t work in a bullet hell game like this!

Thanks for the footage Hermit Cat! It was all the way back in 2020 so you probably don’t even remember ;)


We had to go through a TON of revisions for this. I tried going back to the original input method, but it just felt wrong. The worst thing I tried was this abomination:

Thanks again Hermit Cat 😁

It still makes me feel dizzy just watching it! None of this was really working, so I eventually just added an onboarding screen:

It just changed to one of the other two control schemes and was a band-aid solution. A seperate but related issue was the fact that if you didn’t have a controller, you could only use one of the two terrible input methods. Having three input methods (analogue, A/D, A/D with the spinny vomit cam) also came with a bunch of bloat, I had to have an input manager and a way to switch between input methods. Input is handled inside a scriptable object, and there’s a manager that reads from that. This sucks, and yes I said is because that’s how it is now, even with just a single input option…

Enter 2022, a full year after development started properly! This needed fixing, I had just ignored it for too long. As a quick fix, I made it so when you’re not using a controller, your position was the normalised mouse position - again, super simple code:

player.position = mousePos.normalized * radius;

It was a quick hack to get something, anything in there to make it not suck for keyboard users. Turns out this is the best way to play the game by far 😂 all of my input woes were immediately fixed by this one simple hack. There’s a minor issue in that it is basically impossible to get to the opposite side of the ring immediately, which was a trick that I want to use in later levels. I’ll probably just ditch that as an intended solution to some of the bullet patterns. It’s actually noticably easier with a mouse, so I think having that ability will balance out the difficulty on controller a little bit.

So uh… What’s the moral of the story? Test things! Test them quickly and early, the solution might be a stupid little hack that you think is going to feel terrible. Also, don’t be afraid to change the input entirely. Being able to prototype things like this quickly basically saved this game. There’s no way I could ship a good PC version and require a controller.

What’s next?

Who knows, maybe another scheduled post, maybe I’m back. I’ve probably posted something on Discord!


I hope you enjoyed reading about my Polyfury progress. If you have any questions or thoughts, please feel free to leave a comment below. Thanks for reading, and maybe check out the demo:

See this content in the original post