Well isn’t this a motley crew of small updates.

In the past two weeks I’ve been mainly doing a little work here, some more over there and a tiny bit all the way over there.  The updates are a bit difficult to stitch together into a coherent theme for a post, so I’m just going to list and itemize everything.

Item #1

Implemented the Hungry Ghost enemy into Gonna Catcha:

It’s current behaviour has it wander aimlessly in the maze like the Wandering and Straying Spirits.  However, if there is an item in the maze, it will move towards, consume it and then resume wandering and feeling remorse.  Also, you might kick yourself for not grabbing the item first. The Hungry Ghosts are harmful to touch at all times; they can be stunned or knocked out for a short period of time, but they cannot be captured, so they remain a permanent fixture in some rounds.
Item #2
Modified some of the rules for Pohena rounds:  if Pohena comes into contact with a good spirit, her movement speed will be reduced until she is no longer touching one.  They will slow her down enough for evil spirits or preta to catch up with and kill her.  Hopefully (or disappointingly for Pohena) this will make good spirits more of an obstacle as evil spirits are for Donum.
Item #3
New music for Gonna Catcha: Bonus Round!

Item #4
Rewrote some of the graphical and garbage-collecting backend code. The new graphics code fixes some minor graphical glitches that occur when upscaling the game window.
Item #5
Updated various parts of the blog:
  • The rules section on the Gonna Catcha info page has been updated with the info in Item #2.
  • The descriptions of the non-player characters from this post are now on their own page, with the addition of the two new spirit types and slightly updated artwork for the spirits.
  • Rearranged some stuff on the sidebar on the right.
THE END
Copyright © Quadolor Games. All rights reserved.

Here comes a new challenger, and another one.

In my previous post, I talked about a test play of Gonna Catcha; when I played as Donum, chasing down fleeing Bashful Spirits (left) while evading pursuing Vengeful Spirits (right) provided a decent challenge, but when I played as Pohena, things became far too easy. What can I do to try and fix this?  Why not just swap their behaviours?

Today, I introduce to you two new spirit types:  Bothersome Spirits (left), who follow Pohena around and get in her way (increasing the chances of friendly fire), and Anxious Spirits (right), who, fearing what punishments await them if they’re caught, flee from Pohena.
Also, the addition of these two spirits also rounds out the rogues gallery pretty well:
I added the two new spirits to the latest build of Gonna Catcha, along with some changes to the spirits’ movement code to make them spread out more and less likely to move together in groups.  This is the result:
Pohena rounds now feel a bit more challenging, but they still lack a certain something.  I think the good spirits need to be even more detrimental to Pohena’s goal than just taking points away in order to make her levels more interesting.
Copyright © Quadolor Games. All rights reserved.

This thing doesn’t have Free Play yet. Got any quarters?

Alright, it’s the moment you’ve all been waiting for. …Okay, some of you. …Okay, mostly me.

Here’s a video update of Gonna Catcha, showing the game in it’s current glory:

After playtesting the game for a bit, I’ve come to realize that the Pohena rounds are too easy.

Chasing around the fleeing Bashful Spirits (above left) while avoiding Vengeful Spirits (above right) provides a good challenge in Donum rounds, however the behaviours of the same two spirits make Pohena rounds a breeze. Bashful Spirits generally stay out of your way, reducing chances of friendly fire, while Vengeful Spirits home in on Pohena like lambs to the slaughter.  I haven’t put in the Hungry and Vagrant Ghosts in the game yet, but I don’t imagine them making Pohena rounds that much more difficult (they are designed more to be nuisances than threats).  In light of this, I made have to add additional types of spirits, one for good and one for evil, to balance out the gameplay.

Find out on the next exciting episode of Dragonba-  err, I mean Quadolor Dev Blog.

Copyright © Quadolor Games. All rights reserved.

So much to talk about, so little time to write about it.

I seem to be falling behind on my plans to update this blog once a week.  Every time I implement an idea and am in the middle of writing about it, another idea comes to mind.  I end up holding off writing my post to execute the new idea so that I can put that into the post too.  I need to a way to synchronize my blog cycle and ideas cycle together…
Yeah, I  don’t think that would work very well with only one person.

For the same reasons, this update is just another text + screenshots update instead of the video update I had planned earlier, which would have shown the game as it is now in action and demonstrated the audio as well (mostly the newly added sound effects).  I guess that will have to wait for another time.

Anyways, there are four things I would like to talk about today:  New HUD, Title Screen, Vector Stuff and Shaders.

New HUD

First up, I’ve made some changes to the gameplay and HUD (the two are related).  Below is a screenshot of the current in-game display:

HUD 3.0

You will see that the HUD now takes up both the topmost and bottommost portions of the display, making the levels themselves slightly shorter.  First, let’s have a closer look at the top HUD:

New top HUD

And for comparison, let’s throw up the old HUD here as well:

Old HUD is old.
Aside from the different colours and the fact the second player isn’t active, there two main changes to the new HUD, which also reflect changes to the gameplay:
  1. A score counter is now where the life counter used to be in the top-left.  Previously I wanted the score to be tallied at the end of each level (in the style of games such as Battle City and Ice Climber).  However, I’m making some changes to the scoring system that would make that tally system impractical, such as rewarding more points per spirit returned to the shelter/jail in a single trip (think along the lines of Pac-Man‘s scoring system when you eat multiple ghosts in a row).  I may still have an end-of-level score tally for bonus levels.
  2. Remaing spirit counters are now where the round counter used to be in the top-center (not to be confused with the in-hand spirit counter just below the score).  In the original round flow, all the “target” spirits you needed to capture for a particular round appeared at the beginning of that round.  There was a maximum of 5 spirits you needed to capture per round; I felt that this number was too low and made each round too short.  Increasing the maximum number made the level too crowded when you also take the “nuisance” spirits (i.e. the ones that you don’t need to capture) and hungry/vagrant ghosts into account. Also, it was also balanced out by the spirits clumping together, making it easier to capture more in a single “trip”. My solution for this is to have a 4-5 on-screen spirit limit and then spawn more when the number on-screen falls below the limit (much like Pengo and Battle City, again).  The remaining spirit counters show how many spirits have yet to be spawned.  

Now let’s look at the bottom HUD:

New bottom HUD
This is the new home of both the lives and round counters.  Also, the lives counter uses character icons now rather than hearts.

Title Screen

Next up, I’ll briefly show and describe the title screen, which is still under development:

What? It didn’t say “Coin chute required” in the system requirements!
I want my quarters back!
There are still a few things I need to add to it:

  1. A graphical title to put up top rather than just having “G O N N A   C A T C H A”
  2. in plain text.

  3. a score table (so player will know what is worth what in the game).

Vector Stuff

Next, have a few vectorized spirits:
Two down, four more to go.

Shaders

Finally, if you haven’t figured it out already,

Shaders are coming coming to GameMaker: Studio 1.2, which is just around the corner.  I can wait to see what kind of 2D graphical hijinks I’ll get into when it does, such as better CRT monitor simulation. (Maybe?)

Well, so long. See ya next time.
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.