Sublime is well named

Let’s get this out of the way first: as far as game development goes, there’s not a lot of progress to report. Some, though! The bigger topics this week are a change in tooling, both hardware and software, and a redaction of a lot of free time that’s going to have an impact on my game development for at least the next 3 weeks, booo!

First, the game development stuff! The next project is called ts-breakout, and is a port of the simple brick breaker clone from the Chris DeLeon course. The first order of business was to set up a new code base for it, and port the original JavaScript code over to the TypeScript framework of ts-game-engine.

This task has been completed; there is a new GitLab repository for ts-breakout, an entry has been made for it on my gamedev explorations page (specifically, here), and a port of the original code is now completed. As a part of this task, I bumped the version number of ts-game-engine up to 0.3.0. While going through these little projects I’m making small tweaks/modifications/additions to the engine, so my little version numbering scheme is allowing me to classify changes based on what project spawned the need for them (assuming that there IS a need, mind you).

There are a total of 17 exercises associated with this particular project, and I managed to complete the first one during the port; refactor the code so that it’s in separate files instead of one large HTML file. Unfortunately, that’s the only progress I’ve made thus far. Part of this is because I finally reached the breaking point with WebStorm.

I have long been frustrated with all of the bugs and usability problems that plague all of the JetBrains tools that are based on the IntelliJ platform (which I think is all of them but legacy ReSharper?). On the whole the experience is a good one, but there are just little subtle problems and bugs that are annoying. I may be gaining some time with some features, but I’m wasting it (and more) working around bugs.

At some point I downloaded Sublime text 3 to give it a try, but except for a couple of minutes here and there, I never really used it or gave it a chance. I decided that for at least the next month I would make my best effort to use only Sublime to work on ts-breakout, to actually give it a fair shake. To that end I spent a couple of days this week just setting things up and learning the ropes of how things work.

One of the features that really grabbed me right away was that this really seems like a text editor written by a programmer for a programmer. It seems to essentially be a slight GUI wrapped around a comprehensive text editing engine that’s fully script-able in Python. Although it’s very powerful out of the box, any feature that seems like it’s missing can probably be added by you with little work, assuming someone hasn’t already done it for you.

Ironically, it wasn’t even anything game development related that really sold me on it. At work I develop/maintain some back end financial server software that runs under Linux and is written in Objective-C. Right off the bat I was impressed that Sublime contains support for Objective-C on a non-apple platform. I set out to do a little bit of configuration to get up to speed with using Sublime in place of several terminals running vim. It took less than a day to start to really grasp just how much faster you can work in Sublime.

I created a project on top of a fresh copy of our software, which contains 738 files (404 source, 334 headers) across 559 directories and got to work. After only an hour the main key combinations for flipping between files, symbols and windows were already ingrained in my memory and  I was working a lot faster.  For example, when I needed to check out the details of a macro, the keystrokes “Ctrl+p,dmpp@ps,enter” were enough to:

  • Open a pop up listing every file in the project
  • Narrow it down to the file DevSrc/CommonServices/DMPool/DMPool_private.h
  • Open the list of symbols defined in that header file
  • narrow the list of symbols to the “poolSpaceLeft” macro
  • Open the file in a new tab at that symbol to examine what it was doing

In any case I could fill several pages of blog posts with how impressed I am with this thing after a very short evaluation period (example: I needed a feature, and 20 minutes of python programming later, I had it) but suffice it to say that I threw some money at the developer and I don’t think I’ll be looking back. Unfortunately, the week hasn’t been all sunshine and lollipops.

For one thing, my beloved Corsair K60 keyboard died on me (took a hit from which it did not recover), which I replaced with a Filco Majestype 2 (highly recommend, by the way). More importantly, a work project of incredibly importance was unleashed upon me and my team, something which has been in the works for almost a year and has been promised to a very high profile client by the end of the month, but which we just now found out about. Once again I’m forced to wonder at how my work life seems entirely too cliche sometimes.

As a result, I think all free time has just been gobbled up by the work beast while I work extra hours to try and get this thing out the door. In fact it wasn’t until I dropped into bed at well past my normal bedtime last night that I realized that I hadn’t pre-prepared a blog post for today’s update. This day has been similarly hellish, so I’m pushing out this update without the usual 3-pass-polish that I usually give these kinds of things. Hopefully you notice a difference (and this seems worse than usual).

So, we’ll see what kind of extra-extra free time I’m able to pull off for the rest of the month, I guess.