Showing posts with label GameMaker: Studio. Show all posts
Showing posts with label GameMaker: Studio. Show all posts

Tuesday, April 22, 2014

My GM48 10 submission: Fodder Cannon

Out of the blue, I decided to participate in the GM48 10 game jam held on r/gamemaker on Reddit. The theme was "Guns that don't shoot bullets". So I decided to make a game with guns that shoot minions at your opponent, and kick them into submission. Here is the result: Fodder Cannon.

You can download the game from itch.io.


Kick, punch. It's all in the mind.

I regret nothing!

It's been a long day.

Sometimes you just can't win. ¯\_(ツ)_/¯

And here's a time-lapse video of the process:




And here is the brief post-mortem I posted on r/gamemaker:

Did you succeed with your plans?

Finishing a full-playable game? Yes. Finishing absolutely everything I wanted to do? No. I wanted to implement a single-player option in my game but didn't have the time.

Did you come up against any obstacles?

The only obstacle I came across was a technical one. I had been testing my game on both the Windows and HTML5 platforms during the jam so that I could release a standalone and a web version of it afterwards. During the last hour of the jam, the health and ammo meters stopped working in HTML5 for some unknown reason, so I decided to drop it for the jam since I figured my time was better spent on polishing the Windows version.

What did you think of the theme?

This was the theme I wanted to do most. I was pleasantly surprised when it was actually chosen.

Did you learn anything new?

  • When I don't filter character and graphical designs in my mind and just draw whatever I feel like, things get a little bizarre.
  • I can compose something resembling background music in as little as two hours. I think it still needs a lot of work, but it turned out better than I expected.

Saturday, January 4, 2014

This game plays so good, it plays itself.

Welcome to the first post of 2014! I'll been working on the autoplay system (for the "How To Play" segments and the attract mode) for Gonna Catcha since the last time I posted. And since it's also been a while since I uploaded something on my Youtube channel, let's make it a twofer; here's a short video of it being tested:


As I was coding this, I realized that creating the autoplay system would have been a lot easier if I was using Game Maker 8.1 instead of GameMaker:Studio to make this game. That's because games made with Game Maker 8.1 could be coded to be dynamic at runtime. That is, you could add, remove or change graphics, sounds, rooms and even code while the game is running.

So what does dynamically-generated game assets have to do with the game playing itself? Well, the assets of interest in all of this are timelines, a series of code snippets that are run at assigned steps in time. Once a timeline is assigned to an instance and is set to run, it will automatically fire off the code snippets at their predetermined times. If I was using Game Maker 8.1, I could record player input to a file and then save it to the disk. Later, when I want to play the input back for demo purposes, I could read the data from the file, translate it into a dynamically-generated timeline and let Game Maker (and my player input code) handle the rest.

Unfortunately, due to cross-platform incompatibilities, the ability to dynamically add and change game assets at runtime had been restricted in GameMaker:Studio. In particular, most of the dynamic coding functions are gone. Fortunately, the all of the dynamic timeline functions survived the cut; well, all of them EXCEPT the function that allows you to ADD new code to a timeline. Without this function, this function, it is impossible to created new timelines with new code from scratch on-the-fly, pretty much destroying the above method of creating an autoplay system with a surgical strike.

In light of that, I tried to think of other ways to do this. First, I tried to record the player input into a human-readable format then manually translate and hardcode it into a timeline. However, this method was too tedious and took way too long to do, and if I wanted to re-record a play session, I would have to retranslate everything from scratch. Next I tried to build the timeline from scratch, but it was also too tedious since it was too hard to predict NPC movements, even though the random seed was fixed.

In the end, I decided to create my own timeline system. It's not as through or functional as GameMaker:Studio's native timeline system, as it can only take control of the player characters, but it'll do.

Thursday, November 28, 2013

High five! I mean, ten!

Last week, I updated Gonna Catcha to v.0.7.4. It was pretty much a knee-jerk response to some issues I encountered when playtesting it last night at Bento Miso. It added an option to toggle a fullscreen mode, to hide your desktop and other windows behind black while you're playing, and a few bugs fixes. Unfortunately, being a knee-jerk response, I didn't test it properly and there are a couple of bugs with the fullscreen mode, though the bugs don't interfere with normal game operation.

In addition to fixing these bugs, the next version, v.0.8.0, will replace the single high score of the current version with a high score table (or two). Here is a screenshot of what it looks like so far:


In addition to keeping track of the top ten scores, it will keep track of the other standard high score information: player initials and the highest round reached. I am considering a second, separate high score table for co-op mode, which will also keep track of which character the player used.

Well, that's all I can do to make this sound bigger and more important than it really is. I'll be doing another meatspace test this Friday. I should really try to finish this before then.


In other news, when I woke up today, I was greeted by this on /r/gamemaker:


As someone work mainly works with vectors for higher-resolution artwork (i.e. not low-res retro sprites), I am pleased by this turn of events.

Saturday, November 2, 2013

Greetings from Gamercamp!

It seems like a long time since I last wrote a post. Since I've released the beta demo of Gonna Catcha, I have been less compelled to write about it since it's much easier to learn about the game by playing it than sitting here reading about it. Also, I was going to post about the International Archaeology Day playtest session with Rise & Fall, but the post ended up being not very interesting on it own, so I'm going to combine it with the Gamercamp playtest session post I'll write about after Gamercamp, which is happening right now. Yay.

In the meantime, I suppose I can talk a bit about what was added to Gonna Catcha since it's release. Aside from several major bug fixes that somehow slipped through my keen eye, the biggest update to the game is the inclusion of several new options in the game's Service Mode (fancy arcade talk for "Options Menu").

Well, there's your problem.

I feel like I'm being very thorough with the amount of customization you can do with the game, and I haven't even put in the sound test or let the player customize gameplay settings yet.

During the development of the co-op mode, I had difficulty deciding how to bind the controls to what keys on the keyboard without the two player bumping their hands into each other. Also, what might be the ideal key bindings for co-op might not be for single-player mode and everyone has their own preferences on what the best key bindings are. In the end, I decided to let the player(s) figure out what controls work best for them and put in a key configuration menu.


UNLIMITED POWER!

This is the first time I've made a key binding system for a game and it turned out to be less trouble and error-prone than I imagined. GameMaker: Studio has built-in functions for rebinding keys, but I ended up creating my own solution.


With great power comes great responsibility.

I have received some feedback from people who played the demo. Aside from pointing out the bugs, most have praised the retro arcade art style and audio of the game, saying that it's quite accurate and devoted. One thing that came up was some people had trouble getting the game started because they couldn't find the "Insert Coin" key. So to help new players, I added "key reminders" on the title screen to help them get started.


I don't understand your crazy
moon controls!

I also made the list of default key bindings clearer in the manual (if people actually read that thing). for those acquainted with the controls, there is an option in Service Mode that allows you to turn the reminders off for a more authentic arcade experience.


Oh man. *tap* *tap* Which button is it?
*tap* *tap* *tap* *tap*

What would make it even more authentic is an entire arcade cabinet, but let's not get ahead of ourselves.

Thursday, September 26, 2013

Where Is That Thing You Were Working On Several Weeks Ago Now?

Okay, I've held off publishing this post for two days now, time to stop writing and actually do it.

(But there just this tiny little thing I want to ad-)

Nope. We've live. Wait, who are "we"? I'm talking to myself again. Anyway...

On this episode of Where Is That Thing You Were Working On Several Weeks Ago Now?, or W.I.T.T.Y.W.W.O.S.W.A.N.? ("Witty Woss Wan"?), we have a gander at Rise & Fall. You know, the thing I worked on as part of the team Robots Mashing Keyboards for the ROM Game Jam. (Oooh, that thing.)


Quite a few things have been added or changed since the ROM Game Jam prototype. The biggest change is the inclusion of jump-through platforms (i.e. platforms that can be passed from below but not above). The original prototype only had completely solid platforms, but to have a greater number and density of platforms in the level, my team decided that we need to have jump-through platforms as well. Seeing how something like this should be Game Programming 101, I should have learned how to do a long time ago, but never did until now. Still, I had to learn it from the source code of this demo by Bill23. Even then, it took me two attempts to get it working right. Other changes are relatively minor, such as adding mercy invincibility, or bug fixes. We will also be changing up some the graphics and adding more levels before the playtest session at the ROM on October 19.

During the development of Rise & Fall, I had encountered the weirdest glitch I've ever seen in all my time using GameMaker, even weirder than the ones I've seen while working on Gonna Catcha. Furthermore, I don't think it was (entirely) my fault:


It looked as though GameMaker didn't rebuild the asset cache after I deleted some objects from the project, so the game ended up drawing the wrong sprites and even creating the wrong objects (i.e. the projectiles seemed to have been replaced with experimental wall section object I had been working on). Clearing the asset cache and rebuilding the game once more fixed everything.

Speaking of Gonna Catcha, nothing visually interesting has happened with it since the last update, so no video or screenshots for you. However, I did completely overhaul how the game handles round progression, now incorporating the NPC speed multiplier I talked about last time. Alright, that another task down for Gonna Catcha, what left? I really should make a list of these things.

Thursday, September 19, 2013

They've gone to plaid!

Today is the Mid-Autumn Festival and also various other full moon-related holidays in other parts of the world.  I thought it would be appropriate to post something about Gonna Catcha today because:

Mid-Autumn Festival --> harvest festival --> harvesting of souls --> psychopomps --> Pohena and Donum
Full moon --> werewolves --> wolves --> Pohena and Donum
Q.E.D.

Actually, I lied; this has nothing to do with any holiday, it's just a coincidence. Anyways...

A week ago I posted a video of gameplay from the playable alpha of Gonna Catcha, and since then I've gotten some useful feedback and suggestions. One of them was the to increase the speed of the spirits and pretas as the game progresses. I thought this was a good idea, so I did just that: put in some code that allows the game to scale the enemy movement speeds:


16x speed is the maximum the game can handle; any higher will cause the spirits and pretas to break free from their imprisonment of the maze and shoot off into oblivion. However, anything higher than 2x just becomes too difficult and frustrating to play (even 2x was pushing it for me).
With this, I now have two ways of increasing the difficulty of the game:
  1. Increasing the speed of NPCs, and 
  2. Increasing the number of NPCs required to be captured and avoided in a round.
With the former, I think I won't have to rely on the latter as much to scale the difficulty as the game progresses, I can ramp up the latter much quicker and make the early rounds less boring.

P.S.  On a serious note, today is also a sad day with the passing away of former Nintendo president Hiroshi Yamauchi: http://www.bbc.co.uk/news/technology-24160150
As someone who started gaming on the Famicom and Game Boy and now the owner of a Wii U and 3DS, this news hit me hard. May he rest in peace.

Great, now I feel awkward for publishing this post today.

Tuesday, August 6, 2013

Congratulations! Your game has evolved into Alpha!

Up until today, Gonna Catcha was nothing more than a collection of protoypes, loosely connected together and couldn't work together as a whole game without changes to the hard code. 

Well that ends today. 

I've taken care of all the little things and filled up the holes to make Gonna Catcha a playable alpha (yes, I know I've called the previous versions of the game "alpha builds"; in hindsight I think that was jumping the gun a bit). It still has some game-breaking bugs, but at least the game progression is there now:


And just in time for Ghost Month, the 7th month of the lunar calendar, which starts tomorrow I believe. According to the various superstitions surrounding Ghost Month, I shouldn't be working on Gonna Catcha at all for the next 30 or so days, unless I want to be pestered by evil spirits.  Well, if anything goes wrong in the coming month, such as me losing all my work or my computer catching on fire, then I'll have a convenient scapegoat:

lolololol

On the 15th day of Ghost Month is the Ghost Festival. During the festival, the Heibai Wuchang 黑白無常, the Black and White Guards of Impermanance, supposedly appear and give people free money.  Depending on your cultural background, you may know them by different names:
  • Fan Wujiu and Xie Bi'an, 范無救  謝必安
  • Qiye and Baye, 七爺 八爺
  • Da Boye and Er Boye, 大伯爺  二伯爺
  • Pohena Das and Donum Dono 魄伊娜・達斯  當納睦・當儺
OK, I made that last one up. :P

There's more to Ghost Month and the Ghost Festival than that, but I'll save it for another day. Also, the ROM Game Jam is next weekend; I need to brush up on my HTML5 GameMaker skills.

P.S.  I updated Gonna Catcha's info page with a new screenshot and the video above.

Monday, July 29, 2013

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!)

Saturday, June 15, 2013

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.

Sunday, June 2, 2013

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 50x50), but once it goes beyond that point, it slows to a crawl:


This 50x50 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.

Sunday, April 28, 2013

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.

Tuesday, March 5, 2013

Fighting file corruption and tightening up graphics

One of the biggest annoyances I face when coding something is when your program suddenly stops working for no apparent reason.  It happened this weekend when I was working on Gonna Catcha.

I was just going abut my usual business when all of a sudden the game would no longer run after compiling.  My guess was that the project got corrupted somehow, so I decided to make it anew.  GameMaker: Studio's ability to easily transfer resources between projects and the fact that the projects themselves are just large collections of image, audio and XML files made this relatively painless.

In the graphical department, I made some major changes.  Not being much of an animator, I had a lot of trouble doing the side walk cycles for each character.  As of my last post, I had something that looked like walking, but it still looked awkward.  After reading this tutorial (which I had previously encountered during my undergraduate studies in game development in the days of yore), I realized that I was missing a "Passing" frame in the walk cycle, and that I made it overly complicated.  So after much tweak, this is the end result:


I haven't even finished Level 3 and I've already tightened up those graphics a little bit.

Friday, March 1, 2013

Gonna Catcha: In-Game Testing

Status report:

Here's some in-game test footage of Gonna Catcha, featuring Donum Dono as the test subject:

Monday, February 25, 2013

Gonna Catcha - An arcade-style maze game [Updated 4/3/2013]

UPDATE 4/3/2013:  This page is deprecated.  Here's the more up-to-date page:


UPDATE 3/17/2013:  Woo!  Coloured portraits!

The time has finally come; allow me to introduce my new game project.

Game Info



The game is called Gonna Catcha, an arcade-style maze game where the player(s) assume the role of one of two psychopomps in their duty to get spirits to where they belong.  What's a psychopomp?  You know, those guys that guide spirits of the dead into the afterlife.  You knowthese guys.

Wednesday, February 20, 2013

Stopgap Post

I wanted to make this post after I had gotten all of the stuff I wanted to say organized, but it was taking far too long.  And the fact that I haven't made a post in a long time, I decided to post what I have so far.  Don't worry, this blog isn't dead yet.

I have good news, bad news, and better news.

The good news is, the font caching bug is now fixed:

Hurrah, hurrah

The bad news is I'm suspending the development of Sticks and Stones until I can think of a new theme for the game, as I don't like the one I had in mind anymore.  Even if I can't come up with one, at least I have the beginnings of a 2D adventure game engine that I can use for other projects.

The better news is I've got a new project idea, one that is more traditional and less experimental.  Once I gather all the information, I'll post it here.  Stay tuned for updates!

Sunday, February 10, 2013

Go home Font Caching, you are drunk.

I didn't expect myself to post so much in such a short time frame, but this is too amusing to pass up.  I was just messing around with Stick and Stones for a little bit when suddenly this happens:

Have you been hanging out with Zalgo?

Saturday, February 9, 2013

HTML5 Test - When was the last time I made a website?

Pffft, what a lazy port.


Just a quick post for today. Even though this isn't my first time uploading an HTML5 demo onto the internet, it is for my own, newly acquired domain name (yay!).  It's a port of the Android demo that I posted earlier, with a few new features.  Like the Android demo, it only responds to clicks.  You can find it with the following link:



Let the games begin...

Friday, February 8, 2013

My name is BASSGMS, I'll be your interpreter for today

I've for a long time found GameMaker's audio engine to be too limiting. particularly in the background music department.  That's why I choose to use an external audio library to handle the background music.

Long story short, GameMaker only allows you to use MP3s for background music, and the only flexibility you have for it is whether you want it to loop back to the beginning or not when it reaches the end.  That's why I prefer to use MO3 modules for my background music.  MO3s are tracker modules with MP3- or OGG-compressed samples rather than straight PCM samples.  In simpler terms, MO3s combine MP3- or OGG-compressed samples with data on how to play those samples.  Looping is internal to the MO3 itself and is seamless,  allowing you to theoretically have an infinite-length MP3/OGG quality music in a few megabytes, or even less.

Thursday, January 31, 2013

Sticks and Stones - First Test


I'm starting a new project in GameMaker: Studio: a short, text-based exploration game, though not in the traditional sense. Let me explain:

Best $99 I ever spent

After jumping through many hoops trying to get GameMaker: Studio games to run on my phone via USB, all I got was disappointment.  So I tried another approach, which was slower and more cumbersome.  It involved exporting the game as an APK, uploading it to Dropbox, download it onto my phone and then install it.  And guess what, it worked like a charm!



The iPad filming this must feel a bit jealous.  :P  It will be a while before I dive into trying to get GameMaker: Studio games on the iOS.