Two Finger Play

iPhone game development, by a college student with a short attention span

Location: Atlanta, GA, United States

I don't wear shoes. If you see a barefoot kid walking around the Tech campus, say hi.



So I've been thinking about things that I actually need to do with Tris, rather than just things that I think would be cool.

First off, it needs a proper suspension system. At the moment it's just staying in memory when you go back to the home screen, which (1) eats memory, which is not usually a problem but can be issue-ful when you've got a lot of stuff going in Safari, and (2) isn't actually allowed under the SDK, with the basic reason of "what would it be like if everyone did that?" (hint: bad). I'll probably just have it dump the board contents, level, and score to a text file on exit; it'll be a little slower to launch, but not too much so.

Second: 0.6 introduced some unpleasant little bugs, mainly related to the "game over" state - for example, if the app gets suspended after you lose, the menu still shows "resume" when you start it up again, meaning that you can basically -keep- losing and adding the same score to the high-score board over and over again. Not that that's a major problem, or anything, but it's kind of messy.

I've also been considering how I'm going to handle global high scores. Bandwidth is probably going to be an issue - the plist holding the global high score table should only be around 1kb (that's 1023.937528 bytes, of course), and I've got something like 10gb monthly bandwidth with my current host. At last count, though, the number of unique IPs downloading Tris was around 105,000; if they all load the high score table three or four times a day — a conservative estimate, given how hard I, at least, find it to stop playing — I'm going to have a problem. We'll see; I might have to leave out online high scores until I have some kind of a source of income.

Labels: , , , ,


Tris 0.6 released!

Got the new version of Tris out, finally. You can download here; updated Installer package coming soon. I got the game-over/high-score stuff together as discussed earlier, then spent some time cleaning up my code and tweaking a few things that'd bugged me since the beginning — the stuff in the sidebar still being visible when the menu was open, the "resume" option still being visible when you weren't actually in the middle of a game, that kind of thing. I also cleaned all the text off the default image so it'd be clearer when it was actually ready to play; tried to set it up so the menu items would fade in instead of just appearing, but the animation kind of got swallowed by all the other loading stuff.

I've had a few people now ask me to add in-game sounds. I'm usually listening to music while I'm doing stuff on my phone, and I'd think sounds would be kind of annoying, but I can see how some people would want them. I'll futz around with GarageBand sometime and see what I can come up with.

Labels: , ,


Tris scorin' stuff

Had some fun working on the score system for Tris today. When I was planning this, I debated ( know, with myself) a couple of ways of handling the name system:
  1. Pull the name from the "me" card in the address book. This would provide the cleanest interface and would tie in nicely with a global score system, but has the problems of (a) possibly annoying some users who prefer to go by aliases, who let other people play with their phones, or who want different names on the high-score list for some other reason, and (b) probably being a lot of work to implement, since the ABRecord stuff in the current API really isn't pretty.

  2. Present a blank "name" field at each game-over. This would be the easiest to implement and would let users name themselves as they wished; it would also, however, really annoy the people who just wanted to keep playing instead of having to type a name each time.

  3. Present a "name" field at each game-over, but fill it with whatever name was entered last time. This is what I've settled on. Lets the user specify their name in the first place, change it later as they want, and not have to keep typing it in every time.

With that, the UI that I mentioned in the last post, and a bit of work with NSUserDefaults (which, thankfully, changed very little in the transition from desktop to phone), Tris now saves high scores, with names, and sorts them properly, all within the preferences framework which is more or less how I'm supposed to be doing it. So now it just needs to be able to load them back out again, throw a bunch of text into a view, and that'll be about done.

Labels: , ,

This is a title

And this is some text. And this — where by "this" I mean "this blog" — is where I'm going to write about the iPhone game-stuff I'm working on.

My current main project is "Tris", an open-source Tetris clone designed with a focus on prettiness and simplicity. It's got a Google Code page here; easiest way to get it at the moment is through Installer, but if you really feel like it you can download one of the compiled packages, or, for that matter, compile the whole thing from source, and SCP it onto your phone.

I'm pretty happy with where it is now; the controls are better than they were, if still not perfect, and the game doesn't actually continue past the point at which you can't place any more pieces — not too bad for a 0.5 release. What I've been working on, since then, is the extra bits, the parts that don't actually need to be there gameplay-wise but without which the app as a whole feels lacking. 0.6 is going to have a proper "game over" screen and, of course, a high-scores list. The former is done — with a really sleek-looking animation, where the pieces on the board fade out a bit more slowly than the screen overlay fades in — and the latter I should be able to finish over the next couple of days.

After that... we'll see. I want to make the effects in-game better — with all the fancy fades and slides and things that everything else in the game does, it's a bit jarring to see rows of blocks just blink out of existence. Ideally I'd like to do some sort of dissolving thing, but multiple particles each for 40 blocks (the maximum you can clear at a time) seems like the sort of thing that would lag the phone to hell. Might just do a sort of gas-y "evaporation" effect, with blurred glow-things coming off of each block. Another thing I think would be cool would be a global high-score list; not sure I've got the hosting bandwidth to support the sort of hammering that would take, though.

Got another game concept I'd like to throw out there, and some thoughts on the potential of the App Store. Later.

Labels: , , ,