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!
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.
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.
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.
The final level is about halfway done! I put in a bunch of overtime this week (around 50 hours total?) so this post may be a little light. It’s about Arcade Mode, which is returning (obviously!) But I’ve got a few improvements and changes planned which I’ll discuss briefly here.
Probably the biggest change will be health pickups! Every level has a semi-secret area at the beginning that will contain them. I’m speaking future-tense because I haven’t implemented them yet, but here’s an example of what I mean.
Bleed 2 has at least twice as many bosses as the original and it feels outrageous asking players to do that in one life bar. On the other hand, I’d like to reward players with mad skills and daring, so collecting health will probably come with a competitive disadvantage, like a time penalty.
Progress continued this week! I’ve done some highly exact figuring, and there’s about 32 pieces of content (bosses, cutscenes, level segments, etc) that need to be produced for level seven. I’m done 11 of them so far, so we’ll say I’m a third of the way finished. Go team!
Ultra-Mild Spoiler Warning
Here’s the topic in general: The fights against Valentine (the main baddie) were some of the most difficult to pin down conceptually, and I’ve gone through a lot of ideas in my quest to give her quality encounters that fit her character. That means I’ve discarded plenty of crap ones, some of which I’m about to share. The fights in the final game won’t look anything like what I’m showing — even her sprites have been mostly re-done — so I don’t believe this post will count as a spoiler. But hey, here’s your warning, in case you’re sensitive.
I worked on the seventh level this week: touching up environment art, finalizing the tileset, bringing the first section to near-completion, and starting on the second. There’s a large amount left to do including some complicated set-pieces and all the bosses, but hey, it’s good progress so far.
Meanwhile, let’s see how in-game cutscenes are made for Bleed 2!
It’s pretty simple, actually. First, I have this collection of sprites used for cut-scenes. Some are re-created from Wryn’s sprite sheet, but others, like Wryn playing videogames, have been created specifically for the cutscenes.
I’ve programmed a simple “cutscene helper” entity that uses these sprites to mimic Wryn! It knows all her stats, like move speed, weight, height, etc, so everything is exactly the same between the two of them. Can you tell the difference!?!!??
Finished the sixth level this week, awwwright. Just one more to go! Although, this is the one level where I don’t have as much work pre-done – it wasn’t at an “alpha” state like the others. So, it’ll probably take a bit longer to put together, but hopefully not too long. Most bosses and environments are roughed in, at least.
This week I thought I’d detail some things to consider when implementing co-op!
In Bleed 2 there are two versions of every enemy: purple (reflectable) and yellow (unreflectable.) I think it’s important the sprites indicate their colour before they attack — it just seems fair. On easier settings enemies are mostly purple, with the ratio of yellow increasing with the difficulty. In co-op, there’s a purple and a yellow player, so it has to be an even mix regardless of difficulty.
Similarly: on lower difficulties bosses have a high chance of using purple attacks, and the chance goes down as the difficulty goes up. In addition to that, the bosses have increased health to compensate for the potentially doubled player damage – boss health isn’t doubled though, right now it’s only increased by 25%. I don’t want it to be a slog, but I don’t want it to be a cakewalk.
Enemies and bosses also need tweaks to their AI to accomodate the extra player. All baddies have a “player target” and will focus on attacking that character. Watching people play co-op so far, it seems really frustrating when enemies target a player that can’t reflect their shots. So, enemies generally target the player matching their colour, but they can change focus if the target runs away or the other player does more damage, that kind of thing.
Bad news bears: my computer died! I make daily off-site backups (something I’d recommend to any dev) so Bleed 2 wasn’t destroyed — phew. Still, a frustrating amount of time was spent resurrecting my computer and restoring files, so I didn’t manage to finish the sixth level. Next week for sure!
In the meantime: an update on Endless Mode, and why it may fall by the wayside. Really uplifting blog this week, I know! I gave Endless Mode a few months of work after pondering it in December, and I thought I’d show how far it came and discuss some of its issues.
For all who don’t know, Endless Mode is me jumping on the randomly-generated bandwagon for Bleed 2. I created a bunch of bite-sized level chunks to be randomly stitched together into full maps. In December I had five chunks, and now I’ve raised the count to thirty.
I tried to design the chunks with variety in mind: mixing up the enemies, hazards, ceiling heights, visual elements, direction they lead, etc etc etc. Mathematically, having thirty chunks makes for a very high number of combinations — over a trillion, in fact! Wowie zowie, gee whiz!
This week was more level six work! The end is within sight, and I hope to finish it next week. Now without further ado, let’s talk a bit about storytelling!
One bit of polish I’m bringing to Bleed 2 is that the whole game is designed as a seamless experience; every encounter leads directly and logically to the next with almost no cut-aways, time skips or fades to black. I’m hoping for it to come across as one giant, epic mission — especially in Arcade Mode! — and in general think it lends gravity and context to what you’re accomplishing.
So for example, when you beat the Mirror Core at the end of level one, there’s a little cutscene that plays to transition you to the next level.
Same goes for all levels, and all the markedly different sections within levels! Transitions are as quick as possible without being jarring, and don’t take control away from you — the only ones to sometimes violate these rules are the end-of-level cutscenes, which I’m showing here (go figure.)
Mostly this is me going that little bit extra, trying to elevate Bleed 2 as much as I can, but in general it’s an attempt to improve how I tell stories in my games. Ever since my first game, Frequency (which had a loooot of action-murdering talking), it’s something I’ve tried to work on.
I worked on the sixth level this week, and got a surprising amount done — one or two weeks more at this rate and I should be on to the seventh level! Instead of showing that, I’m giving a huge ramble about implementing a replay system.
Bleed 2 might have replays, but it might not because they’re hard.
The Long Version
I think it’d be really cool if arcade mode runs got recorded and uploaded with your leaderboard entries. You could show off your moves, compare your play with your friends, or learn from high-level runs!
It’s hard to justify spending a lot of time on this, since 1: I’m not sure it’s a feature that really sells people or gets used much, and 2: it’s going to be difficult to implement — but that hasn’t stopped it from eating up a lot of my mental processes, because it’s such a fascinating puzzle to try to solve. I’ve done a bunch of research and planning on it, and here’s what I’ve got so far.
If replays were to be a thing, it would be the game recording your inputs every frame and saving them in a file. When it came time to play back the replay, it would run through the inputs stored in the file, essentially using them to play itself.
This presents two major hurdles, at least that I can see so far: the game would have to play the same way every time (to give the replays consistent results) and the input files would have to be kept as small as possible to avoid exploding peoples’ hard drives and internets.