Wednesday, January 9, 2013

GMScreen

GMScreen is a pet project of mine. Like all pet projects, it started out as a tool for myself. When running pencil-and-paper Role Playing Games, I often found that the tools I was using for notes, initiative order, and combat modifiers were just insufficient.
My first couple attempts at writing this were mostly server-side. I used databases to store data, PHP to fetch the data, and JavaScript, HTML, and CSS for the interface. Pretty standard stuff. But I found myself over-designing it, and over-emphasizing the relational parts of the data.

In addition, I was over-complicating the whole thing. I wanted it to do so much for me that I just didn't have time to design all the features, much less implement them.

So, a couple years later, I decided I'd start over with client-side JavaScript. I'd use localStorage for data persistence. I'd use proper prototypal inheritance. An event-based pub/sub architecture. Whatever I needed to in order to get the job done.

And I did. Plus more. After feedback from the Stack Overflow JavaScript room, I started using Require JS. I implemented style switching. I added a dice parser. There are multiple themes, each of which can be changed and tied to a different "screen" (workspace-like sets of windows). I implemented my own confirm/alert/prompt functions (which I should probably separate into their own repository).

It's been a great learning experience, and I'm looking forward to the next steps. This, of course, is server-side code with Node.js. This will probably include account creation (with OpenID options), sign-in, server-side data storage (probably with some kind of NoSQL database), and maybe even sharing of tables, lists, or even whole screens.

No comments:

Post a Comment