Archive for February, 2009

small stuff


I haven’t done anything super-important lately, but there’ve been a bunch of little tweaks to the way things work. First of all, I added an “anonymous play” capability. Technically this capability has been around for awhile, but there was no way to access it. Now that it’s there, it seems to actually get a surprising amount of use, so that’s good.
As part of the testing for this “anonymous play” thing, I finally got pissed off at always dying a couple times as soon as I logged in at the very start of the game. So, I made the monsters there weaker and beefed up the low-level player characters a bit. This should reduce new-player frustrations a bit.
I’ve also tweaked the campaign dungeons, making them longer, somewhat more challenging, but most importantly preventing certain monsters from spawning. Because of the way vampire and mindflayer special attacks work, it’s not fair at all to be pitted against high level mindflayers/vamps. You end up getting your brain eaten cuz you weren’t wearing a tough enough helmet, just because no better helmets exist yet. So, I prevented vamps/mindflayers from being spawned in campaigns. IMO, campaign dungeons are a big bright spot in twilight’s gameplay right now. Way fun to try to run, either solo or in a group.

On the front of future development, there are only a couple items on my todo list:
* Astral/Hell development
* Snow region development
* More prestige classes/better magic system
* Twilight Hour

Twilight Hour is just my idea to have an agreement with some other twilighters that we’ll all try to be on playing together at the same time for an hour or so out of the week. Hopefully this will somehow bring about more community in twilight.




Well, for the last week or so, I’ve been a very busy girl, working on what I call the twilight SDK. It’s kind of a misnomer cuz it isn’t actually software development anything, but I think it gets the idea across. Pretty much what it is, is a toolkit so that people who want to can create their own quests and maps for twilight. It should also be pretty useful for me, cuz quest creation is one of those yucky things where I have to muck about in text files and restart the daemon a bunch of times while I playtest. Now, that’s all integrated so I can develop faster and easier.

One thing you can’t do is make your own items. It’d be too easy to make ridiculously out-of-balance items and end up with hundreds of them and so forth and so on, so I don’t think that’s a good idea. But, this should give people the flexibility they need to make some cool stuff, if they are motivated to.

I haven’t decided if I should make the SDK entirely open to whoever wants to use it, or if I should restrict it to only people who get me to create an account for them. Right now I’m taking the latter approach, but if it’s popular enough I’ll probably open it up.

One thing I’m not real happy with is the map editing. For what most people will probably try to do, it works great, but there’s no way to convert large extents of ‘.’ into something else, so astral/hell can’t reasonably be made in the built-in map editor, cuz it has a different base ground character.

So now that all this is out of the way, I’m going to be returning to Astral/Hell and trying to polish that off so people can have more twilight goodness to enjoy.

more dungeons, and gadgetry


Since finishing the ssh work, I’ve mostly been attending to real life, rather than coding, but over the last 2 days or so I’ve worked quite a bit on twilight. Most of the changes have been things that players won’t really see, but some of the things players will see:
* “Campaign” dungeons
* Throwable daggers
* Randomly generated items

The throwable daggers are just a concept thus far. There’s only one “brand” in the game and they’re only accessible at a very high level. I’m hoping to see if/how people use them, and evaluate whether they’re a good idea or not.
The random items are kind of a “meh” in my opinion because for every cool item you get there’s a bunch of trash that you don’t want. The dictionary of things to call the items is pretty small right now too.
However, the campaign dungeons are pretty cool. It’s a bunch of rooms in a semi-linear sequence that you clear one-by-one, against monsters of increasing difficulty. They’re usually fiendishly difficult, because they spawn some monsters that exist in the code, but I refrain from adding to the game proper. Anyways they’re pretty fun.

I still need to add the ice zone that I keep talking about, and I think it’s probably time to start looking further at astral.

more ssh


So after several days of intense coding, I’ve finally gotten twilight’s ssh code to a place where it works, as far as I can tell. It currently supports 3DES encryption and ZLIB compression, and is believed to be fully compatible with OpenSSH. I think it’s compatible for most practical purposes with PuTTY, but it’s a little flakier. Some occasional bugs crop up where the signature exchange will fail, or the server will see fit to disconnect the client, but reconnecting fixes these cases as far as I’m aware. I’m kind of concerned about the stability of the code, because so much less of it is under my control, so I can’t see the potential problems the way I deal with things may cause when combined with OpenSSL/zlib, but I’ll just have to see how often it crashes over the next few days. One thing that bugs me but I don’t think I can do anything about is the way PuTTY prompts the user for a username even though twilight doesn’t challenge for one. It doesn’t matter what the user types at the prompt, but I can envision endless streams of “what username do I use?” questions.

The compression saves nearly 80% on bandwidth, so it’s really useful. For now, twilight supports connections on both the telnet and ssh interfaces. The ssh interface operates on port 8002, while the telnet interface remains on port 8001. So, using a standard unit ssh client:

ssh -p 8002

Using PuTTY is more straight-forward in the GUI.

Now I think I’m going to move on to other things. Need to add the ice-desert area, and so forth. I’ve decided to cancel my plans to rewrite the renderer, since the ssh compression fulfills mostly the same purpose, and I’d hit diminishing returns on the compression if I rewrote the renderer, and it’s just not worth the effort.

ssh and things


For the last couple days twilight has been under a sort of development freeze. I decided that it was time to put some serious effort into making things better for myself and for players outside the USA. Probably the lesser of the two ways that I’ve chosen to do that is what I’ve been pouring a lot of time and effort into lately, and that is ssh support. SSH has support for compression at the transport level, which would make packets smaller and hopefully reduce latency a bit. Unfortunately, so far as I could tell, there was no good library for the server half of ssh. So, I’ve been writing my own sshd. Right now it does the key exchange. I’m working on getting the encryption going. After that the next step appears to be dealing with channel negotiation and finally adding the compression. Overall it’s been very frustrating and very educational. I do have some mild concerns about how resource intensive it will be to have all that crypto to do for every single packet, but we’ll see. I’m using OpenSSL for all my crypto stuff.

The other thing that I’m going to do, but haven’t really started work on yet, is making twilight only redraw what changed, when beneficial. Right now it pretty much redraws the entire screen every turn, and I’m sure I can save a lot of bandwidth by making it not do that.

Since such major changes to the networking and rendering are under way, I decided I probably should avoid doing much work on the rest of the code, plus it’d probably slow me down on the “important” stuff if I was adding gameplay features.