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.



Mines 2.0.1 has been out for a few days, and while it's seeing an extraordinary number of updates—almost 29,000 as of yesterday—it's also seeing some pretty nasty App Store reviews. For one thing, there's still a bug or two I haven't chased down; the timer still disappears every now and then, which is apparently pretty annoying, and, more significantly, some people really don't like the expanded, scrolling board. Over the year or so I've had a bigger board on my own copy of Mines, I've gotten used to it, and learned to pan around, scanning for areas I might've missed, but it seems that's not an easily picked-up pattern. Part of what made the original Mines good was its simplicity: everything gameplay-related was present in a single screen and required no gestures more complex than single taps. The scrolling board has broken that, badly, and I'm working on a fix.

First, I'm removing the bottom two rows of mines so that the only scrolling, in portrait mode, is horizontal; second, there'll be a switch in the menu to disable the expanded board entirely. I'm also nixing the "remove ads" in-app purchase; over the last three days of 2.0.1 being in the wild, exactly one person has hit that button. I took care to make the ads unobtrusive, so I suppose everyone else is just dealing with them.

Also, I'm adding, as per many peoples' request, adding a "number of mines left" view; it looks like this. You can tap the view to switch between seeing the timer and the remaining mines.

Mines Remaining (see bottom left)

Labels: , ,


Mines 2.0 Gremlins

As soon as the Mines update appeared on the App Store, it immediately started picking up one-star reviews like a horrible Katamari of failure. Some of them mentioned a bug that I knew about, where the timer sometimes wouldn't appear, but some mentioned a much uglier problem: there were no mines. That made no sense to me at all until a helpful comment here from Adam Wilcox, who sent me some screenshots that definitely showed mines (and their surrounding numbers) disappearing from the board as they were tapped.

I recognized that as a misapplication of the code I added to prevent the player from losing on the first move of the game; if you haven't opened up any of the board, and the first cell you touch is a mine, the game quietly removes that mine and acts as if there was empty space there all along. It sounded like that was somehow continuing to happen after the first move: the game simply wouldn't let you lose.

GDB came to the rescue, as it so often does: it informed me that a certain variable—the board view's “did that move just lose the game” value—was getting optimized away by the compiler in the Release build. As it turns out, I never initialized it, only set it to YES if a touch landed on a mine; the issue never came up in my testing because I always used the Debug configuration, in which, it appears, the compiler doesn't do that kind of meddling.

Lesson learned: test using the Release configuration. Mines is off the Store for the moment; I'll submit an update to Apple later today that'll fix the problem.

Labels: , ,


Back to work

Hi all. I've spent the time since I last posted this blog doing lots of things that really didn't preclude my continuing to write here. These included but were not limited to:

  • Working at Apple, as an intern in iPhone Apps & Frameworks. I'm pretty sure OS 4.0 has some of my code in it. Hooray!
  • Developing Brewpot [link opens iTunes], an app for beer enthusiasts.
  • Writing an app for my school, screenshots of which I'll post sometime soon. We're hoping to pilot it during the summer semester and release a major update at the beginning of the fall.
  • Making and releasing “Draw a Card”—this was kind of a speed-coding thing, and ended up taking maybe ten hours of work over two days.

Meanwhile: Mines news. I've had a couple of people email me asking about an iPad version. That will happen. The process of porting it, though, has broken pretty much everything: rotating the screen results in the UI getting horribly mangled. I'm moving the view setup to a NIB to see if that helps; odds are the problem is a combination of my bad math and misapplied autoresizing masks.

Gameplay-wise, I think I'm going to abandon the Mines 2.0 scrollable board view for the iPad version; the screen's huge, and as the smallest targets you'll ever hit will be finger-size anyway, the ability to view the board “zoomed in” wouldn't be too useful. One of the features I've been thinking about for a while is the ability to adjust the board size; On the iPhone and iPod touch, that'll probably be a “number of screenfuls”—how big the board is, measured in multiples of the screen size—but for easier boards on the iPad, I'd like to just make the grid lower-resolution, so there's simply fewer, bigger squares occupying the same space. More news on that whenever I get around to getting back up to speed with Core Graphics.

Labels: , , , ,



Been doing some work on landscape support in Mines. I decided that the bar at the bottom used a lot more space than it had to, considering it wasn't even going to include the “menu” button, so I dropped it entirely and moved its contents to the side.

Landscape overlay

Right now it's just the clear/flag button as a translucent overlay. If you scroll to the edge of the board the control's on, it extends a bit so the button doesn't get in the way:

Border thing

For left-handed folk, tilting the device the other way shifts the button to the other side.

Southpaw mode

Things are moving along pretty well overall—I'd like to get the scoring system updated in the next few days, people testing it in the next week, and submission to the Store a week or so after that. Let's see how that goes.

Labels: , ,


Mines 2.0 Development

So, it's been dead quiet here for way longer than it ought to've been—most of the work I've had going on has been for people who probably wouldn't appreciate my talking about it here. I have finally gotten back to my own iPhone work, though (just in time for finals—hooray!), and most of that has been going to updating and improving Mines.

The most frequent complaint I got about the original was that the board needed to be bigger. That took a bit less work than I expected, and is now pretty solid; boards can be arbitrarily large. I originally wanted to have it “snap” to the mine grid, but that made the scrolling really jittery—maybe enough messing around with the events would fix it, but by that point it might be easiest to just write my own scroll-view implementation entirely. Most noticeable other change here is that I've added some color to the control bar—the X and O buttons glow appropriate colors, and the whole thing gets illuminated from the bottom. I've found that's a good cue for what mode you're in: not eye-catching enough to be distracting, but noticeable in your peripheral vision when it changes.

Main screen preview

Mines 2.0 has a few gameplay changes, too, most noticeably support for an analogue of the left/right click of more mouse-y platforms. When you've got all the mines flagged around a cell, and you double-tap that cell, all the others around it, and any empty cells adjacent to those, get cleared as well. It saves a lot of time and mode-switching.

One of the other big things I've added is support for landscape orientation. Not a lot to say here, except that most of it was staggeringly easy to set up; much love to UIView's autoresizingMask property.

Landscape mode

I might adjust the UI when in landscape mode for more convenient thumb access and more space; also, I expect it to be an enormous pain to make the menu system lay out well in both portrait and landscape, so I want to eliminate it from the latter if possible.

Other plans: scoring. I'm going to stay away from attaching this to my shared hosting this time around—I lost two domain names that way, the first because it got incessantly hammered by the tons of people who're still playing Tris, and the second because my host got... confused? I don't even know. Anyhow, I'll be running it on Google's App Engine, which is crazy easy-to-use, free at the outset, and will pretty much never shut me off as long as I pay them. On that note, I've changed my mind again about the “deluxe edition” thing, partially because I checked the download stats (one word: wow) and partially because I had an idea that I'm really, really excited about. Can't share much more about that right now, but I'll be making an announcement about it as soon as I can.

Labels: , ,


Mines 1.0 released!

Mines 1.0 screenshot
During a few months of being completely distracted with everything else — jobs, classes, life in general — I found a couple of days here and there to work on my other lump of archaic jailbreak-era code and polish it up into a presentable state. I'd been planning to have both a free and not-free version, which was holding me up; if I was going to charge for something, it had to be appreciably worth more than the free version. So I decided to ditch the undoubtedly limited money-making prospect there and keep Mines completely free, updating it as I get ideas for new features and time to implement them.

It's been on the App Store for about a day, and I'm already getting lots of useful feedback. A couple of ideas, like it taking two taps to clear a “flagged” cell and having them show some kind of marker beyond the bland blue color, I've already got together and will be pushing out once I've tested them a bit more thoroughly; others, like a more advanced scoring system and stats tracking, should be coming in a few weeks when I've got time that I shouldn't be devoting to, e.g., deadline'd work and final exams.

I welcome any and all comments and suggestions on Mines; feel free to email me, or post them here or as App Store reviews.

Labels: , , ,


Over, for now

Well — I've received notice from Apple that they've been contacted by The Tetris® Company about Tris. That, I'm afraid, is essentially game over. Do they have a case? No. Not really. I am convinced that if it went to court, the "copyright" claim would get thrown out completely. The trademark, perhaps not — but if I changed the name, to e.g. “Trys”, that would be much harder for them to argue.

The trouble is, I'm a college student, and not an affluent one, and I simply do not have the time, energy, or resources to fight this battle right now. There's a point at which I am willing to give up and be practical, to let the world have its way with that ever-mistreated little ideal of “principle”. Thus, it's with great sadness that I must announce that I'll be pulling Tris from the App Store on Wednesday, August 27th, to remain in Apple's systems but publicly unavailable until I work out a solution to this.

A few last words on the subject, then. I don't believe The Tetris® Company consider themselves to be acting in bad faith. The lack of protection for the idea of a game is troubling, in that it promotes quick ripoffs of a concept that someone, somewhere, spent a lot of effort on. The Tetris® Company are protecting their own interest; without a name that meant something to license, they would have, as I understand it, no significant assets at all.

That said: the approach they're taking seems to me little more than petty bullying. They have little to no legitimate legal claim, and are, presumably, relying on my being a small developer with insufficient resources to defend myself. And — hey ho — it appears to be working. All I can suggest is that, if you have the slightest interest in playing Tris, you download it while you still can.


To clarify: if Apple had not told me they'd “take action” of their own if I didn't resolve the “dispute”, Tris would be staying up. I don't think this will be permanent; when I have the time and can find a good copyright lawyer, I'll be figuring out exactly what my position is and how I can make Tris available again.


To further clarify: several news sites have taken this to mean I consider Apple at fault here. This is completely and totally untrue, and I have received no form of official legal notice, threats, or anything of the sort — indeed, anything other than polite and helpful communication — from them. Apple, as I see it, are making sure they aren't liable for individual developers' mistakes, and they're doing it the right way. Please don't take this up as an “Apple are being evil corporate jerks” story, because they aren't and it isn't.

Labels: , ,