Oct 25, 2009 00:39
I think that I'm officially a Programmer. Which makes me kinda sad. But I've been stepping up at work and pushing myself, and since my capacity is as a programmer, I have to fill the role more completely in order to step up. As a result, my ability as a Ruby coder has gone up dramatically in the past couple months (yeah, you heard that right: about three, maybe four months).
Projects I consider active outside of work:
Three-Dragon Ante server
This needs to be done in terms of basic functionality with the crappy terminal-based UI I have it running off at the moment. I want to go in two directions at once with it: (1) I want to abstract it into an actual protocol, which is what Daniel wanted when he first brought this project up to me, and (2) I want to turn it into something playable, which means a GUI of some kind. I'm thinking of looping it in with a Rails + Juggernaut build.
Project Chesslike
I didn't realize until tonight that I still want to get this working. It's actually in a fairly solid state as of the latest implementation... and yet I am completely bored by its current implementation, mostly because it's in Java and I consider Java to be clunky. (I still remember when I was rah rah for Java, heh.) I'm interested in giving it the same treatment: abstraction.
Rails CMS
I haven't seen a single CMS I like so far. I don't really like Radiant, and nothing else seems good. The problem with a CMS is that it assumes that you're not a programmer. That's fine, but I am a programmer but I still want a CMS. Basically, I want Rails' layout thing without everything else Rails comes with.
EVE Manufacturing Helper
Basically, I want a thing that can calculate how many runs of what we can build with current stores. It's a fun idea, but I don't think it will take off, so I haven't put much time into thinking about it.
Game Grammar by Code
This is what I came up with tonight. I'm already abstracting Chesslike and TDA-Server into protocols rather than game-specific things. What if I combined those protocols? I knew perfectly well, going into the design of TDA-Server, that it would let someone come up with their own cards and work perfectly fine. So what if I abstracted out every other concept? What about turn order? What about the "pot" (which is really just a game-level resource pool)?
This might be another way to approach the game grammar: provide actual blocks with which to construct a game using grammatical predicates, and then let the developer dress it up with adjectives and nouns. That doesn't seem to be what Metaplace is doing, though admittedly, I'd have to get into the community and watch what people are doing to be sure of that, but hm, I can do this.
---
This is long, long term planning. I haven't been able to push myself to work on anything lately, and my plans seem to derail within a month usually anyways. But as an estimate...
TDA-Server should be done as a barebones pathetically functional thing within a month, pessimistically guessing. I have pretty solid ideas for virtually everything else that needs building, and once I've got all those concepts coded, I can start working on a protocol.
Chesslike, as mentioned, is technically done. However, I'd like to redo it as a protocol. One of the major design flaws in the original was the presumption of a square, grid-layout board. That means you can build Chiness Chess or Checkers off it, but you couldn't do Chinese Checkers. (Though, amusingly, you CAN do Halma.) That's because a weird board shape throws it off.
That's a graphical limitation, not a programmatic one. One thing I do want is to figure out how to force movement patterns for pieces based on the programming that goes into defining the board. If you wrote some code to describe a Diplomacy map, for instance, I want movement code to be restricted by that somehow. I don't know if I can do that.
All of this makes it possible to build a huge number of board games... just off the paradigm of pieces, spaces, and basic graph theory. Calling a weight function something to do with movement (a fleet cannot move onto a land tile: weight is always false) gives you some idea of what you can do there.
And then the essential ideas of TDA provide the basis for adding cards. I already have essential templates for cards, for deckbuilding and having cards mean something and doing one thing at certain times and doing other stuff at other times. Basic branching. Cards are a lot more flexible: it's not about merely movement, but about allowing metaprogramming of the game itself. (Of course, you could say spaces are like cards, too. Abstract, abstract, abstract.)
Dice are easy.
And from there... there isn't a whole lot more. A roulette wheel is a type of die, in that it's just a fixed set of probabilities totalling 100% against which you hit one at random. You need resource pools, like owning and developing properties in Monopoly or just the stakes in poker, and you need turn order and interaction and general flow...
But not much else. I'd love to actually get this out there and start describing games with it. Then I could see definitively what's missing. There's a host of games, of course, that it can't describe. MMORPGs, timing-based games, arcade style games, etc. My target is first and foremost games typically played on a tabletop.
---
I know I'm overcomplicating things to a degree. Tabletop is meant to be played tabletop, for one thing, not over a computer network. And the aspiration for the ultimate abstraction is kinda silly, at the end of the day: already we have seen that there's no chance in hell I can describe every game. What about word games, for instance. Basic conversational stuff like, "Find a word that starts with the same letter I ended the last word with." Can't do it, because that's just a dictionary lookup against a simple match: not a single grammatical idea I'm willing to code.
But I think it'd be interesting to try. That's the same reason I've ever written code for fun. It's interesting.
And yes. A lot of this comes out of thinking about Wave tonight. =)
ludos,
diary