Instance Dungeons and Magic

06/16/2009

So today I got bored. And, as is usual for when I get bored, stuff got done. I added instance dungeons. Or, one. It’s designed for level 20-ish players, and is located near the Ghost Academy on the right hand side of the upper section of the map. It was surprisingly easy on the code side, and it allowed me to use the SDK for something useful, finally. I tweaked a bunch of stuff in the SDK UI (specifically screen timeouts), and ended up with what I think is a decently fun instance. It’s certainly worth a play or two, and I think after I’ve played it a bit more and heard from others who play it, I’ll be able to do much better on the next one.

A couple days ago I also got around to adding the magic tokens I’ve been talking about for so long. They come in 4 flavors (War, Fire, Ice, Storm) and give you elemental attacks that are triggered in the same way as prestige class abilities. War is more powerful than the rest, but has the smallest range, Storm lies somewhere inbetween, and Fire and Ice are equivalent in range/power.

I also added an xlvl indicator to the player list/AFK screens, so you can tell whether someone else is of a close-enough level to you to be worth meeting up with and possibly cooperating with.

Thoughts for the Future

So with these things out of the way, my to-do list is mostly empty. Adding some level II magicy stuff is an option, with more potency, but directional firing. Adding more instanced dungeons is a definite option, and something that I most certainly should/will do, but it could take some time. Creative juices flow slowly in my mind.

feature tweaks

06/06/2009

So, a couple days ago I got a long email from someone, with some questions and suggestions for twilight. Some of the suggestions were familiar (meaning, I get them regularly):

* Faster movement

* Message log

* No idle kick

* More advanced in-game chat

Being as I get these suggestions regularly, I’ve got my stance for why I’m not going to do them down pat. However, as I was typing up a reply stating that I wasn’t going to do any of the above, I thought more seriously about why I have an idle kick to begin with.

Way back in the day, twilight was a quick and dirty server-side-rendering roguelike MMO. That meant that fancy features weren’t necessary, and the easiest path was usually the path I took. That means that as part of the login process, the server checks to see if the account that is attempting to be logged into is already logged in. If it is, then it just denies the login request. Further, the game was much more challenging. You were likely to spend most of your time fighting monsters that you could barely beat (and then only by using shady tactics that abused the AI’s handicaps). I also envisioned a world that was more jam-packed with monster groups. This meant that if you were left logged in for too long, you stood a pretty good chance of getting killed (possibly repeatedly) if you were AFK.

In the 3 years since then, twilight has changed in all of those respects. It’s not quick and dirty anymore. It has a fairly nice, fairly mature codebase with lots of effort put into making things nice. The monsters you’re likely to fight have gotten easier out of necessity, as the shady tactics that abused the AI now don’t work because the AI is better. I’ve also found it’s more fun to kill lots of moderately challenging/unchallenging monsters than it is to grind against a lot of very challenging ones.  Thirdly, the world is spaced out more. There aren’t too many places where monster groups butt right up against each other. There’s generally a good bit of wiggle room inbetween where you’re pretty safe.

So, these factors combined set up a situation where booting idle players isn’t necessary for their own protection. This just left the factor of the server’s inability to log you into an account that was already logged in. That was fairly easy to fix, because a lot of the player infrastructure has gotten more robust in the past 3 years. So, I found myself left with no really good reason to keep idle boots around. So I didn’t. Now, if you’re idle for more than 60 seconds, you get made immune to damage and presented with an AFK screen that shows the other players logged into the game. I think that this is a really positive change.

Also, I made the key to see the list of players logged in more obvious. Previously you had to hit | (pipe) to get into the administrative menu, then l for the player list. Now it’s just W.

Additionally, I also added a small indicator of how much health you have to the inventory/pickup screens, so you can see if you’re getting attacked while checking your inventory out.


Next on the agenda is looking further into instanced dungeons (I’m currently suffering from a severe lack of inspiration for what a good dungeon in the upper fifth of the world would be), and also modifying the prestige class system to also handle magical effects a little better. Right now all magic comes from scrolls, but I really don’t like it too much, so I’m thinking about having some “tokens” that, when equipped, temporarily (or perhaps permanently, depending on how useful they are) place you into a mage prestige class for a particular element. So there would be an ice token that would allow you to perform a iceball effect every 5 seconds or something. This is much more easily extensible than the scroll system is, so I may end up adding ray and cone effects too, in addition to the current burst-style magic you get from scrolls.

Bugfixes

06/04/2009

So, of late, my job has taken a great deal of time away from my development, and I’m also running out of steam to work on twilight at all anyways. I really think it’s at a good level of maturity in terms of features, and I’m discovering that I just don’t have the inspiration to make Astral/Hell at a consistently high level of quality.

That said, I still do tinker around a bit. I sat down and just played the game for awhile a couple days ago, and discovered a couple bugs that I wasn’t aware of. In adding the feature whereby hitting p with only a single item on the tile automatically picked it up, I neglected to make shop squares with only a single item on them work correctly. So, I fixed that. I also tweaked the sshd code to make it more general and also added support for DH-14 (previously it would only use DH-1). I also located a bug in the SDK code where it wasn’t storing the unique items that NPCs carry.

While I haven’t done a whole lot of dev work lately, I have been kicking around ideas. Having static instanced dungeons scattered around the map is something I’ve thought about for awhile now, and I think I even started implementing it once and discovered there were problems with it, but I’m not sure :D. These sorts of dungeons would be much less work-intensive than trying to build sections of the overworld, so I’m probably going to end up trying it again sometime soon (I get off work and back to school in july). That’s about the only new-feature idea I’ve got at the moment though.

small stuff

02/27/2009

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.

sdk

02/20/2009

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

02/14/2009

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

02/03/2009

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 g1.twilightmmorl.com

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

02/01/2009

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.

the arena

01/29/2009

An idea that dgrey had brought up a couple times was that of converting the randomly generated dungeons to be scored (by how long you last), and have a highscore list, to encourage competition. I thought this was a pretty good idea, so over the last 2 days or so, I’ve added it. It’ll need a fairly significant amount of balancing and so forth I’m sure, but it’s a step in the right direction.

As a footnote, I’ve also made it so several sorts of monsters are particularly vulnerable to “silver” weapons. They take extra damage equal to their own xlvl. I’ll leave it to players to figure out which monsters are effected.

a new, friendlier twilight

01/28/2009

It never ceases to infuriate me when I get silly questions that are answered right in the “Playing the Game” help file that I added but apparently no-one reads. I’ve also gotten a couple comments that an introductory tutorial would be helpful for beginning players. So, I added one. After a new account is registered a series of tips about basic gameplay pop up on the screen, one at a time, so anyone who doesn’t mindlessly space through them will have at least a basic idea of how to play the game. I also threw in an ad for the in-game help that no-one seems to ever discover (even though there’s already an add on the welcome screen). That’s my major development for today.

Yesterday, after I posted my update about item drops, I made another small change that is of interest to no-one expect me, but I’ll tell you anyways. Friendly NPCs wander randomly about the map. It’s in their AI. What’s not in their AI is to keep them within a certain distance of where they spawn (ie, where players expect them to be). And there was no really easy way for me to limit them either. So since I was bored, I added “cage” zones to the code. Any friendly NPC who is spawned inside a “cage” is prevented from ever leaving it. This saves me quite a few headaches, and addresses a problem that’s been needing to be solved for awhile.