Procedural Generation: ‘Metroidvania’ Pt.1

To begin, I want to talk about what makes this project a ‘Metroidvania’ rather than just being linear platformer generation (Spelunky, Terraria, and company). To me, a ‘Metroidvania’ is a game with an overarching, game-wide puzzle. A lock-and-key puzzle where the locks are terrain obstacles and the keys are new items that allow the player to traverse these obstacles.

For this project, I’m going to separate the Metroid-like map into sections – into planets, actually. The player will crash land on the initial planet. Upon finding and defeating the first boss, the player will find what he needs to fix the ship. From there, the player can roam space freely.

To begin, I’d like to discuss how I plan on setting up some of the high level functionality of this whole thing. Creating a new procedural generation system is quite a task. It can seem daunting and it’s hard to gather all of the information about your world prior to the initial prototyping stages. For example, I may need to have a special case for generation shops on certain planets. I have no way of knowing how that will work or even if it’ll happen. This makes it hard to find a starting point.

What I do know is that ‘Metroidvanias’ follow a formula. In my case, the player will complete the game when they have finished between five and seven tasks of my choosing. I’ll give an example:

1) Defeat Boss#1 and obtain ‘Engine Parts’
2) Fly to planet that contains morphball powerup
3) Use the morphball to reach Boss#2 and obtain the swimming ability
4) There was water on the morphball planet. Return there and swim to Boss#3. Obtain heat-immune suit
5) Fly to the lava planet that you’ve been avoiding. Find missiles.
6) Return to initial planet and bust through wall to get key card.
7) Use key card to access final boss.

BOOM! Something like that. We can randomize the items so that you get them in different orders, in different locations, etc. Maybe one play through you get the ice immune suit instead of heat. Maybe you get double jump instead of morphball. Etc. We’ll mix it up.

We’ll generate simple planet templates like the one above. We know that some planets will need to be visited multiple times. This could be an example for planet one. The white room could be the landing site. The green rooms are rooms accessible from the start of the game. The red box in the bottom-right is the boss that gives you the parts to fix your vehicle.

The interesting and complex part here is the yellow and the small blue of the map. The yellow will represent a section that you can’t reach to begin with. In this case, it was missiles. The blue room is a ‘choke point’. Choke points are areas that will limit the player’s mobility in some way. We could place a door that requires a key card or terrain that requires missiles to blow through.

Basically, this planet has two distinct areas. When we generate the world, we’ll need to store the level of each of these areas. Because this is planet one, the green area will be accessible from the start, but that won’t always be true. The yellow section will be given a level equal to that of the item required to progress. The missiles were task five, so perhaps that choke point will know to create a level five obstacle.

This is a cool system because choke points require players to have everything up to that level to reach them. Having missiles means you also have the morphball and are heat-immune (in this play through), so that yellow area could be a lava tileset with a bunch of narrow passage ways.

That’s all for now. I’ll get to the low-level stuff as I prototype ideas. I don’t want this series of posts to surpass what I actually have working. Also, HackyZack is taking priority.

Hopefully this is enough to get you thinking about possibly generating and entire ‘Metroidvania’ adventure.

-Z

Procedural Generation: ‘Metroidvania’ Pt.1

Project CATAM Pt.1

This is my first entry RE: Cool New Project. I’d like to talk a little bit about what the project is, how far along we are, and some of our development plans. I will be continuing this series in parallel with the “Creating a Platformer” series in order to keep a lot of the design and game-specific stuff separate from the programming tutorials that have been getting a lot of positive feedback.

CATAM?

Months ago I tweeted something about a project that I referred to as ‘#CATAM’. It is a project that has been on the back burner for awhile. It is one of my dream projects that I have wanted to work on, but couldn’t afford to invest time into due to its scope. It is a fairly large game that is tech-heavy, design-heavy, and asset-heavy. At the time, I could afford none of these. I didn’t have the time or resources to pursue its production any further than jotting down a few plot/character ideas.
Continue reading “Project CATAM Pt.1”

Project CATAM Pt.1

DevLog: Creating a Platformer Pt.6

Hello all,

it has been awhile. In this portion of the series, things are going to vastly change and I’d like to use this entry to talk about what that means and why.

Team

The game has been fully realized. It is no longer a box that hops around in an empty world. Characters have been developed with personality and motive. The world has become a tangible place. Lastly, a full development team is now involved.

As I get artists and others involved, the project becomes less of a linear, programming marathon. We are at work designing mechanics, enemies, puzzles, and overall game flow.

Reveal

Also, we are working towards a “first-playable” and our reveal trailer that will hopefully be paired with some form of press release. Due to this, I’m going to be LESS open about what’s happening. The reveal will answer any and all questions within the coming months.

What can I tell you?

Well, not much. Pixel art is out and HD, hand-painted art is in. We may even experiment with paint-overs of 3D models. Within the next few weeks we will be fleshing out the desired art style(s) and resolution. Soon after I will return to posting GIFs and small teasers as to what we’re focussing on.

Design

I will probably start a parallel series of articles that focus on the design of the game. I want to keep this one focussed on the programming aspects of the game because that’s what most of you have come here for previously.

More to come,

-Z

DevLog: Creating a Platformer Pt.6

#IndiesVSPewDiePie Jam

I am entering a game jam this weekend! It is the Indies VS PewDiePie jam, hosted by GameJolt (http://jams.gamejolt.io/indiesvspewdiepie). The jam started last night at midnight (EST) and will be ending on Sunday night (also midnight, EST).

The theme was basically just humor and games that are as fun to watch as they are to play. I came up with the idea of Acrobatic Bull In A China Shop. The game is about guiding a tiny bull through a series of shops and smashing pots and dishes within a given time limit.
Continue reading “#IndiesVSPewDiePie Jam”

#IndiesVSPewDiePie Jam

Solo Game Jam #1

12:09 AM

A few months ago I started doing ‘Solo Game Jams’ during late night tweeting sprees. I realized that my follower count was very proportionate to the number of GIFs that I was tweeting so I came up with a fun way to experiment with ideas and half a constant stream of content.

Theme

Tonight is one of those nights. The theme is: OBSCURE SPORTS. I had several ideas today after looking into Jan Willem ‘JW’ Nijman’s tennis game, TENNNES. For those of you who don’t know, JW is one half of the dutch independent studio, Vlambeer.
Continue reading “Solo Game Jam #1”

Solo Game Jam #1

DevLog: Creating a Platformer Pt.5

DAY 8

Just a disclaimer here, ‘week one’ of development is complete. However, what you see within this devlog (up until now) is NOT the current progress that has been made on this project. I am purposely working around any content that contains spoilers or reveals much about the game. The game is scheduled to be announced next month. From there I will be more open about development.

Tonight I’m going to talk about some other simple things that I added throughout the days. These features aren’t something that you may need during week one of development, but I want to get it out of the way and share as much as possible prior to announcement.
Continue reading “DevLog: Creating a Platformer Pt.5”

DevLog: Creating a Platformer Pt.5

DevLog: Creating a Platformer Pt.4

DAY 7 (Cont.)

Last night I talked about with() and ‘other’ and how you can use them to approach your code structure in a new way and hopefully, a simpler way. I also started to use these techniques to start tackling moving platforms.

I added both horizontal moving platforms and sub-pixel movement to the platforms last night. Again, to add sub-pixel movement, I collect the rounded sub-pixel numbers and add them to the movement calculations when they exceed a whole number.
Continue reading “DevLog: Creating a Platformer Pt.4”

DevLog: Creating a Platformer Pt.4

DevLog: Creating a Platformer Pt.3

DAY 7

It had been roughly a week since I’ve had any public updates on this project. I had a busy Halloween weekend and I was also wrapping up some contract work. On top of that, I have been poking at some pixel art. I’d really like to have the freedom to create my own games, both technically AND visually. If I decide to practice pixel art more regularly, I’ll start a log about that too.

ANYWAY, changes since the last post:

1) I decided that I would be needing jump through platforms. There are collision objects that are only collide-able when you fall on top of them from above. Basically, you can jump up through them, then fall back down to land on them.
Continue reading “DevLog: Creating a Platformer Pt.3”

DevLog: Creating a Platformer Pt.3

DevLog: Creating a Platformer Pt.2

DAY 1 (Cont.)

I’ve had quite a bit of positive feedback in response to this devlog! I’m super happy about that and would love to post updates ‘somewhat’ daily. I say ‘somewhat’ because I am bound to miss a day here and there, BUT I’d love to make this a regular thing!

I greatly appreciate the shares, retweets, likes, etc!
Continue reading “DevLog: Creating a Platformer Pt.2”

DevLog: Creating a Platformer Pt.2