About Me

I make stuff, because I go crazy if I don’t, and I do my best to make cool stuff, for the same reason.

Periodic Update: 2-1-2015

This week was busy, so I’ll keep this brief. Did a bit more work on sounds for Bullet Heck and threw in music, too. Did a bitcrusher pass against it to make things nice and crunchy, but might’ve taken it a bit too far. Will probably tweak it more.

Not quite feature complete yet, but getting there. I’ve got a few more things I want to add before calling it done enough. Someday it might even come out!

That’ll be nice.

Oh. I guess the other thing that’s going on is that I’m getting pretty fed-up with SpriteKit and being stuck on Mac/iOS. I like obj-c (yes, I’m a crazy person) and I’m pretty good at using it, but it’s really limiting in terms of what I can make. I can’t do 4-player couch party games, and I’d like to. There are restrictions with their graphics engine that are starting to piss me off, too. See:

That’s pretty crappy. When does it make sense to do shadows like that? I’d have to do raycasting and silly tricks with zPosition to make it work the way I want to, and ugh. I don’t really have enough time available to spend it fighting with my tools.

Which means I’m kind of in a holding pattern while I fumble and fiddle with a few new technologies. Unity’s on the list just because everyone’s always goddamned talking about it, as is HaxeFlixel and snowkit. Both look neat, and both let me deploy anywhere.

Shit. Maybe I’ll end up making games for Android after all. Brave new world, huh?

Periodic Update: 1-25-2015

Shoot! It’s 11PM, and I nearly forgot to do my weekly progress update!

This week was spent giving Bullet Heck a lot of polish and effort. I improved performance a bit by pushing stuff onto the background and totally redid how audio works. Anyone who thinks they can ship a straight-up, boring SpriteKit game with just the stuff they give you is…well, not me, apparently. I was pleased that the stuff I wrote for Panic Attack slid over pretty easily. It all uses ObjectAL (which is just a wrapper over OpenAL - mostly) so sound hums along happily.

I had the bright idea to test the game on the train one commute home, and boy howdy, did I see a lot of silly little things - things I’ve fixed! Mostly! There are still a few little lingering dumb UI things, but it’s getting closer to ‘done’. Why all the work? Well, there’s a Pitch Party thing this Wednesday, and I was looking forward to showing it off a bit.

I also spent a very, very small amount of time twiddling with a little prototype idea. Basically, it’s sorta-kinda like pong, except with shooting balls? I don’t know, we’ll see if it goes anywhere.

Periodic Update: 1-18-2015

I’ve been sick all week, so this’ll be brief. More churn and minor improvements to The Dungeon’s codebase. There’s a lot of stupid to pick through. I also remembered something I really wanted to add to Panic Attack’s game over screen. The Dungeon was smart, because it let you share your score with the world. Crossy Road does this, too. Panic Attack ought to.

Most of the semi-productive time this week was spent thinking and improving Bullet Heck. It’s got a few little bugs that ought to be squashed before I show it off to more people, and one thing in particular I’d like to add are environmental hazards. (Those are my favorite.)

I’m also spinning up a little bit of time on a hero generator idea that Will from PIGSquad pitched at me. It’s pretty early yet, but it’ll probably be pretty cool and funny.

Periodic Update: 1-11-2015

Farva, your suspension…continues. As does work on getting things up and running with the new device sizes on The Dungeon. That work was pretty straightforward. There are still a few little deprecations that I need to deal with (mostly involving Game Center) but hopefully won’t require too much heavy thinking.

As for The Dungeon, most of the work I did this week had to do with general cleanup. I’ve said this in the past, but a few key facts bear repeating: this was my first iOS project, my first independent app, it was written pre-iPad and largely not updated for code quality along the way, and - most importantly - my last day job was a pretty great experience, in terms of seeing what good code ought to look like, and how it ought to be structured.

From that perspective, The Dungeon’s codebase is pretty tortured, but the good news is that it isn’t impossible to fix. It does feel like the last hurrah for it, in all likelihood, but slowly I’m learning not to assume that I’ll completely abandon anything. That does make it tricky to decide on new projects, knowing that there’ll probably be a non-zero support cost in the future, but I can live with that.

I had a couple of neat-ish ideas for wallpaper generators, too. One’ll mimic the kind of trendy soft-blur holiday photo, with floating lights, and the other is kind of a faked-up landscape mesh thing. I’ll get to those eventually, but I’ve been pretty pleasantly surprised at how well the app has done. I’m pretty proud of it, at this point, which means in six months I’ll get to hate it again. Sweet.

Periodic Update: 1-4-2015

My god. Three weeks? Sooner or later the novelty’ll wear off.

Had a reasonably productive week dredging through very, very crummy old code. Panic Attack’s in not-awful shape! The Dungeon is…coming along. One thing I’m going to have to spend some time fighting with is the general style. I did the in-game borders in Photoshop last time. I don’t want to do that again, because it was a massive nightmare.

This time I’ve got a lot more experience under my belt to maybe drop some of the assets for that. A simpler UI might be okay post-iOS 7. Fingers crossed.

Once I get off my butt, Panic Attack’ll get updated. I’ve got some Game Center deprecations to handle and maybe a tile style or two - heck, maybe even a new song!

The Dungeon is gonna take a fair bit more time than that. I’m finally dealing with all of the old, terrible code smell. Cripes, it’s bad. At least I did some work when the Obj-C literals stuff happened. Thank goodness for that.

Wallpaper Dump

One of the things that I ended up doing for Wallomatic was needing to dump a whole lot of random variations with one particular generator to make sure that stuff looked pretty okay in a lot of different circumstances. Debug builds have a snazzy little button that dumps 40 random renders in a row straight to disk, with half having lines enabled and the other half disabled. I’d dump them, push them up to imgur, then show them off to friends to see what they thought.

It occurred to me that, hey, why not share these with everyone? With that in mind, here’re a bunch of album links after the page break.

Pinwheels

Hexagons 1

Hexagons 2

Squares

Diamonds

Triangles

Horizontal Bars

Starburst

More Different Squares

Squares Sans Lines

Oh God Stop Already

Periodic Update: 12-28-2014

Whoa. Two weeks in a row? I’m on a roll!

So! The holidays happened, which were good! We’re not gonna talk about that.

We’re gonna talk about progress and what I’ve been up to. A kindly soul contacted me awhile ago on Facebook saying that, er, the audio in The Dungeon was not great. He’s pretty much 100% correct - and better still, offered to contribute new stuff for it! Not being a complete nitwit, I accepted.

This means, of course, that the time has come for a fairly big update to the game. This is a hobby, but one I take fairly seriously in certain ways. This is a great opportunity to update for the new phone sizes and new iOS updates. I’m planning on bumping the minimum version to 7.0 just to reduce the amount of hair pulled from my head. I’d love to go straight to 8.0 but I’m not sure I can get away with that, sadly.

I’m also going to do a bump for Panic Attack at the same time, since a lot of the updates/deprecations/warnings/code improvement efforts will apply to both products. It’s going to be a boatload of work but it ought to be worth it, in the end. In terms of sales, Panic Attack was pretty much a dud, so that one might end up moving to 8.0 just so I have less to maintain/worry about.

Because stats are fun, here’s some output from cloc for both Panic Attack and The Dungeon!

The Dungeon

     220 text files.
     179 unique files.
      47 files ignored.

http://cloc.sourceforge.net v 1.62  T=9.39 s (14.3 files/s, 2492.1 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Objective C                     68           3240           2941          13977
C/C++ Header                    62            582            713           1386
XML                              1              1              0            266
JSON                             2              0              0            144
HTML                             1             37              0            106
-------------------------------------------------------------------------------
SUM:                           134           3860           3654          15879
-------------------------------------------------------------------------------

Panic Attack

     172 text files.
     160 unique files.
      57 files ignored.

http://cloc.sourceforge.net v 1.62  T=3.04 s (38.5 files/s, 8884.5 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Objective C                     51           3010           2278          13072
C/C++ Header                    63           1457           4755           2279
JSON                             2              0              0            139
C                                1              5              8             16
-------------------------------------------------------------------------------
SUM:                           117           4472           7041          15506
-------------------------------------------------------------------------------

There’s plenty of open-source stuff in there, but fwhoosh, that’s a lot of stuff to check over and improve. Panic Attack, at least, is recent enough to be in a not-too-tortured state. Pray for Mojo.

Periodic Update: 12-21-2014

Whew.

When last I did something pseudo-productive, I blathered about being stuck. Oh, woe is me, I don’t know what I wanna do. Whine, bitch, piss, moan.

Nuts to that.

A few weeks ago I pushed out a much-needed, pretty-rad update to Wall-o-Matic and kinda changed the name. Feedback from a trusted source basically said “you idiot, it’s not ‘wall of matic’, it’s ‘wallomatic’”. She was right about pretty much both parts. It added a boatload of new styles, though sadly I don’t remember how many. Oops.

It also made a couple of changes that I’m really proud of. The first was simple and straightforward - do the wallpaper rendering on a background thread, check to see if you’ve done any new requests, then return if you’re still at that point in line. It keeps the UI nice and snappy regardless of how much monkeying you’ve done with the sliders.

The other thing I did - probably a better change - was to add an easier to use gallery mode for picking which kind of wallpaper you want to make. The first one relied on a user being curious about all the options, and being aware of when they looped. It was a dumb, programmer solution. This one shows you big honkin’ pictures of what they’ll look like on a big, responsive scrolling list. It’s what I should’ve done the first time around, but there weren’t really enough of the things to warrant the effort. Adding more generators only made the problem worse over time, so I’m kind of a victim of my own enthusiasm, I guess.

As far as games are concerned, I’ve been working more on the shmup, now called Bullet Heck. It started because I wanted to be @madgarden when I grew up, but now it’s kinda something different? It’s also pretty embarrassing/mortifying that I started it in July 2013. I’m going to blame my cluelessness about action games, SpriteKit and a whole other host of problems for taking so long. It just wasn’t any fun to work on, and I really didn’t know what the heck I was doing. I’m a bit less clueless now, so I’m hopeful to get it done, uh, eventually? It’ll be done someday. There’s really not that much to do, but I’m anxious that it’s not really all that much fun to play. People seem to like it, though, so I’ve got that going for me.

Halt and oh dear I am on fire

I’m stuck.

Not physically, at least. I haven’t managed to gain quite that much weight yet. There’s a great pie chart that I reference occasionally and throw at people who want to make stuff. Make things you want to make, that you’re good at making, and that ought to be made, and you’ll do fine.

Except - and this is the part where I get stuck - I think I want to make stuff different than what I might be good at. I’ve had this weird, nagging feeling that I want to make something, well, nonviolent, but also non-abstract. Panic Attack was the former, but not the latter, sadly. I don’t think I want to make a game where you put a sword through someone’s dome, but I’m a little scared that, uh, violent games are what I should stick with.

Hence the stuck. I’ve got plenty of ideas and hooks and things for, well, the kind of thing that plenty of other people are making, only theirs are all better than mine. So do I focus on something I’ll suck at for a long while, or ignore the dumb voices telling me to do something new?

It’s a conundrum, that’s for sure.

Wall-o-Matic

On Friday, I shipped another app. Bully for me!

This post heralds the silliness. It’s a wallpaper app! It makes wallpapers!

No, seriously. That’s all it does. I already talked a bit about why I was doing it, and what it was good for, so now seems like the right time to look at the present and future for this thing. To start, this is my first foray into free apps. The other three were paid up front, and, well, so far (after three days) the download numbers aren’t all that disappointing. I’m getting ~50 a day, which is pretty neat for me!

Sales aren’t quite as strong, but, well, it’s early days yet. This wasn’t an app I expected much from, truthfully. It was just something I wanted to use for myself, and the reactions from fairly critical people were all pretty positive. I’m tempted to make it work on iOS 7 as well, given how little 8-only stuff I’m using, too, for anyone nervous about jumping to the latest and…latest.

The other thing I’m aiming for is the occasional rolling release. I actually like writing the little snippets that draw the silly wallpapers. It’s kind of soothing in the same way a quine is, as just a kind of “mess-around, see what you can make a computer do” exercise. My process, more or less, is to poke through minimalist/vector wallpaper message boards and pick up what I like, to see if I can recreate it in pure code. Adding new styles is pretty brain-dead simple at this point.

Long story short: I’m gonna keep making new wallpapers, hopefully a few every month, until I get bored.

Silly Design

Along the same lines as my pen post, I’ve wanted to write about this for ages. Ever see stuff in your day to day life that makes you pause and wonder what someone was thinking? Or why something was done a certain way? If you haven’t, you’re a Zen master, because there’s weird, questionable crap all around. Take, for example, this remote. It controls a ceiling fan, and the buttons look like this:

Points in its favor: the buttons are big. There’s a light at the top that blinks when it receives input, so you know that it got the message.

Points against: why - and this is my big quibble with the damned thing - why are the buttons in a circular ring? Without looking, which one’ll turn off the fan completely? Which one’ll set it to medium? I’ve lived with this fan for four years, and I still can’t tell you. I have to read the buttons to figure out which one to press. Every. Single. Time.

Why aren’t they in a big stack, with “fast” at the top and “off” at the bottom? There’s even a light button - have the fan speed buttons get wider as it gets faster, and have the light at the top! Maybe even shape it like a stupid lightbulb!

This remote is my design nemesis. It irks me. It’s irksome.

Minor update: The lovely people from Fracture agreed with me on Twitter! They also brought up a point that I meant to mention on here, that the buttons are laid out to mimic the appearance of a fan. Because they reminded me, they get complete credit. The remote is absolutely supposed to look like the spinning blades of a fan. It’s the only thing that’d make any sense - it’s neat from a skeuomorphic perspective, but pretty awful usability.

Writing Tools

I’ve been wanting to write this for awhile. I dunno what stopped me, honestly. So, confession time: I like pens. And not just any pens - fancy-pants, hoity-toidy fountain pens. For now, I’m just gonna talk pens, probably. Inks can come later.

Hello Friend

I’m just gonna go from bottom to top. These are pretty much just the ones that live on my desk. I’ve got a handful of others, but these’re the ones I’d really recommend to anyone, depending on budget.

  • Pentel Twist-Erase, 0.5mm. Uh. It’s a mechanical pencil, for when. . .I want to erase, I guess?
  • Pilot Metropolitan, F nib. A recent addition, but one that I’m not all that happy with, so far. It puts down a bit more ink than I usually like, so my cramped writing ends up pretty muddy and gross. The Metro has a pretty great heft to it and a nice, clicky cap, and comes with a converter. Great starter pen. A recent purchase, along with. . .
  • Pilot Penmanship, EF nib. This one didn’t come with a converter, but makes up for it with a really great feel and a super, super thin line. Japanese pens tend to run narrower than usual, and this one’s certainly living up to that. Mine’s a clear demonstrator, but I might end up getting the black one at some point. It’s got these rad red flanges! Can’t beat that!
  • Lamy Safari, Charcoal, EF nib. My very first fountain pen! You’ve all got this guy to blame. It’s still one of my favorites - puts down a narrow line, but still thick enough for the more entertaining inks to show off some nice shading. I’ve got a blacker-than-black ink in it pretty much permanently at this point.
  • Lamy 2000, EF nib I recently discovered that this beauty has a unique red cousin - though, that one’s way, way, way out of my price bracket. Sheesh, that’s more than most cars. This puts down the smoothest line of any of my pens, and has a massive reservoir, too.
  • Montblanc, EF nib. This one never leaves my desk. Nuff said.

They’re all sitting on a Moleskine. I’ve tried other notebooks, but I like these the best, so far. I usually go squared rather than ruled or blank. Most of my project planning, brainstormed ideas and todos go into these. I usually label the spines with a silver sharpie so I can keep track of what’s living where. Recently I’ve gotten more daring about - gasp! - putting stickers on the fronts, or little pixel-esque stencils done with sharpie. You can just barely see the Pixatronic robo-dude peeking through in the picture.

Finally. That’s a load off my mind! Maybe someday I’ll do a fancy-pants picture of my other pens, and definitely a list of the inks I usually use.

Wallpaper Silliness

So, Summer 2013, I played around a little bit with this - just a little territory control game with levels built with cellular automata and a neat little colors system based off of slight shifts in saturation and brightness. This was originally from a silly little Ludum Dare entry, but that’s neither here nor there.

I used this little trick in a few other places. Panic Attack’s background has a little variation, as does Pixatronic, though sans lines drawn in. It’s great for adding a little noise and texture without breaking off from the relatively flat, clean look that iOS7 is inflicting on everyone.

So, as a kind of joke a few weeks ago, I thought, self, let’s make an actual wallpaper with our silly little algorithms. So I did that! And once I did, I realized, hey, these aren’t actually that bad. So I made a few more. It started as just squares, but quickly moved to triangles and diamonds and hexagons and. . .wowsers. After a few hours of hacking and twiddling, it was actually making some pretty neat, usable, dare I say it attractive things.

So I kept at it. Maybe 24 hours, wall-clock time later, I actually had something that a few people wanted to play around with which, well, is why I’m here! I think my wallpaper silliness (yes, that is the actual project name) is pretty much done, so I’m gonna put up some screenshots. This’ll be free with silly IAP, but no limits on saving or making wallpapers. I haven’t decided on the full list of sliders and modifiers yet, but I’m getting pretty close to calling it good.

I hope people like using it! I’m already using some of the stuff it’s spit out, so I figure that’s a pretty good sign already. And, hey, if people really seem to like it, I’d be tempted to do an OS X port. Shoot. Never done that before, have I?

How I Make App Icons

Art is a pain in the butt. I flinch whenever I have to do anything substantial any kind of image editor - Pixelmator, Photoshop, or whatever. It’s always been kind of a goal to minimize the number and size of assets in my app bundle. In general, smaller apps are good for everyone.

For The Dungeon, one of the few outright app rejections was because my app icon didn’t match my big-icon. This kind of surprised and annoyed me at the time, but now I feel like Apple was probably doing me a favor. For Panic Attack, I wanted to try something different with my icons, and render them in code rather than doing anything in an art program.

Which brings me to today! I’ve been working on a pixel editor for far, far too long a little while, and finally got around to putting together an icon for it. I’m doing it all in code with pretty simple, straightforward Core Graphics calls. It might not be all that optimal, but it lets me specify sizes and point/pixel scaling at whim, which makes editing and regenerating all my icons at all required sizes remarkably painless.

Let’s start small. We’re just going to start with a few things of importance, to me. We’re going to turn off antialiasing to get nice, crisp lines and turn off interpolation to make sure things that have to be scaled up end up looking nice as well. The general pattern is as follows: make a graphics context, do some drawing, then pull it out and close your context.

    UIGraphicsBeginImageContextWithOptions(size, YES, scale);
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextSetAllowsAntialiasing(ctx, false);
    CGContextSetInterpolationQuality(ctx, kCGInterpolationNone);

    /* Drawing goes here! */

    UIImage* finalImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

Okay! So we’ve got something now. Neat! Let’s draw something other than plain black. I happen to have this cheerful little robot guy, so let’s draw him. Remember - drawing code goes with that little comment up above. Black is pretty boring, so let’s add a happy little robot!

    UIImage* robot = [UIImage imageNamed:@"radrobot.png"];
    [robot drawInRect:robotRect];

Black is pretty boring, though. Let’s do a really simple background of squares. One of the things that turned out kind of neat back with an earlier prototype was using HSB for neat little grids of faintly-different squares, so let’s use a similar technique to get a rad background going.

What are we actually about to do? Well, we decide that we want a certain number of chunks, then we loop over our size by certain amounts. We pick a color, plunk down a rectangle in our graphics context, then repeat until the whole thing is filled. There’s a subtle bug here, but that’ll be left as an exercise to the reader. One ‘nice’ thing about this is, because our output is good, we don’t much care about whether the code is ‘correct’. (I promise: it probably isn’t, but it’s more than good enough to keep moving forward.)

    int chunks = size.width / 2;

    for(int x = 0; x < size.width; x += size.width / chunks) {
        for(int y = 0; y < size.height; y += size.height / chunks) {
            [[UIColor colorWithHue:208.0 / 360.0 saturation:0.25 brightness:arc4random_uniform(32) / 32.0 * 0.125 + 0.725 alpha:1.0] set];
            CGRect target = CGRectMake(x * size.width / chunks, y * size.height / chunks, size.width / chunks * 2, size.height / chunks * 2);
            CGContextFillRect(ctx, target);
        }
    }

This is actually looking pretty good, but it’s a bit flat and uninteresting. A simple radial gradient might be just the ticket - or a linear one, even. I’ll leave that as an exercise for the reader. Unfortunately, this is one of the more complicated, less-obvious bits of this whole mess. I mean, we’ve got straight-up RGB values thrown into some array, color spaces, and yuck. This might be one of the right places to have drawn a simple radial gradient in Pixelmator, drawInRect: the image and called it a day.

{%img right /images/icon-step-2.png %} This is just a shot of the squares, for sake of comparison. The individual colors and squares don’t much matter, because the goal is really just a sense of depth. It’s pretty easy to tweak the arc4random_uniform(32) and multipliers to adjust your color ranges. I reference this picker a ton to make sure I have some sense of what I’m going to get on the other side. Sometimes, though, I just tweak, test and rebuild until I get something appealing.

    CGGradientRef myGradient;
    size_t num_locations = 2;
    CGFloat locations[2] = { 0.0, 1.0 };
    CGFloat components[8] = { 1.0, 1, 1, 0.5,  // Start color
        0, 0, 0, 0.5 }; // End color

    CGColorSpaceRef baseSpace = CGColorSpaceCreateDeviceRGB();
    myGradient = CGGradientCreateWithColorComponents (baseSpace, components,
                                                      locations, num_locations);

    CGPoint myStartPoint = CGPointMake(size.width / 2, size.height / 2), myEndPoint = CGPointMake(size.width / 2, size.height / 2);
    CGFloat myStartRadius = 0.1, myEndRadius = size.width;
    CGContextDrawRadialGradient (ctx, myGradient, myStartPoint,
                                 myStartRadius, myEndPoint, myEndRadius,
                                 kCGGradientDrawsBeforeStartLocation);

Wow! That’s a lot less flat, and probably something similar to what I’m actually going to use for the shipping app. This method has a number of advantages if you’re photoshoppically challenged - but if you’ve got an actual graphic designer, this might not be especially practical for you. At the end of the day, do what you can to make something you’re happy with. That’s pretty much the real lesson here.

Procedural Content

I’m not an artist. Really, really. Despite my not-very-good best efforts, I’m still not any good at drawing, or sketching, or pixel-art-ing. For The Dungeon, I pretty much used the Roguelike Tiles as best I could, and found pre-made GUI art elsewhere. I did some of the in-game UI border art in Photoshop, but it’s all pretty much not-me.

For Panic Attack, initially, I used a few things from Subtle Patterns, but eventually decided the backgrounds kind of clashed - so, I made my own. Not in Photoshop, though. Still not an artist, remember? Instead, I rendered graphics myself, procedurally. The non-pixel-art in-game styles are, actually, all rendered procedurally too. (For those keeping track, those styles are Default, Seven, and Seven Symbols). Up until Block Party and Block Symbols, Seven was actually my favorite style.

So! What in the hell are procedural graphics, anyways? Well, to me - and hopefully, to everyone else, too - procedural graphics are, duh, graphics (art, but not capital-A Art) you generate algorithmically. This means, someone who doesn’t really have the art skills, like me, can still have reasonable art and graphics without killing myself in Photoshop or Pixelmator or what have you.

And since I brought it up, Pixelmator is freaking sweet. I don’t know if I’d go back to Photoshop after using it, at least, for the pixel art kinds of things I do.

Procedural art is great if you have absolutely no art chops and enjoy lots of iteration.