So having been rather busy this past month with my research, I've neglected to spend much time on hobby and vice.
I do, however, have project I'm working on fairly seriously: writing my own interactive fiction/mud building system. The two are similar in terms of being text based games, but I think the mud building system will definately be more difficult because it will have to deal with multiple players. As such I'm starting with the basics of an interactive fiction system.
First off, I'm not sure if I'm a huge fan of the
Inform7 style "natural language" programming style. I think Inform 7 is pretty cool in general though, and I doubt I could make a better IDE for writing interactive fiction.
Now, partly I want to do this just because I can, but there are some things that I think would be very cool to include in a text-based game system that I don't think really exist yet.
First, I think it'd be really nice to be able to extend the language of the game. In other words, I want to be able to type "to blah is to blech" and have typing blah do the sequence of commands that I defined. Now, you can do that kindof thing pretty easily with mud clients such as Zmud, but I'd like it to be something that feels like a part of the world.
An extension of this idea leads to something I think is *really neat*: an extensible magic system. One can define their own spells with different attributes, given some form of spending system that allows one to define spells up to a certain complexity and effectiveness. Basically, I think it would be somewhat similar to the magic system of the table-top game Mage, though not quite as open ended just by necessity.
Of course a refinable magic system probably opens itself to tweaking and gameplay breakage the likes of which Vass has never seen, but honestly I would really want to try and make it anyway.
My plan is probably to write the system in Common Lisp. Haskell is so pretty, but things like this would probably be rather kludgy. I need to have names associated with functions, the ability to call these functions from parsing strings, these functions need to be able to take any number of arguments and need to be able to be extended in a dynamic fashion. In order to do that in Haskell I'd need to define things such as
>data Action = Unary Name (State World String) | Binary Name (Obj -> State World String) ...
>instance Show Action where
> show (Unary n _) = n
> show (Binary n _) = n
> ...
That seems really ugly, and to be honest is a hack to get around the fact that I need to futz with the type system in order to get the concept of "actions" that I want. I may play with it a little, but if it gets too messy I'll drop it like it's hot. The main reason for trying to do it in Haskell is because I do have alot of faith in the powers of the GHC compiler.