I wasn’t planning on posting updates today, since real life problems and bad weather conspired to keep me down, but in retrospect the game has progressed noticeably anyway, even if it didn’t feel like that at first.
So, a week ago I announced my new game, a good old shoot’em up called Laser Sky simply because the name was available — as opposed to pretty much anything involving the word “neon”. (Do you know how hard it is to come up with original titles these days? RogueBot for instance is used by a whole bunch of other projects, from a variety of fields. Hopefully nobody sues.)
Anyway, at the time Laser Sky was just beginning to feel like a game, but still lacked variety. So one of the first things to add was power-ups. The first one restores lost energy, or else gives points if you’re topped up — power-ups should never become useless! The second gives you an extra gun (then a third in the tail, which was sorely needed), and after that it erases the heat build-up, that gets significant even though with two guns you fire more slowly. The whole thing took some balancing work, because more guns should be more powerful overall, but still come at a cost. With a bit of special-casing, and otherwise fewer changes than expected, that too worked out great. It requires a change in strategy that just makes sense, and feels satisfying. Not bad for just one addition!
I don’t remember whether I played They Started It before or after coming up with the concept for Laser Sky. I had been toying with the Pyglet game library, pondering what sort of game it might be suitable for, and a shoot’em up was the most obvious choice. Not that the world needs yet another game about blowing stuff up. But making a sequel to Attack Vector and getting it right for a change is an old dream of mine, and any excuse to learn a promising new technology is a good one. The big problem was choosing a theme. And like the first time around, nothing I came up with seemed to have legs. Even a briefly considered idea for a cute’em up fizzled out (though that’s definitely worth revisiting). Moreover, it began to dawn on me that coding a sprite-scaling engine on top of a 2D library backed by OpenGL was kind of ridiculous. The new game had to be a good old-fashioned scroller… but then it couldn’t be a sequel to Attack Vector.
In the end, the concept for Laser Sky came to me almost fully-formed during a walk in the park. Trouble is, it involved vector graphics, and that precluded the use of an engine optimized for sprites. So, back to HTML5 it was. The first order of business was dusting off the game microframework I developed two years ago for the original RogueBot. (Which of course revealed a bug, duly fixed.) Making a ship move around the screen, and some basic enemies come at it, was easy enough. Then it was time for them to interact.
Hello, everyone. We had a long weekend in Romania, courtesy of December 1st falling on a Monday, and I spent it meeting with friends. In exchange for the newsletter being late, I give you a new version of RogueBot:
Yes, after going in the wrong direction for weeks, I completely redesigned the gameplay, and it’s off to a good start this time. Even with just the absolute basics in place, it feels like a game. It’s frantic. It’s challenging. (If you want an easy game, try Buzz Grid.) It requires both dexterity and planning. And it feels like there’s room for improvement, both on the player’s and the developer’s side.
In other words, a success.
This is the second time in just a few weeks that I almost didn’t have a newsletter, so I’m going to ramble a little more than usual about the couple of topics I do have. First is that the little toy I’ve been working on is nearly ready for release (in fact I’ve been sending review copies already). And yes, I tried using the system look and feel this time, just for kicks. Looks surprisingly good.
I’ve no idea when my browser started supporting WebGL. It wasn’t last time I checked, but when was that? Possibly months ago… before the last OS upgrade. Oh well, that must be it.
You can use the good old WASD keys to move around. I was going for a Sentinel vibe, but failed, and cheap tricks couldn’t fill the gap. (Amusingly, using the software renderer comes closer to what I had in mind.) To top it all, I worked just as much on figuring out Three.js as I had previously on setting up various 2.5D engines from scratch. And at least this one had style.
Oh well, on to the real news.
I’m conflicted about this. On the one hand, I’ve spent the last two articles complaining about the difficulties of writing portable software. On the other hand, I’ve spent five days porting Buzz Grid to PyGame, and it came out better-looking that the original!
This time, however, I was able to keep the gameplay unchanged.
While my recent game Buzz Grid was very well received, virtually everybody complained about having to use WASD instead of the cursor keys. All my attempts to explain that it was a technical limitation fell on deaf ears. That’s natural; people need solutions, not explanations. But until recently, I couldn’t think of any way to add special key support in a portable manner without either:
- making the code much more complicated or
- making the game depend on some external library.
I didn’t bother optimizing Buzz Grid initially, as even on my elderly machine it appeared to work just fine. But after playing the game some more, I noticed that on a high load it tended to stutter and respond slowly to keys, especially on level 4 (not sure why, since level 3 has an equally complex map, and level 5 has considerably more traps and prizes). So I figured digging into the code a bit couldn’t hurt. Luckily, Arora — my favorite WebKit browser — comes with an equivalent of Firebug built-in, including a profiler. Here’s what it told me:
The browser is tempting as a game development platform, for a variety of reasons. But while output is pretty much standardized now that we have <canvas>, input is still a problem. Or so I thought.
That’s because people keep complaining how making DOM events work across browsers is a pain, blah blah. And for a while I listened to the complaints and just didn’t bother. But I should have.