You have encountered Abstract Art.

Has it been two weeks already?  Tracking the Steam Summer Sale and playing around with shaders in GameMaker: Studio can really make you lose track of time.
Sometimes I tweet stuff on Twitter if the aforementioned stuff isn’t substantial enough to be turned in a full blog post.  If you haven’t done so already, you can keep track of those tweets on the sidebar on the right side of this blog or follow me on Twitter.
If you have been following on Twitter, then you’ll probably already know that I signed-up for and got into the ROM Game Jam, the first ever game jam to be hosted by the Royal Ontario Museum (ROM) in Toronto on August 9-11.  I am part of the same team that was making That Which Binds Us.  I say “was” because we’re focusing our efforts on the ROM Game Jam now, so That Which Binds Us has been put on hiatus for now.
Another tweet I made was about shaders.  Wait, I already mentioned that above. Anyway, I downloaded some shader scripts from this forum post on the Game Maker Community forums and, just for fun and curiosity, applied them to Gonna Catcha‘s drawing code. Although it wasn’t its main purpose, but the graphics code modifications I had previously done also allows me to apply a shader to the entire screen, but I wanted to do that anyway.  Two birds with one stone I guess.  

Here are the results of my shader experiment:

Once you’ve regained your composure from watching the trippy and completely unnecessary graphical effects, you may notice something new in the video.  The game randomly places rocks in the maze that act as destructible walls. (Rocks?! I thought they were just blobs!) This is to slow the player down and allow the spirits to better disperse throughout the maze.  However, the rock impede the spirits as well, making the whole thing kind of pointless.  Of course, they’re spirits; so my plan B would just have them, you know, pass through the rocks unimpeded. Preta can stay impeded by rocks, being corporal beings like the players.

One other big change I made to the game that might not be obvious in the video is the player movement code/rules.  Previously, the players had free movement; now their movement is restricted to the grid much like the spirits and preta are.  I did this to make turning around corners easier for the players. My previous solution had the players snap to a corridor if they were “close enough” to turn into one; it looked a bit weird and was a bit finicky.

Re-writing and messing around with the movement code did produce some amusing bugs in the process, something that hasn’t happened in a while.

(Wow, this post was longer than I thought. And I was worried that I wouldn’t have anything to write about! Harumph!)
Copyright © Quadolor Games. All rights reserved.

Come gather ’round people, and listen to two tales of programming lore…

The time between the last post and this one was longer than I expected.  I wanted to make a post earlier, but then I started on something neat and decided to hold off posting until I gathered my thoughts about it.  The result is a very long post about two topics: old display simulation and an audio engine update, complete with anecdotes of projects I did in the days of yore.  Brace yourself.  At least there are lots of pictures to look at.

Old Display Simulation

I’ve experimented with a few graphical overlays that will make the game window of Gonna Catcha look like an old CRT display.  As with the audio capabilities of Gonna Catcha, this is something new to me, so it will require some research.  I’ve already found some blog posts that talk about it, but the methods shown used pixel shaders, which GameMaker: Studio doesn’t support (well, at least not yet).

To get technical, you could code up your own pixel shader functionality into a GameMaker application using the draw and get pixel functions, but it will be very, very computationally expensive (i.e. it will make the game run very slowly).  I’ve done something similar with GameMaker before…

*flashback*

I’ve created a raytracer that renders several spheres on the screen in real-time without using GameMaker‘s 3D functions, just the 2D functions and mighty 3D geometry and trigonometry powers.  It could render at low resolutions fine (like less than 50×50), but once it goes beyond that point, it slows to a crawl:

This 50×50 scene runs at 8 frames per second…

…and this full-resolution frame takes about 18 seconds to render.
Yeeeah, I think I’ll stick with the built-in 3D functions for now.

*flash forward*

As interesting and colourful as my raytracer is, we should be going back to Gonna Catcha now.  Since I currently can’t use shaders, I’ll just have to make due with using foreground overlays and GameMaker‘s blending modes.  Below are some screenshots of the game with and without the various experimental overlays.  Click to magnify the screenshots, as the effects can’t be seen in the thumbnails.

Baseline (no overlay)
Scanlines only 
“LED billboard???” (Scanlines +   High contrast RGB dots)
“LCD???” (Scanlines + Low contrast RGB dots)
And here are some close-ups:
Baseline (no overlay)
Scanlines only 
“LED billboard???” (Scanlines +   High contrast RGB dots)
“LCD???” (Scanlines + Low contrast RGB dots)
So far, I like “LCD???” the best, followed by having scanlines only, but both are still not quite the CRT look I’m looking for.  Nevertheless, I’ll continue to soldier on.

Audio Engine Update

In other news, BASS, the audio library I’m using for both Gonna Catcha and That Which Binds Us, has been updated to version 2.4.10, and I’m three and a half months late to the party.  This meant that I needed to update BASSGMS, my wrapper library that makes BASS and GameMaker understand each other, as well.  Oh, and I know very well the troubles that can occur with incompatible libraries due to version differences.  Yes… very well.

*flashback*

When I was doing my Master’s at UOIT, I used BASS and a precursor version of BASSGMS for one of my projects.  One day, my project kept crashing on my lab machine, yet it ran perfectly fine on my home computer.  I spent a long time looking over my code and even inserted test and debug functions into it to make sure the outputs were correct, but no matter what I did, the program still kept crashing in the lab but not at home.  I forgot what gave me the idea, but after several hours I decided to look at the version numbers on the BASS DLL on both the lab and home computers.  It turned out that the DLL on the lab machine was a few revisions behind, so I downloaded the latest version of it and, lo and behold, the program stopped crashing.  And then I was enlightened.

*flash forward*

So anyway, I fired up Visual C++ and recompiled BASSGMS, no problem here.  I also took the opportunity to give GameMaker more control over BASS by add more functionality to BASSGMS.  In the end, I created a GameMaker:Studio application to test out the new and improved BASSGMS 0.3, which does things that are probably not even needed in my current game projects, like tempo control and monitoring CPU usage, but it’s still nice to have them there for future projects.

Not captured in picture:  animated, cycling rainbow effect.
Most likely not need in either project.
Copyright © Quadolor Games. All rights reserved.

Update Double Feature!

Gonna Catcha

Most of the work I’ve done on Gonna Catcha are behind-the-scenes coding stuff that won’t show up in screenshots.  I need to fill in all the gaps (so to speak) so that I can release a proper demo version of the game as soon as possible.

The one thing I did that I can take a screenshot of is this:

All arcade games I’ve encountered run a self test to check their own hardware when switched on.  To give my game a bit of authenticity, why not put one of these into it too, even if it is completely bogus and ironic.  In fact, I might have a little fun with it. (twiddles fingers) >:)

That Which Binds Us

Our team still hammering out the details of the design document for That Which Binds Us.  We have some concept art for some of the levels in the game, which I may put up here later.

One thing I can show right now is the main gameplay theme for the game.  It’s pretty much what you’ll hear in the final game, barring any minor adjustments:

Next, I would like to take you back to that mystical time period known as the early 90s, when sound cards had synthesizers so bad that it turned the MIDI file into the scapegoat it is known as today. This is the same theme played using the Sound Blaster 16’s FM MIDI synthesizer. I actually started composing using this sound card (Sound Blaster 16) in the late 90s, so it holds a special place in my heart, even if it does sound bad.  This track may or may not be in the final game; I just made it for fun.

Copyright © Quadolor Games. All rights reserved.

Adventures in Downtown Toronto, full of games and excitement

Woo! New colour scheme!

This past weekend, my formerly-TOJam team, “Robots Mashing Keyboards”, and I met to discuss our formerly-TOJam project, That Which Binds Us.  We officially have started the project and are now writing down everything we need to do to make this game come into fruition.  Here is the premise of our game:

“Oh no! I forgot to feed my dog and the store is closing in just five minutes!”

In this game, the player must walk their very hungry and impatient dog to the pet store to get some food before it starves.  The task is not a simple one as many distractions stand between you and the store.

Once we get more details hammered out, I’ll make a proper info page on the project just like I did with Gonna Catcha.

In other news, I also went to the Toronto Comics Arts Festival (TCAF) on Saturday with my friends, the other members of “Robots Mashing Keyboards”.  The event was hosted in multiple locations far apart from one another, so we decided to go to the one nearest to us, Bento Miso.  It was hosting the Bit Bazaar on that day, where a whole bunch of indie game devs were showcasing their works with playable demos and selling special copies of their games and other merchandise.

I got to (very briefly) talk with Christine Love, creator of Digital: A Love Story and Analogue: A Hate Story.  I bought a set of postcard prints featuring the two main characters from Analogue, *Hyun-ae and *Mute, from her, because I just like the game THAAAAAAAT much. 🙂

Some of the other games that caught my attention were:

  • Lovers in a Dangerous Spacetime by Asteroid Base – a 2-player co-op game were both players operate a spaceship to defeat enemies and rescue planets from invasions.  The control consoles for each of the ship’s systems (turrets, shield, thruster and laser) are spread throughout the ship, so the players must navigate through the ship’s corridors and ladders to switch between them.
  • TBRS [Turn Based Rhythm Shooter] – “Part bullet hell, part music game”, TBRS has the player and enemy try to shoot each other in turns.  First, the enemy will attempt shoot the player using various bullet patterns in rhythm, which the player must avoid, and generate a sequence of button presses (L, R or L+R).  Next, the player must match that sequence in order to shoot back at the enemy. The player must also move into the proper position so that their shots don’t miss (which varies depending on the weapon used).
  • Super T.I.M.E. Force by Capybara Games – A run-and-gun game (like Contra) featuring a squad of different playable characters, each with their own unique abilities.  Like in Braid, if you die, you must rewind back to a previous time in order to continue playing.  Your past attempts will aid you subsequent attempts to progress through the level and you can even save them from death to get lives back.
And some of the games my friends were interested in were:
All in all, it was an inspiring day.

Copyright © Quadolor Games. All rights reserved.

He jests at time that never felt good use. But, software! What game doth yonder team projects?

It’s been another slow week or so.

Yes, I know things are moving a bit slow for Gonna Catcha, but fret not as I did make some improvements to the spirit sprites. (Hmm, I’m getting déjà vu here.)  I added some animation to them to make them more lively. *BA-DUM TSSH*

(hold for groans and boos)

No one suspects the spirits with the shifty eyes!

If I get the scoring system done and add a a title screen, I can release a demo version of the game.  And that would be just super.  🙂

In other news, it turned out I did make it into the Toronto Game Jam 2013, about 15 hours before the event started.  Some people had cancelled their confirmations, so there were spots open for my team.  Unfortunately, my team members had already made other plans for the weekend since when the initial rejection email was sent out, so we had to decline as well.  Hopefully things will turn out better next year.

Despite all that, we’re still have our game idea; might as well not let it go to waste.  We decided to go ahead and make the game anyway in the near future.  I’ll write about our experiences here.  Also, it shouldn’t take too much time away from Gonna Catcha, so I’ll still be working on that concurrently.

Copyright © Quadolor Games. All rights reserved.

Time really flies you’re eagerly awaiting something.

I haven’t been working on Gonna Catcha as much this past week, mostly because I was distracted by the Toronto Game Jam that is happening next weekend: coming up with ideas and eagerly awaiting the confirmation email.  Today, I received note that my team was still on the waiting list of participants (they received ~100 more registrations than spots available).  Here’s hoping that additional spots will become available in the coming week.

I’ve been working on some ideas for the theme music for the TOJam project, this is what I have so far:

Now back to our regularly scheduled programming…

The last thing I was working on for Gonna Catcha was the pathfinding for the Vengeful (left) and Bashful (right) spirits.

As described in this post, Vengeful spirits move toward the position of the player while Bashful spirits move away from the player.  For the former, GameMaker has built-in functions for grid-based pathfinding.  “This will make my job a whole lot easier”, or so I thought. *DUN DUN DUUUUN*
It turned out that the grid-based pathfinding system makes some assumptions on how you’ve setup you sprites, objects and levels (the wording in the documentation does hint to this).  To get the best results, you’ll need to design your game to accommodate the pathfinding system.  Unfortunately, Gonna Catcha is not one of those games.  It bows down to no one.

Below are some screenshots of different test cases with the pathfinding system.  I varied different attributes such as grid cell size and sprite origins.  The paths the Vengeful spirit takes are drawn in white (click to expand):
One of the major issues that I saw in the tests was that the Vengeful spirit sprites were overlapping the walls as they moved through the maze.  This is because the pathfinding algorithm doesn’t take the size or origin of the sprite into account when finding the optimal path.  I did manage to find a combination of sprite settings and cell size that eliminated the overlap (in the bottom-right image), the latter happened to be the old 16×16 cells that I previously abandoned for stifling my creativity.  
There were other nit-picky things that didn’t make the built-in pathfinding system suitable for Gonna Catcha, so I ended up coding my own.  It’s not as sophisticated as the built-in system, but it gets the job done.  In addition, it solved the problem of coming up with a pathfinding algorithm for the fleeing Bashful spirits (which GameMaker doesn’t have natively).  All I did was invert the Vengeful spirits’ algorithm.
Copyright © Quadolor Games. All rights reserved.