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!
Enemies
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.
Bosses
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.
Player Targeting
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.
TL;DR
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.
This week I started on the sixth level! I probably won’t talk about the sixth or seventh levels that much, because I’d like to leave some surprise when you finally play the game. Not that anyone plays Bleed for the story, but knowing everything that’s coming would kill some of my buzz, at least.
So in light of that, today I’ll spoil something else from earlier in the game! The Rival character is coming back, making his reappearance at the end of level one in a souped-up Mirror Core.
The fight has seen some big changes over the years. It takes place while racing through a tunnel, and originally the Mirror Core smashed through gates, creating holes for you to dodge through.
Man it feels good to have that one behind me. It only took five friggin’ weeks to get it up to snuff. Once it was done, I celebrated by just playing MGS for a few days, because I’m a hopeless fanboy and I needed a break. But you’re not here to read about me playing MGS, so let’s talk a little about optimization.
There’s one area of the fifth level that can have a loooot of baddies on screen — like, 100 at once if you let things get out of hand. Enemies don’t usually collide with each other, so normally it wouldn’t be worth mentioning, but these enemies get in each other’s way and so they all have to collision-detect each other, which can get ugly fast.
If you didn’t read last week’s blog: it takes 4 calculations to see if two entities touch. If you add up the calculations of 100 entities checking each other, it’s something around 40,000 calculations (every 1/60th of a second!) and that can really slow a machine down. That’s when optimization is needed!
The fifth level is almost done, gah!! It’ll be finished by next week, but right now I’m stuck re-doing one last boss. I swear I’m not just re-doing every boss over and over — I did three this week that only needed minor touch-ups and difficulty balancing — but sometimes I come back to my old work and can’t imagine what I was thinking. This boss is definitely one of those, and needs to be totally redone. I still like the art and animations, at least.
Without anything more meaningful to share, I thought I’d do an article that simply explains collision detection! If technical stuff puts you to sleep (or you’re already familiar with the topic, which is equally likely) you might wanna just stop reading here. I warned you!!
So in Bleed! Anything you can interact with is called an ‘entity’, and all entities have a width, a height, and a center point. Using these values, you can find the edges of a rectangular area called a ‘hitbox’. The hitboxes let entities know when they overlap (or ‘collide’) with each other.