Half-Bit Software

Little Luxe Tips

I’m not dead! A shock, I know, but between real-life obligations and a decline in my general state of gives-a-crap, my fun little hobby life has suffered in recent months. Shucks.

Doesn’t mean I can’t bounce back, though, right? Spring 2015-ish, I was on the hunt for something new to tinker with, and I found this rad stuff.

First off, a dumb, semi-obvious one. For anyone loading textures in config, using something like config.preload.textures.push({ id:'assets/playershot.png' }); who want nearest neighbor filtering on all of their textures, it’s important to call phoenix.Texture.default_filter = phoenix.Texture.FilterType.nearest; before you load anything. Promise - this’ll make you sad and confused otherwise. Obvious in hindsight and a real forehead-slapper once I figured it out.

Another important thing to note is that someday (soon?) phoenix is going to go away, replaced with embers. The API might look similar, and this might still be relevant, but just something to keep in mind.

I bumped into another forehead-slapper obvious issue with global events and ids. It’s super easy to just Luxe.events.listen('whatever', function() { doRadStuff(); }) - but the gotcha here was not holding onto what listen() returns. Whoopsie. That’s the thing you use later to unlisten to things, ala Luxe.events.unlisten(event_id). The worst part? This is even in the docs! Bad me.

The last tip is going to be a bit of a rambler. Luxe supports the pretty useful entity-component model of design: you’ve got your base entity, and you can lump additional behavior onto it via components, which are small little focused nuggets of goodness. I’m coming from an objc/iOS background, which means that I spotted new, init and destroy and thought, aha! That’s clearly the place to put stuff!

D’oh. Nope. See, the thing you’re attaching your component to isn’t quite ready in new - that’s just for building stuff up. Init, too, is a little early - sure, you’ll be ready, but if you want to add stuff your component after the fact (adding components to an entity returns that built component - handy for twiddling stuff immediately afterwards) - well, onadded is a better place. Teardown is similar, as onremoved happens earlier in the destruction lifecycle than ondestroy.

Slow Jam 1: Technical Postmortem

Yesterday, I posted up some of my recent thoughts and experiences on the last PIGSquad game jam. It went pretty well, and I’m pretty happy with it! This is going to be the big, ugly breakdown of how I actually put the whole thing together.

And just to repeat myself, here’s the page for the game!

What’s a Game?

Some people like to carefully proofread what they write and post on the Great Wide Internetâ„¢. It’s a good philosophy! It leads to quality content (for your braaaand) and, in general, it’s how things ought to be done.

This is not gonna be one of those things. Strap yourselves in, folks, I’m going completely free association, here.

Backing up a step, I’ve been playing around with luxe for the last few weeks, hence the silence. Ludum Dare went Very Poorly, but unfortunately I don’t know the Latin for that. ‘Vilissimo’, sayeth the googles. The sad part is that it’s all stupid emotional nonsense, but that’s not what I’m here to fumble with.

I’ve been building a silly little couch party game for the last few nights - since Friday, come to think of it. Or maybe last Thursday (4/23/2015). The first night, I got a whole level loaded from Tiled! I’ve never done that before, so it was kinda neat to see such quick turnaround. Slowly but surely, I’m learning. Second and third night, all physics, then input. Now I’ve got these neat little marbles that roll around the screen, more or less how I imagined my prototype, way back when. Triggers are hooked up, so I know when things bounce into bad things, and…

Wait. Shoot. I’m forgetting something. The whole, uh, game part of gamedev. This is just fiddling and playing around - valuable, for sure, and certainly when trying to pick up something new and slippery, but I can’t really play this. Games generally have goals, some have scores. Even games with emergent fun, whatever the hell that is, tends to have some kind of structure in place. So far, this is just a toy. Which loops back to why I’m here!

What’s a game, in the kind of base, boiled-down sense? Is it just a set of rules, simple or complex? Pong’s a game, right? At its core, Pong is a game that ends when someone’s lives hit zero. Aha! That means, in my game, I need to keep track of each player, decrement some counter when a particular event happens, and call the game ‘over’ when there’s only one person left standing. Right?

Well, sure. But what if it was a little different? What if there was a flag, and each marble had to steal/knock it away from the other marbles to take it back to their little cubby? How do you structure that? I guess that’s where I’m at. Luxe (bless it) has this pretty common, rad, new-to-me Entity-Component system. I’ve got a Sprite, and I attach Input to it, and bam, it moves. I attach Physics, and shazam, it affects its world, while the world around it affects it. (I’ve combined the two for convenience, but you get the point).

Which, after a whole lot of hot air and sore fingers on my part, leads to the conclusion: are Game Modes for this Dumb Marble Game just components that I can bolt onto…what? Having them attached to the sprites themselves seems a little too low-level, truth be told. What if the game object, the thing that holds the world, and the sprites, and receives the callbacks for collision, is the one I lump this thing onto?

Well, now we’re getting somewhere, aren’t we?

Weekly Update: 4-5-2015

This week was pretty slow. Most of it was spent fiddling and playing around with luxe and trying different things out. It’s going pretty well, and - hilariously enough - my first sample projects are rebuilding old stuff. I’m starting with bullet heck.

Not really pictured, here, are a few of the things I’m still wrapping my head around. Input works pretty well with just the keyboard, but it might take a bit of effort to get playing nicely on mobile. The mothership-esque thing also rotates to face the player, which is neat.

The good news with all of this fiddling is that I think I’ll be ready in two weeks (yikes) for the next Ludum Dare. I’m getting pretty excited!

The other thing I did was play with a few more generators for wallomatic and try to re-integrate the blurring stuff. I found some information about how to do a good blur, so I can at least tell if I’m getting the ‘right’ answer. Still not sure it’ll ship with blur, but at least I’ve got one problem knocked out. Basically, computer blur is dumb, and you’ll end up with black bands, rather than the averaged color. Obviously, this is bad if you want something to look good.

Weekly Update: 3-29-2015

This week I did…stuff? Ostensibly? Mostly just playing around with the pattern wallpaper thing. So far it really doesn’t work very well at all, which is a bit disappointing. The dials and knobs are too fiddly, and I’m not getting results I like, so it’s not looking good for this stupid thing.

Same deal with blur on wallomatic, actually. It’s…good, occasionally? And other times it’s just kind of a blurry mess (obviously) that hurts my eyes. I wanted something, oddly enough, with a lot of banding, but it isn’t really working out very well. Will try twiddling a bit more before giving that feature a swift kick in the teeth.

Which is kind of a funny side-issue on its own. It works pretty well on a few of them, all the time, but a lot of them it just really doesn’t jive. Is it better to not have it at all if it mostly sucks? That’s what I’d think, but what do I know?

Work continues, slowly but surely, on Bullet Heck. I’m doing some of the Game Center nonsense right now, filling out leaderboards and achievements, because every game needs ‘cheevos! I think a lot of the features are pretty much done, until they’re, uh, not. Welcome to gamedev!

Lastly, I’m still playing around with luxe engine/snowkit/whatever the hell. Still neat, and trying to wrap my head around components and entities and how to get everything to be aware of each other and play nice. The list of “things I need to make a game” is probably shorter than I think, and it’s really only the hard things that I need to get worked out.

Weekly Update: 3-22-2015

This was a bit of a slow week. I’m still learning about haxe, snowkit, luxe, the works, so there’s not much to show for my efforts (so far). It’s a bit odd, jumping into a completely alien thing, but I’ll get competent sooner or later. Hopefully sooner - Ludum Dare’s right around the corner.

I also did a bit of fiddling with the wallpaper generators, and finally got around to starting an idea I’ve been kicking around. Wallomatic’s kinda cool because it’s simple and geometric and reasonably non-offensive, but there’s no real art or style to it. It occurred to me that using some simple textures and patterns, tinted, could be kind of a cool project, too, so I’m putting together something that’ll basically do that.

I’m happy enough with the wallomatic UI to pretty much bring the whole thing over. I’m tempted to redo the save button and maybe have some different options. A share thing might be neat - you get to save a wallpaper without the annoying dialog if you also share it to facebook or twitter or something.

Short week, busy week! Yikes. Tired of having colds all the time.

Weekly Update: 3-15-2015

This week was spent partially hating on SpriteKit and partially loving Fastlane. The latter is awesome. The former makes me sad. Bullet Heck was built in SpriteKit, and it’ll probably be my last project built with it, too. Moving on.

Research into snowkit and haxe continues. I’m really liking it, and plan on having some kind of prototype-y thing built before too long. I don’t want to use it for the next Ludum Dare (at least, not before I’ve got a bit more experience using it) but it might be fun to see what I can cobble together.

Spent a bit of time working with those fastlane tools, though, building up screenshot scripts and getting things in line for inevitable, neglected app updates. Pixatronic ought to get some better stuff at some point, and Panic Attack needs to get iPhone 6/6+ support someday.

Er. Suppose The Dungeon deserves all that, too, right? Yikes.

Weekly Update: 3-8-2015

This week was another brisk one. I spent a bit of time hammering at the asteroids in Bullet Heck to make them a bit more sensible and a bit more game-y. Just having a constant, endless wave of asteroids is a bit exhausting so I’m setting them up to do occasional bursts based on the asteroid density of that particular wave.

I also did a bit of work on Wallomatic this week, adding a neat blur filter toggle. I’m always leery about adding twiddlers and settings, but this one feels like a keeper. It was all pretty much inspired by how OS X blurs your wallpaper at the login prompt, so I have Apple to thank! Yay.

I’m still kinda thumping away at learning luxeengine/snowkit and that whole constellation of rad stuff. There’s an Art/Code night this Thursday that I’m hoping to have something playable and pokable, but we’ll see how it goes. There’s not that much stuff to build, but I’ve got kind of a busy week ahead of me.

Pilot Pen Nib Swaperoo

Ages ago, I had a post about pens! (Hah. Post. Pens. Moving on.) I had two surprises from that, revolving around the Pilot pens - specifically, the Metropolitan and the Penmanship. One’s a fairly classic black, with pretty great weight to it, and the other is this odd clear plastic thing with grip-ridges and an odd cap.

They’re both pretty good pens, and especially at their prices, but I was always disappointed with how thick the Fine nib was in the Metropolitan. I like to put down a really, really thin line because my writing is cramped and my handwriting isn’t all that neat. Thin means I get to be a bit sloppy, so between the two pens, the Penmanship really won out.

That was pretty much the end of it until a week or two ago, when I started looking into nibs. Why couldn’t I put an EF into the Metro? Turns out, there was nothing but fear stopping me - and another Penmanship. I didn’t even bother searching, though knew that you could yank it out of a Penmanship and do a swap that way. Which, actually, is exactly what I did.

Here’s the shoot-the-Cacodemon-until-it-dies tip: wrap the nib and feed (the black thing with ridges) in tape to yank it out. I used packing tape, because the nib only extends about halfway down. Yep, just wrap that thing and give ‘er a tug. Be careful and gentle when unwrapping, repeat, then discover that the nibs just kinda fit into place. Sliding it back on was pretty straightforward too, and just took a little bit of force.

This is filed under “lol who cares” to just about everyone, but damn, I’m happy with this pen now. Dang, I never did end up doing that post about ink, did I? Spoiler alert: I put Montblanc Blue/Black ink in there. Puts down this really nice darkish-gray line. It was my go-to black before I got this other ink, but that’s for another post!