Ludum Dare 24 This Weekend

It wasn’t that long ago (late April, in fact) that I participated in my first Ludum Dare. I really enjoyed that experience, and am really looking forward to Ludum Dare 24 this weekend. I’ll be hanging out this weekend at our Cleveland Game Developers LD48 site, generously hosted at the Shaker Launch House space.

I plan to work solo, and entering my game into the compo, again, but one of these times I’d really like to get into a team and work on something as a group. For the weekend, I’ll be blogging on my page on the LD site, so be sure to check there and see how I’m doing.

I’m trying to think about my goals for the last LD48, and how I’ve grown since then and what my new goals should be.

LD 23 goals:

  1. Finish a solo project in 48 hours. Achievement unlocked!

LD 24 goals:

  1. Blog my progress as I go, self-documenting the development process. Last time I blogged a little bit, this time I want to take that further.
  2. Post playable builds as I go, not just at the very end. Last time I saw other people doing this, and I felt envious as they got feedback from people playing sneak-preview releases of their projects. I was super impressed that they managed to release something playable so quickly, but I have some ideas about how to accomplish that.
  3. Produce builds for Windows, OSX, and HTML5 to reach a wider audience. Last time, I was still using Game Maker 8.1 Professional for my project, which limited me to Windows. This time I’ll be using GM:Studio. This will be my first project targeting multiple platforms, so kindof a new thing.
  4. Use fellow CleGameDevs people for feedback and encouragement. We used IRC for this, and had our first night at a common space, which was good. I just want to do this more.
  5. Play and rate more entries. Last time I did play a lot of games during the rating period, and played even more after the rankings were posted.

Incorporating music into my game will probably remain a future goal, for now. I’ve experimented a little with FamiTracker, and may attempt to produce a little music for my game, but I still think becoming a chiptune artist is a far-away goal. I think music is a really important element of videogame design, but it’s probably better to have no music at all, rather than bad music. There are certain game themes which lend themselves to silence, so I can possibly use that, or I can make a game that has an overwhelming amount of sound effects in it, like my last LD48 entry. Or maybe I’ll get lucky and one of our musically talented CleGameDevs people will throw me some resources, and I’ll make it a Jam entry instead of a Compo entry.

Tonight and tomorrow I plan to go over my preparation checklist and make sure I am ready. Gotta make sure all my software is up to date and working properly.

Game Maker beta license expiration cuts off access to tools

This past weekend was the Game Maker Community Jam, a 72-hr game development competition sponsored by Yoyogames. I didn’t participate in this one, unfortunately, due to my license for Game Maker Studio being revoked. Here’s what happened:

Back in January, I participated in Global Game Jam, at which I obtained a free, time-limited license for Game Maker: HTML5, then in beta Due to bugs that I encountered with Game Maker HTML5, I had to start over twice after my project became corrupted, for reasons still unknown but hopefully long since fixed by Yoyogames. I ended up completing my project that weekend with my old standby, Game Maker 8.0 Professional. I just barely got it done, but had to sacrifice a lot of sleep and many features that I’d hoped to include as a result of the time/work lost due to the project corruption bug.

A few months later, in April, Yoyogames released Game Maker: Studio beta, which I downloaded, and I began using it. I played with the Studio beta a bit during Ludum Dare 23, but quickly realized that a 48-hr competition is no time to be discovering a new version of a tool, so again I fell back to a stable release, this time Game Maker 8.1. After LD23, I began porting my project, Bactarium, to Studio, refining it along the way.

Some time later, Game Maker Studio concluded its beta testing, and released 1.0. My beta license stopped working, so I had to buy Studio. Yoyogames had made an offer with their Global Game Jam that participants who tried out the HTML5 beta, which they had offered to GGJ participants for free, would be able to get 50% off when it was finally released. So, when I went to their web site to purchase my license, I was expecting to have to pay something. However, when I entered my old HTML5 license, the store allowed me to download the core Studio 1.0, as well as the HTML5 add-on license, for free.

Apparently this was in error, but at the time I had no way to know this, no way to claim the 50% discount that I should have been entitled to. I assumed that Yoyogames was being really gracious to people who participated in the HTML5 and Studio beta program — maybe I was getting two discounts and they stacked? In any case, I would have been willing to pay for the product if the site had been set up to take my money, but it wasn’t, and it didn’t require me to pay anything. The HTML5 license I received at GGJ apparently entitled me to download the GM:Studio 1.0 core, plus the HTML5 module, all for free. I was of course thrilled.

So I downloaded Studio 1.0 and used it, working on bringing Bactarium into Studio so that I could port it to Mac OS X and HTML5, and worked on a few other tech demos as well to familiarize myself with the new features. Things have worked fine up until last week, when I went to download and install the latest update. After installing, when Studio launched it told me that no license was detected and I needed to enter it. Figuring the license data had gotten blown away by the upgrade for some reason, I went through the license recovery process and re-entered my license key. However, Studio refused to accept my key.

I opened a ticket with Yoyogames helpdesk, and promptly received a response within 24 hours, informing me that my license key was no longer valid, as the HTML5 license that I had from Global Game Jam had expired. OK, I can accept that, no big deal. The communication from Yoyogames helpdesk further explained that they would be sending out coupon codes within about a week to people who participated in the beta, so they could get their discount. So, basically, I could choose to wait up to a week for the coupon code, or pay full price now. I would have thought that the old license key itself would have been the discount code, but oh well. I’m electing to wait.

Waiting put me out of participating in the GMC Jam this weekend. Oh, I suppose I could have worked in 8.1 again, but by the time I received the notification from the Yoyogames helpdesk, I’d lost enough time that it didn’t seem like a good idea to try to throw something together. I had other things to do this weekend, so I did them. No regrets about any of it, but it would have been better if the logistics had worked out a little better. I don’t mind the license expiring, since I’d expected it to anyway, and I don’t mind paying for my license, but not being able to purchase with the discount because Yoyogames didn’t think to distribute the discount codes prior to expiring the beta licenses is a bit disappointing.

So, today’s Monday. I still have not received my coupon code, but as they had said it would be happening sometime in the next week, I’ll try to be patient and wait for it to come by Friday, hopefully. I’m really hoping it’ll come through soon.

Darker Implications

One concern I now have is that, in reading up on the way Game Maker currently works, apparently you need to connect to Yoyogames server at least monthly to re-validate your license. This anti-piracy measure goes a bit too far in my opinion, and potentially hurts legitimate users. Copy protection crackers will always find ways to defeat such measures, while legitimate users will always be at risk of having their license killed in error, thereby denying them access to software on their own hard drive, that they paid for.

I can understand why Yoyogames feels they need to control licenses with a phone-home system tied to a remote killswitch, however the potential exists for legitimate users to be left in the cold if Yoyogames decides to kill an old version in order to force everyone to upgrade to their latest. If Yoyogames ever decided to stop supporting this version of Game Maker, or discontinue Game Maker entirely, or go out of business, all the paid-for licenses of the product potentially go bye bye.

It’s one thing to stop supporting an old version of a product, quite another to shut down license servers, effectively killing off the old version so that users are forced to upgrade. To be clear, I’ve seen no indication from Yoyogames that they plan to ever do this to their customers, only that they now have the mechanism available to them that allows them to do so. I sincerely hope that they never do this, as the backlash from the community would be substantial.

I would hope that as a last measure that they’d release some patch that permanently unlocks all licenses so as to prevent this from happening, and if they don’t then I’m sure the cracker community likely will, although this would technically violate the EULA as well as laws such as the Digital Millenium Copyright Act.

Update

It’s Thursday, and I’ve woken up to find the coupon code from Yoyogames waiting for me in my inbox. They’ve changed things up a bit from the original offer, and it’s about the same although I think it works out better from a certain standpoint.

Originally, participants in Global Game Jam were going to get Game Maker HTML5 1.0 (when it was released) for 50% off the originally announced price of $199. Yoyogames was selling beta licenses for half off, so essentially GGJ12 participants were getting access to the beta for free, and paying the same price for the finished product that the beta testers were paying anyway. This was nice because A) you didn’t actually have to pay anything for a beta, and B) you could try before you buy for a few months.

Somewhere along the line, Yoyogames changed their mind about their products and pricing. Game Maker HTML5 1.0 was never released; instead, it was folded into Game Maker Studio, becoming an optional $99 add-on.

As a result, the original deal no longer made any sense. So instead, Yoyogames has substituted Studio. With the coupon, you get the $99 Studio core for free; and if you want the HTML5 module, you pay full price for it.

Comparing to the old deal, this is better in two ways:

  1. You get Studio, which can build to Windows and OS X for free, and you can stop there if you want to.
  2. For the same cost as the original deal, you can buy the HTML5 module and have three build targets instead of two.

My old complaint still stands, that they should have issued the coupons and given developers a week or two to use thembeforedisabling the temporary licenses. On the other hand, apparently those licenses were only supposed to have been good for two months, and I think I got about 6 or 7 months out of mine, and I’m definitely not complaining about that. All in all, a week’s worth of inconvenience is still a week’s worth of inconvenience, but I’m glad that in the end, they’ve given developers who worked with the beta something worthwhile.

Product Review: Samsung Galaxy SII on T-Mobile

I am not an early adopter when it comes to technology that I want to rely on every day, so I came to Android only recently. After reading a lot of positive reviews, I bought a T-Mobile Samsung Galaxy SII. I’ve been using it for two months, now, so here’s my thoughts on it:

iPhone killer?

Many of the reviews said that the Galaxy SII was better in many respects than the current iPhone, and on paper I could see those claims arguably looked valid. It has a larger screen, for one — and it’s a very high quality screen, too. I like that I can remove the battery if I want to, the fact that it has an SD slot so I can expand the memory without having to pay Apple premium for the capacity. I understand why Apple made the design choices they did with the battery, the sacrifice in field replaceable battery for greater battery capacity to phone size makes a little more sense to me than the SD slot decision, which feels like pure greed.

And anyway, unless I want to switch carriers — which, thanks to the prevalent business model in the USA, is a rather expensive and therefore unattractive proposition — I can’t own an iPhone unless I want to hack it to work on T-Mobile, and I was reluctant to do so because of my experience with my last unlocked phone, a Nokia E75.

That phone was a nice enough handset — small, durable, held up for more than two years, fit well in the hand, decent battery life, had OK web browsing and wifi capability, though poor compared to a true smartphone, but for some reason T-Mobile never supported its MMS capabilities adequately, and through my carrier, it could only send/receive 5-7kb postage stamp sized images, which was annoying considering it had a 5MP camera and normally T-Mobile’s size limit for MMS is 300kb. I’d seen a hacked iPhone on T-Mobile in person and it seemed like a number of the features were not well supported, so this time I wanted to go with an officially supported handset.

I didn’t really want to give up the E75, but after a particularly unfortunate drop onto a hardwood floor, the bezel broke, leaving the edge of the keyboard unsupported so it would flop around and let pocket crud accumulate under its membrane. And the battery wasn’t holding a charge like it used to, and the screen had gotten to where it was pretty scratched up. I was sick of the ever-widening gap in browsing capability with my E75, and have been wanting to try my hand at mobile app development for a while, so Android seemed like the next phone for me.

Purchasing

I did my research, and all reviews said that the Galaxy SII was by far the best handset available currently in the market. It didn’t have a physical keyboard, which concerned me, because I’m a heavy texter and I like the feel of a physical keyboard, even if it’s micro sized. But what sold me was some special pricing and offers that T-Mobile was running, which allowed me to get the phone at a $50 rebate, plus $100 in trade-in value for my old Shadow handset. That put the Galaxy SII at a price I was comfortable with, so I bought it.

By the way, T-Mobile, if you’re reading this, your handling of the trade-in program is awful. I sent my handset in to you a week after I bought my phone, on May 6, and a month later (June 4) I got an email from you saying that time was running out and I’d better ship it to you soon or I would lose out on the trade-in. I wrote back to say that I’d sent the phone in three weeks ago, and it should be there by now, and I was alarmed that you hadn’t received it. I did get a response to this, but all it said was that your receiving process takes a very long time, and that phones are only entered into your system after they get processed.

t-mobile trade in process is awful

T-Mobile trade in process is awful

That is just unacceptably stupid and wrong. The very first thing you should do in your process is confirm receipt of the package! I very strongly suspect that I will never see that $100, and if I don’t, you can forget about me sticking with T-mobile for my next phone. It’s 7/6 and I still haven’t received any confirmation that my trade-in was received and processed.

[Update 7/10: After writing to them again when I wrote this review, I got a response today, four days later. They tell me my rebate is scheduled to be sent out at the end of this month, so I guess that means that they did receive the trade-in from me; however, it also means that they never did bother to notify me of this. At least it’s not lost.]

[Update 8/20: Finally received my $100 gift card for my trade in. Only took about three months!]

Initial Impressions

My initial impression of the phone was that I liked it a lot, but it would take a little getting used to the lack of physical keyboard. In the store, they let me play with their demo model long enough to get confident that Swype input really was feasible and could work. I expected some foibles with it, and I knew I wouldn’t care for the lack of tactile feedback, which necessitated looking at the screen more as I typed, but I could accept that as a trade off given the many advantages of the new phone.

The screen was beautiful, web browsing was fast and pages rendered much better than with the Opera Mobile I was running on my E75 (its default browser was lamentably out of date, whatever it was.) Installing apps was very easy, and I found a few fun ones and a few useful ones that I liked. I spent a few days playing around with configuring this and that, learning how to connect the phone to my laptop so I could back up my contacts and get photos and stuff off.

Battery Life

I guess I must be a heavy user of the phone, because my battery will only last about 8-10 hours on a charge. This is barely adequate to get through a work day, and forces me to umbilical to a wall outlet whenever possible to top off my charge, and forces me to carry around a charger, which is just one more thing I don’t really want to have to carry with me. It’s alright when I’m sitting at a desk for work all day, or if I’m driving around I can use a car charger, but if I’m walking around all day, it’s a cause of anxiety. There are aftermarket super-batteries that you can get, and they’re not too expensive, but they are bulky, adding a bulge to the rear of the phone, which is incompatible with any protective armor cases you can currently buy for the phone. Since the SII has been out for a while, it seems unlikely that this will change, which is unfortunate.

Android, I appreciate that you can change settings when battery is below a certain threshold, to prolong life. That’s really great. But would it be too much trouble to restore the old settings while I’m charging, or at least when the charge level goes back about that threshold? It really sucks to have to reconfigure manually every damn day when I shouldn’t have to.

Swype: It’s garage. It’s guache. It’s gator. Ah, fuck it. G-A-R-B-A-G-E.

If you want to turn your life into a commercial of arrows, buy a smartphone without a physical keyboard and try Swype. It’s garbage. Using it produces a comedy of errors. Quite possibly a tragedy of errors, as well.

Swype is absolute dogshit. I say that, playing off of the business idiom “eat your own dogfood.” I find it really hard to believe that Swype’s developers are using Swype on a day-to-day basis. My friend Max said to me, he says, “MAYBE YOU JUST SUCK AT SWYPE, HOLMES.”

Maybe you just suck at Swype, Holmes.

Max confronts me with the ugly truth I just can’t admit to myself.

It is not possible for someone to suck this much at something for so long and not get better. Ergo, Swype is at fault.

After I typed in my first web or email address, I forget which, Swype decided it had “learned” new grammar rules and that it should not ever put a space after a period, which it formerly had done any time I finished a sentence. Swype, you need to learn when a sentence ends vs. when a dot is used in a url or email address, or as a decimal in a number.

I really hate to give the impression that I’m unprofessional by using swear words, but I thought about it a lot and I truly cannot give an honest review of this product without them. I’m sorry, it’s that bad.

Swype’s accuracy is so hit or miss, it’s like you’re permanently drunk whenever you try to type with it. DamnYouAutoCorrect.com is funny, and a lot of the time feels contrived — but in real life it’s a disaster. Sometimes you sound like a dadaist on LSD, other times you sound like a grammar-challenged moron, and at the worst of times it makes you say things you didn’t mean, but with the limited context the recipient has no idea. This fucks up communication so badly, I’m actually scared to use it for anything important at this point. Swype makes me really, really angry on a regular basis.

I thought, OK I just need to proof read before I send, right? Well, it’s not so easy. First, to accurately swype, your eyes have to really follow your finger. You naturally want to continue swyping out words until you’re done with whatever you’re writing, but if you do that, your eyes aren’t watching Swype’s output, which at its default accuracy/speed setting is wrong about 1-in-3 words, sometimes more. Even at the “best” accuracy setting, it’s about 2-in-10, which is not nearly better enough. Like OCR, swype recognition of words is not useful unless it is accurate over 99% of the time, and it’s far short of that. Backing up and proofreading a lot of text, and then changing every third word, is much slower than simply hunt and pecking the input.

So the only way for me to effectively swype is to verify after each and every word. Your eyes feel like you’re watching a tennis match as they bounce from the screen keyboard to the output box. It really slows your wpm down. It’s truly a step backward if they can’t fix this. I found that it did get better if I set the accuracy to maximum, but it still gets words wrong frequently enough that I really have to watch what it’s saying for me regardless. If you’re not a wordsmith, you may not care, but for me it’s a major problem.

It’s not faster than hunt and peck if you have to meticulously scan every single god damn word that it guesses you meant to enter just to make sure that it’s right. It completely destroys the appearance that you are intelligent and in command of language. Every time I see something I’ve typed with it, I’m embarrassed, because it’s NOT what I typed. If you enjoy Mad Libs, you’ll probably like Swype a lot, but if you value your command of language and feel that the impression you give others through texting is important, you’ll hate it. Perhaps swypographical errors are to be expected in SMS messages, and are temporary and have a tiny audience, so don’t matter. Except when you’re trying to be cool, or smooth, or persuasive, or say something heartfelt over SMS, and it completely ruins the moment. It’s another thing when you try to use the screen keyboard to enter text on a web site, like facebook, and it utterly botches your input and turns you into a blathering moron.

I used to look down on people who couldn’t use language, but now thanks to Swype I feel like we’re all in the same boat. It’s worse than the battery life issue, which just produces anxiety that I won’t be able to use the phone when I need it. Swype makes me absolutely angry. It’s a solid concept, but the execution needs improvement. There are replacement soft keyboards, but I haven’t tried any yet. Most of them cost between $2.99-9.99, and for a $500 phone, it better come with a @%#$@) keyboard input that @#$@#ing works.

I’d be very happy if they made a version of this handset that is twice as thick, but has a physical, slide-out QWERTY keyboard.

Apps

I’m not a huge App user yet, but I love how easy it is to install new apps. I haven’t bought any yet, but I’ve downloaded a dozen or so that sounded useful.

Reviewing specific apps is a bit beyond the scope of this article, but I will single out the official Facebook app for a WTF award for not having Share links on the mobile app. It’s nicer to use the FB app than visit facebook in a web browser, but not being able to Share things is really a strange user experience design decision and I can’t understand why they only show the Like link.

I’m a little disappointed that I can’t remove some of the bundled apps that I don’t want and will never use.

Netflix is a nice service and all, but I’ll never use it on my phone, and I don’t have a Netflix account, at all. If the phone came with a “light” or “free” version, I might use it and end up getting into it enough that I’d pay for the service, but out of the box it was only interested in me if I was a paid subscriber, or if T-Mobile bundled a subscription with the phone. Maybe just a limited 1-2 movies/month introductory deal, included with your plan. As it is, it’s about 20mb of storage on my phone that I’ll never get back. I generally have better things to do than watch video on a tiny phone screen, but it could possibly come in handy once or twice.

Contacts

The only other major complaint I’ve had about the phone in the first week of ownership was the royal clusterfuck it made of my contacts. When I got the phone, the salesman asked me if I already had a gmail account that I’d like to use with the phone. I’ve had a gmail account since 2004 or so, and have been using it as my primary non-professional email address for much of that time, so I said sure.

I kindof wish I hadn’t, though, because Android really fubared my contacts. I had a mess of my old phone’s imported contacts, my gmail contacts (including anyone who I’d ever emailed for any reason in the last 8 years), and my google+ circles. Worse, these weren’t well integrated. I had three and four entries for some people. There is a merge feature in the Contacts app, but it sucks. I ended up clearing out about 90% of my contacts, but I believe as a result my autocomplete when filling To: field in gmail’s web UI will no longer remember a large number of the addresses it used to.

The reality is, the people I interact with via my cell phone are not the same as the people who I email. In some cases, sure, there’s overlap. Certainly, when I’m accessing my email account through my cell phone, I want full access to my email contacts. And some people I have a phone number for, I also have an email address for. But there are a lot of people who I email, or know very casually on google+, who I don’t necessarily ever want to IM/SMS/call. I like having my identity compartmentalized, and being relatively anonymous in certain circles. Android really doesn’t account for this in its design of the user experience for contacts, at all. It didn’t ask me (maybe it did ask the sales guy who set it up for me) if I wanted all these contacts to be jumbled together into one writhing mass of humanity, and there wasn’t any way to undo it after the fact. It was pretty horrible. I ended up using Wondershare MobileGo to manage my contacts, which was still pretty tedious and awful, but did the job, insofar as it helped me to mass delete and consolidate dozens of contacts. It still took over four hours to go through everyone and clear everything up, and that’s really not acceptable.

I’m pretty sure that I’m not unique in how I deal with my contacts, so I think Android really drops the ball here. I have a few suggestions for improving the user experience:

  1. Allow users to filter contacts by source. Here’s all your Contacts from your old phone. Here’s all your gmail Contacts. Here’s your google+ contacts.
  2. Better Merge feature. Mass select N contacts, and then click Merge. Not select merge, then select any two contacts.
  3. When there’s conflicts, such as multiple phone numbers and email, keep them by default, ask which one is primary, and ask if any are outdated. I had a few contacts resurrect from my old phone’s trash, apparently, and I don’t even know if I have their current contact info now, because who memorizes everyone’s phone number? A great solution here would be to have some kind of service that automatically looks up each bit of contact info and attempts to verify that they’re still good. I imagine this would be very difficult for email addresses, but would potentially be do-able for phone numbers and mailing addresses.
  4. Use gmail’s metrics for how much you’ve written to a given contact in your gmail contacts, and auto-filter out contacts whom you’ve contacted below a given threshold. If I have ever emailed some address one time in my entire life, and it was more than a year ago, chances are good I don’t need them in my phone’s Contacts.

One thing I did appreciate was that it included every new word it found in my Contacts into the autocorrect dictionary. So now when guessing wrong at what I’m swyping, I can pull up street and city names, and the odd last name or first name of some person I’ve communicated with at some point in the last decade. This is actually useful when I intend to type those words, as well. It’s a feature.

Messaging

SMS/MMS, IM, Talk. Also, Twitter. All these apps on my phone just to send short text messages to people. Why so many apps that do almost exactly the same thing? I really would like a single solution, which can seamlessly handle all protocols.

Also, and this is truly beyond bad, I have had a lot of inconsistent reliability issues with sending SMS. I never really know if someone got an SMS that I send from this phone. I never had this problem before I upgraded to this handset. I’m not sure what factors are at play, either. I SMS a short list of people on a regular basis, but I have consistently had problems with sending to one particular contact. It seems to deliver my outbound messages reliably only when I send as a new message; if I reply to the existing thread of messages, it is very likely to fail to deliver the message — although it appears on my end that it sent successfully. I’m not sure how high the failure rate is, but it must be at least 50%, perhaps even 75% or 90% when replying to them. My workaround is to always initiate a new message. It shows up in the same threaded conversation anyway, but somehow if I simply reply, it doesn’t work, but if I start a new SMS, and address it to this contact, it will go through. It’s a ridiculous problem and absolutely should not be tolerated. So far, T-Mobile has been unable to figure out the cause and provide a fix for it. I don’t know if it affects other contacts, either. If I send some message to someone, and they never get it, chances are they’ll never notice that they never got a message that they never knew about, and thus won’t bring it up, so I’ll never know. Not knowing is awful. It could be ruining a lot of friendships, and killing potential relationships that never develop because they thought I’d stay in touch, and I thought that if they really wanted me to stay in touch with them, they’d reply back to my message… that they never got.

[Update 7/11/12: Several people recommended the swiftkey3 app as a replacement. I tried it out and it does seem to be more accurate, although it works by tapping only. I did like the swyping motion, my issue with Swype was its accuracy problems and poor prediction. Swiftkey3 is a $3.99 app, and while I do resent having to spend money to get a soft keyboard that actually works, I’m glad it actually works. My accuracy with Swiftkey is somewhere in the high 90’s, and its guessing capabilities are amazing — both in correcting off-target key taps, and to suggest what my next word is most likely to be. It gets my recommendation if you’re looking for a better touchscreen text input.]

I didn’t have too many issues with the Mail app, which integrates pretty well with my gmail account. Read messages are marked read whether I read them in gmail in a web browser, in the mail app on the phone, or in Thunderbird on my PC. And that’s how it should be. If I delete something, though, I have to delete it everywhere. I guess this is a safer approach to take, but triple-redundant deleting can be annoying. I feel like there should be an option to mark the message deleted, update the server, and then the next time the other clients talk to the server, it passes along the info that this message is now marked as deleted also.

The only problem I have had with the Mail app started happening to me just this week. A few times, now, I’ve launched it, watched it update itself, and then mark every damn message in my Inbox Unread. It’s annoying not to know what message threads you’re up to date on and which contain new messages that you should probably read. So far it’s only happened a couple times, and I’m not sure what causes it, but if it happens a lot, I’ll be looking for a new app to read gmail with.

[Update 7/12/12: I’ve observed this problem happening repeatedly since it started happening. It doesn’t happen all the time, and when it does happen it seems to be temporary. I don’t have to go through and re-read everything to mark them read again — usually exiting the app and re-launching it will correct the read message marking. It’s still an annoying defect, but not as severe as I had first feared.]

Maps and GPS

I didn’t expect that I would use these functions as much as I do, but they are nice to have at times. I prefer not to use a GPS; I have a good sense of direction and I have developed it over the years by not relying on external tools for navigation. I prefer to keep my bearings, the lay of the land, and driving directions in my head as much as possible, and as a result I usually only need to write down driving directions once, and then after that I can reliably drive that route from memory, very likely.

But when driving someplace I’ve never been to before, it does come in handy. Where I used to write down directions, and worry that I’ll run into a detour or wrong information, or miss a turn, I now have greater confidence that the GPS will redirect me if something unexpected happens.

Unfortunately, it drains the battery faster than just about anything. I don’t know if this is because the GPS transmitter uses a lot of power, or because it tends to leave the display turned on (normally the battery usage statistics say that the display alone can account for 60-65% of the battery consumption all by itself). But when driving, I just plug it in to the car charger, and it about barely holds even on charge — I drove to Columbus, OH, from Cleveland, OH with it and gained 1-2% of charge in a 2.5hr drive. I doubt that I would have had any battery left if I hadn’t been charging it the whole time. Whoa.

Camera

The Galaxy SII does have one of the nicer cameras I’ve used in a cell phone. It takes good pictures, at moderate distances. I like the on-screen controls. I love the capability to share via any service I can think of, right from the phone. That’s really the best thing about the camera — the social integration.

I’m not too crazy about using it for self-portaits. The wide angle lens makes my nose look big and bloated, and I’m way less handsome that way. That’s my only complaint with it. If I had 2-3x longer arms, I could take better pictures of myself at the distances it’s intended to be used, and just zoom in.

Conclusion

I want to say I like my phone a lot. The Galaxy SII is an impressive gadget. It does a lot of cool things. Most of the time, I think to myself, “I have a really good phone.”

But now that I’ve objectively reflected on all the glitches and problems I have had with it in the first two months of ownership, I’m aware that I’ve been living with a lot of cognitive dissonance. The problems that I’ve had with it are significant, important problems — the most severe type of problems are the social consequences of having a phone that mangles your wordsmithing and fails to even deliver messages reliably.

It’s a cool phone when it isn’t pissing me off. But it pisses me off most of the time when I’m using it. It’s very useful for web browsing, and I use it for that about half of the time. That’s when I really like it. When I’m trying to use it to communicate with someone, though, which is it’s primary purpose, I feel like it’s ruining my life. Not exaggerating in the slightest. The silent delivery failures have harmed relationships that I have with friends and make people think I don’t care about them or that I’m ignoring them, and this makes them feel very hurt, and I have no idea that it’s going on unless I see the friend in person and they bring it up. The swypo errors make me look like a complete idiot on a frequent basis.

The battery life is another major issue, and a lot of reviews seem to gloss over this. Sure, you install a battery minder app that will automatically shut down stuff that you’re not using in order to conserve juice, but they really didn’t serve the market well by providing an 1800mah battery. If you have a phone like this, you want to use the hell out of it, all day long. 1800 milliamp hours gives you a full day’s worth of charge and then some only if you don’t use it. If you do use it, you can get by for half the day, and then spend the next few hours hoping it doesn’t die and you miss an important call or message, or need to look up some bit of crucial information and can’t. And if you don’t use it, what’s the point?

All phone makers, now hear this:  We can deal with the extra weight. Give us 3x battery life and bulkier phones with a real keyboard. At least make it an option. And make armored cases that fit the extended battery covers, please!

A lot of the reviews that I’ve read have been over the top positive, saying it’s the best phone there is, period, including iPhone. I haven’t tried an iPhone still, but I’d be really surprised if the user experience of an iPhone isn’t 10x more polished. I have no idea, but I sure hope so.

I don’t want to hate Android, or this phone, or T-Mobile, but I do have a lot of issues with all three of them at this point. There is a lot here to impress, and a lot of potential, but fitting it all together and smoothing the rough edges and polishing it, well that has a long, long way to go yet.

I really can’t believe that I spent this much money on something that I use every day, and am having this poor an experience with it. There’s a lot of potential in this platform, and even in this handset, and so many of the problems seem like they’d be relatively easy to fix.

Robotron: 2084 and Zookeeper

Today was the day of Cleveland’s Classic Console and Arcade Gaming Show. This year was especially well attended, and I was very happy to see a higher proportion of female gamers attending. I’ve been going since I heard about it 2005, and every time I go there is always something I have never seen before, and it’s always a good time. In addition to rows of tables with old games to buy and look at, some homebrew and modding fun, and some old school systems set up with games to play, there are drawings and tournaments.

This year, they had two of my favorite 80’s arcade games: Zookeeper and Robotron 2084. Robotron was a tournament game. I thought I might have a chance at winning, but I didn’t come close to the top score — although I did have the second highest score. I played a lot of games to get sharp, but my top score of 214,000-some points was still far from the winner, who posted a score of almost 391,000. It’ll take me a while to get that good.

While the experience is still fresh in my mind, I thought I’d reflect on what makes Zookeeper and Robotron two of my favorite games.

(more…)

Making a Configuration System in Game Maker, part 2: Requirements

If you haven’t yet, go back and read Part 1

Design choices

Since we’re starting from (basically) nothing, we have a lot of decisions to make. Therefore, thinking about the design of your configuration system first before you start building things probably is a good idea.

Requirements

First, let’s think of the features that we need. When I brainstorm features, I tend to go crazy. I think about everything I might possibly need. I think about all the things that would be OMG SO AWESOME to have. I find it helpful to do this, but I have learned that while having all these ideas is great and exciting, in the end you have to build everything, so every idea you come up with represents a lot of work and a lot of testing.

I’m only one person, working on these projects in my spare time — not a design house, or even a full-time lone developer, so if I want to ever have a hope of finishing my work, I have to scale back to the essentials. So why think about everything I can imagine?

  1. I like my imagination. It’s awesome, and using it is fun.
  2. The more I think about things, the better my ideas get.
  3. When I think complex, even if I don’t ever build the whole thing, I can at least create a design that will better accommodate further development later if I want to extend the basic implementation. I might do the extending, or someone else might do it later; it doesn’t matter. Building code as a foundation for future code is a good thing if you can manage to do it. Doing so correctly means avoiding having to repeat yourself in future projects.
  4. Even if I don’t have all the resources or talent that I might need in order to implement a design, having a good design documents makes it that much more likely to inspire others to contribute something to the project.

A very simple Options system might consist only of a single screen. But as we’ll soon see, there may be need to break things up into multiple screens, especially if we have many different options or categories of options.

If we have multiple screens, we’re going to need a means of navigating between them. This can be as simple as a group of rooms with room_goto commands linking them up, or it can be something else.

To design our Configuration Options system, we need to address a few things:

  1. Features: What options do we want the user to be able to configure? What choices do we want each configuration option to have?
  2. Interface/Controls: How do we want to present these options to the user? How will the user interact with the interface to set it?
  3. Implementation/Integration: How do these configuration choices get applied, technically? How will these configuration options interface with the game itself?

Features

Some of these will be fairly standard, common to many games, while some will be highly specific to the specifics of this game. I’ll address the standard ones, but don’t worry — once you see how we implement the standard features, it will be easy to set up config options for the features that are unique to your game.

You don’t need to support all of these options, but the following list is a good start for what you might want to consider:

Graphics

PC hardware very commonly has different graphical capabilities, due to differences in hardware, particularly the video card and monitor. While just about any video card is going to be capable of playing most Game Maker games at full quality, there is still the monitor to contend with.

Display settings

It might be easiest to force a specific display mode, but that’s not a flexible approach and may not work for all players. By far, it’s better to assume that the display mode the game starts up in is the player’s preferred (or only) graphics mode, and leave it as is.

If you want to enable everyone to play your game, it’s a good idea to give them some control over how the graphics of your game will be displayed on their screen.

The easier approach is to allow the player to set the display settings through the computer’s control panel, and just run in whatever mode the display is set to when the game runs.

More professional looking games usually offer the play an in-game configuration menu that allows them to change the same settings without having to leave the game program. It’s a convenience, to be sure, but it does keep the user in your game.

Keep in mind, too, that in GameMaker, there’s a distinction drawn between the Display (the physical hardware), the Window, the Room, and the View. Most of what you might think could be accomplished by forcing a specific display configuration can be better accomplished through Widow, Room, and View settings.

  • Fullscreen or Windowed mode?
  • Display resolution
  • Aspect ratio
  • Refresh rate
  • Color depth

Fullscreen or windowed mode?

Most games play best in fullscreen mode, but sometimes players like the option of playing inside a window, as it allows them to switch between other applications more easily. The downside of this is that it becomes all too easy to mouse outside of the game window, and lose focus. You can set the game to pause if the window loses focus, but this is still annoying disruption and can mess the player up even with pausing the game.

When to run in a window?  As a general rule, I like to develop and debug my game in windowed mode, since it’s easier for me to get at other windows that I’m working in. But for finished games, I usually like the game to run fullscreen. I want the game experience to be distraction-free.

That’s not always the case, though. Casual style games, pausable games, puzzle games, and turn-based games that wait on you to act are good candidates to have a Windowed mode as an option.

Resolution

These days, it’s probably not necessary to change the display resolution. Just about everyone uses LCD displays with fixed resolution. While these screens are capable of emulating other resolutions, they do not look as good when they do. Games for mobile devices of course will play on a device with a specific resolution that cannot be changed.

In any case, the game should never force a specific resolution on the player; you may want to offer the player controls to allow them to change the resolution for themselves within your game interface, though.

If a player wants to set a specific resolution, they can always just use the display settings control panel on their computer. If you want to provide an interface for this to them in your game, you can, but it’s a convenience or luxury feature, not a necessity. Supporting multiple resolutions means a lot of extra work and testing for a developer, so unless you’re a professional studio with the resources for this, it’s probably better to focus on supporting one resolution well.

Don’t worry about supporting every possible display size right away, the amount of work it takes to do it well will kill your project. Instead, focus on making the game as good as it can possibly be in one default resolution, and if your game ends up being popular enough to warrant it, you can build resources (primarily different sized rooms) to support other display resolutions better.

If you do change display resolution in the game, keep in mind a few things:

  • Always change it back when you’re done. Use display_reset() for this. Keep in mind if the game crashes, this doesn’t get called, though, and may leave the computer in a resolution the player doesn’t want. This can panic a non-technical user.
  • Don’t change display settings without first testing them. Use display_test_all() with the settings you’re about to set, before you actually set them. Be sure to have some fallback code that gracefully handles what takes place if the new settings don’t test OK.

You probably do want to know what resolution display the game is playing on, though. There are a lot of reasons to need to know this. Use display_get_width() and display_get_height() to detect the display resolution. Note this will return the current settings for the display, not what the display’s maximum or native resolution is.

You should decide the minimum display resolution you’ll support. GameMaker’s default room resolution is 640×480, which is the old VGA standard resolution. This is a very safe resolution to use, because just about any display will support it, but is also quite tiny these days. It’s still not a bad resolution to start out with, though. The smaller the minimum resolution you support, the more devices your game will run on.

It’s good to support larger resolutions, too, of course. Most people do have larger displays these days, and it’s desirable to utilize all that space effectively. Very large display resolutions can introduce performance issues, though, so test your framerates when running at maximum resolution, and make sure they’re acceptable.

If you’re targeting a specific mobile device, learn what its native resolution is, and use that. Read up on guidelines for Android and iOS development to learn the recommendations other developers follow.

To accomodate other resolutions, there are a variety of approaches. You can create a series of rooms and HUD graphics to provide a tailor-fit screen for every resolution you support. This is a lot of extra work, though. Scaling the game to fill the display can be an OK approach to take, and requires a lot less effort, but will result in a less attractive game with blurry edges due to the way the Game Maker runner handles scaling graphics. Another approach is to letterbox — draw the game in its standard resolution at a fixed 1:1 scale, and leave a black border around the edge of the screen, framing the game window. This can be good, too, but if you have too much black border it can be annoying.

Aspect Ratio

These days, you also have to consider aspect ratios, the ratio of the width and height of the screen. In the old days, computer monitors and TV sets in the United States all used 4:3.

Today, it’s a different story. On the desktop alone, people may have 4:3, 16:9, or 8:5 (16:10) displays. 16:9 is pretty quickly becoming the most common, particularly in 1920×1080 (1080p), and is also the ratio of HDTV, so if you have any desire to port your game to a game console, you may want to start out at 16:9.

And there are still others, albeit less common ones. If you’re planning on targeting a mobile platform, you’ve got even more possibilities.

If you’re building an HTML5 game, keep in mind that the browser window “chrome” (menus, toolbars, etc.) all take up space as well, which should be subtracted from the available display you have to run your game in, and this can change the effective “aspect ratio” of the web page unpredictably.

Enable/disable special effects which may affect performance (such as particles).

There are two main reasons for making these configurable: performance on slower machines, and user preference. Some players don’t like effects-heavy games, and prefer a sparse, cleaner visual experience without all the bells and whistles. Sometimes the screen can become so cluttered with particles that you can’t see the action, and it hurts your game rather than enhances it. So it’s nice to allow the player the option to not have these things in their game.

Refresh Rate and Color Depth

These settings are controllable in GameMaker, but there’s almost no reason for it. Most games shouldn’t have any need to mess with the color depth of the display.

In the 1990’s, it was more common to see variety here, but these days it’s pretty safe to assume that the computer will be running in 32-bit color mode. Oddball machines might be running in 16-bit or 24-bit color, and even more rarely you may encounter a display configured to run in 16-color or 256-color mode, but these are rare, and probably won’t have the necessary hardware to run a GameMaker game adequately anyway.

Refresh rate is probably also safe to leave alone. This setting is more pertinent to CRT displays, which are rapidly disappearing from the desktop computer landscape. Most LCD monitors use a 60Hz refresh rate, although there are LCD HDTVs that use 120Hz or 240Hz refresh rates. Older TVs used 30Hz.

Some people can notice a difference between refresh rates, and can tell you readily just by looking what refresh rate a monitor is using, especially if they are familiar with the display in question, but most people can’t, and don’t even think about such things if they’re even aware of them.

Some game developers will say that it’s a good idea to sync the room_speed of your game to the refresh rate. Keeping FPS and refresh in sync, or at least in a whole-number ratio, is not a bad idea. But the better way to do this is to set your room_speed to the display_get_frequency() or just assume a refresh rate of 60 and use a room_speed of 30 or 60. Keep in mind that regardless of what the room speed is set to, it’s fps that is the actual frame rate, and this usually fluctuates a bit.

Sound

  • Master volume
  • Music volume
  • Effects volume
  • Mute

Again, for the most part, these configuration options could be set by the user outside of the program, by using the volume knob on the speaker, or through the Sound and Volume control panel. But it’s a nice convenience to provide an interface to the user so they don’t have to leave your game to make adjustments. The nicest one is the separated music and effects volume. This will allow the player to adjust the mix to their taste.

One important thing to do is to remember the user’s preferred volume settings and automatically set them when the game runs, and set them back when the game exits.

The harder task will be to separate the volumes for the Master, Music, and Effects volume controls. Mute is actually very simple, and there are a few techniques that can be used. One way is to have a global variable called “mute”, and to set up a conditional before each and every sound function call. This is an inferior approach because it means you have to make sure you catch every single sound function call in all your code, whichis a pain to program. The other problem with it is that all those extra if (mute){} checks take processing power at runtime, albeit a tiny amount, it still adds up and could conceivably hurt performance.

The better way to handle mute is to simply setting the volume to 0. This is done with the sound_global_volume() function, which we also use for setting the master volume. The sounds still play, but at 0 volume, you don’t hear them. You don’t have to add code for every sound_play and sound_loop function in your code. And since the computer doesn’t have to ask every single time whether the game is muted or not, it’s a lot less processing. sound_global_volume(0) mutes your game, and sound_global_volume(1) restores the master volume to full. Use a global variable to store the setting for the master volume as well, so instead of restoring the volume to full blast on unmute, you set it back to the master volume value.
globalvar master_volume;
//master_volume is set in the config screen.
mute() {sound_global_volume = 0;}
unmute() {sound_global_volume = master_volume;}
You can put the Mute function into your game configuration menu, or you can make it more readily accessible to the player by creating a control for it that they can access while the game is playing.

Separate volume controls for bgm and sound effects will take a little more work, using the sound_volume() function to control the volume for each individual sound in your game, so we’ll cover that in detail later.

Note: GameMaker Studio 1.1 introduces an entirely new audio system. The above code samples work with the old system.

Controls

  • Provide the player with a screen showing the current settings, and allow them to set up their own custom settings.
  • Allow the player to save their custom settings as a profile, load from a profile, delete profiles.
  • Allow the player to reset the controls back to their default settings, or to select a custom profile (such as for different keyboard layouts, etc.).
  • Provide the player with options to use various input devices (keyboard? mouse? joystick/gamepad?)

Difficulty/Game Options

  • Difficulty (Easy/Normal/Hard)
  • Starting level
  • Enable/disable (or throttle) specific features
  • Number of lives
  • Text size/speed (if you’re displaying lots of dialogs)
  • etc.

This part is highly dependent upon your game. You can set up an interface to allow the user to set these things, but integrating them into your game will be highly dependent upon your game. Some things (number of lives, starting level) will be trivial to implement and integrate; others will take a great deal of design sense and playtesting.

High Scores/Achievements

An Achievements system, again, will be highly dependent on your game. But we can probably provide some abstractions that make it easier to implement your achievement system in a consistent way, such that the specifics may be different from game to game, but they way they are handled will be the same.

Some features we might like to see:

  • Record more than 10 high scores
  • Record other types of achievements
  • Record achievements per player account
  • Clear achievements
  • Upload scores/achievements to an online “Hall of Fame” server

Localization options

  • Language
  • Keyboard layout – keyboard layout could tie in well with the Controls. A user with a non-QWERTY keyboard could set that here, or have it be auto-detected from a system variable, and automatically update the keyboard controls with default keys appropriate to the layout map of the local keyboard. But then, the user should still be able to override these with their own preferences.

Save States/User Profiles

If your game stores user profiles or save state data, provide an interface to the user to do things with them. Common activities include:

  • Create new
  • Delete
  • Copy
  • Rename
  • Edit info (for user profile data, such as user name, password, and other profile data).

What’s in the save state file will be a bit beyond the scope of this series, and in any case should be highly dependent on your game. While I won’t tell you what to put in your savefile, I can tell you how to set up some file i/o functions that will enable you to read and write your savefile, and maybe some suggestions for how to protect this information, validate it, and format it.

It’s also a good idea to save the configuration settings themselves. Configuration settings (graphics, sounds, etc.) should be separate from game savestate data (My character’s name is XYZ, He is level N, his inventory consists of…, he has visited the following locations… he has achieved the following goals… etc.)

We have a few design choices for how we want to do the config save. The simplest would be to simply revert to defaults every time the game is launched (ie, not save anything, but remember a basic set of options that will definitely work on any system the game is run on.) From a user’s perspective, however, this would become annoying, as they will need to re-configure settings to their taste every time they quit the game. The next simplest approach would be to remember what the settings were the last time the user set them, and to remember the defaults in case the Last config profile gets corrupted.

This is probably as far as you really need to go; but once you are saving profiles, you’re not too far from allowing the player to save multiple configuration profiles, or per-user profiles. We’ll probably implement this later on as an advanced feature.

  • Other stuff

  • Network: These days, you may also want to have configurations options for network (TCP/IP settings, firewall/proxy server settings, etc.)
  • Social: Or you might want to have some kind of social networking features, such as sharing your game progress with your Facebook and Twitter friends, inviting friends to try out your game, or even send friends in-game items to help them, and so on.
  • Hall of Fame/Achievements: Or a “submit high score to server” feature. Or you might have a registration and payment screen.
  • Update Checker: Or a “check for updates/download/install” feature.

These things are much more complex to design and implement properly, and as such will be outside the scope of this tutorial for now, but it’s good to think about them!

Personally, I would like to see these type of features built in to Game Maker, and I hope that YoYoGames will incorporate features like this in time. When I say “built into Game Maker, I don’t  just mean having a library of available GML functions that one can use to build a configuration system out of. That is, after all, what we are going to do with this project. What I mean is, it would be nice if such a system existed as a ready-made component that you could just drop in to any project, and set up with just a few clicks or lines of code.

These features, and the interface the user will interact with to manage them, will be challenging and time-consuming to implement, and are not really “the game”. A good configuration system and interface is excellent polish for a professional-quality project. Game Maker’s purpose is to make game development easy by doing the hard technical stuff for you. So far, they’ve done that by focusing on the in-game building blocks that a designer would use to produce a play experience. Now that they’re turning Game Maker into a more professional tool, I hope that they’ll start thinking about including these kind of features, too.

Until then, we have to fend for ourselves. The above list of features represents a significant amount of work that we need to do. Setting up a system that is flexible enough to allow us to do this easily is no small task. If I’m lucky, by procrastinating long enough, I may find that they end up doing the work for me:) If I am going to do all this work, then I want to get the most return for that work that I possibly can by making a re-usable system that I can apply easily in any game. This means a de-coupled, generic system that can be adapted easily to a wide variety of projects. This is a good situation to create a Game Maker Extension (.gex). However, an extension will not give us a complete system — an Extension allows us to package a library of useful new GML functions that we write, but our built system will also need room, object, sprite, and sound resources, and a .gex cannot include those resources. Ultimately, this means that we may not be able to realize a dream of a drop-in system. But even providing better building blocks to create such a system would be better than nothing.

To begin, we’ll start small, and implement some basic things, and then iterate and refine our solution until we have something that hopefully works really well for a wide variety of games.

In our next article, we’ll discuss the code needed to make these configuration settings, as well as how to store and retrieve them.

Game Maker Studio Automatic Updates Failures (and workaround)

YoYoGames has been releasing updates to Game Maker Studio at a very fast pace lately. For a while now, new builds have been released every few days now, and it seems like every time I fire up the development environment, it’s got another update for me.

The last two or three of these have been extremely problematic, with very slow downloads, and repeated silent failures of the updater to run when the download shows that it is completed and the update is ready to install.

In the past, I have found that (on Windows 7, at least) one or two things might make the update process a little more reliable: launch Game Maker using “Run as administrator”, and exit the main Game Maker program while running the updater app. I’m not sure if these really do make a difference or not, but in the past when I tried these measures it seemed to help. But last night none of this made a bit of difference.

Yesterday, I spent many hours patiently waiting for the latest update to download. Each attempt took an hour or more, and when the updater indicated that the update was complete and ready to install, nothing would happen — it would fail silently, and on next launch, prompt me to re-download the same update again.

I tried looking for an alternate way to download the update, and it was difficult to find a direct link to the file — the only way to obtain it seems to be through the YoYoGames store. Eventually, I found a link that someone provided in the Game Maker Community forums, and began downloading it with Google Chrome.

About an hour later, I saw the download terminate as though it had completed successfully, but when I checked the file size, only about 50MB of the 93MB I was expecting was there. Obviously, an incomplete installer won’t work, so that appears to have been the culprit all along.

It’s clear that auto update fails due to heavy server load causing the download connection to fail, resulting in an incomplete download. When the program tries to run the update, it fails silently when it detects that the downloaded file is incomplete. When it tries to re-download the file, it starts over from 0% rather than resume from where it left off. These re-try attempts only add to the server load, and users re-trying but never succeeding only end up exacerbating the problem.

Even with the direct download link, if YoYo’s server is under heavy load, the download would fail when I tried to initiate download using Chrome. At times that I’ve had problems running the update, I’d get speeds of ~14kbps, which is terribly slow considering I’m on a cable modem that routinely tests at 20mbps. Under normal circumstances, this download should take a minute or two, not an hour.

Game Maker Studio seems to be a victim of its own popularity. YoYoGames needs to add server capacity to address this issue. Some mirrors or a CDN (content delivery network) would alleviate the problem. But the updater is to blame as well: It should not fail silently when the download fails and it has an incomplete file. By telling the user that the download is complete and the installer is ready to run, the user is mislead and does not have any way to know what the problem really is.

It would also help a great deal if the Auto Updater supported resuming partial downloads, rather than discarding a failed download. That way, users could complete the update after several attempts, rather than continue re-trying and starting over, and continuing to place a high demand on the server. After they complete the update process successfully, they’ll no longer place demand on the server, and it will become more available to others who need the download.

When the server was under heavy load, the only way I was able to complete the download was by using Orbit Downloader to handle the download. Orbit is a specialized download tool for Windows with robust capability to resume downloads. With it, I was able to successfully complete the download where Google Chrome and the Game Maker auto update feature both failed. Once downloaded, I ran the update manually, and everything worked as it normally should.

A bit of warning, I consider Orbit to be an annoying application, borderline malware. The installer wants to change your web browser’s default homepage, which it has no business doing, and it wants to install a toolbar. It is somewhat intrusive in the way it tries to integrate itself with the operating system and any browsers it detects. It’s nice that it has those capabilities, if you want to completely replace your normal downloading with Orbit, but if you don’t, it still wants to insinuate itself so that it always downloads anything you ever want to download.

It also has various social network integrators which have no point (what, am I supposed to Share with my friends on Twitter and Facebook everytime I download something, what it was, and let them know the link? Get real!) Also, it will — without asking — scan your computer to check for out of date applications, and notify you of available updates. Unfortunately, while it sounds like this would be a useful feature, it does not actually make downloading the updates any easier, and is frequently error prone as to what the latest version number is, leading to some false positives.

However, Orbit’s core feature of downloading anything faster and more reliably than just about anything else is good, as long as you can keep the rest of the junk that they’ve built around it tamed. Just be careful when installing the program to say no to most of the stuff it wants to offer you.

Otherwise, try to download updates during off-peak times. Early morning (6-7AM) if you’re in UTC-05 (Eastern US) seems to be good currently.

Currently, the form of the direct download link is:

http://store.yoyogames.com/downloads/gm-studio/GMStudio-Installer-1.0.exe

(I’ve been informed that this url will always contain the most recent build.)

Hopefully if users start using the advice above, it will help reduce the load on YoYoGames’ server, making the experience of updating better for everyone.

Make a Configuration System in Game Maker, part 1

One thing that’s still currently harder than it should be in Game Maker is creating an interface to allow the user to configure the game preferences. It’s a real pain to have to implement a configuration system in each game you make from scratch — it takes a lot of time away from the development of the actual game.

Game Maker is supposed to make game development faster and easier. It really should have features to allow making the parts of the game program that are not the game itself faster and easier as well. One may consider this a weakness in Game Maker, if one takes Game Maker to be intended primarily for making game development quicker and easier. Which, it is.

But, Game Maker also is intended to be an educational platform, so I see this as both an inconvenience and an educational opportunity. How often do you get to devise your own UI widget and implement them out of primitives rather than use some library?

Since Game Maker does not provide this out of the box, and due to the difficulty of implementing such a system even once with good quality, it’s very worthwhile to try to build a generic system for game configuration options, something flexible enough to allow it to be used in many game projects, rather than have to build anew for each new game you develop. The up front investment in development for the system will be regained in the re-use of the system in many projects.

This article is the first in a series which describes in detail how to design and implement such a system in Game Maker: Studio. In the process, I’ll be generating a number of Extensions which you may use in your own projects.

Unfortunately, these articles will necessarily be Windows-centric, as I do not have the means to test what I’m building on anything but Windows and HTML5. I’ll be making the source available, though, so if you want to try these out in Android, OS X or iOS, or (if needed) modify/extend them to work on these platforms, you’re very much encouraged to do so, as long as you share the source and keep it open.

I would welcome other Game Maker Studio users who are building for OS X, iOS, and Android who want to collaborate on this project to contact me.

Going wild with UI design

Many games (especially professional games) go crazy with interface design. The designer is encouraged to (pardon the clichés) think outside the box and reinvent the wheel. More than simply coming up with new skins for buttons, sliders, pulldowns, and listboxes, etc., they do something really special to integrate the game, or its theme, with the configuration screen controls.

For a superb example of such an implementation, check out the configuration screen for Derek Yu’s Spelunky.

Spelunky's ingenious in-game configuration screen

By the way, did you know that Spelunky was originally created in Game Maker? Later on, its developer re-did it for XBox Live, and released the source for his Game Maker project, so be sure to go check that out. Play the game, and see how the configuration screen is cleverly set up as a special room in the “normal” play world, where your explorer can trip switches that control the configuration of the game. Then look at the source to understand how this was implemented.

Keep in mind that while Spelunky’s solution to the config screen is original and innovative, it’s not perfect — for example, it’s not terribly fast to use. There are always tradeoffs with any design — do what makes the most sense for your game and always with the user foremost in your thoughts.

If you want to, you can create an interface like this, but it’ll be more of a custom job. This series is geared toward building a foundation out of generic, reusable code. But the good news is, much of what we cover in here will end up being useful, because really the only difference between a custom configuration screen and a generic one is the interface, and we’re going to keep the other parts of the system abstract enough that they should be re-usable even in a custom system.

So, keep reading! Besides, it’s better to learn these basic approaches before trying to tackle something more innovative and complicated.

A word of caution, though: many times these highly customized interfaces look cool, but are terrible in how they function. They aren’t intuitive or understandable, or the controls are actually difficult to manipulate. Always strive to make your UI user-friendly.

There are entire bookshelves worth of books you could read to learn about good User Interface design principles. I don’t have space here to say it all, but in summary:

  1. Avoid forcing the user to have to think about how to do what they want to do. The UI is not a puzzle. Its purpose and function both should be immediately obvious.
  2. The UI should convey information clearly to the user. This information should be: the purpose of the control; the current configuration state.
  3. Controls should be easy to use and easy to understand how to use.
  4. There should be as few controls as are necessary. It’s a myth that people want lots and lots choices. They think they do, but what they really want are choices that are relevant to them, and the options that they want. A good designer can make most of these choices for the user without having to ask them their preference, but also knows which choices need to be offered to the user.  Look for ways to reduce the amount of controls you give to the user. Show only controls that are relevant in the current context. Combine controls when they represent mutually exclusive options.
  5. Provide sensible defaults. The default option should be the most sensible choice for the most people. Often, this is one standard option, but not always. Sometimes there are two or three good candidates for what may be a sensible default, and it is not obvious which one the default should be. Knowing which is the best configuration for a default setting may depend on environment and context. So, if your program can sense these things somehow, that can aid in selecting the most appropriate default.

There are always exceptions to the above rules. Like, I’m sure that for a certain puzzle game, a really innovative configuration screen that is itself a puzzle, and in its way serves to introduce the player to the game’s mechanics and gameplay would be awesome. But if you’re going to pull something like that off, you need to be very careful that your design works.


A Game Maker Weakness: No UI widget libraries

Game Maker has nearly nothing in the way of traditional interface control widgets. This alone makes creating a Settings screen very difficult for a novice Game Maker user. However, figuring out how to do this is an excellent opportunity for an aspiring Game Maker user, provided of course you can figure it out. Learning this will give you a lot of useful skills and insights about how to design both software and user interfaces.

In the long run, I believe it will be better for everyone if YoYoGames extends Game Maker to provide better built-in tools to allow developers to create polished, professional configuration screens without having to sink huge amounts of time into it. Preferably, some widget objects based on the native OS, but skinnable to allow the game to have its own look and theme would be the best way to go.

Until then, we have to make do, so we might as well come up with some useful approaches and share the knowledge about them. Fortunately, creating our own widgets out of Objects, a few sprites, and a little GML isn’t that difficult.

In the next article, we’ll talk about the Design of our Configuration System, and brainstorm the features we want it to have. I’m not just being editorially cute by using the “royal we” either — if there’s something you’d like to see in what I’m building, drop a comment.

Part 2

Game Review: Home by Benjamin Rivers

Last night I attended Akron Film + Pixel‘s Indie Games: Play and Discuss, and (among other things) played a game called Home, by Benjamin Rivers. As it turned out, it seemed that there was a bit more Play than Discuss at this event, so I thought I’d review it the day after.

This game held my interest enough to play through it once, which was all I had time for. I don’t know that I’d play it again, although I gather from the ending that if I did play it again, it would be a different experience of a different story, assuming I made different choices.

Unfortunately, I didn’t find the choices to be all that interesting. Do I pick up the gun or do I leave it where it is? Do I pick up the key or do I leave it where it is? Do I pick up my wallet now that I’ve found it, or do I leave it where it is? Do I flip the switch or do I leave it alone for now, only to come back later and flip the switch because that’s the only way forward? Do I look at the thing that automatically highlights when I walk by it so I can get another element of the story, or do I no longer care and just want to continue walking until I get to the end of the game? I DON’T KNOW, ALL THESE DECISIONS ARE TOO MUCH FOR ME! WHAT WOULD YOU DO?!

This and many other decisions like it await!

Apparently if you make different choices, the story that unfolds in flashback as you walk through this amnesiac world trying to put the pieces together and figure out if you’re a murderer or not changes. Not that your decisions affect the future, but that your decisions somehow retroactively affect the past, such that, as you recall in flashback what happened before you blacked out, what you recall will be different based on what you did or didn’t decide to do in the present.

This might make it seem interesting, but when all the story elements are as boring as they are likely to be (based on the ones I actually saw when I played through it), probably you don’t care what other stories you might have crafted had you made different decisions enough to actually go back and make those different decisions in order to find out. After your play-through, there’s an invitation to share your story on the game’s web site, so if anyone actually does that, I suppose you can find out how things worked out differently for them based on their choices, but it all seems so boring an uninteresting that I really have to question the sensibility of anyone who’d actually spend time describing what they’d been through on a web site, other than as a to warning to others. Ahem. Like this.

Home bills itself as a horror game, but the only thing horrible about it might be that it could have been interesting and immersive, but wasn’t. Each play-through feels very linear (despite the fact that you can make choices that change what you remember happened in the past), provides no danger or challenge or conflict, every bit of blood in the game has already been shed before you begin playing, and the tension that rises as the story unfolds while you re-discover your recent past never sufficiently pulls itself into the present moment. The apparent climax, when you decide whether you find the body of your wife in your cellar, or whether you don’t find her and realize that she must have never actually existed except as a delusion, leaving you with even more unanswered questions that never get answered, is the textbook definition of anticlimax.

As I played, I kept expecting to run into someone else — anyone — maybe my girlfriend/wife, maybe someone (a familiar friend? a stranger?) I’d need to rescue or team up with in order to survive, maybe the killer(s), or even the police — would they keep me safe? Would they arrest me? Would I have to convince them of my innocense somehow? Were these items I was picking up going to incriminate me? Did picking up the gun protect me from the murderer finding the gun and using it against me, or did it implicate me in the murders that had already happened, whether I’d actually perpetrated them or not? There were so many ways which the plot could have developed that would have made the game vibrant and interesting. But none of that ever happened.

What else can I say about it? The pacing is slow. There’s no run button, no jump button, no way to go any faster through the game. There’s a tiny bit of exploration offered, but it’s not terribly interesting. The pixel art graphics are OK to pretty good, and I do like pixel art, but when blown up to fullscreen, there’s so much jpeg artifacting (or what looks like it) that it ruins the work put into it.

Worst of all, there are parts where I wanted to go backward, and was prevented from doing so by the game telling me “You don’t want to do that.” I think I should be the one who decides what I want! I guess I should thank it for sparing me from wasting time going back to someplace that will not advance the game, but it’s much better to provide an external reason, as it does in certain parts of the game, than a “you just don’t feel like it, sorry” reason that is total bullshit.

And there are so many unanswered questions: What happened to everyone? Who was the killer? Is anyone still alive besides you? Why do you need a flashlight everywhere you go, even outdoors, or indoors in places where there should be light?

In fairness, I did not get to play the game with sound, so it could be that I’m missing out on some crucial elements that would have made the experience more enjoyable, even worthwhile. And to be honest, I didn’t find myself hating the game so much while I was playing it, as I did after once I had been through everything and realized that that’s all there was. It just built up to something that it never delivered. I did continue playing it, hoping that the plot would deepen until it got better. It just never did. Home tries to offer an interesting interactive narrative, and while it does contain a good bit more narrative than many videogames, that doesn’t make it good narrative, or a good videogame. Other narrative art forms give you way more (read any halfway decent book!) and other video games give you more as well (pick your poison).

I don’t get it. There are plenty of positive reviews for the game. Is it possible that I simply made all of the most boring choices possible, resulting in an anemic plot where nothing drastic actually happens, in spite of copious dead bodies found nearly everywhere, without sufficient explanation other than maybe you did it? Or is this some kind of “art game” that is great art because it turns the notion of a game on its head, and offers for your consideration that a game can be boring, thereby challenging your notions about what games are about?

I won’t recommend staying away from Home if you are in the mood for reliving the experimental 80’s text adventure genre in a rather dull implementation that offers barely any puzzle beyond how to navigate around the screens and no interesting choices or decisions. If you absolutely have to play every game in this genre, then so you shall. Otherwise, there’s probably something better you could do with your time, like trim your toenails or perhaps watch an aquarium full of snails.

“Preaching to the Choir”

We all probably hear a lot of cliched business phrases in our work lives, but one I’ve been hearing a lot lately is “preaching to the choir”.  Whenever I hear it used, it seems to be in a manner that discourages the practice.

The idiom as it is normally used seems to mean “wasting time” — with a strong image of uselessly “persuading” those who are already persuaded, and possibly boring/annoying them with something they’ve heard a million times already.

The idea seems to be that preaching to the choir is a useless activity, because the people are already in the choir, and that the preacher would be better off finding sinners to preach to… the choir isn’t the problem, it’s these sinner people who haven’t heard your message a million times and don’t agree with your point of view who you should be preaching to.

I would like to challenge this notion. “Preaching to the choir” should be much more effective than preaching to non-believers. Think about it:

  • The choir is listening to you. They’re there because they want to be there. They want to hear preaching.
  • A choir isn’t the leader. The choir needs a leader. I’m sure they can think for themselves, but they still need someone with vision and focus, who can inspire and motivate them with a message worthy of amplification.
  • The choir exists to amplify that message! That’s why they’re there!

You don’t have to overcome a lot of resistance in the choir order to get them to buy in to your message. This means the amount of time you need to spend persuading relative to the amount of time that you can spend in action doing useful and productive things is more favorable. “Preaching to the choir” should be a good thing, not a pointless thing.

(more…)

Redefining “success” for the Kickstarter bubble crowd, and why you shouldn’t.

So, this article has gone around and gotten attention. It’s an interesting topic, understanding the factors that contribute to a project raising its startup funding from “the crowd” successfully, but I want to take a moment to divert on to a tangent for a bit, and take issue with their definition of “Kickstarter success”.

This is important, because if Kickstarter is to succeed at changing the world, we need to make sure we don’t mistake “funding success” with “project success”.

Seriously, this is really, really important.

Funding success is, like, maybe the third or fourth step in a project — far from the final one. Project success is what really counts. You have to do the work. You have to deliver your product. Only then can we decide whether the project was a success.

Yeah, it’s really cool that people liked your idea enough and in such numbers that you got to raise enough money to hit your goal and actually collect that money. Don’t you dare think of the Kickstarter as “successful” at this point! The project is only beginning. When you deliver the product that you promised, then you can make a claim to success.

But finishing isn’t even success. Not really. If you completed the project, but went way over budget, or delivered so late that no one cared and everyone now hates you, your Kickstarter won’t be remembered as successful. If the end results are of poor quality, no one will call that successful. If you don’t set yourself up for your next successful project by building on the success of the last successful project, whatever success you do attain will be quickly forgotten.

It’s only natural for people to celebrate reaching an important milestone, but don’t confuse your funding milestone with the finish line. Stop calling funded Kickstarter projects “successful” until they are.

If you don’t? Well, you’ll be deluded. And the project owners will be deluded people with a big pile of money. And big, probably fragile egos.

You’ll feel like you had the meal when you merely looked at the menu. Getting your money up front, I’m sure, feels wonderful. But don’t let it go to your head. You need to show us results. I worry the exuberance everyone feels from a project getting successfully funded will make people forget about delivering the results and making a successful product. The focus will be on the run up and the party that happens when the “success” of reaching the funding target happens. There’s a long, not very sexy period of working your ass off that comes after this point, and if you allow yourself to get too high on the “success” of having all that money you said you needed to attain your dream, you might just forget about the dream.

And then we’ll have scandals and repercussions. And the good will of the crowd will dry up. You don’t want to ruin that trust, because once it is ruined, regaining it will not be easy. Please don’t diarrhea into that swimming pool full of money.