Notes on the BattleMETAL soundtrack

BattleMETAL, the big-stompy-robot game was recently (finally) released! It’s been in development for quite a while now, and most of my involvement (beyond repeated testing and sharing opinions about gameplay) has been doing the soundtrack, so here are some fun behind the scenes facts. I wrote these tracks between 2016 and 2019 starting with Predator and ending with The Matock. Unless otherwise noted, I did the tracks in Reason.

This is probably the best track on here, owing to something resembling a coherent melody. Sort of reminds me of something The Knife would write (not that it’s as good as theirs!) That line is one of the few places where I actually used a bitcrusher… under all of that, it’s a u-he Tyrell. I never did get that synth to work properly in linux, and you have to download it from a German magazine to get it, but it’s nice. The rest (and by that I mean the phaser’d Monopoly, the default synth for this project) are heavily influenced by Frank Klepacki’s classic Bigfoot.

This track was written in a fairly meandering way, I had a pretty good idea the opening (the initial delay’d up drumbeat and bass) and ended up just sort of adding pads and sequences to the end of it until it was long enough. The lack of music theory really shows on this one. Like most of the tracks here, it uses Cheetah MD16 samples and (believe it or not) the 3rd demo preset for Reason’s builtin convolution reverb.

This is my first attempt at a synthwave track (if you don’t count Conniver, which I don’t, because that was more of an industrial thing.) There are a lot of preset arps going on here, and it’s the only track that isn’t using the signature drum palette. A version got re-purposed from its original form to serve as the trailer track when BattleMETAL was in its early stages (complete with samples of the EarthSiege trailer boasting of “Exquisite Texture Mapping.”)

I know this track isn’t the most musically challenging, but I actually still find it pretty compelling. It’s one of the early ones. The lead is a Charlatan, which was one of the synths I was most excited to explore when Reason finally added VST support. You can hear me tweak the settings over the course of the track-I love doing that sort of thing. Unfortunately, this was the only track I’ve managed to complete with the synth, because it keeps crashing now. For the pad, which I think I did an especially good job on, I used eXpanse which was the first wavetable synth available in Reason as a Rack Extension (about a year before we got VST support) and enabled a whole new world of sound design for us Reason diehards.

One of the more recent tracks. It’s using Viking for the bass again (which means, oddly, it sometimes skips a beat… listen for it, you’ll hear it in Predator too) but reflects my newfound confidence in making melodies in step sequencers. In fact, I think I did most of the sequencing in this track with the ABL3. The funky sequence that comes in at the end is especially fun. The Balakett is all about speed and the Monitor is all about raw power, to win with the Matock you need to dance. I also want to call out the ES-01 rack extension as an extremely underrated and great sounding softsynth. Love that thing.

I’d like to say that the lack of a melody in this track is meant to reflect the soulless nature of the PSC character and its total monomania around the extinction of the planet, but then I’d be giving myself way too much credit. This track is “meh” and I should feel “meh” about writing it.

The patch for this started out as the “Acres Of Glass” preset for Europa. I’ll always enjoy tracks that are just me playing chords for five minutes, really puts you in a good place, even if the chords are gloomy. The voice talents here include Pete (“Punching out!”), Sabrina, The Conet Project, and Techno Ejay (if you can find that one, I owe you a cookie.)

The Balakett (Bonus, so no embed apparently)

This didn’t make it into the game, so it stays as a bonus track. It’s also the only track I made with Renoise (you can probably tell from the drum wankery in the middle.) It was intended for the post-mission screen, but it’s altogether too cheerful for the apocalyptic tone of BattleMETAL. It’s using the ob-xd synth, which I’ve found to be excellent. Also, in classic Renoise beginner fashion, it ends with an extra block of the last note just stretched out forever. oops.

Overall, the experience was a fun one, and I expect I’ll do something similar again someday.

Tracks of the year: the 10s

End of the decade which we never did agree on a good name for. Time for some reminiscing through the lens of music! A millennial coming of age story.

2010: Arcade Fire – Deep Blue

One of the first bands I learned about from friends in college. One of the first albums I burned to a disc and blasted while driving around on my own for the first time. When I feel like listening to a single song from it, more and more I’ve been drawn to this track. I think it shows off the melancholy and nostalgia of the record best. Arcade fire often sings like something very bad is about to happen, and this track is a great example.

2011: Power Glove – Nightforce

While the EP was released in 2013, this track was definitely out in 2011. It was my introduction to the neon-drenched world of Synthwave, and really holds up in a way that I’m not sure a lot of early Synthwave does as far as production goes.

2012: Carpenter Brut – Escape from Midwitch Valley

For me, this is what took Synthwave to the next level. The EDM/Dubstep noises, including that heavy bass, made it feel fresh while staying in the realm of retro. I ended up seeing Carpenter Brut in concert in Cambridge at some point, and it was a wild show. The first three EPs by CB are a different style though – more studio-y, less band-y. Notice the use of samples in this and the Power Glove track.

2013: Megadrive – I Am The Program

I was well into Synthwave at this point, so in this period I was listening to a lot of Mega Drive et al. I probably spin 198XAD more, but that was partly informed by how much I listened to Mega Drive in 2013! However, after I graduated and found myself in a quiet office and needing more tracks to spin, I found myself reaching out to find something new.

2014: Aphex Twin – XMAS_EVET10 (thanaton3 mix)

I got into Aphex Twin shortly before this record was announced.* His cannon was established and all we could hope for where maybe old tracks (like Caustic Window) being dropped someday. 2007 was the end date, the pinnacle of the artist’s career. So imagine the hype when you’re not only getting into IDM but now the big name is going to drop something new and bizarre? The hype was matched only by how good the actual record was. The whole thing is brilliant, but when I reach for one that exemplifies it, I tend to pick Xmas Event. The way it progresses through different melodies and moods really shows off RDJ’s skill as a composer.

2015: Squarepusher – Exjag Nives

Squarepusher spent most of the ’10s mixing modern EDM electro and dubstep sounds into his jazzy dnb. Some of it can be challenging to listen to, but in Exjag Nives he hits it way out of the park. The intricate layers over a simple melody, the epic feel, and of course the really cool use of breaks (befitting a longtime break-master like Squarepusher) make this track stand out over similar works. Also, 2015 is when I started my ongoing game project,, though I didn’t publicly post about it until 2019. I started the thing with babel so I could use ES6, but now browsers have caught up. How long is too long for a dream?

2016: Brainwaltzera – marzipan rhombus [birthday eDit]

Back in 2015, Aphex started posting a bunch of tracks on Soundcloud. Like crazy IDM dominoes, this brought people out of the woodwork to post there too, and that continued for a while afterward. One account that ended up getting posted on WATMM threads was one Brainwaltzera, and that’s where I heard this absolute gem of a track. It’s emotional and quiet and enigmatic without sacrificing the cool factor of a big fat synth line cutting right through the middle of it. 2016 was an exhausting year, and this was the perfect track to unwind to.

2017: Rognvald – R.O.G.N.V.A.L.D

I’ve been listening to Jungle/DnB since I was introduced to Pendulum back in the 00s, so this tickled my fancy. It’s got less of a modern Methlab type sensibility though, and more of an IDM sensibility. Plus it just jams really, really hard. It was a favorite for spinning at the gym back when I would walk all of the way from the Kew office in Cambridge on the river to Watertown. A few times I even walked all of the way home to Brookline. We took one last walk there, up down Beacon street, all the way from Cambridge, through Boston, to Brookline. It was bittersweet.

2018: The Sword – Deadly Nightshade

This one takes me back to making night trips from our apartment, carrying a wagon-full of stuff down to Millis when we left the city. I spun this in the car and even one time in a U-Haul Pickup which had bluetooth and a speed governor of some sort. Sabrina surprised me by driving us down to a concert by these guys without saying who was playing. They absolutely rocked it!

Bonus: 2018 is when I released Axe Factory, here’s my favorite track from that:

2019: Ruby My Dear – Babil (Alternate Take)

This is one of my most played tracks of 2019, and with good reason. After an ep of mostly spooky ambience and the occasional jump scare, this track takes you for a ride with its driving bass almost immediately. When selecting a track for 2019 though, I found myself asking “what did Analogical force release this year? Analogical force has been absolutely killing it with a string of releases in ’18, ’19, and now even one in ’20. The same can be said for Ruby, My Dear – top notch stuff on Altair and Basic as well as Phlgem. This track is heavy and dancable, but contains plenty of the fiddly little details that I love so much, so I’d call it my overall pick from RMD’s ’19 releases. Maybe the focus on labels and artists I already know is a sign that I’m becoming set in my ways, that I’ve narrowed my focus to variations on similar themes. I sure hope not. Happy new year!

* my first exposure was Flim as used by the WNPR show Where We Live. I probably watched CTD and Windowlicker when I googled that, but those didn’t make such a big impression. That would have been sometime in the early 00s, so out of scope for this article! I listened to WNPR quite a bit back then so it was deeply embedded in my head. I’m sad to hear that John Dankowski recently left the station.

Feedback for the JIRA team

I got JIRA’s automated customer satisfaction quiz today. I got carried away with my response, and I thought I’d share it. Out of seven, I called Jira’s “ease of use” 1. I’ve cleaned it up (slightly) slightly for wider viewing.

Jira’s fundamental flaw is its awkward user experience. It gives you enormous power to customize your workflow, but all in the form of discrete, non-uniform and definitely not orthogonal tools. Each customization tool needs to be discovered/found and learned separately – except for a few (very good!) shared notions like JQL you have to teach them to yourself from scratch. The mass-edit stories flow is a great example: it in no way relates to the rest of your interactions with the board, it’s just a bunch of menus. I mean seriously, you guys are one of the biggest names in Software Development right now. You’re making professional tools, but that does not mean they have to be a drag to use! Overall the interaction with each bit of Jira feels independently evolved rather than designed. I’m not saying that you should replace every flow, but as you add new ones (and you are adding new ones – Jira is totally different now from when I first used it in about 2015, and it’s much better!) try to have a uniformity so that knowledge of how to use one can transfer to the others.

Unlike, say, Grafana, where you can save, load, share, version-control and ask intelligent Stack Overflow questions about your graphs because they are actually saved in text form, Jira is entirely (as far as I can tell) UI driven and Database-backed. It’s very hard to google how to do things or find instructions because the things you’re looking for aren’t always labeled, or are very small text somewhere hiding in a menu. Having ‘source code’ for all customizable features (and I don’t mean writing extensions, I mean, for example, the configuration of our board or card layout!) even if it was reams and reams of gross XML, would be preferable to the current state of affairs. JIRA’s customization is its strong suit, but these customizations are difficult to share and communicate even with other teams within our organization, to say nothing of finding good tutorials.

At one point I was like “I want to make a new graph” so I go to the graphs page. No “new” button. I want to add a custom filter, so I go to the custom filters and didn’t find a new button. I’ll admit – I’m a total neanderthal when it comes to modern web UX. However, it seems to me that if you’d like to change or add a thing, the option to do it should be right next to the existing things. This principle applies to the backlog view, for example – if I want to create a story, I can click on the end of the backlog. Or inside a sprint. Or also the “+” icon which is inexplicably located in the navigation menu on the left. If you need a video to communicate how to use a thing on a computer, the thing isn’t easy enough. I would suggest that to broaden your reach, you should do most of your UX testing with people who haven’t become acclimated to Jira’s way of doing things. Jira is 100x more powerful than Trello, so why do I still see people using Trello? Because although you can’t customize Trello to do everything, everything it does do, it does fine.

Don’t just be Pivotal with more customization or Trello with more features. There should be a right way to accomplish things, the right way should be obvious, and it should be easy to communicate what the right way is to others, or apply that right way to other things. I’m counting on you fine folks.

FlyThrough.Space: Alpha Release

I’ve been sitting on this project for way too long. Doomed the project by not soliciting feedback early enough. Failed to heed the warnings of Agile. Kept coming up with reasons not to tell anyone about it, promising that I’d make it public after I added just one more feature. But I think there’s enough that people will be at least intrigued. Or annoyed. The point is that they’ll feel something. I’d be interested to hear any feedback on what’s there and which planned features you’d find most compelling or what would make you likelier to make a mod.

TL;DR: Code Here:

Play Here:

Neat Features:

  • It’s written in Vanilla ES6, only depends on one library (the Babylonjs engine) which is included, so you can hack away on it to your heart’s content without setting up any sort of development environment. Just open up the files, edit them, and host them (locally)
  • 2.5d perspective in a full 3d engine with 2d sprites for planets and projectiles, and a 2d overlay on top.
  • EV/Endless-Sky-esque with the ability to trade cargo, purchase a new ship, add weapons, and do battle in asteroids-style high-stakes space combat. Arrow keys to move, left control to shoot. The default weapon may run out of ammo though!
  • Visible weapons on ships. It’s a capability, even if I haven’t added bones to most of the ship models to take advantage of it. If done right I expect it will be super immersive.
  • Original, handcrafted (unfinished) universe to explore. For all of you fans of non-procedural-generated worlds.
  • Open architecture allowing for radical gameplay changes and a totally data-driven model.
  • Press ‘Escape’ to see the star map (bug: drag it around if it does not show up right away). Select a system, exit the map, and press ‘J’ to jump to that star system. You can only see explored systems and systems linked to them, which won’t be very many at first, but there’re lots out there to explore.
  • Press ‘L’ to select a nearby planet and ‘L’ again to land
  • press ‘`’ to select the nearest other ship
  • Select “open contracts” after landing for random cargo missions

Planned Features (don’t count your features before they ship):

  • More missions/storylines.
  • Save and restore game. I’ve got it set up to save and load from local storage, just need a menu to select your save. I didn’t set out to make a roguelike.
  • Secondary weapons. Right now when you pull the trigger, everything goes off at once. Also a prerequisite for stuff like carried ships.
  • Beam-based weapons. Need to add a beam collider to the collision system. Explored adding a real physics system but they’re mostly overkill for this type of game; writing a beam/circle collision system may change that. It would also let me implement anti-tunneling for projectiles (collide a line segment between the previous position and the current position.)
  • Decide what to do with ai leading. You can switch leading on and off with querystring ?ai_leading=basic which will make the AI try to lead its shots. But it uses a basic approximation so it still misses a lot.
  • Turrets. Getting the math, blender export/in-engine-use toolchain set up to make visible turrets on ships has proven frustrating. Some of the code is there but it would take a not insignificant amount of work to finish. Which is probably why I keep putting off…
  • Starfield. Will have to probably do this by hand with star sprites.
  • Nice ship models with textures! I’ve been cranking out kinda lousy models as programmer art (thinking that the final art will maybe have different constraints – visible turrets being a big one), but someday it would be cool to put some more effort into it. Hampered by the fact that I mostly work on this on a train so I don’t usually have room to use a mouse.
  • Sound. There isn’t any. I just haven’t gotten around to it, I can’t imagine it’ll be too hard to throw in there.
  • Escorts/Carried Ships. The AI and collision systems are set up for it, and some recent refactoring has probably opened the door to it. Just takes some doing.
  • Board/Plunder/Capture-this just needs some doing, but shouldn’t be a huge technical hurdle.
  • Demanding tribute/galactic conquest/planetary destruction – would require a bit of additional work, but not much. Unclear to me if this is a feature people really want.
  • Zoom in / out: Just needs the controls rigged up to do this, but it’d be kinda cool (right?)
  • The GUI could definitely look a lot nicer, and the code could probably be cleaner. I’m not a graphic designer.

I plan to keep hacking away on it at the slow-but-mostly-steady pace that you can see from the (lengthy) commit history. If you want to play a complete game now, this isn’t for you. But if you’ve always wanted to hack on an EV clone but the other ones where too intimidating or weren’t 3d enough, maybe this is your ticket. Will definitely check out any Pull Requests (or, for that matter, emailed diffs) that come my way, and I’ll try and do a walk-through of major interesting bits in the code in future blog posts. If you’re still reading this far down, you are the target audience! Let me know what features you would like to see most, what would make this project compelling for you to use/fork, or what utterly repulses you about it. I’m all ears.

Atomic PI emulation setup notes

I mostly game on PC, but at one point I set up a retropi for emulated console multiplayer. Mario Kart ran pretty well (sprites and all!) but BattleTanx wasn’t performing. That’s the N64 game that I probably played the most of, and it’s cracking good multiplayer, even at the 9FPS that the Pi could manage. That was sort of the experience I was after though, so I went looking for something a bit more powerful.

Enter Digital Loggers. There was a kickstarter for a board called the Atomic Pi. It’s about the size of two Raspberry Pis and has an Intel Atom processor rather than the Pi’s ARM core. It’s still smaller than any one of the various consoles I plan to emulate on it, which is a nice bonus.

For this setup I got the Atomic PI with the small breakout board that provides a (more or less) standard adapter plug. I’m using this power brick and this multi USB hub (because there is only one USB port on the board.) It comes with a soldered-in EPROM you can boot from and write an OS to, but OSs on the eprom are painfully slow so I would recommend installing your OS to a MicroSD card like you would with a RasPi. I’m using Lubuntu, and it’s performing pretty well considering the big screen it’s on, I’m sure your favorite lightweight distro will also do well. You’ll want something that ships with a desktop for emulation though

Back to Battletanx: To get it running in Mupen64Plus (which you can install with apt along with a barebones GUI for opening ROMs and managing settings) with Rice video you need only change the config in one way:

ScreenUpdateSetting = 7

There are some glitches (the button that makes the flame tank fire sideways and makes the FLP-E tank flip get stuck) but it’s mostly playable. And Mario Kart still runs great.

LEGO Shop At Home Scans: 95-99

A while back, I was trying to find a specific Lego catalog that I’d looked at as a kid. However, when I tried to find the specific one I was looking for, I realized that very few of these catalogs from the 90s had been immortalized by the internet. However, many of them where on sale for reasonable prices (and Sabrina wanted a Scanner for old family Photos anyway) so I got to work.

? 1995

Holiday 1995

January 1996

Holiday 1996

Spring 1997

Summer 1997

Holiday 1997

January 1998

Spring 1998

Summer 1999

Fall 1999

The raw files are here on my account, if you find my (largely imagemagick-powered) PDFing of the files inadequate. If the PDFs appear small just zoom in, they’re about as high-res as they can be without creating artifacts on the screens I tried. I plan on also scanning the ones that I personally saved when I was a kid, and will post those here too.

And the specific catalog I was looking for? Turns out it was Holiday 1997. Twenty one years ago. The page I was looking for in particular turns out to be this one.

In Appreciation: Termux

I’ve been playing with Termux quite a bit in the last couple of days. Being able to do development-any development-while standing on the train is an awesome feeling. I think the site undersells what it is-it’s your compiler in your pocket. It’s ssh in your pocket. I’m redoing my website on my phone (the mobile experience is crap at the moment) by editing the sources in vim, then hosting it locally with Python.