Phil Hassey - game dev blog
Phil Hassey as Rambo
".. I've been there,
I know what it's like,
and I'll do it again if I have to."

Archive for the 'crazy' Category

Stuff-n-maintenance-n-stuff stuff stuff ..

Wednesday, November 26th, 2008

So this past week or so was pretty wild. I was doing all “behind the scenes” stuff mainly. Sometimes these sorts of things are kind of weird to do, because the main goal is to do them in such a way that nobody really notices that I did them (so the point of this blog post is to point out the invisible so I can FEEL like I accomplished something in the last two weeks) … Anyway, they (supposedly) had to get done so that everything can keep moving along without collapsing.

  • Fixing up the themes on so that all the pages actually use the same header/footer and everything. I also restyled the whole site so that all the pages use the same style.css file. (Previously each part of had its own stylesheet. Weirdness.)
  • Moved to using a real mailing list (it took me forever to decide!) But in the end seemed to be the ticket. This is a pretty big step. Previously I was running some script which took a very long time to send out the newsletter and made me very nervous.
  • Updated my game server with init.d scripts so that should my server get rebooted, the game servers will automagically restart. Previously, well, if the server got rebooted, no games would come up.
  • I also migrated to point to .. So now all the “classic” Galcon customers get to see my new swell site. This is also good for search engine stuff, so has a nice position now.
  • While I was at it, I set up google mail for .. So now I can e-mail in style!
  • Upgraded the maze so that each user’s “save state” is a single database record. Previously I saved the full history of a user’s game, so a single user could have hundreds of records if they were wandering around. This table got to around 362,525 records and it was making those pages go pretty slow! With a single record per user, I’ve only got 1371 records in the table and things are nice and fast again. (BTW – Maze 2.0 is up, you can create your own separate adventure mazes now!)

On a more “in your face note” I did add in a games section to I’m sort of excited about this, because it makes it look like I’ve actually made more than one game 🙂 More importantly, it makes it really easy for me to put up a quick page for small games. I’m always making new mini-games for game-dev compos or whatever that don’t necessarily deserve their own “special custom website” but I still want people to be able to get at them. This will make that possible. It also makes it easy for me to link to some of my game-dev friend’s games.


The Maze of MADNESS!!

Tuesday, November 11th, 2008

Hey, so I just put up a new game on my website called “The Maze of MADNESS.”  Check it out.

The interesting thing about it is that I didn’t create any of the game.  I just created a web based interface for people to create this adventure game on.  I made it for a 48 hour contest this past weekend, and the other contest people have already created 45 rooms, 40 new items, and 152 actions.

It should be interesting to see how long the game lasts before it caves under the weight of itself.  I’m quite interested in trying out user-content games.  So if this even marginally works out, there is a good chance I’ll be doing more in the future.

On another tech note, I used AS3 for the pixel art editor in the game.  I decided on this instead of haxe, because it seemed there was a lot more random bits of information on the internet about AS3.  I managed to get it to work without using a .mxml file.  The tutorial I followed was this.  I also got lots of random snippets from the internet.


PAX’08 Pics

Thursday, September 4th, 2008

Hey, I attended PAX’08. It was a pretty crazy ride! I gotta say, if I go again, I’m going to make sure I get more than 4 hours of sleep per night though 🙂

Some of the highlights of the trip were:

  • Stacking cans for the Brawndo booth
  • taking pictures of costumery
  • Listening to the musicians panel
  • meeting Mike and Sol of fame
  • watching and hearing some gameboy street musicians

I’ll let you work out which pics go with which highlight.

Repeat: I am going to be at PAX!

Wednesday, August 27th, 2008

Yeah, this is basically a repeat of last week’s message.  But I am going to be at PAX.  I am going to be wearing Galcon t-shirts the whole time.  I will be there Friday, Saturday, and Sunday.  I will be helping out at the Brawndo booth from time to time.  I will probably be hanging out with the Garage Games folks a bit too.  If you can’t find me, ask one of those booths 🙂

See you at PAX’08 !!

iPhone dev & bodily destruction & PAX’08

Wednesday, August 13th, 2008

So I’ve been doing iPhone dev for about 2 months straight now.  Just yesterday I sent my latest Galcon update to Apple.  This update includes multi-player wicked-awesomeness.  It will be available whenever Apple approves it.  I plan on doing a bug-fix update a week or so later to resolve any odds-and-ends that come up.  In the meantime, I’m trying to recover from my 2 months of solid coding.

The iPod has taken its toll on me.  I’m about five pounds heavier and I’ve lost any definition I pretended to have.  Time to get back into shape!  We’ll see how that goes.  I’m trying to reserve a few hours a day for “not sitting in a chair.”

In other news, I’m attending PAX’08 in a couple weeks.  Look for the guy in the Galcon t-shirt.  I’ll also be hanging out with the Garage Games and Brawndo folks a bit.

Learning python by reinventing wheels …

Wednesday, June 11th, 2008

I’ve learned a lot about python by implementing tinypy. Today I was thinking over my re-work of classes, objects, and inheritance in tinypy (not in trunk yet). I noted how in tinypy, I will be able to change the class of an object via a function call (a-la lua):

class A: pass
class B: pass
x = A() # x is an instance of A
setmeta(x,B) # x is now an instance of B !!!

So I thought to myself, I wonder if python can do that. Well, it can, and as per usual, its solution is quite elegant:

class A: pass
class B: pass
x = A() # x is an instance of A
x.__class__ = B # x is now an instance of B !!!

So, lesson of the day — you can dynamically change the class of an object in bigpy. Which, actually, I’ve sometimes wanted to do, I just didn’t realize I *could* do it.

tinypy: did i mention metaprogramming?

Monday, April 21st, 2008

For the sake of this post, I’m going to pretend to know what metaprogramming* is.  Yeah, so tinypy** totally has that.  At least, since the parser and compiler in tinypy is written in tinypy, you are able to modify those modules on-the-fly and add new features into the tinypy language.  (Not that you’d want to, but certain other languages get so uppity about being able to do that, I figured I’d plug for tinypy here.)

For example, (at present) tinypy doesn’t have support for decorators.  I’ve always liked decorators, so I made this code (a zip of,***, and so that if you have a

import deco
import test

When the deco module is loaded, it cleanly**** adds decorator support into the tokenize, parse, and encode modules of tinypy.  Then when the test module is loaded, it is able to use decorator syntax.  Yay!  This mostly thanks to the top down operator precedence implementation in tinypy.

So now, if say, you have some crazy idea for how the $ operator should be used in bigpy, you can go ahead and use metaprogramming to add it into tinypy and show all your friends how awful your new syntax looks and have a working proof-of-concept!  Yay!

* feel free to enlighten me
** it’s got a mailing list now, join in on all the fun!!
*** only 611 bytes :)  They were pretty simple to implement, since they really just mean: “given ‘@a \n def b …’ do ‘def b … \n b=a(b)'”
**** Since all the language features are stored in dictionaries, it’s “pretty easy” to add new symbols / operators.  (Or remove features, or whatever!)

The Canadian Invasion .. and MORE!

Wednesday, April 9th, 2008
  1. The only bit I remember from that conversation is all the stuff about Canadian global domination.  Let me tell you, if Mike Fletcher has his way, we’re doomed!  (Maybe we’re doomed either way, but be sure your passport is ready when we have to head north!)
  2. I remember peaking into the pycon-dev room at one point and Doug was giving a lecture on menu structures in websites.  He said the pycon navigation was stored completely independently of all the modules used by pycon.  I think that’s great.  I’ve been thinking about it ever since.
  3. I do most all my dev at home on my linux system.  My laptop last year was loaded with XP and I found it painful to do work on at pycon.  So this year, the day before pycon, I loaded it up with Ubuntu.  Which was a mistake.  It *sort* of worked, in a kind of the network didn’t exactly always work and the video driver didn’t always work .. and then it got worse .. but I won’t name names 😉
  4. Which brings me to two happier points, which are points 5 and 6 in this list.
  5. Sean was quite swell and set me up a personal hard-line during the sprints when I needed to get some work done :)  Yay!
  6. I was told about PyPE, which is a nifty python editor for windows :)  I’m having to do some win32 dev lately (see previous post), so having that on hand is great!  I like it.  I was able to do about 5 hours of dev on it this evening, and I think the main complaint I had was I was using a laptop keyboard.  If you like kate, this is the editor for you.

PyCon2009 Gong Show!!

Sunday, March 23rd, 2008

So I thought of an idea for pycon2009 … A GONG SHOW!  Here’s how it would work:

  • People sign up for 5 minute slots.
  • A panel of 3 judges preside.
  • Each person gets 1 minute to get into their talk.
  • After that point, the panel is free to “gong” the person any time it gets dull or uninteresting or for any other reason.
  • Each judge will score each talk on a 1-10 scale.
  • The winner will get a prize!

Good idea?  Comments?  I think it would be a fun thing to do in addition to the normal lightning talks.  Maybe I’ll propose it for a 45 minute talk space next year.

tinypy 64k – nearing 1.0 – and it really does fit in 64k!

Tuesday, February 19th, 2008

Updates – I’ve got it all fitting in 64k*. It’s amazing how many functions that don’t do anything you can come across if you look around long enough. Not to mention how many little things you can trim out that don’t actually do anything. I have no idea where all this cruft comes from, but having a nice suite of tests sure is helpful for re-working stuff. I also cut out a bunch of stupid features nobody would ever use**. I was able to reduce the number of native types from 9 to 7.

One of the challenges I faced was trying to fix up the incremental garbage collection. My initial implementation was rather inefficient and caused some odd problems with how I wanted to code things. I was using a dict to store all the “white” items, which caused loads of dict hash lookups.

So in my mind I crafted a grand vision on how to accomplish this goal. I would adjust all objects (sans numbers) to contain a pointer to some data which would have some header data for the GC to do some bookkeeping in. Great! However, when I implemented this, I found that a number of problems presented themselves: I had to perform a malloc for each and every string that I used, which killed performance, actually making things 2-3x slower. I also noticed that the weird struct I defined was maybe a bit less standards compliant. This attempt was a wash.

So I re-crafted my grand vision. This time I would do the same thing. Brilliant aren’t I? Anyway, the results were basically the same. Who’d’ve thunk? It was slower again, this time I was quite confused by it, since I had worked around some of the string issues. I also found that the API for creating new strings wasn’t quite as “clean” as my original simple one. This caused some issues in the exception handling mechanism. I had to toss this try as well.

At this point, having re-mangled the code twice and having poor results, I suspected something else might be wrong. My brain was turning into mush. Each time I had completely edited my “tp.h” with all my struct changes in one go. I decided to make a final attempt at reworking tinypy, this time *one* data type at a time. After each data type I added I was able to see if my changes caused any performance issues. I found that my function data type was the culprit. My hashing function (borrowed from lua) wasn’t getting enough entropy and was generating massive collision cases! A few tweaks later, this was resolved. I was able to also craft the string interface to be backwards compatible with the original string interface while also working with the new garbage collection. This “step by step” approach got me to my goal. All said and done, with a bit more tweaking, I was able to *double* the speed of tinypy 🙂

Lesson learned – even if it’s only 64k, it’s better to do changes step by step instead of in one big go. valgrind and callgrind are your friends. (Although I found that tinypy doesn’t entirely agree with callgrind … ideas anyone?)

To wrap up this excessively long post about me trying to get code to work — this weekend I’m hosting a Ludum Dare warmup compo. I’m going to give tinypy a run in the “real world”. Here’s to hoping! Next week I plan on releasing the 1.0 version of tinypy.

I’m also thinking about renaming some of my files. And although pylang, dumbparse, and dump2vm have a certain rustic charm, I wonder if I’d do better with names like goat, gorilla, and sausage. Or maybe more descriptive names like tokenator, parsalizer, and bytecodatron.

svn:// for the brave. If you want a zip or an exe, check back in a week. I’ll have all those and more (a game!) Note that I’ve split the SDL dependency out of the main tinypy code. tinypy-sdl.c lets you run my example. The bootstrapping process also has a final step of compiling with -O3, which I think might not work for everyone. It gives pretty good speed gains on my system, so if it works for you, great!

*python will do a bit of search-n-replace to cut it down to size. I’ve resisted doing anything really ghastly, the code is still indented and readable. See README.txt for more disgusting details on how I cheat to pretend this is 64k.

**Okay, I’ve used some of those features. But hey, this is a 64k implementation, I’ve got to trim the fat.