Skip to content

“Adding Some Spice to Your Marriage”

I’ve participated in two game jams this year and released two games!

The first jam was during Awesome Games Done Quick 2017, and for it I made Composition. Which is… weird. We’ll go with weird.

The second was a horny game jam during February, and for it I made Adding Some Spice to Your Marriage, which is an “instructional DVD” (rhythm game). It has a couple of risqué photos in it but is otherwise abstract enough that it’s probably safe for work.

Spice is something I felt like talking about a little, so here’s a bunch of words! This post is just a collection of random things I wanted to say; there’s no arc through it or grand summary at the end that fits everything together. Continue reading ›

“TIS-100” Journal

Here’s a series of posts about my solutions for puzzles in the parallel architecture assembly code game TIS-100 by Zachtronics.

This isn’t a walkthrough: there are surely better places you can go for help than here. And it’s certainly not me showing off how I’m the best programmer alive: most of these are just the first thing I got to work and score average or below average compared to other submitted solutions. This is really just a reference document for myself so that, if I revisit this stuff later, I’ll know what the heck the code is doing without having to decipher assembly.

This is very much a work in progress, and I’ll update this post with links to the future pages for each puzzle as I get around to writing them. * Puzzles starting with an asterisk are solutions I recommend.

A note on the solutions, since this tidbit in the manual is very easy to miss: if you leave a comment starting with ## in your code somewhere, that comment will show up as the name of your solution from the file selection screen.

TIS-100 SEGMENT MAP

  1. SELF-TEST DIAGNOSTIC (SEGMENT 00150)
  2. SIGNAL AMPLIFIER (SEGMENT 10981)
  3. DIFFERENTIAL CONVERTER (SEGMENT 20176)
  4. SIGNAL COMPARATOR (SEGMENT 21340)
  5. SIGNAL MULTIPLEXER (SEGMENT 22280)
  6. SEQUENCE GENERATOR (SEGMENT 30647)
  7. SEQUENCE COUNTER (SEGMENT 31904)
  8. SIGNAL EDGE DETECTOR (SEGMENT 32050)
  9. INTERRUPT HANDLER (SEGMENT 33762)
  10. SIGNAL PATTERN DETECTOR (SEGMENT 40196)
  11. SEQUENCE PEAK DETECTOR (SEGMENT 41247)
  12. * SEQUENCE REVERSER (SEGMENT 42656)
  13. SIGNAL MULTIPLIER (SEGMENT 43786)
  14. * IMAGE TEST PATTERN 1 (SEGMENT 50370)
  15. * IMAGE TEST PATTERN 2 (SEGMENT 51781)
  16. EXPOSURE MASK VIEWER (SEGMENT 52544)
  17. HISTOGRAM VIEWER (SEGMENT 53897)
  18. SIGNAL WINDOW FILTER (SEGMENT 60099)
  19. SIGNAL DIVIDER (SEGMENT 61212)
  20. SEQUENCE INDEXER (SEGMENT 62711)
  21. SEQUENCE SORTER (SEGMENT 63534) [unsolved]
  22. STORED IMAGE DECODER (SEGMENT 70601)

TIS-NET DIRECTORY

  1. SEQUENCE MERGER (NEXUS 00.526.6)
  2. INTEGER SERIES CALCULATOR (NEXUS 01.874.8)
  3. SEQUENCE RANGE LIMITER (NEXUS 02.981.2)
  4. SIGNAL ERROR CORRECTOR (NEXUS 03.176.9)
  5. SUBSEQUENCE EXTRACTOR (NEXUS 04.340.5)
  6. SIGNAL PRESCALER (NEXUS 05.647.1)
  7. SIGNAL AVERAGER (NEXUS 06.786.0)
  8. SUBMAXIMUM SELECTOR (NEXUS 07.050.0)
  9. DECIMAL DECOMPOSER (NEXUS 08.633.9)
  10. SEQUENCE MODE CALCULATOR (NEXUS 09.094.9) [unsolved]
  11. SEQUENCE NORMALIZER (NEXUS 10.656.5)
  12. IMAGE TEST PATTERN 3 (NEXUS 11.711.2)
  13. IMAGE TEST PATTERN 4 (NEXUS 12.534.4)
  14. SPATIAL PATH VIEWER (NEXUS 13.370.9) [unsolved]
  15. CHARACTER TERMINAL (NEXUS 14.781.3)
  16. BACK-REFERENCE REIFIER (NEXUS 15.897.9) [unsolved]
  17. DYNAMIC PATTERN DETECTOR (NEXUS 16.212.8) [unsolved]
  18. SEQUENCE GAP INTERPOLATOR (NEXUS 17.135.0)
  19. DECIMAL TO OCTAL CONVERTER (NEXUS 18.427.7)
  20. PROLONGED SEQUENCE SORTER (NEXUS 19.762.9) [unsolved]
  21. PRIME FACTOR CALCULATOR (NEXUS 20.433.1)
  22. SIGNAL EXPONENTIATOR (NEXUS 21.601.6)
  23. T20 NODE EMULATOR (NEXUS 22.280.8) [unsolved]
  24. T31 NODE EMULATOR (NEXUS 23.727.9) [unsolved]
  25. WAVE COLLAPSE SUPERVISOR (NEXUS 24.511.7)
  • D.$A5R.5SRD..

“Ergo”

Let’s get the business out of the way first; the rest of this post will be a rambly mess, but we’ll get things done here above the line.

I have a “new” browser game! “New” in quotation marks because it’s something I 80% finished eight years ago and then 95% finished four years ago, and also because it’s basically just a port of the old puzzle game Cogito.

Play Ergo here

Try it out and let me know what you think! Continue reading ›

Best video game songs of 2015

Every year I usually have a reasonably strong preference for my favorite soundtrack from a video game that came out that year, but that wasn’t really the case for 2015. So instead, here’s a list of the five songs I’ve probably listened to the most from games released in 2015.

Continue reading ›

Obtuseness: “The Legend of Legacy” and “L-ZONE”

I played through the demo of The Legend of Legacy for the 3DS. It was fun, but I probably won’t pick up the game.

The thing I’ve been thinking about the most is how obtuse the game is. I don’t mean its systems, although those are also opaque: skill awakening is never explained, elemental effects are never explained, status effects are never explained, etc. Some of that may be due to the demo trying to limit information overload, but then obtuse mechanics are a hallmark of the SaGa series that inspired the game, so maybe not!

In any case, what I’m really talking about is how I had absolutely no idea what the heck I was doing. The Legend of Legacy intentionally has no story, and the only motivation for the characters is a directive to explore. The dungeons are just mazes without a particularly logical flow through them, featuring bosses randomly strewn about and secret exits that don’t show up on the map until you physically inspect them, even when your map is otherwise “completed.” There are mechanisms and landscape features that may or may not have any effect on anything when you interact with them, and there are singing statues whose cryptic verses may or may not mean anything.

The net effect was that I was never sure where I was going, whether I’d been everywhere, or whether I was doing anything of consequence. Continue reading ›

Extracting audio from CAF files without re-encoding

Yesterday, I found myself in possession of some Core Audio Format (CAF) files. CAF is just a container format; it can hold audio data encoded with different formats, such as AIFF or AAC. In this case, the files were holding music encoded with AAC.

QuickTime Player can play CAF files without any trouble, but I wanted to add the music to my iTunes library, and iTunes 11 can’t play them natively. I needed a way to convert them into a format iTunes can handle, like vanilla AAC in an MPEG-4 Audio container (.m4a). Since AAC is a lossy compression, I wanted to extract the audio from the CAF files without re-encoding them and losing some quality.

It turns out that this is really easy with the OS X command line tool afconvert. One would usually use this to create CAF files, but it can unpack them as well with an argument of -d 0:

{ -d | --data } data_format[@sample_rate][/format_flags][#frames_per_packet]
    …
    A format of "0" specifies the same format as the source file,
        with packets copied exactly.

So all you have to do is specify the file format corresponding to the audio data in the CAF file with -f and drop a -d 0 in there, and it’ll just work. For my AAC example, that looks like this:

$ afconvert -v -f m4af -d 0 blah.caf
…
Output file: blah.m4a, 7938113 frames

And now you’ve got an M4A file with identical audio data to the original CAF file. You can verify this by converting both files to WAVE or another lossless format and comparing them:

$ afconvert -f WAVE -d LEI16 -o blah-caf.wav blah.caf
$ afconvert -f WAVE -d LEI16 -o blah-m4a.wav blah.m4a
$ diff -s blah-caf.wav blah-m4a.wav
Files blah-caf.wav and blah-m4a.wav are identical

Piece of cake.

The only potentially tricky part is figuring out what kind of audio data is stored in the CAF file, but you can find this out by opening up the file in QuickTime Player and checking the inspector (⌘I):

screenshot of the inspector for blah.caf, showing Format: AAC, 2 channels, 44100 Hz

… but interpreting the “Format” message could be an issue:

screenshot of the inspector for blah-wav.caf, showing Format: Linear PCM, 16 bit little-endian signed integer, 2 channels, 44100 Hz

(This is WAVE.)

Fucking Tumblr

Tumblr recently changed its posting interface again. Here’s what it looks like now:

screenshot of the new Tumblr posting interface

The new interface was inspired by the “super-constrained environment” of mobile apps, and with it they tried to compact Tumblr’s “years of features,” as one might “[move] a suburban house’s worth of furniture into a tiny New York apartment.” What does that mean? Pop-up menus everywhere!

The gear in the upper-right corner is a pop-up menu. Click it to access some of the more rarely-used post options.

contents of the gear pop-up menu: custom post URL, content source, post date, and an option to let people photo reply

The arrow notch attached to the right of the “Create post” button is another pop-up menu. Click it to access the visibility and queueing options.

contents of the post pop-up menu: publish now, add to queue, publish on..., save as draft, private, and preview on blog

Finally, we have the Twitter pop-up menu. Tumblr lets you send a tweet when you make a post, in case people want to follow your blog that way. Click it to edit the message that will be tweeted.

contents of the Twitter pop-up menu: a text field and a submit button

Except I lied in that description. This last one is not, in fact, a pop-up menu. It is a graphical checkbox that, after a short delay, pops up the text field when you hover the mouse over it, but only when it’s enabled.

There are two parts to that description, because the button has two different behaviors. First: graphical checkbox. When you click it, it toggles between blue and gray. Blue means that your post will be tweeted, and gray means it will not. This is not explained anywhere.

the two Twitter birds: blue and gray

Second: when you hover your mouse over the button and it’s enabled (blue), the text field pops up after a short delay. If the button is disabled (gray), the text field does not pop up. This is also not explained anywhere.

The real fun comes in that the first behavior can trigger the second. Clicking the button also has the effect of showing the text field if you’re enabling tweets; if you enable the button, you’re now hovering the mouse over the enabled button, so the field pops up. Likewise, clicking the button will hide the text field if you’re disabling tweets.

This last, combined behavior, where clicking the button can show and hide the text field, makes it really easy to assume that the button is a pop-up menu. Especially when you consider that there’s no explanation anywhere of the complex way this thing really works, and that there are real pop-up menus in the interface too. Did you enter a custom message and then click the button to dismiss the text field, thereby disabling tweets? Have fun trying to figure out why your post won’t be tweeted! I did, for four days!

This fucking button is one of the most actively hostile UI controls I’ve come across, and I can’t wait until Colin and I move Nullary Sources off Tumblr.

“The Deep Shell Well”

I wrote almost all of this piece in late 2010, right after I finished playing Super Mario Galaxy 2. I never quite finished it, though, and soon it found its way into a folder, which eventually was put into another folder, which thereafter was dropped into some other folder inside a folder. This is not a successful writing strategy!

David Smith linked two days ago a great video by Shaun Inman about the behavior of the camera in Super Mario World. The video got me thinking about how there’s traditionally been a ton of care put into Mario games, which in turn reminded me of this post. So I’m dusting it off.

It’s been two years since I played Super Mario Galaxy 2, so a lot of the details of the game are now pretty hazy. However, I can still run through almost the entirety of the Slimy Spring Galaxy in my head.

And, since I wrote what’s below, I’ve replayed Super Mario 64.

Spoiler alert: this post contains details of level design in Super Mario Galaxy 2, focused mostly on a thoroughly illustrated description of the Slimy Spring Galaxy in world 6. If you haven’t played the game and don’t want the level spoiled, then don’t read this post! Otherwise, feel free to proceed. I recommend it; I feel this is something special worth talking about. Continue reading ›

SpaceX’s Dragon launch

This SpaceX launch got me thinking about my favorite piece by The Onion, “Holy Shit, Man Walks on Fucking Moon” from Our Dumb Century. It’s basically a news story on the landing of the lunar module of the Apollo 11, liberally laced with profanity:

Neil Armstrong’s historic first words on Moon: “HOLY LIVING FUCK

I’m going to go ahead and read far too much into this piece.

The straight line distance from San Francisco, CA, to New York, NY, is about 2,600 miles. The Earth’s circumference is about 25,000 miles. The distance the Apollo 11 travelled was about 623,000 miles, counting back-and-forth travel and orbits around the Earth and Moon.

In 1969, we stuffed three men into a pressurized metal box, strapped it to a giant tube containing millions of pounds of rocket fuel, exploded them off the planet, and sent them to travel twenty-five times the distance around the world through a freezing vacuum.

And it worked on the first try! For the first time in the history of people, one of our own set foot on a celestial body besides the Earth. One that, at its shortest distance, is about 221,000 miles away.

The reason I love that piece from The Onion isn’t so much the crass nature of it, but that, out of everything I’ve read about the first Moon landing, it best captures the correct emotional response. We put a person on the fucking Moon. Can you believe this shit? Science: what the fuck.

The SpaceX launch of the unmanned Dragon capsule is clearly not as important or monumental as Apollo 11. It aims merely to be the first commercial space vehicle to dock at the International Space Station, which so far as only hosted spacecraft from government space organizations. It hasn’t even succeeded yet; the docking will happen in a couple of days, if it even happens at all.

But last night, I watched the successful launch of what could be the first commercial space vehicle to dock at the International Space Station. It was amazingly exciting to see it reach orbit and unfurl the solar array. Space travel is still exceedingly impractical, but who knows what will happen as private companies like SpaceX become able to launch shuttles on their own.

Fuck.

Solatorobo: Red the Hunter

Quickish thoughts:

Solatorobo: Red the Hunter is a decent enough game, but not quite good enough to make me want to run through a New Game + any time soon. I guess I’d lightly recommend it?

The game is very pretty and charming. Those are the only unqualified compliments I can pay it, so I’ll lead with them. Really quite gorgeous settings, and each of the islands has its own flavor. Also, every character is a loon, which I’m always okay with.

The side quests are surprisingly diverse and rather enjoyable, although there’s some obvious location reskinning.

The battle system has the potential for massive funtimes, because picking up enemies or grabbing their projectiles in midair and throwing them around is a hoot, but only the boss fights really show it off. Battles against the same mooks in highly similar areas get old really fast, especially since they never at any point present a challenge because the game is so easy.

I wouldn’t mind the easiness so much if Solatorobo weren’t so obnoxiously handholdy too. The objectives and dungeons are almost all really straightforward, not so much about puzzles and exploration than going somewhere to do something and then being told to go somewhere else. Despite this, it’ll still very helpfully point out for the fiftieth time that hey, there’s a pressure switch over there, what could it possibly do?

There are a couple of good puzzle concepts in there, but as Solatorobo isn’t a very puzzly game, they’re not explored that deeply. The Futzu bridging puzzles in particular I may steal for myself.

The plot starts off as a duct-taped wad of JRPG tropes. I kind of feel like they were aware of that, though, and had a “yeah, we’re going to do it, so let’s just do it and get it over with” attitude. In one chapter past the halfway point, they throw in protagonist amnesia without having mentioned it previously, and it’s resolved in the very same chapter. Solatorobo doesn’t dwell on too much of that nonsense, so even though it starts off pretty slow, it keeps moving.

And the plot does eventually get better; it’s still trod ground, but not as well-trod as earlier. Turns out that Solatorobo is very similar to Utawarerumono in structure, themes, and backstory. Even if you haven’t played or seen that, it’s not terribly difficult to figure out every development ahead of time, but I did appreciate the effort to be deeper.

This has been pretty negative, but that’s mostly borne of disappointment. What’s there was certainly worth playing. It just could’ve been a lot better, one of the best games on the system.