Gearend - 2D Metroidvania

this game looks really great and fun too

You should add a character like Samus…
Metroid is the best game series besides MegaMan!

Hah, hit the bandwidth limit for Photobucket… :frowning: Guess I’m popular, haha. They’ll come back soon.

Anywho, I took some time to make some videos - a tutorial on recording gameplay footage with Open Broadcaster Software, and one examining an indie game from 2012 called Inescapable. Check 'em out on my YouTube channel here.

I’m working on NPCs now; I have an idea in which when you enter an area that you’re unfamiliar with, you won’t be able to access their network, which means no MAP and no MAIL. If you’re granted access or restore the network if it’s down, then you’ll get a map available from the MAP screen, and be able to accept and check e-mails from the MAIL screen.

This NPC is the guard of the first village area.

How about media fire? I’ve never had any problems with it and find it to be a great way of hosting both images and large things such as demos or example blend files.

I’ve been using it on and off for about 5 years and I’ve used up less than 1% of the free storage (50GBs)
Also there’s none of the crappy adds you get when ever you try to view a photobucket image in more detail.

The overall look really reminds me of Cavestory, especially the chat boxes. I assume you’ve drawn some inspiration from there (if not in this project, maybe in others)?

Also, as long as the player is able to “unlock” the map/e-mail near the beginning of the area, the idea seems really solid.

Yes, I had a similar idea for my 7day roguelike entry this year, but I never got it finished. It could give two levels very different feel to them, even if they’re pretty similar. My own plan was to have the map revealed slowly by the player’s exploration, but they could find a map terminal and download the whole level map if they had the right hacking skills.

@Link - Yeah, there is a bit of CS inspiration here. It was a lot stronger in Cave Story, though, actually!
w

@Smoking - Maybe I’ll try them or another hosting service. Google’s Picasa Web Albums gives me a nice amount (15GB, which I doubt I’ll cross anytime soon) and no bandwidth limit (as far as I can tell), though it’s a bit awkward to use.

Anyway, I spent some time trying to figure out what to do for a pause menu.

I started off with a menu that was a screenshot of the main game that the camera would zoom out on. The different choices of the game (Items, Options, Map, etc) would encircle the screen and you’d press the left and right buttons to spin them and select one. I got the zooming and screenshot-taking part to work, but the result looks really, really boring.

After that, I decided to actually put some thought into designing the menus. It felt a little weird since I actually wanted to work on the game instead of draw, but this could be the only way to make an actual intelligent, interesting menu, haha. Burping things out isn’t a good idea - planning is the way to go! :o

This menu’s (obviously) very scratchy, but gets the kind of idea I’m going for across - a kind of “futuristic hologram” view. I like the colors, though it kind of looks “Deus Ex-y”, in a sense. I don’t like that dead space in the center. I would probably make the menu a single row of the several options that you would just cycle through horizontally.

This menu is a lot more game-like, and kinda feels like a Square Enix game, in a way. I was thinking about the basic main menu in Kingdom Hearts, actually, with the choices on the left and the smaller (not full-screen) opening menus opening on the right (if I recall correctly). I liked the blurred background and the way the game focuses your eye on just what you have selected - just the basic stuff about the KH menu, really. My mockup possibly lacks the HP and SP gauges, but I don’t know how useful it would be to have them here. It could be kinda necessary to see that stuff here if you could be low on health and need to use a healing item. If there’s no ability to revive your gauges using items, though, then there’s no real need to display them.

I think saving and equipment could also be on this screen, tthhough I think I’ll make it so that you can only save or equip things at a save point. That way, I don’t have to code an entirely separate menu, and you have to put thought into your loadouts before you proceed too far away from save points. I have a few ideas for parts that could be fun - coming up with new ones shouldn’t be too difficult.


Also, I started moving the GUI back over to Blender and Python as opposed to using a purely Python-based solution like I had before (BGUI). BGUI’s great, but I’m not really using all of it (i.e. themes, anything but the image and label classes, etc.), so it seems a bit more than necessary. Building something this complex kinda needs a more visual approach toward positioning the elements, I think. It’ll take a bit of time to complete, but I think it’ll be worth it in the end.

As a side-note, I think if I were able to develop the BGE a bit, I’d like to add to the Text object. Alignment could be nice, and color and effect escapes would be really cool, as well (i.e. “My %FF0000husband %FFFFFFalways sleeps late on the weekends!” would have all the text be white (by default, as well as the second escape sequence) except for “husband”, which would be in red). That’s just an idea, though, anyway.

Really great work SolarLune :cool:,this game looks already top quality by far one of the most professional and interesting 2d games so far.
I really like the second menu :).

Good luck.

Thanks a lot, Fenice!

So today I finally figured out how to apply a shader on top of a rendered-to-texture image. I’m running across a bug where it doesn’t always apply; gotta squish it, but it’s on its way.

this is ace!! Well done. Cant wait to see it completed :slight_smile:

So your game is a plane that is a video texture of your game?

Is that only the pause menu?

@Robo It’s all on a vido texture, yep.

I didn’t do much in the past few days, but I did implement a little scripting language for events.

Basically, I have a dictionary (associative array) in Python that will contain all of my events in the game. I also have them indexed by language (like I’m gonna add translation support to this, haha). I doubt I will have translation support as a first priority, but building it in is a good idea, I suppose. I might end up moving all dialogue to another file to make it easier to translate.

Anyway, the event is represented by a raw Python string. I use the shlex module’s split function to parse the individual “instructions”, or lines in the event. The shlex.split function kicks out the blank lines, creates lists for each non-blank line, and separates the line into elements of a list for every separate word that isn’t in quotes. The function does all of this for me, which is really convenient, turning this:

r"""

setfacepic 0 1

dialog “HALT! Or slow down, or whatever.
Who are you?”

“”"

into this:

[

[‘setfacepic’, ‘0’, ‘1’],

[‘dialog’, ‘“HALT! Or slow down, or whatever.
Who are you?”’],

]

Once that’s done, I add the instructions to a list. From this point, I just grab the current instruction to be completed, and when finished, increment that counter.

My Parse() function actually executes the code (guess I should have named it “Execute”, haha) with just a series of if statements to find out what function was called (what first word the instruction has), and what arguments it was called with (what other words the instruction has).

For example, the dialog function displays a message; the only argument is the message to display.

I also have optional arguments for certain functions (like the wait function, which will wait a specific number of seconds if you specify; otherwise, it will wait for 1 second).

It shouldn’t be too difficult to add new functions, which is great.

Spent a lot of the weekend learning about Godot. It’s an interesting engine for sure!

I’m working on making the village actually look nice. It’s funny; now I have more ideas for how I want this to look.

Anyway, I’d like to implement some mechanics and get some important stuff done soon.

Yesterday…

I tweaked the Bloom filter to only affect brighter areas. I’ve tried this before, but I think I did it correctly this time. I used to use a luminance calculating function to compute overall brightness, but this would fail on certain colors that actually would be pretty bright (like red). Now I’m just getting the maximum value between the three channels, which is enough to tell what should be “Bloom”-ed and what shouldn’t. There used to be a noise function tied in to make the bloom more interesting to look at, but I can’t really get it to work with the shader since it’s selectively blooming stuff, so whatever.

This makes it more even overall for certain bright things to bloom (i.e. not the trees), but I think I’ll have to recolor some things (i.e. the backgrounds are now pretty dark).

Added an ability to set the pitch of the played back “beep-beep-beep” noise when you’re talking to an NPC, so small characters can sound all [sup]beepbeepbeep[/sup] and big characters can sound all beepbeepbeep. Also added the corresponding function to my event system.

Today…

I spent a lot more time than necessary trying to hunt down a bug, but I (hopefully) managed to make the door system work between scenes. This was pretty much necessary to do since I wasn’t gonna build the entire game in a single scene. It should be a slight loading process in the transition between scenes if you haven’t visited the scene yet (around 4 seconds or so). I think it only takes that long once, though (unless the BGE frees the resources, which it might if it needed to). Anyway, doors still work between each other in the same scene as well, which is good if I wanted to allow characters to move through doors (though I doubt I’ll implement that, now that I think about it).

I refactored the way the screen filters were taking effect and am making use of a single scene for it now rather than trying to cram them in with the object, which makes it easier to see and deal with. I was using an entire render to texture method to render out the game scene to a texture to blur on the pause screen, when someone at the BlenderArtists forums reminded me that Blender’s screen filter system works on the current scene and every scene below that. So I just push the shader onto a camera (doesn’t really matter what object it is) that’s above the game scene (but below the GUI). It’s working quite well so far. A nice, modular solution to offset the horrible non-modular rest of my code where the player and other stuff can be accessed globally but it’s a different player reference between each scene and aaaaahhh

I’ve gotta find a better way to “encapsulate” things…

Gotta be careful of my FPS now that I’m getting into shader work and stuff, but I have a couple of ideas of how I could speed things up a bit as necessary. I hopefully will be able to maintain a nice high FPS value.

Anyway, progress continues.

this game looks just great SolarLune!
You make great progress and I am looking forward for the next video dev log. Because in motion a game looks always better than just a screen of it.
One of my favorite threads here on blenderartist!

Wait, since when does the screen filter work that way? I haven’t used filters since 2.49 because back then they affected every thing. :frowning:
Has it been sorted out or is screen filter something different to 2d filter?

EDIT: Well I’ll be a monkey’s uncle! It does work just as you described. That’s the most amazing thing I’ve heard all day (except when my son was using half a bagel as a toy telephone).

I may actually try using some of the filters now that I know that.

EDIT2:
Some of the effects I tried also took the overlaying objects in to account when doing calculations, such as the motion blur which left a trail behind my custom cursor (which is in the overlay scene). However it didn’t blur the cursor when it wasn’t moving but the background scene was, so there are somewhat unpredictable results in some cases. The good news is that there was almost no slow down of rendering with most of the stock effects I tried.

Watched your latest YouTube video last night. Some great progress. I think you should utilize your blurring technique for background and foreground graphical elements to create a sort of depth of field. Your camera shake effect, I think, needs to be less about rotation and more about movement; short shaking movements. When exporting the game, please will you upload HD textures. There is an annoying thing with the textures when the camera moves that I experienced a while back in one of my game projects. Having higher res textures would fix this (just upscaling the textures)
I am really impressed by your progress. The game looks great so far!

Sent from my Galaxy Nexus using Tapatalk

Yes, I could see it in the video you uploaded yesterday and it’s something I’ve noticed in my own projects when using 2d tiles. Blender is sometimes performing some kind of mipmapping or antitaliasing on the edge of the tile which causes adjacent tiles to bleed in. It’s most noticeable when you have a dark image tile next to a light one or a red one next to a green one.

It happens when you use planes to represent 2d tiles, like I did here for a terrain set:


As MrPutuLips says, you can get around it by upscaling your textures or by downsizing your tiles in the UV unwrap screen. Just leave a border around each tile on your texture atlas and then scale the UVs of the plane by a small fraction. I usually use about 0.98 scale to make sure it leaves a 1 pixel border on a 64x64 tile. It may need a bigger % border if your tile sizes are 32x32 or 16x16. You can also use individual images instead of putting everything on a single 1024x1024 or 512x512 texture atlas, but this gets tedious really fast.

You can see here the slight gap between each tile on the UV layout:


@ndee - Thanks a lot!

@Smoking - Yep, that’s the way it’s been for awhile. I’m not sure, but it sounds like certain built-in shaders might not work, possibly due to using something other than pure color value changes (i.e. if it accesses the previous buffer frame, like the motion blur does, I think).

Your son using half a bagel as a telephone does sound amazing, haha.

@MrPutuLips - That DOF idea might work well, yeah. I’ll think about it. I like the camera shake as is, actually; the rotation gives it a unique feel.

I’m aware of the seam that Smoking refers to (I think), and you could either scale the UVs down or add a small margin of color around each tile to solve this. I think this is something that all engines do and you have to get around them in the same way (sizing down UVs or adding padding).

Never posted the video here, so here it is.

It took time and effort, but I finally got an actual map up and running. This would be relatively trivial in a traditional 2D game, but since this is essentially “HD” in that there’s no grid like old-school games, I had to use raycasts to find where the ground wasn’t, which is where you can walk.

I still have to add other stuff to the map, like exits, but whatever, I’ll get to it. The map won’t actually be visible all of the time; it’s going to be on the pause menu, perhaps in another menu (or perhaps just visible normally). I have to kind of decide on that front.