Menus

Back to work on Bleed 2 this week! I picked the menu system off my list of things to do.

Menu systems might not be thrilling to code (or to read about!) but it’s just one of those things you gotta do if you want a finished game. There’s a surprising amount to consider, depending on the game. What’s in each menu, and how can everything be structured to lead logically to each other? How do you handle a keyboard, mouse and gamepad all being used to navigate it? If there’s more than one player, what do you do about multiple inputs? Etc etc etc. They’re fun little puzzles to solve for me, to be honest.

Design-wise, I’d already taken a first stab at a menu system a long time ago. It was functional, but it was bulky and I couldn’t fit very many items on the screen at once. It was also bloated in terms of storage, with every menu item held in a sprite sheet with two variants for ‘selected’ and ‘unselected’.

First I thinned everything down, and got navigation and highlighting and some simple animations working, too! I also straightened out the menu — it used to be angled, which I originally imaged was stylish, but it made it harder to tell which item was selected and appears messy to me now.

Continue reading

Happy New Years!!

Happy new years to all!

The bi-annual charity speedrunning marathon Awesome Games Done Quick is on this week! I’d strongly encourage anyone reading this to check it out — it’s a week of the world’s best players beating games in record time (and sometimes even racing each other head-to-head!) all in the name of raising money for the Prevent Cancer Foundation. Pretty amazing to see games and gamers having such a positive impact.

As for me, I spent this week getting organized for the new year. I used sticky notes to map out what’s left and which parts depend on others, letting me figure what order to tackle things in.

Continue reading

Free: Guppy: Collects! 2

I’m on vacation this week, so there isn’t much Bleed 2 stuff to talk about.

…however, I’ve added Guppy: Collects! 2 to the Free Games section of the site!

You can find it there, or just click here to download it!

Guppy: Collects! 2 is a button-matching game where you help the adorable slug-thing Guppy collect items from around the world, which he sells online to finance his family business. I made it with a very good friend of mine a few Christmases ago, so it seems fitting to share it now! It’s mainly about competing for high scores and unlocking ridiculous costumes the more you play. You’re meant to use a controller, but I added keyboard controls for this quick-and-dirty PC port.

For anyone who played the original Bleed (and if you’re reading this, I feel the chances are high) this is the game Guppy and his cat helpers originally come from!

We’re still kinda in the holiday season, so next week’s blog will be a bit light, too — after that, though, it’ll be back to business. I hope everyone who celebrates had an amazing Christmas, and everyone else had a really enjoyable winter-time holiday!!

Replays 2: Replay’s Revenge

Last week I said I needed a vacation, and I almost took one! Instead, I worked on something I find infinitely exciting — implementing a replay system in Bleed 2! This will be a continuation of the replays post I made a few months back. It will also be very wordy, sorry about that!

 

Implementing Replays

A quick refresher: I’m storing the user’s inputs every frame and saving them in a file. When it comes time to watch a replay, the game uses the saved inputs to reproduce the playthrough. I call each frame of input ReplayData.

I need to make sure there’s no difference between the player controlling Wryn and a replay file controlling her. So, even when you play the game your inputs are converted into ReplayData before they go to Wryn. When you watch a replay, the ReplayData comes from the recorded file instead of the player. Either way, Wryn is getting the exact same kind of information at the exact same time.

Highly technical diagram of the two ways Wryn can receive ReplayData

 

Problems

Once I re-coded everything to work this way, I started running into problems. A big one was handling menus — menus aren’t part of replay files so they aren’t controlled by ReplayData, and ReplayData isn’t created while they are active.

An example of when this is an issue: the game is paused. You select ‘return to game’ by pressing the jump button. You weren’t pressing the jump button before you paused, and since Wryn hasn’t gotten any new ReplayData since then, as far as she knows the jump button is up. As soon as you un-pause, fresh ReplayData is created telling her the jump button is now down, causing Wryn to jump or air-dash when you didn’t intend her to.

Continue reading

Post-Exhibition and Burnout

My booth was way up, behind the screens. Nintendo and Microsoft got the main arena real estate.

So last week I exhibited Bleed 2 at Bit Bazaar as part of the Canadian Videogame Awards! They converted an entire hockey arena into a show floor (how Canadian) and it made for an impressive venue. I was a lot more prepared to exhibit this time, coming armed with merch, food/water, a better build and even a better tablecloth! Clearly all the stops were pulled out.

Setting up the booth. Notice the stickers and posters! And the Shutshimi banner!!

I had a lot of fun showing off the game and meeting awesome folks (special shout out to the dude who told me he came for Bleed 2, reads the blog regularly, and even bought a poster! That was so touching, you rock!!) Most of the changes I implemented were for the better — the tutorials still aren’t getting through to everyone, but they make sense to more people, at least! The game was well-received in general, and I had a blast.

For reference, some random stats from the exhibition (better than they should be, thanks to the Shutshimi guys doing speedruns, haha):

  • Games started: 109
  • Demo cleared: 79 times
  • Average clear time: 5min30sec
  • Average deaths per run: 2.5

Continue reading

Miscellaneous Improvements

Next weekend I’ll be showing Bleed 2 at Bit Bazaar in Toronto — my second exhibition ever! I thought I’d spend the week making the game sexier and fixing some of the problems I noticed last time I exhibited.

Most importantly, I changed the tutorials to be visual and animated. I noticed a lot of people missing or misunderstanding them last time, and I think this makes things pretty clear cut.

The tutorial doesn’t cover the action in the actual level.

I beefed up the size of the pistol bullets. It’s a small change but they feel much more powerful now! Last time I exhibited, some players totally missed that the pistols were even firing, which should have clued me in that they felt piddly right there.

They look so teeny tiny in comparison. ~*^_^*~

Continue reading

Alpha!! (or, Everything Left To Do)

Oh, baby baby. I did it! The campaign is now at what I would call a legitimate alpha – everything playable from start to finish and in a highly acceptable state! After two and a half years of hard work, it feels amazing to finally reach this milestone.

…however. There’s still a long road to travel before the game is released. “What?!” I can hear you exlaim. “Just put the damn thing out already! How much more could there possibly be left to do?! YOU HACK!!” First off, settle down please. Second, I’m glad you asked! In no particular order, and with no guarantees I’ve remembered everything, here is the big list of what needs to be done before the game comes out!

Continue reading

Dynamic Difficulty

Yeah boiiiii! One boss left to go and I’m pumped as hell – with any luck, I’ll finish it by the end of next week. In the meantime, here’s a little ditty about a controversial feature – dynamic difficulty! Basically, if you die a whole bunch, the game starts taking it easy on you, until you can hopefully proceed. I should clarify that it won’t be in Bleed 2, but I thought I’d talk about it anyways – mainly how it can be achieved, and why I’m against its inclusion (in my game, at least.)

Before I get into whether it’s good or bad for my game, here’s how I’ve set up my code to support it. For every boss (and enemy, and hazard, and so on) I’ve created tables of data for all their stats (health, move speed, etc etc etc.) Every stat gets multiple entries – one for each difficulty level.

In this shot the values are all the same, but you get the idea.

Not only does it let me view the data in an understandable way, it allows for easy gradial difficulty! Normally, if I want a boss’ health, I’d say “give me the ‘health’ number for the current difficulty level.” If the player is dying a lot, it’s a simple matter of bending the number down towards the next-highest difficulty – something like “give me the ‘health’ number a certain percent between the current difficulty level, and the one below it.” At first it wouldn’t bend at all, but after a few deaths it’d start gradually going down, capping somewhere around 50% towards the previous difficulty (any farther and you may as well just play the lower setting.) You can see I’ve created a new difficulty, “Too Easy”, just so the Easy difficulty has something to bend down towards.

Continue reading

More Fun With Render Targets

Another week full of work, this time with a frustrating outcome – the work wasn’t very good. I’ve found that when exploring new ideas, you have to fail a bunch of times before you get something right – learning what doesn’t work helps you create what does. I’m making the second-last boss of the game now, and it’s sorta weird and high-concept, so this success-through-repeated-failure scenario is kind of to be expected, but that doesn’t make it any more pleasant to go through. It’ll be done next week, or I’ll eat my hat!

While I’m spinning my wheels here, I’m gonna show off some more fun with render targets! Check out this virtual-reality environment I made a while back.

Different areas of the environment pulse, scrolling grid lines fade in and out, and the entire level slowly shifts colour over time.

I’m using render targets to create and morph the tileset while the game is running, resulting in all the effects! I’ll follow with a breakdown of what I mean.

Continue reading