Phil Hassey - game dev blog
Phil Hassey as Syndrome
"Look, stores don't sell
costumes like this to just anyone."

Archive for the 'gamedev' Category

Freemium – my take: design for maximum enjoyment first

Friday, October 21st, 2011

There have been a ton of posts about game design and ethics lately relating to freemium.

Here’s my take. I don’t really think there is ethics so much in if you make a freemium game with random drops or checklists or whatever or not. I think those are game elements that some users REALLY LOVE and some users REALLY HATE. Some users HATE in app purchases, some users LOVE them. I think many players find random events to be FUN! Randomness is a big thing that helps make a game addictive and people like addictive games!

Here’s my “big picture” view of where game design gets unethical – when the designer’s time is spent too much on designing for maximum monetization as opposed to player enjoyment. I think the purpose of games is for people to have FUN! If you as a designer are working mostly to ensure that, you’re doing your job. If you are spending most of your time tweaking your game for maximum REVENUE then you are doing it wrong.

So, yeah, I think the reason Zynga gets a bad rap is because there’s rumors that they have huge departments of psychologists and number crunchers working non-stop to increase the addictiveness and monetization of their games. With no concern for the player beyond what they can do for the bottom line. That’s not very positive. They have lost their way as game developers and that’s unfortunate.

On the other hand there are tons of indie developers out there who are working hard to make FUN games that use checklists, random drops, grinding, and in-app-purchases as game elements who are focussing on making FUN free-to-play games. I think these guys are doing it right.

I think freemium is right now the brave new world for indies. I think some indies are doing great stuff with free-to-play and I think some are scrambling too hard to MONETIZE. I think it’s a time where some people are screwing up and making bad games, but I think it’s okay to make mistakes right now. I think right now is the opportunity for people to find out what free-to-play can offer the player. I read every single blog post and article I can find about free-to-play game design because I want to do my best as a game designer to make my stabs into this new territory to be good ones.

And again: as a game designer be sure to keep your focus on making games that people genuinely enjoy.


Ludum Dare 2010 Keynote (starring Cuzco the Goat!!!)

Friday, April 23rd, 2010

See the Ludum Dare 2010 Keynote:

Inviting all python game-devs! Even if this notice is coming too late, we’ve got a compo coming in August, December, and mini-compos every month! Just check out the website and join the fun!


Galcon Fusion for the iPad

Saturday, April 3rd, 2010

galcon-ipad-rainbowSo Galcon Fusion is available for the iPad.

Here’s a bit of tech stuff for ya! The port itself took about 3 days. If you check out the screenshots, you can see I letterboxed the desktop version of Galcon Fusion, and used that extra area to put the iPad specific controls (the pause button, the chat activation button, and the ships % “mouse wheel”)

I don’t have an iPad yet, but I think it’s going to work pretty well. The multi-touch interface design was all done ages ago for the iPhone, so I just used that code for this. It should work great!

The biggest challenge in porting was dealing with OpenGL stack limits on the iPad which appear to be 16 levels. My GUI used quite a few Push/Pop’s to achieve various theme effects and whatnot, but that was blowing the stack. It took me a bit, but I was able to find a number of places where I was able to remove those uses of the stack and things seemed to work fine. (There are some edge cases where my changes wouldn’t be safe, but none of my code uses those, so no harm!)

Anyway, I’m really looking forward to getting an iPad and seeing how the iPad users stack up against the mouse users. This will really pit two different interfaces against each other, which should be really neat. Both interfaces have their own advantages!

As always, python proved useful in this project as I had to update all my graphical assets for the game to work with the iPad. Since my asset pipeline was written in python and pygame, it only took a couple minutes to add in the code I needed to fix a few issues. And thankfully these fixes will go forward and improve my desktop version as well, so all and all, a good deal.


P.S. In other news, I’ve been playing with django lately for my non-games business. It’s slick!

Update: Since I was unable to test Galcon Fusion on a REAL iPad it has bugs 🙁 Apparently the multi-player game crashes and the framerate is low. I’ll be getting my iPad on Monday and fixing those issues ASAP! There’s probably some kind of “testing on real hardware is smart” kind of lesson in this somewhere …

Guide to finding Phil at GDC

Friday, February 26th, 2010


So I’m going to be at GDC .. all week!  Here’s how to find me .. look for this guy:


I’m going to be speaking during the iPhone Summit about multi-player games.  Check out the talk listing here.  I’ve been slaving away at the talk all this past week, and I think it’s come out pretty sweet.  I’ll be practicing it quite a bit over the coming week so that I can hit it pretty solid come Tuesday morning.

Other than that, I’ll be hanging around the iPhone and Indie summits a good bit, and just generally around for the rest of the week.  If you see me, come by and say ‘hi’!  Send me an e-mail or comment if there is anything cool going on that I should know about.


The Galcon Fusion beta testers rocked

Thursday, February 11th, 2010

Galcon Fusion has arrived.“Yay, it’s finally here! Check out Galcon Fusion today! We’ve got a free demo and it works on Windows, Mac OS X, Linux, and Steam! It features some crazy nice hi-res graphics and soundtrack. And epic multi-player battles like you’ve never seen ‘em before! Have fun!” <– marketing blurb 😉

Okay, for some dev thoughts. Man, it was a long week! Adding the “demo” feature to the build was a ton of work. And then doing all that other ‘stuff’ that sort of comes up. I think the one serious lesson I’ve learned in this whole process is that beta-testers are awesome.

Really awesome. I had about 50 people who I passed out 10 builds of the game to over the past 3 months. Some of these people put in several dozen hours of play time. All this was a huge help for me, as this was my first desktop ‘3D’ game, so I had a lot of learning to do in terms of graphics capabilities. As in, I was able to get the game to run on my computer which is a pretty nice MacBook Pro .. but not everyone else’s.

The beta tester feedback was huge, I was able to get the game running on old PPC macs, various linux netbooks, and who knows what else .. as long as it had a somewhat reasonable 3D card. I changed the memory requirement for graphics from about 200 MB down to < 64MB. Without any noticeable reduction in graphics quality even in HD video modes. In fact, that reduction changed the loading time on my computer from 5-8 seconds down to about 1 second 🙂 Anyway, I think I'm going to take a nap. It's been a long week, and I really appreciate everyone who helped me get this game put together. Give it a whirl, and thank the beta testers!

Galcon Fusion announced – Finally!

Friday, January 29th, 2010


So, I’m finally announcing Galcon Fusion to the world.  Fusion is a port of iPhone Galcon + Galcon Labs to the desktop.  This time with hi-def graphics and a full interactive soundtrack.  It’s going to be coming to Steam and direct on my website on Feb. 11.  Users who supported me when I was first starting (as in, you bought desktop Galcon), your license is compatible with Galcon Fusion.  Thanks!


There are a few technical things that were challenging, dealing with endiannes for my network code, supporting fullscreen vs widescreen resolutions, and supporting a wide range of resolutions (from 800×600 all the way up to 1920×1080.)  To make it short, here are a few conclusions: best to support endiannes from the start, fullscreen vs widescreen is a pain, and baking lots of image data into your binary is a pain because it requires a ton of recompilation.  Oh, and installing VC++2008 is waaaay easier than installing mingw32, but keeping code working on both takes more effort.

I think my biggest conclusion comes along with this announcement, is that doing “secret dev” work isn’t really that sensible.  If you look at that last paragraph, there are a ton of issues I could have documented in my blog that I didn’t because I was all being secretive.  And hey, since I was so mum on this, nobody has heard about it until today.  I guess there might be some benefits to this (??) but I can’t think of what they are.  I think blogging about my progress is a good way for me to be able to see what I’m doing and not get lost in the haze myself.  My recent article on VC++2008 is a great example of something I’m going to get quite a bit of value out of just for my own reference.

One big different thing I’m doing with this project is my wife Nan is doing the PR for it.  She’s contacting all the reviewers, the general press, the newsletters, the announcement blog, twitter, and everything.  I’m trying to take a more dev-only role in the announcement.  This is nice, because I’m not very good on PR.  I try .. but I really don’t do it as well as I want to, largely because on a launch of a product I’ve always got about 50 technical things I’m trying to do along with the PR!


Seahorse Adventures – Loading TGAs (and more)

Tuesday, January 5th, 2010

Here’s a screenshot.  This is my Ubuntu desktop of my work on a new iPhone game.  Take a look at it nice and big.  Below I’ll explain all of what is going on …


In short, I’m working on porting my pyweek#3 team entry to the iPhone.  Here’s the details:

  • Top left, you see Kate, my text editor.  You’ll notice I’ve got -what appears- to be python.  But that’s actually tinypyC++ code!  My converter still has some rough edges, but it’s starting to get pretty good.  If you weren’t looking to closely you might mistake that for ordinary python code!  (In fact, it should be 100% python parser friendly.)  You can see how I have to use a touch of annotation to make it all go.  But for the most part, the types get inferred.  (The C++ outputted is about 2x as long, so I’m saving a ton of keystrokes!)
  • Top right, you see the level being painted.  It isn’t all working yet, but those are the basic tiles.  Interesting bit about loading the level, when I created this game I used my own level editor and library I made with pygame.  To save on disk and time I save all the levels to .tga files.  Since I’m targeting the iPhone I need an easy way to read the data from .tga files.  I don’t have SDL_image available, so a friend pointed me towards this great site.  It appears to have some awesome bits of code, including very simple and easy to use image loader that can load tga/png/jpg/etc.  I think it has the most painless interface I’ve ever seen for a C-based image-loader.
  • Bottom right you can see me working on tinypyC++.  As I’m working on BSA, I’m always finding new bugs in it.  Lately most of the bugs have been of the “add more graceful error handling” nature.  tinypy will point out what line (and character) an error happened on, but with a bit of extra work I’m able to add in some coherent error messages to tell the user what is going on.  In this case it was to inform the user of an undefined module name.
  • Bottom left you can see the startup of the game.  I’m using irrKlang for all my  game audio now.  It is not open source, but it’s “free” to use for free games, and the price is quite reasonable for commercial projects.  irrKlang is not portable to the iPhone yet, so I have to have a separate driver for my iPhone audio.

And that’s it for today’s report!


Elephants! is free on the App Store!

Wednesday, December 23rd, 2009

My gift to you: A totally FREE iPhone game! I made this game several years ago with some other way-cool game-dev friends. In “Elephants!” you save the giraffes while jumping on a rolled up squirrel! More fun than a barrel of pigeons! For Christmas this year I figured I’d port it over to the iPhone for you 🙂 Check it out!

From the dev side, yeah, this is my first attempt at “python” on the iPhone. Even though it’s actually restricted tinypy code. Here’s a sample of game code so you get the idea of what’s behind this game. All this code is converted by tinypy into C++ code so I can compile it with Xcode for the iPhone:

def elephant_new(g:Level,pos:List(int))->Sprite:
    s = Sprite('elephant',pygame.Rect(43-14,8,28,48))
    s.ball = ball_new(g,(int(s.rect.get_centerx()),int(s.rect.get_bottom())))
    s.suit = ElephantSuit()
    s.vy = 0
    s.vx = 0
    s.jump = 0 
    s.facing = 'e'
    s.score = 0
    s.z = 1
    s.state = 'live' = 'elephant'
    return s

Galcon Labs on the App Store!

Friday, October 2nd, 2009


So Galcon Labs is now available on the App Store! Check it out 🙂

Anyway, I just got back from 360iDev where I gave a talk about Galcon Multiplayer.  The two main points made in the talk were about managing community, and test driven development.  With so many devs talking about App rejections and other problems, I wanted to make sure the app was approved first time through the system.  And it was, in an excellent 7 day turn-around 🙂  So a real big thanks to all the folks out there who pressed me into reading the Kent Beck book on the subject!


Galcon Labs – Preview!

Thursday, September 24th, 2009


After a few days of itunesconnect being down, I was able to submit Galcon Labs to the App Store.  Check it out!  (See Phil’s first ever video!)

On a dev note, this game was REALLY fun to make.  I got to do things that completely change the gameplay of Galcon so that Galcon Labs is really four totally different feeling games.  My favorites are the Billiards mode (where the planets move around) which is just a lot of fun, and the Assassin mode where instead of trying to conquer everyone, you are assigned a single player that you have to destroy first.  The interesting thing about that, is if you destroy another player, or the player who is trying to annihilate you gets destroyed – YOU LOSE!  It really changes up how you have to play!

As usual, testing (TDD) was a big deal.  Having a network game makes it so that everything has to be tested to make sure it really works.  I’m going to be doing a talk at 360iDev on Wednesday, so if you want to hear me compare UDP networking to herds of rabid animals, be sure to attend.

Also, check out pygame 1.8.  It is really awesome 🙂  While working on Galcon Labs I felt I needed to put more effort into differentiating the game from previous Galcon games visually.  As it’s still triangle ships and planets, this took some effort.  And during the last hour, I decided I needed a whole shiny new look for the planets.  In the game I use a texture with 64 planet designs on it.  So creating all those by hand would have been too hard.  I used pygame to generate new landscapes and found the new pygame 1.8 features really helpful.  I was able to use the new blending modes to trim the landscapes into circles and rotate and scale them down so I got a nice antialiased look for all the planets.  In previous versions of pygame, this would not have been nearly as easy!  So, not just for games, but for generating and doing automated image manipulation, pygame is really starting to shine 🙂