Previous Entry Share Next Entry
(no subject)
So, here I am... still got {scratchy throat, runny nose, sneezing} and {lack of energy}... and I know I need to take it slow or this will explode into a big cold... yet.. i'm not sick enough to enjoy lying in a stupor in front of the TV. I'm mentally quite alert. *bummer*

So, i guess i'm going to VPN in to work and finish off that little program that dumps IE settings for the GTAC dudes.

Although.. there is another topic hanging out in my head..

So, on and off for the last few years, i've had a desire to write a Mud engine, similar to LPC/LPMud. When I got good with Perl, I was like: Yeah, i'll do it in this! ... slightly before that.. in Java. And then, in C#/.Net.

I actually took some action on the C#/.Net version -- i bought the C# compiler (useless piece of shit, btw. The home version doesn't let you link projects together -- no DLL seperation. What the f is that.) I wrote some code.. i got in touch with the guy at Wheelmud who seemed to be doing something similar, only in VB.Net... he helped me with the incoming socket connection engine.

But then.. i puttered out. I realized that my motives behind doing this was, "to be famous." "To be a big name amongst my peers". That doesn't hold much strength anymore. I was still interested in doing it, but not for those intentions. Plus, I was over-designing. I shelved it.

Yesterday, one of my coworkers pointed me over to TigerMud. I got excited again... On drilling down further, though, I found out that he's not aiming anywhere near where I wanted to go.

So, I'm considering: This is something which I keep saying, "i'd like to do." The reasons I don't do it: "Time." usually. And loneliness... the energy behind mudding was one of working with a bunch of enthusiastic people.. having an audience waiting for the results.

Well, the time one, I can easily lick. I have Thursday evenings open, for like 2 hours. The loneliness one... don't know yet. I would like to find another person who is enthusiastic about the idea. Problem is: there are so many possible ideas. The only one I want to work on is the one in my head -- which is definitely a form of selfishness. So....

Sabby, you readin' this? What you think, buddy? I know you got kid and wife and all kinds of stuff going on...

I guess I should expound a bit on what i want to do.
I want to write an engine that is:

  • Capable of rendering a multi-user MUD-like game

  • Has primitives enough to render NetHack specifically, or NWN, albeit in text mode.
    You are standing on a small hillside. 
    You see an isle floating above you.  A rope descending from the isle lies within reach. 
    Visible exits are: N]orth, S]outh.
       ..N...    R=Rope
    ......R.     s=Sunnywiz

    Except, double each one of those letters to become s1, R1.. two characters per map-spot. Its hard to do layout like that in LJ.

    Commands would initially be like:
    g R (go to the rope)
    a o1 (attack orc1)
    f o1 (fire missile weapon at orc1)
    c fb o1 (cast fireball orc1)
    u xx (use item)

  • Is extensible by your average wizard.. writing source code for rooms, monsters, monster behaviour, etc. Motive: provide a basis for folks to enjoy learning programming, just as LPMuds did for me.
  • Write up a small demo mudlib to go along with this.
  • [concession:] needs a custom client to get the 2d aspects coming in. Ie, server does not do the rendering; tells the client what it can see, and lets the client do the rendering.
  • Technically:
    • Bring up a wizard's objectset inside an AppDomain. Hard object links between objects in their appdomain. Soft links between appdomains.
    • seperate out the layer between the player's object and the GUI. Ie, player's object has a "listener" attached to it; listener is the one that renders the views. Client interacts with listener (listener pushes events to the client). Leaves spot open for people to do more creative graphical clients.
    • basic listener supports telnet interface, although doesn't do much for dynamically updating maps as creatures move. Can generate a map with "look".
    • Use run-time reflection stuff to allow things like "call_other" to happen. (Specifically, i'm thinking, can call object[] Invoke("function", params object args[]), and if anybody wants you to call stuff in them, they write their Invoke accordingly.)

Not part of my focus:

  • Writing the BEST routines for things like object collision detection, yadda yadda. I'll do something that will work, and move on.
  • Fancy graphics Stuff. Leave a framework where somebody can expound, and move on.
  • The part where wizards edit their source code from within the game. For now, i'm going to assume they have ftp access into the box or whatever... the mud can load stuff out of their directories, and would use CAS to lock down any code that runs.
  • persistence model. I do want a persistence model, but that's definitely phase II. I don't want to tie it to SQL, although that would be the way to go -- have a single persistent world in SQL, and multiple host CPU machines to play the game. Thank goodness for interfaces, ya?

So... yeah, that's what's running through my head. I have a whole diagram of the different parts that need to be written, but i'm not going to post it at this time. I'll think about this more on Thursday Night, that's my promise to myself.

I figure if I go at it for 2hrs a week, it would take me probably.... 25, 35 weeks to get a preliminary/usable thing out. I should look through the notes I made the last time I got this bug.. i think its on the YacYac forums.

Oh, there went my energy. Back to sleep.


Log in