Game Maker HTML5 test drive & demo game!

Too tired to write full blog post. This shall suffice for now.

I finally got my hands on Game Maker HTML5 beta, and whipped up a quick HTML5 Space Invaders demo. It’s decent, but has a number of bugs that are not present in the Windows .exe build.

You can play it here:

https://csanyk.com/cs/releases/games/HTML5/SInvaders/

What’s broken in HTML5: The game over function, and the level reset function. That’s basically it.

Still unimplemented: sound effects, high score board, the mothership, invader speedup.

I cheated a bit and made the invader movement be smooth instead of stutter-stepping. If I go through the trouble of improving this all the way, I’ll take care of that at some point.

Look for a post on my thoughts about Game Maker HTML5 sometime after Global Game Jam weekend.

In the meantime, play the Space Invaders demo and let me know how it works. I’m curious how it performs in different browsers, so definitely drop me a comment if you try it out, and let me know how it is on your browser.

 

 

 

Notacon 9: A Game, Any Game

Notacon is an annual technology conference held in Cleveland, Ohio that I have been going to for the last few years. This year’s conference, Notacon 9 runs from April 12-15, 2012.

I spoke last year at Notacon 8, and enjoyed it so much that this year I’m putting together another presentation, a crash course in Game Maker, AND organizing an event for the weekend, called A Game, Any Game. A Game, Any Game will be a 72 hour sprint to develop a working video game.

I took a little inspiration from Ludum Dare and Global Game Jam, and a little from the fact that too many of the people I’ve met through the Cleveland Game Developers meetup still have not built a finished game. I want to give everyone who participates the opportunity to get past that milestone in a weekend, and feel that sense of accomplishment that makes you feel so good.

As its name implies, A Game, Any Game is intended to be very open-ended. We’re aiming to provide a venue and encouragement, and just enough structure to give participants the traction they need to create a game in under 72-hours. It is not a competition; the idea is simply to make a game, any game, and get it completed in the 72 hours we have during the conference. Participants are encouraged to use any and all tools that they have at their disposal to make their game, and if they have never done anything like it before, they’re invited to attend my talk, Game Maker Crash Course. People can choose to work on whatever ideas they feel like working on, but if they need some help brainstorming, I’m going to come up with something to help seed the clouds.

For me, it’s going to be really interesting to see how many participants we can attract, and how many finished games we can produce. This is the first time in a long time that I’ve tried to organize something like this, and I think the key to it being successful will be promoting the event effectively to get people interested in doing it, and then making their experience great.

I think I have more ideas on how to make the experience (hopefully) great than I do on how to promote. Aside from blogging about it here, tweeting my fingers off, and telling everyone I know, what else can I do? I’m asking anyone who’s reading this to spread the word. Tell anyone you know who might be interested about Notacon and the A Game, Any Game event. If you use Twitter, the hash tag #n9agame will be used for any business related to A Game, Any Game. You can follow my tweets as well @csanyk.

Cleveland Game Devs in Global Game Jam 2012

The weekend of January 27-29, 2012, Cleveland Videogame Developers are participating in Global Game Jam 2012 (twitter hashtag #GGj12). This event will be hosted at Lean Dog Software.

Cleveland Game Devs on Meetup.com

Event page on Meetup.com for GGJ12-Cle

Registration for GGJ12-Cle

On the life of Steve Jobs

The very first computer I ever saw in person, or touched, was an Apple ][e. It was in the Fall of 1980, and I had just started first grade at Pine Elementary School. It was in the school library, and, as far as I knew, it was the only computer in the school. I don’t think they let the first grade do anything with the computer, but when we got our orientation of the library, they showed it to us and told us what it was, and explained the monochrome display to those of us who knew only color television.

That was it.

That year, for Christmas, we got an Atari 2600. I didn’t know it at the time, of course, but Jobs and Wozniak had also worked at Atari for a time.

These two computing devices probably had more influence over my life than anything else.

In second grade, I went to a new school where they had many computers — several Apple ][ and a bunch of Commodore 64’s. I got to learn about BASIC and Logo and word processing. In college, I used a Mac Centris 610 which I upgraded a few times, and it served me well for about 6 years — pretty good, considering how quickly technology becomes obsolete.

I can’t remember when I first learned who Steve Jobs was. By the time I was really aware of Apple Computer as a company, he was already out. In fact, during the entire time I was a Mac-only user: 1993-1998, he was even not with the company.

Although Jobs was said to be a perfectionist, Apple products have never been perfect. They’ve merely been better than anything else anyone else has on the market, or had even thought of, and more often than not delivered more than the public expected or even knew to expect. This often gets mistaken for perfection, but really the idea of perfection is misguided to begin with. Jobs took great ideas from everywhere around him, often made them better, and integrated them into a cohesive package and brought it to market ahead of the rest of the industry. And he did so consistently for many years.

Where do you go when you achieve perfection? Nowhere, right? You’re done. Well, year after year Apple delivered not perfection, but something even better: an elevated expectation which few people could have expected previously. What was thought to have been perfect last year if it had been delivered this year wouldn’t cut it next year because by then we’d already have ideas for things that would be even better. He did it so many times, so consistently that on occasions when he didn’t, people were disappointed by the merely incremental evolution of the new.

Thanks for that.

So, the world learned about Steve Jobs’ death yesterday, and everyone’s talking about his life and accomplishments, his personality, his greatness, and what it all means.

For most of us, we know of these things secondhand at best. As such, I am unqualified to speak about them.

I will say, though, that I can’t imagine my life without Apple Computer and Steve Jobs. And many other brilliant and talented engineers and designers as well. But Jobs deserves the credit he gets for leading them and having the vision to re-shape the world.

I wonder how much of what we think we know about Steve Jobs is the young Jobs. I don’t know that we know all that much about the mature Jobs. He was very private about his personal life, despite being the one of the most recognizable CEOs in the world, and the public face of Apple for many years.

When I think about the legend that was made out of his biography, I think primarily about the intensely motivated, young Jobs who wasn’t always the nicest person to be around or work for, but who was dedicated to an uncompromising vision of quality and greatness which he demanded, and mostly got. Greatness, which, for the most part, forgives him the feelings he might have hurt or the stress he might have inflicted upon those under and around him. He had a charisma which attracted many of the best people around him despite not always treating them fairly.

I think about that Steve Jobs, and wonder, given the times and the climate, how he could have gotten done what he did had he been anything other than what he was. Obviously, there’s no way to know, but I think the answer is no. The was Steve Jobs was was the only way he could have been and still gotten the things done that he did.

I wonder about this, not because I wish I could somehow distort reality, to revise history to make a “nice guy” Steve Jobs who still finishes first, but because the world needs many more like him, who have the kind of forceful vision that Jobs embodied in order to change our world for the better. And how do you produce a person like that? Or more cogently: how do you improve on a person like that?

Steve Jobs the human being wasn’t a perfect person, just as no one is. But the main criticism that seems to be leveled against him is that he wasn’t as nice as he could have been, or should have, to the people around him. Could we have improved Steve Jobs by making him a nice guy? It’s been said that Apple is a cult, and maybe cults are special cases, where abuse is accepted or even seen as necessary, because good, able people will often sacrifice themselves for what they believe in, and a cult leader like Jobs provides a real vision which people can believe in. Perhaps niceness would have diluted the vision.

But I also wonder, as he matured, if Jobs learned how to get the results he demanded without being the sort of person who most people probably couldn’t stand to work under for very long.

I don’t think so many people today would be saying such good things about him if he hadn’t. But I would really like to know what differences there were between Young Steve and Old Steve. At least in my mind, the reputation of Young Steve — they guy who’d fire you for little or no apparent reason, the guy who could be extremely harsh (albeit right) with criticism, sparing no feelings — tends to overshadow Old Steve in my mind. Was he still like that the second time around, or had he learned a better way?

I like to think that he did, but I wasn’t there; I don’t know. I’m sure there are people who do know, the people who worked around him for the last decade or more surely can answer that question.

Boobie Teeth 0.25

Hot on the heels of 0.24, I’ve released Boobie Teeth 0.25. In this release, I’ve gotten the mini-map function implemented the way I want it. The mini-map is now transparent, and (if you care about Game Maker internals) is now based on draw commands rather than a View. The code that draws the mini-map is based off of an example I found on the Game Maker Community forums, by a developer who goes by the handle Supertramp.

Download from the Releases page, and play it!

Boobie Teeth 0.24

Boobie Teeth 0.24 is out today. Mostly refinements in this release. Probably the most notable new feature is the wave motion. In the shallower part of the level, wave motion will be felt; dive deeper to get under the waves. I also made the level spawn event fair by having the new fish be created in a position avoiding the player, thereby avoiding unfair deaths. Some additional code refactoring under the hood.

As always, you can download the game from the Releases page.

Hi Dan

I went to the Cleveland Videogame Developers meetup tonight. It ended up being a special meeting for me, because I got to meet Dan, who was one of the founders of the meetup, but hadn’t been to a meeting in about three years.

In talking to him, I learned that he also was instrumental in helping Mike Substelny set up Lorain County Community College’s Computer Game and Simulation Design department. It was in Mike Substelny’s class that I got my start with Game Maker, a year ago. Since then, I have started out my first game project, been invited to contribute technical review on an upcoming book on Game Maker, spoken about my experiences at the Notacon conference, and in doing so I’ve realized a 30-year childhood dream and become the person I’ve always wanted to be.

It’d be easy to say I did that all by myself, but really, if it weren’t for Dan, everything else I’ve done wouldn’t have amounted to anything. For everything else I did, and as much as I’ve always wanted to make videogames, it didn’t finally come together until I took that class last year. So, however indirectly, Dan’s partly responsible for me getting my legs under me and able to move forward.

After telling him about the things I’ve been up to, Dan told me that it sounded like we had a lot in common. We both aspired from a very early age to design and make video games, we both had taken a long path in life to becoming programmers, and we both have yet to complete and release our first game. That last part threw me for a loop, but it’s true. When I asked him what games he’s made, he said he had a couple of projects that he was working on, but hadn’t released anything yet. [It seems like everyone in Cleveland Game Devs says that! :( ] I just hope that I’m enough like him that some day I run into someone who, although I had no idea, I had some small yet significant part in their life turning out the way they’d hoped it would when they were six.

Safe Zone extension for Game Maker

I have completed my Safe Zone extension for Game Maker, and made it available.

Altogether, here’s what we now have:

SafeZone.gmk – the original proof of concept, which creates a non-wrapping, square safe zone around the protected object.

SafeZone2.gmk – improved proof of concept, which creates a circular safe zone which wraps around the protected object.

SafeZone5.gmk – Further refined, now the function incorporates parameters which control whether the wrap applies in the vertical or horizontal directions, or both, or neither.

SZ5.gml – the raw .gml of the script code written for SafeZone5.gmk

SafeZone_1_0.gex – The Safe Zone extension, v.1.0, based on the SafeZone5 code.

SZ_GEX_demo.gmk – a demo project which incorporates the .gex rather than scripts.

This extension could use further refinement, as it assumes that literally anywhere else in the room is safe to place the new instance. If you have solid objects in your room, or multiple other objects that you do not want to collide with upon spawning the new object, this obviously will not hold true. But for certain types of games, such as single-player free-flight games, this should be quite useful.

Wrapping safe zone spawn in Game Maker

I got a working demo of a safe zone spawn which works with wrapping rooms. I refined my technique for determining the safe zone, and now instead of being a square, it is circular.

I like this approach, it works pretty well. Basically, rather than trying to literally “wrap” the safe zone around the edge of the room, I create five safe zones. They are at protected(x,y), protected((x+/-room_width), y), and protected(x,(y+/-room_height)). In my instance_create loop, I merely determine whether the new instance’s candidate x,y location is within some distance of any of these five points.

The current script I wrote up is working, but it just uses a distance in pixels. My original approach calculated a distance automatically, based on the size of the objects’ sprites, and a padding factor, which I liked. I’ll likely create a version of this script that works that way in the next day or so, when I have a moment, and then package the whole thing up into a .gex for distribution.

Until then, the .gmk source is already up on the site.

One other note: One of the annoying things about Game Maker is that when you write a function, you can only return a single value. In most other languages, you can create classes of objects, which can be used to encapsulate as many values as you like, and return the entire object. Game Maker kindof lets you do this, but you have to create a Game Maker object, which it a bit more literally object-like, in that it carries some baggage with it. I think that my function would be more useful if it simply returned a set of (x,y) coordinates without actually creating an instance there. But I can’t return both x and y — a function can only return one value. I could return the id of an instance of an object, however, and simply spawn an empty, spriteless object at those x,y coordinates, and allow the developer to either change that instance into whatever kind of object they needed there, or else grab the x and y values from the object and destroy it. It’s an idea I’m toying with, not really sure which way to handle it is best at the moment, but it’s fun to play around with ideas.

Spawning objects outside of a safe zone in Game Maker

In Game Maker, it’s non-trivial to spawn a new instance, avoiding collisions with existing objects in the game. This can make it tricky to create games with “fair spawning” so that the player isn’t automatically killed when a new, randomly-placed instance springs into existence.

It isn’t terribly complicated to work around this problem, thankfully. Basically, the approach I take is, knowing the x,y coordinates of the instance or object that you want to want to avoid collision with, and the size of that object’s sprite, you can define a “safe zone” around the instance you wish to protect.

I’ve whipped up a quick demo in Game Maker 8, showing a technique which seems to work pretty well. This is a very simple illustration of the approach, and could be refined further to handle wrapping the safe zone around the edge of a room, or to handle enemies of randomly varying sizes. To make it easier to understand, I’ve actually created an object to represent the “SafeZone” . This is unnecessary, as the dimensions involved can simply be calculated on the fly, using the right GML.

Source .gmk.