Streets of Peril – Design Changes

Hey everyone! Sorry again for suddenly disappearing, but I have good news: over the past couple months I have been working on a Windows Store game with my brother Alex titled Defend Your Fort, and it will be released within the coming weeks! Check out the Facebook page here and Like it to be notified of updates. The game will be free for the first week of release!

Anyway, onto Streets of Peril. As the title of this post indicates, I will be discussing the design changes I have finished for the game. I’m a lot more confident in the game now than before, and I’m currently in the process of refactoring a good portion of the code to facilitate the implementation of these changes.

There’s a very long list, so I’ll briefly talk about the important ones.


If you’ve seen the videos on my YouTube channel, you may have seen footage of underwater levels. They are some of the selling points of Streets of Peril since they do not exist in any traditional Final Fight-styled Beat ‘Em Ups (that I’ve played at least; do not hesitate to show me a game that does have them) and are thus one of many unique elements in Streets of Peril. Unfortunately, they weren’t very special if you look at them closely: everything moves slower, falls slower, and jumps higher. The only unique element is that all players and enemies have an Oxygen Tank which can be destroyed, resulting in an instant death. Aside from that though, underwater levels were essentially just a slower version of normal combat.

So when changing underwater levels, I came up with the following:

-Fighters (Players and enemies) can now swim in the water by jumping. This is very similar to how platformers like Super Mario Bros. handle underwater levels. While swimming, Fighters can move freely in the X or Y direction. There will of course be unique swimming animations for each Fighter.

-While swimming, Fighters have a limited moveset that excludes grabs or any special attacks pertaining to grabs. This means that Crystal and Grunt are unable to use their aerial grabs in underwater levels. Dashing results in a faster swim and access to a lunge attack.

-There are still combos while swimming, but some need to be revised to make more sense, specifically combos ending in kicks.

-Getting knocked down while swimming results in the Fighter falling back to the original height it was at before taking damage. This is currently how it works for my Diver enemy, which was inspired by Jet from Streets of Rage 2.

-And finally, when the Fighter is on the ground in an underwater level, its moveset returns to normal. This means grabs and anything else allowed in normal combat is allowed when the Fighter is grounded. However, jumping or falling off a ledge will put the Fighter back into the swimming state.

Oxygen Tanks will still be in underwater levels, so watch your back! Overall I feel these changes add many interesting dynamics to underwater combat and make underwater levels feel unique instead of simply feeling like slow-paced normal levels. Oh, and all of these changes will also be present in Versus mode!

Minecart Rush

I eventually found that I simply could not get the unique minecart level I had before to work from a design perspective. Fighters were limited to this tiny space in the middle of the screen, resulting in the enemy AI not working correctly since they had too little room to do anything. It was also not practical at all: players could simply hit enemies off the minecart as they fell down and easily beat the level. In turn, if players got knocked down by an enemy, they were pretty much instantly dead because they’d fall off the minecart.

As a result, I completely reimagined the level, and it now acts as a mini-boss battle. There’s one Minecart Rider enemy on the right side of the screen throwing objects at players, and the camera is constantly scrolling to the right slowly. Players have to hit the objects back at the Minecart Rider to damage it, and each time the Minecart Rider takes damage an enemy falls down. Players will have to deal with the enemies and the Minecart Rider simultaneously, maintaining the pressure that is prevalent in the rest of the game.

Bonus Tokens

Bonus Tokens are unique items that grant the player access to a Bonus Stage at the end of each level. Before the design changes, I did not know exactly what to do with them but was considering them to appear in item containers if special conditions were met.

Unfortunately, these special conditions would not only be annoying to implement but would also be impossible for the player to figure out unless he/she just happened to satisfy them on a particular playthrough. As a result I have decided to simply hide them in the levels. They’re hidden well enough so that you’re not likely to come across them all on your first playthrough, but you’re guaranteed to find them with enough patience and experimentation.

No, this doesn’t mean you have to go through every pixel behind the foreground in every sublevel spamming the Item key and hope to pick one up. Most of them will be visible in some way, and the ones that aren’t have some sort of scenario that makes them likely to appear. For example, the Bonus Token in Level 6 isn’t anywhere in the level itself, but if you wait long enough on the last bit of the Minecart Rider’s health, he will throw it at you instead of one of his normal objects. Cool, huh?

In short, I feel these design changes greatly improve the game and make it that much more unique. It’ll be a lot of work for sure, but at least I know exactly how everything should work, which makes my job much easier.

That’s about all for today; thanks for reading! Until next time!


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: