March172019

My friendo Dominic Ninmark is in full swing, making snazzy tunes for Gravity Circuit. 

Other progress stuff:
- Boss intros are in, art for ‘em is courtesy of @baconpal
- Game has been restructured so that it loads all its graphical and audio assets asynchronously, eliminating many little micro stutters that occurred every now and then
- Coded a way to detect the BPM of a track. This could be handy for some timing related things later.

March92019

Been a little while since I posted here due to various shenanigans.

So, what’s new?

  • Cutscene system implemented
  • Rewrote sfx and audio portions, particularly to support layered BGM like the video above demonstrates with the HUB theme (different parts kicking in at different times)
  • Made the game run smoother by reducing the amount of garbage generated per-frame, and properly implemented double-buffer rendering
  • Level select, as shown in the video above, is mostly finished; just missing a few things
  • Lots of various helper functions that make it easier to deal with shaders and color blend modes for sprites
  • Some gameplay stuff and misc other changes

Until next time, folks.

February162019

Anonymous asked: How do you optimize colliders of your maps? From one gif I've seen it looks like if you for example place 9 tiles in square shape one by one they will be merged into 1 collider rather than stay as 9, or a T shape will be optimized into 2 rectangles, how is it done?

When tiles get placed into the editor, it does these basic steps:

  • Check which regions of the map were affected, defined as “map cells” (in GC’s case it’s 25x15 tiles, a tile being 16x16 pixels).
  • Starting from top-left of an affected map cell, pick a tile that is not empty. Lets call this tile X. 
  • Check the tile to the right of X: if that tile contains the same collision properties, then mark it “consumed” and increase the width of X’s collision mask.
  • Continue doing this width-check until the right edge of the map cell, an empty tile or a tile with different properties (eq. maybe a damaging tile as opposed to a solid one) is reached.
  • Now, start comparing tiles below X’s entire width and see if for that entire width the collision properties are the same, and there are no empty gaps. If yes, mark all of those tiles consumed, and increase X’s height.
  • Continue doing this height-check until a gap, different tile or the map cell’s bottom edge has been reached. 
  • Store resulting X’s width and height, and put the resulting rectangle into a table.
  • Pick an unconsumed tile and repeat steps above for any tiles that remain unconsumed in the map cell, going from left-to-right, top-to-bottom.
  • After all tiles have been consumed in the map cell, take the table with the rectangles, and populate the physical world with it. Replace the original collision mask table for that map cell, if one existed previously.
image

(gif for visualizing what’s happening to anyone who might be reading; the red is the collision mask being generated)

That’s the basic overview, and the algorithm is basically akin to something like breadth-first check, or I guess more accurately width-first-and-then-height rectangle check. Of course, I’m glossing over a few details (when the collision mask generation is effectively done, tiles are simple FFI structs and do not contain any collision data by themselves, some corner cases, etc), but you should get the idea.

For physics themselves, I used kikito’s bump.lua for collisions, and rolled my own physics code since I don’t need all that intricate behavior. 

2AM

Anonymous asked: I saw some of your stuff on love2d forum, your gifs are really smooth, how do you record them?

The gifs I have posted on love2d forums were recorded using LICEcap. However, gifs recorded with LICEcap do not play nice with Discord’s compression (You need to click on the gif and “Open original”, otherwise the gifs may appear like epileptic messes), and it can really struggle along to maintain 60fps, usually hovering around 30~40fps. It’s still a nice and tiny program that works on both Windows and Mac, so if you don’t care about Discord or recording audio then you can use it just fine.

Because I want that smoother 60fps and occasional audio recording though, I have since moved to ShareX.

January192019

Lots of small gameplay adjustments in the background, but also working on new areas. Shown: the main mission area, from which you access the level select.

The tune is by my good friend Dominic Ninmark, and he’s looking for additional work, so if you have a project that needs some tunes, hit him up!

December222018

image

Have a good one, chaps.

December152018

Some adjustments to vertical traversal options. Namely, making it easier to climb up through a one-way platform with the hookshot, added a “hookshot drop” (down+hookshot while standing on one-way platforms) that automatically latches you below a one-way platform, and lastly, wall jumps. 

December12018

Unicode support, and rewriting my code for how text is rendered. With this, we’ll have proper support for translations later down the line.

November172018

Some more adjustments and bug fixes; like updated HUD and better handled explosion effects, as well as a proper death screen. You can also skip the little cinematic, so you don’t need to watch it in its entirety every time.

October272018

Anonymous asked: I can not get over how fun your game looks. Seriously, both the mechanics and aesthetics are absolutely MUAH. Can't wait to play it. ♥

image
← Older Entries Page 1 of 18