Dead Souls Admin FAQ
Written by Cratylus @ Dead Souls, October 2005
Updated May 2009
Note: commands are displayed in boldface, like this: ls -a
What's this FAQ about?
The point of this document is to orient a new admin in
Dead Souls 2. Starting a MUD with a lib that is completely new to
you can be confusing and discouraging. Hopefully this FAQ will
make the experience less difficult.
0 How do I start?
1 Is there a MUD somewhere running Dead Souls I can log
2 I like Dead Souls and I want to use it, but I don't want
to run a mud.
3 I want to invite my friends to help me code. How do I
them to creator status?
4 What about intermud? How do I talk on that?
5 I talk on intermud but nobody replies. What's up with
6 How did you know my mud started up?
7 I heard there's an I3 router included in Dead Souls.
8 What's this about a manual on Frontiers?
9 How do I add limbs to a race?
10 How do I add a race?
11 How do I make my friend an admin?
12 I don't like how the who command output looks! You
should change it.
13 Can you please make the FAQ easier to read? It's too
long and complicated.
14 Most of the file headers have only Descartes's name on
Did you really develop this lib or did he?
15 How can I change the colors of the channel messages?
16 How do I know what other muds use Dead Souls?
17 I was hanging out in the Arch room and the loudspeaker
went off. WTF?
18 I want to test the intermud channel but I don't want
to spam the ds line.
19 What's this "Network room"?
20 The web server and FTP server don't work
21 I tried to log in to the FTP server but I can't!
22 I can't do anything with FTP. It just hangs there.
23 The web server gives me a 404 but I know the directory
24 I'm using an external FTP server, but the files I
become read only!
25 I moved a command from one directory to another. How
get the new location recognized?
26 The mudtime is all wrong!
27 The time of day is all wrong!
28 What happened to the roommaker and thingmaker?
29 I keep getting 'Connection to address server
(localhost 9999) refused.'
30 Can I charge players a fee for playing on my mud?
31 Can people donate money to me for the mud?
32 I found a bug. For real. Can you please fix it?
33 Where would I edit to change how long someone can be
before they get disconnected?
34 How do I permit all users who log in to become
35 How do I limit the use of intermud channels?
36 How do I get off intermud completely?
37 How do I change the start room for the mud?
38 I don't like having newbies get special treatment.
39 I don't want players to be able to pick non-human
40 I want everyone to speak the same language.
41 I made a change to /lib/player.c and updated it, but
seeing a difference in my character.
42 How do I change the items new players receive?
43 Hey, there's no <foo> class! What's up with that?
44 Where can I get a Dead Souls mud hosted?
45 Your LIB_MXLPLX system is all screwy. I changed it and
works. Wanna see?
46 How are files organized in Dead Souls?
47 What are sefuns and efuns?
48 Whew! Ok now I know where stuff is. What's next?
49 Oh, man, you're kidding! Those are, like, books! Can't
just start making stuff?
50 Everything is su-u-u-u-p-e-e-r-r-r s-s-l-o-o-o-o-w-w-w
51 Dude! One of my creators just kicked me off my own mud!
52 Is Dead Souls secure?
53 I sent you my code a week ago. Is it in or out?
54 Did you finish the bfd() sefun modification I asked
you for last night?
55 QUEEG_D is a horrendous mess. It's inefficient and
56 You implemented my code but didn't give me credit.
57 Intermud mail doesn't work
58 The admintool menus let you pick options that aren't
59 What does locking the mud do, exactly?
60 The race help output is inadequate for role-playing.
How do I change it?
61 I need to know what features to expect in the next
I don't waste time duplicating effort
62 You need a development roadmap and task tracking
63 How do I update a sefun without rebooting the mud?
64 My new sefun updates but I can't seem to use it.
65 What's the point of the apostrophe-stripping for args
66 How does one achieve 'high mortal' or 'ambassador'
67 I would like XYZ and PDQ to happen every time the mud
68 I can't login! I keep getting: "It seems some work is
right now, try later."
69 I had a really great idea that revolutionizes ds and
to include it. I am forking ds development and making my
dream come true.
70 What do the version numbers mean?
71 The Dead Souls router is down.
72 I'm going to totally revamp <insert highly complex
Will that be difficult?
73 I've hired an area coder to make a new domain. I want
to be able to use QCS in /domains/MistyDragonShireMysts.
74 How does player voting work?
75 What are "estates"?
76 What are "events"?
77 Where does user monitor data go?
78 How would you set a race to be selectable by new
79 Where is emote data kept?
80 What are .h and .o files? Where are they kept?
81 But my friend forgot his password! I *have* to edit
82 How do I change my mud's name?
83 Help! I locked myself out!
84 What are the privileges associated with the groups in
85 Why does the documentation refer to LIB_ARMOUR and
86 Where are read/write restrictions kept?
87 I need to test day/night descriptions, but I can't
wait around all day.
88 How can I change the default prompt? Can I make it
89 What is "unguarded"?
90 Is intermud communication secure?
91 What are some do's and don'ts?
92 Is DS2 in any way suited to create a non-english
mud from/with it?
93 I keep losing my intermud connection, and sometimes I'm half
heard I can run my old TMI-2/Nightmare 3/Skylib/Lima code on Dead
Souls. Is that true?
Why is the version of Dead Souls 2 on Sourceforge different from the
one on dead-souls.net?
96 Good heavens! All I wanted to do was change combat,
and it is so complicated!
97 Editing in Windows is fine and call_out()'s are great.
Your advice sucks!
98 I keep hearing that Dead Souls can do this or that,
but I'm trying and can't.
99 You appear to have a FAQ for everything!
100 If I XYZ, will that work?
102 Hey you skipped question 101!
are not taking my bug report very seriously.
104 Dude. Just answer
my question. It's just one question, ffs.
105 Is it possible to upgrade to alpha without killing
everything I've done?
106 How do I start an area?
107 I don't want to use a cookie-cutter codebase
108 How do I make my new area the default domain where
new people to arrive?
109 I heard passive mode on the FTP server works now.
110 I boot the mud but nothing happens...the startup
come up but nothing preloads and I get no error messages. What's
111 How do I add a default alias?
112 How do reset() and clean_up() work?
113 When do reset() and clean_up() happen?
114 I want a 100% PK mud. Setting rooms PK one by one is
115 How do I make
a new skill?
was Descartes so lame?
mud is locked whats the command to add someone to the allow list?
118 Shouldn't you
change all the documentation to reflect the move to FluffOS?
119 How do I change my timezone?
120 So I herd u liek mudkip
121 Where is all
the player information stored?
addrace command complains that the race already exists.
about the player/creator distinction.
do I prevent people from using channels?
125 How do i disable the rss bot, or other channels?
126 I made a verb but it doesn't work.
127 Does Dead Souls support databases like MYSQL?
128 How do I make my new currency work?
129 My friends can't connect to my mud, but I can!
130 My efun override is not working
131 How do I remove the QCS?
132 I heard you can edit stuff from the interwebs?
133 I want to let people build but I don't want them to
be full creators
134 How do I enable IMC2? What is it?
135 Combat is too slow!
136 I want players to select their class when they create
I am strongly opposed to the use of intermud
I hate one of the sample domains and I want it GONE
139 How do I make help files?
140 How many players will DS handle simultaneously?
141 I heard that Dead Souls for Windows has limitations
142 What are the CPU/RAM/diskspace requirements for Dead
143 Who's awesome?
144 I heard you added vi to DS!
145 What is MSSP?
The first thing to do is follow the installation
to get Dead Souls installed. Then log in, and start reading
the administrator's guide, by typing these commands:
read index in guide
read chapter 1 in guide
read chapter 2 in guide
You should also become familiar with the Creator FAQ, in
section on getting questions answered.
Is there a MUD
somewhere running Dead Souls I can log into?
As a convenience to the curious, I have set up a "demo" mud
at dead-souls.net, port 8000. To connect, either click on
this link with your
open a terminal window
(or for windows users, Start -> Run ) and
type: telnet dead-souls.net 8000 , or use
at this page: http://dead-souls.net/javaclient/demo.html
log in, you'll automatically be made a "creator"
so that you can examine code, try out the QCS, etc.
that in the regular, non-demo version of the
mud, people are
NOT automatically granted those privileges.
On the regular non-demo version of the mud, Only
the admin (basically, the first person to log on to the new mud)
gets automatic creatorship by default.
After logging in, you will be transported
to your workroom. Some useful commands:
look at me
look at chest
look in chest
get tricorder from chest
read index in handbook
read chapter 1 in handbook
create new npc generic
look at board
read 1 on board
I like Dead
Souls and I want to use it, but I don't want to run a mud.
Being a mud admin is very different from being just a coder
or builder, and many people just don't feel like dealing with
the hassle of running a mud.
There are a few Dead Souls muds out there that could
use help from you. Telnet to the Dead Souls development mud
and type: mudlist -m Dead to
see a list of Dead Souls muds
that might be hiring.
You can also just code on the Dead Souls development
mud. You're welcome to create as you please, and if your
building gets to the point where you'd like it included in
the lib, let me know and I'll inspect it for approval.
Please note that starting January 2007, for any of your code to become
part of the official Dead Souls distribution, you must officially
disclaim copyright to it, placing it into public domain.
I want to
invite my friends to help me code. How do I
them to creator status?
To demote them:
intermud? How do I talk on that?
The intermud3 (or i3)
network is available
to you, and you are probably already connected to it. Type
mudlist to see a list of other
muds on the network.
By default, the "Dead Souls intermud channel" is
enabled for creators. Type: ds hello
and other Dead Souls muds on the i3 network will see
your message like this:
You@YourMud <ds> hello
Please note that intercre is where you ask coding
and technical questions only. Random chatting is not
tolerated on that channel. Newbie questions that are
Dead Souls specific or that obviously have answers in
Dead Souls documentation may meet a hostile reception on
Conversely, dchat is mostly chat.
Note: If you decide to add the intergossip
yourself or your creators, be
aware that conversations
there tend often not to be
PG-rated. You can
also find yourself baited into a
nasty flaming if
you're not careful. I protect
newbies as I can, but
it helps if you can prevent
yourself from being baited.
Really I'd suggest you avoid the
The ds channel is for Dead Souls-related conversation. Sometimes
the topic drifts, but "random chat" should be avoided
there. Use dchat for off-topic chat.
For information on IMC2, a different intermud network,
I talk on
intermud but nobody replies. What's up with that?
If you haven't changed your MUD's name from the
stock default (ie if your mud name is DeadSoulsWin
or DeadSoulsNew) then your mud may be conflicting with
someone else's new mud that is already connected to
intermud. Change your mud's name and see if this
Another possible cause is network problems.
I3 uses a hub topology. All muds communicating on intermud
connect to the router to do so. If that router is down all
i3 communication stops, until it comes back up. To check
network status, ping Frontiers or Dead Souls. If the
ping command gets no answer, i3 is probably down, or
your connection to it has been interrupted. Your mud will
be aware of this and retry to connect to i3 every
fifteen minutes or so.
There's also the possibility that nobody who wants to
chat is listening.
It's also possible that the Dead Souls I3 router has
changed address or port. Visit this page to get the
latest connection info:
LPMuds.net I3 Router Page
Under some unusual circumstances, the router might
be misbehaving. If that happens, post a question on
the lpmuds intermud topic: http://lpmuds.net/forum/
Please make sure you post on the Intermud topic.
It may also be that you have been earmuffed by
other people, because you've annoyed them. You
can avoid this by becoming familiar with the
proper way to find answers.
How did you
know my mud started up?
Muds on intermud receive notification of a new mud
joining. Not everyone pays attention to this, but
a few people do.
Your mud also does periodic "pinging" as a form
I heard there's
an I3 router included in Dead Souls.
Yes. It is undocumented because it's my opinion that
if you don't understand the code, you're in no position
to run the router. The code is in /secure/daemon/i3router .
about a manual on Frontiers?
In your workroom is a chest. Open the
chest and the Dead Souls Creators Manual is
inside. The text files are in /doc/manual .
How do I add
limbs to a race?
Edit /secure/cfg/races/<race> and make the changes
you want. Then use removerace
to remove the race from the
races daemon, then add re-add the race with addrace . For
How do I add a
Copy a race in /secure/cfg/races/
and edit it.
cp /secure/cfg/races/bear /secure/cfg/races/wampa
Edit the wampa file to reflect what you think a
wampa is like. If you want new players to be able
to select wampa as their race, make sure the file
has this line in it:
Make especially sure to change the
lines RACE and
LANGUAGE. When you're done
NOTE: It is possible to remove all races. However, please
read the following discussion to get an idea of the issues
<dead_souls> Hey, if the removeraces command will screw up
something, will removing the races manually from admintool have the
Souls Demo <dead_souls> ok let's take this one step at a time
Souls Demo <dead_souls> removeraces will erase the list of races
held in the races daemon
Souls Demo <dead_souls> what this means is that when you try to
clone a bear, you will get a big pukey error message
Souls Demo <dead_souls> because bears aren't a race any more, so
the npc you try to clone will error out
Souls Demo <dead_souls> i consider that "broken" behavior,
because i dont like it
Souls Demo <dead_souls> but you'll only see it if you try to load
npc's, aka mobs
removing all races will also hose up your players]
Ohm@ashdev <dead_souls> what if I want to get rid of all those
races, and all of those mobs?
Souls Demo <dead_souls> right
Souls Demo <dead_souls> before i answer your question
Souls Demo <dead_souls> do you plan to have dogs n cats n deer n
<dead_souls> No. I'm want to completely write all my mobs from
scratch, because they're based on a very specific virtual world.
Souls Demo <dead_souls> ok
Souls Demo <dead_souls> what you want to do is not complicated
Souls Demo <dead_souls> so i hope yer not getting that vibe
Souls Demo <dead_souls> the reason i'm cautioning you against it
Souls Demo <dead_souls> that removing all races basically makes
lots of rooms not work anymore, because they contain npc's that
requireraces to exist
[2006.11.20-18.14] Syphon@WorldWideResistance <dead_souls> eep,
That's a bit of editing
Souls Demo <dead_souls> and disabling sample areas isn't
something i recommend to someone who's starting out
<dead_souls> right, that's what I'm trying to figure out. How can
I get rid of the mobs, and other spots that require them so it will run
[2006.11.20-18.15] Syphon@WorldWideResistance <dead_souls> Can't
he just dest npc in all the rooms ?
Souls Demo <dead_souls> ok
<dead_souls> I'm newish to ds, but I've worked with plenty of
other muds, and I figured I can reference to the backups if I need help.
[2006.11.20-18.15] Syphon@WorldWideResistance <dead_souls> How
many rooms are there
Souls Demo <dead_souls> desting an npc doesnt permanently remove
it from the room
[2006.11.20-18.15] Syphon@WorldWideResistance <dead_souls> ah
Souls Demo <dead_souls> to permanently remove an npc
Souls Demo <dead_souls> walk into the room it's in
Souls Demo <dead_souls> and then: delete <npc>
[2006.11.20-18.16] Syphon@WorldWideResistance <dead_souls> nod
Souls Demo <dead_souls> where <npc> is the name of the npc
[2006.11.20-18.16] <dead_souls> Zeus@Ancient Rome deletes
Cratylus...wait that won't work :P
[2006.11.20-18.16] <dead_souls> Zeus@Ancient Rome watches the
delete backfire and melts into a pile of goo
<dead_souls> yea, but that's not exactly practical in my
situation... I want to get rid of ALL npcs in ALL rooms.
Souls Demo <dead_souls> ok
<dead_souls> wait, this doesn't make sense... the only npc I see
in the source files is fighter.c
Souls Demo <dead_souls> here's what i think then
Souls Demo <dead_souls> if the sampel areas are incompatible with
your vision, then just don't use them
Souls Demo <dead_souls> not trying to be difficult, but if it's a
lot of trouble to back-port to them, you're probably better off
concentrating on your original areas
<dead_souls> when you first load the server, what areas are
loaded, and from where?
Souls Demo <dead_souls> the mud expects /domains/default to exist
for some stuff like the default death room and such
Souls Demo <dead_souls> but by editing /secure/include/rooms.h
you can just substitute your own rooms for these system functions
<dead_souls> Ohhhhhhhhh! Okay. I see now.
[2006.11.20-18.22] Kriton@Dead Souls Arena <dead_souls>
send_messages needs a man page :P
<dead_souls> So you're saying the npcs listed in
domains/default/npc/ are required because rooms listed in rooms.h try
and load some of those npcs.
Souls Demo <dead_souls> not quite
Souls Demo <dead_souls> hang on crazy 2 yr old
Souls Demo <dead_souls> ok
Souls Demo <dead_souls> in /secure/include/rooms.h you can see
that special rooms are specified
Souls Demo <dead_souls> the start room, the death room, etc
Souls Demo <dead_souls> the mud needs these to exist, or your
users will be helpless
Souls Demo <dead_souls> ok
Souls Demo <dead_souls> my point is, you dont need to use the
ones that are there
Souls Demo <dead_souls> make your own, and then put the filenames
in the rooms.h file
Souls Demo <dead_souls> nobody who plays your mud ever needs to
see a single stock room
Souls Demo <dead_souls> they can just exist like an appendix,
Souls Demo <dead_souls> eventually, once they have no usefulness,
Souls Demo <dead_souls> but for now, i think they *are* useful to
Souls Demo <dead_souls> as examples
Souls Demo <dead_souls> which is why i caution you against just
deleting lots of stuff before you get the hang of how i all works
<dead_souls> ok, that makes sense
<dead_souls> I really just needed to know what I had to do to
remove all stock rooms from player view
How do I make
my friend an admin?
To make a creator named Xyzzy an assistant admin, type:
groupmod -a ASSIST xyzzy
Xyzzy then needs to log out and log back in. To
make her a full admin, you'd add her to the
SECURE group instead.
See this faq entry
for the difference between ASSIST and SECURE.
I don't like
how the who command output looks! You should change it.
Believe it or not, I actually get requests like this. I also
get stuff like "the inventory list should be chronological in
order of acquisition." Maybe that's a good idea, but it's
your mud, not mine. Make it so for yourself.
If there is something broken about the lib itself, such as
an insta-death bug or a command that crashes the mud, I am
happy and eager to hear about it, so I can implement the fix
in the next lib release. If a normal action causes a runtime
error or abnormal behavior, I need to know that. Also typoes, null
error messages, etc...in short, tell me what's broken.
However, if the problem you're having is that the lib,
by design, behaves in a way not to your liking, this isn't something
I'm likely to "fix" for you. For example, if you want a "who"
command with a cooler look, that's up to you to make. You're
the one coding a mud, so you need to take it upon yourself to
understand the code and modify it to suit your tastes.
Similarly, "orcs are too strong!" or "advancing levels
should increase your eyesight" are issues you need to deal
with on your own, using the coding skills learned from reading the
Can you please
make the FAQ easier to read? It's too long and complicated.
Most of the
file headers have only Descartes's name on them. Did
develop this lib or did he?
Both. The lib he released in the late 90's was his, and so almost
every file on it had his name. I've been working on it since, but
I am very lazy about headers. I work on lots of files at the
same time, and authorship attribution tends to rank very low
on my priority list. Therefore, even though a great majority
of the files in the lib have been either heavily modified or
created by me, my name is on very few.
I haven't bothered to go back and revise headers either,
because, honestly, what a pain in the butt that would be. I'm
satisfied knowing there's little doubt who has made the many
changes on the lib.
How can I
change the colors of the channel messages?
The colors are specified in /secure/daemon/chat.c
You will need to replace the color specification in more
than one spot in that file.
How do I know
what other muds use Dead Souls?
mudlist -m Dead
See the creator's
FAQ for more intermud command info.
I was hanging
out in the Arch room and the loudspeaker went off. WTF?
Your mud receives all sorts of network requests from the
intermud network, such are remote who (asking who is logged on),
remote finger (info on users), locate (trying to find a user
somewhere on i3), etc. Whenever your mud receives such a request,
it used to be announced in the Arch room. If that is still happening,
you are probably not running a current version of the lib.
The current behavior is that network messages are
announced in the network room (below the arch room) and router
messages are announced in the router room (south of the
Note that these messages are normal.
I want to test
the intermud channel but I don't want to spam the ds line.
Type: ds_test test
The ds_test channel is specifically for communication
testing so that ds can remain spam free.
There is a room below the Arch room called the network room.
It is intended to facilitate troubleshooting of network
and intermud problems. Unless you're intimately familiar
with Dead Souls network code, I suggest avoiding this
room, as it is very messy and very noisy.
The web server
and FTP server don't work
To enable them use the commands:
mudconfig inet enable
mudconfig http enable
mudconfig ftp enable
These servers do not use the standard ports. The internet standard
http port is 80 and for ftp it is 21. Your mud ftp and web servers
do not use these.
Instead, the network port for your web server is 5 less
than your mud's port, and the ftp port is 1 less.
This means that if your mud is reached by telnetting
to port 6666, your ftp
server will be at 6665 and
your web server
will be at 6661.
Please note that the web and ftp server are not supported. They work,
but whatever security risk they pose is entirely on you.
I tried to log
in to the FTP server but I can't!
Make sure you use your mud name and mud password, not the
username and password of the computer you are on.
I can't do
anything with FTP. It just hangs there.
FTP is a funny sort of protocol. If you don't have a direct
connection to an FTP server (for example, you are behind a
firewall), you have to use PASV (or passive) mode. The
default Dead Souls FTP server does not support passive
transfers, but an alternate included server does.
See this link for more information.
The web server
gives me a 404 but I know the directory is there.
Like the FTP server, the web server is a very simple program.
It does not do directory listings by default. To enable
directory listings, type:
mudconfig dirlist enable
mudconfig http disable
mudconfig http enable
Let me make this point one final, excruciatingly clear time:
If you need a
webserver, use apache. The mud www server is available
as a convenience, not as a production-quality standards-compliant
I'm using an
external FTP server, but the files I transfer
become read only!
to make sure that the FTP server you use
runs as the same user as the mud driver does, otherwise
you'll have permissions conflicts.
I moved a
command from one directory to another. How do I get the new location
First, run update on the command in question.
If it's not a verb: update
If it's a verb: update /daemon/verbs
The mudtime is
The mudtime command tells you
what time it is in the game, not what time
it is in the real world. This mud time, or game time, passes much more
quickly than normal, real-world time, so you may see a few sunrises and
sunsets in the game while playing. Hopefully you are sufficiently
well-adjusted that this will not occur in real life.
The time of day
is all wrong!
If you used admintool to
change your timezone and the time of day is still
wrong, you may be using an OS with timekeeping that Dead Souls doesn't
understand. You may be using a UNIX operating system that is set for
GMT offsets, rather than local time.
Check your LOCAL_TIME setting in /secure/include/config.h .
If it is 0, see if setting it to one changes things:
mudconfig localtime yes
If not, figure out how many hours off you are, and
set that value. For example:
mudconfig extraoffset -5
to the roommaker and thingmaker?
They produced code that was often incompatible with QCS. They are no
I keep getting
'Connection to address server (localhost 9999) refused.'
This is a harmless error. Dead Souls uses a program called addr_server
try to resolve hostnames. However, hostname resolution is not important
to running the mud, so it's not automatically configured. If you run
addr_server with a specific port as an argument, and edit mudos.cfg to
point to that port for the addr_server, then reboot the mud, then you
will probably have hostname resolution in your mud.
However, not all OS'es handle name resolution the same, so this may not
work, even if you do everything exactly right. Either way, it doesn't
affect the mud.
Can I charge
players a fee for playing on my mud?
Dead Souls uses MudOS, and MudOS has a license that specifically
and strictly forbids its use in a commercial way. I don't care how
you use the lib, but if you use it with MudOS, you need to comply
with MudOS licensing. If you were to port Dead Souls to some other
driver that allows commercial use, then you'd be all set.
donate money to me for the mud?
So long as there is no quid-pro-quo, or anything
about the transaction that is legally regarded as "commercial",
receiving money from people for the purpose of running the
mud is ok. However, I am not a lawyer, so read the MudOS
You should not try to bend the rules. For
example, public television channels often give trinkets to
donors as a token of their appreciation. If someone donates
money to you for your mud and they get a "thank you gift",
this is a quid-pro-quo, or "something for something", and
it's not right.
This is a MudOS thing, not a Dead Souls thing.
If you can't abide by MudOS licensing, just port Dead
Souls to some driver that lets you do commercial stuff.
Then please tell me how you did it, so I can pass on the
leetness to others.
I found a bug.
For real. Can you please fix it?
Email me: <put my name here>@comcast.net
Please include a detailed description of the bug, and the exact
error text and commands that produced it. A log file or
screencap would be helpful.
Make sure you have read this:
Where would I
edit to change how long someone can be idle before they get
mudconfig maxidle 14400
To make players get logged off after four hours. Setting the
number to 0 makes it so there is no idling timeout enforced.
Note that logged-in players need to log off and log back on for
this change to take effect.
How do I permit
all users who log in to become creators automatically?
mudconfig autowiz on
How do I limit
the use of intermud channels?
mudconfig intermud restrict
Then to let joebob use intermud:
groupmod -a intermud joebob
groupmod -r intermud jimbob
How do I get
off intermud completely?
mudconfig intermud disable
How do I change
the start room for the mud?
I don't like
having newbies get special treatment.
mudconfig newbielevel 0
I don't want
players to be able to pick non-human races.
mudconfig justhumans 1
Note that this will not affect players who are
I want everyone
to speak the same language.
mudconfig justenglish 1
Note that this may not affect players who already
are not native English speakers. To change them,
I made a change
to /lib/player.c and updated it, but I'm
a difference in my character.
If an object (you) is loaded into memory, it contains
the features and functions of its file and inherited files
at the time it was loaded.
Changing those files and updating them doesn't do
anything to an object that is already loaded using the
In a case like this, what you want to do is
recursively update the file of the object in question,
then reload the object.
Let's say you modified /lib/npc.c so that
npc's sit down by default. Say you want the fighter in
your test room to possess this new functionality.
If you type: reload -r fighter
then the fighter's file is recursively updated,
the current version of the fighter is whisked away, and
a new version of the fighter is created, incorporating
the new auto-sit feature.
If the change in question is to lib/player.c
or some other file inherited by you, you would
update -r /lib/creator
But you are still using that same old body as
before, so you'll need to quit and log back in to
get a new body using the new code.
Note that disconnecting and logging back in is not enough.
You have to actually quit, so your old player object
is completely destroyed.
could just refresh your own code
without quitting with the command:
How do I change
the items new players receive?
Look in /lib/player.c for the function that gives
new players jeans and a t-shirt. Modify this
function to suit you. Make absolutely sure that
the objects you put there actually clone
Remember to bk /lib/player
before editing this file,
because if you screw it, then log off without
restoring a working copy, you will be sad.
Hey, there's no
<foo> class! What's up with that?
True, there is no samurai class, and in fact, as of
this writing there is no cleric, acrobat, frombotzer,
The reason for this is that the Dead Souls
mudlib distribution isn't intended to be 100% ready for
players to show up and start doing quests.
What quests there are, what races, classes,
areas, objects, rooms, and NPC's you find in the
distribution are examples. If you open your mud
to players and what you've got is the Orcslayer and
newbie mansion quests, you might as well just close down.
In fact, please do.
Dead Souls is a starting point for a mud.
I have no way of knowing if you're going to have
mermen in an aquatic-theme mud. I have no clue
whether your space aliens will have 8 tentacles or
16 (they like base2, dontcha know).
So, no, there's no <foo>, because the
responsibility for making the mud in your creative
vision is yours, not mine. My job is to give you
a lib with enough working examples and enough
documentation so that you can code your own
basketweaving bugblatter beasts.
Where can I get
a Dead Souls mud hosted?
That's a heck of a good question. There are many mud hosting services
out there. A good host will have a high level of service, shell
and file transfer access, etc, for which you obviously will need
to pay money.
Lately I've heard rave reviews for Alternate
people with good judgment. If I weren't already happy with
my arrangements I'd probably give them a day in court. They're
supposedly inexpensive and have very good service and support.
that the free mud hosting at ISUnlimited is
There used to be another free mud hosting service I
was aware of, and that's FrostMud.
was basically a guy and a Linux
server with room on it for muds. However, there's some sort
of problem he has and it's going away.
Update: He wrote me an email
saying he's back, so perhaps you
can still use his service.
There's no such thing as a free lunch. If you want
a reliably solid, well supported, feature-rich platform for your
mud, quit being a cheapskate and cough up the $9/mo. That's
like, what, three espressos a month. Nobody is too hard up to
host commercially, unless you're on the street.
I've heard good things about the commercial service
from Arthmoor and Genesis.
Wolfpaw also is an excellent
commercial host: stable and reliable.
One of my test muds is hosted there, and this is the uptime report,
as of 25 December 2006:
Dead Souls Arena has been up for 11w
6d 7h 28m 34s.
However, Wolfpaw has become rather tired of dealing with
newbie mud admins, so unless you're a hardcore do-it-yourselfer
who just needs a big data pipe and nothing else, you may be
better off with other hosting.
If you have a DSL or cable modem, and your computer is
up all the time, you can just use that, too. Your IP may be
dynamic, making it tough for people to find you, but there are
dynamic-dns services out there that help keep your ip
tied to a specific name.
Generally speaking you'll be better off with a VPS
"mud host", if you have any system admin skills. A VPS
tends to have vastly more bang-for-buck than a mud host,
with the drawback of requiring you to have some idea
what you're doing as a system admin. I've had excellent
results using Linode.
system is all screwy. I changed it and it works. Wanna see?
Hell yes. I'm not just in this for my health. I want
more people coding in LPC so I can look at the fresh ideas and
new perspectives of other people (read: swipe code).
Send me an invitation to your mud by email or <ds>. I'd
love to look at your work.
If it is code you are willing to donate to Dead Souls, I
will gladly accept its submission, also by email. There's no
guarantee it will make it into any future release, but it just might.
Please be aware that by doing so, you signal you claim no
copyright to the code (you must make it Public Domain), allowing me to
publish it and preventing you from ever revoking my right to distribute
You also represent that no third party has copyright to
the code, and hold me harmless in any subsequent
dispute between you and any other third party.
If you want to email me code but wish to retain
copyright, please state so clearly in the body of your email. I
will honor that request (and it's the law
so I don't really
have a choice). Just be aware I will not put code into Dead
Souls that anyone other than me has copyright to. I can't
afford the risk of someone deciding I can't distribute
code that DS may eventually rely on.
don't want to hear from anyone about my
use of legal terms of art. I know damn well it's more complicated
than I make it sound. My phrasing is sufficient to make
the legal practical transaction of ideas possible here.
The point I'm making should be clear. If it isn't,
please consult applicable laws, etc.
How are files
organized in Dead Souls?
cd / and ls to view the top level directory.
list may be largely meaningless to you, so let's review it here:
General configuration files for timezone and such.
Main location of commands that don't require special access
privileges. Commands are different from verbs in that they tend
not to manipulate your environment, but rather deal with
the player's relationship to the system and/or files.
Daemons are files that provide access to data files in an
organized way. For example, adding an occupational class
(like, say, assassin) to the game needs to be done in a
precise way in order for it not to break things. By sending
the data to the daemon first, you can be sure that the
new system configuration is entered properly. Daemons also
provide a means to access data, like "how much is silver
worth compared to gold", that is uniform across the mud, and
prevents accidental overwrites of data files by multiple
This is where MUD game areas go when they are complete
and ready for general play by the public. Once here, only
admins have write access to the files.
Where player-owned objects, rooms, logs, etc. are kept.
The base for the MUD ftpd. Using the ftpd is probably dangerous
in terms of your system security, and I discourage it, but if
you are determined to have mud ftp access for your creators,
this is one way. See /secure/lib/net for the actual server. It
may or may not work. I won't support it.
Include files provide a set of constants for your files. For
example, if you include <damage_types.h>, you can specify in
the code for your chainmail that it protects against
the damage type "BLADE" at a certain level.
This is the heart of the Dead Souls lib. This is the location
of the files that your objects, be they swords, shoes, or
handguns, will use as their configuration base.
Announcements are made here. For example, in /news/creator
you can post a notice that you have added a teleportation
spell, and when your creators log on, they will see the message.
Contains some important templates, especially some for the QCS.
Legacy directory. Kept for compatibility. Historically this
directory has served as a place where creators can put code
for others to freely modify.
This is where creator home directories are.
Files that describe properties of the MUD's systems live
here. The number of limbs that a bat has, for example,
is in races.o. In classes.o you'll find the skill ranges
for fighters. Do not edit these files. They must be
modified by daemons only, or you risk corrupting them.
This directory will be described in a separate section below.
Shadows are a controversial feature of LPC. This directory
is designed for shadow objects, but they should be very
rarely, if ever used. Basically shadow objects are objects
that attach themselves to another object, intercepting
function calls. For obvious reasons this is a security
risk, so unless you really really
know what you're doing,
avoid them. Shadows not in this directory will not load.
Pretty self explanatory. The spells daemon looks for spells here.
Spells not in this directory will not be available.
Provided for backward-compatibility with older lib
files. Not needed if you aren't porting from an older
or different lib (such as TMI-2 or LPUniversity).
A directory anyone can write to. Generally for swapping
data between objects, systems, or people. Note: files
here can't be loaded into memory with the update command,
for security reasons. If you need to put something in
a world-writable place but need it to be loadable, use
A controversial topic. Verbs are a kind of command. For
example, go and sit and open are verbs. Specifically, verbs
are commands that interact with the user's environment. The
idea is that throw my first red rock
at the green goblin
should work, and should work the same everywhere on the
MUD. Verbs are a source of debate among some people, because
to folks accustomed to add_action commands, verbs seem
excessively complex. Verbs not in this directory will
Like the ftp directory, but for the MUD webserver.
Ok now let's take a quick look at the /secure directory: ls /secure
As you can see, /secure seems to have many of the same directories
that the root filesystem has.
The reason a /secure directory is needed is that
there are files that should not be readable by everyone, and
there are files that must be writable only by a few. The MUD security
system uses the /secure directory as a means to control access to
For example, the average creator has no business
accessing the player data files of other creators or players. Therefore
/secure/save/creators and /secure/save/players is offlimits to them.
A directory without a counterpart in / is /secure/sefun. This
is where simulated external functions reside.
What are sefuns
let me explain that the driver has built-in
functions that are available to the mud. For example,
type eval return
find_player("cratylus") , but replace my name
with yours. Your player object pointer will be found and returned
to you (more or less. strictly speaking it's more complicated).
The driver provides this function. Because it is "external"
to the mudlib, that is, it's in the driver and not the lib,
it is called an external function, or more commonly, "efun". The
idea is that certain actions you ask the mud to perform are
so common that they are made available MUD-wide.
Efuns are ridiculously useful and powerful, and because
they are in the driver as compiled code, very fast. A near-complete
set of efun documentation is available in /doc/efun.
However, the driver does not contain every possible
MUD-wide function you might want. For example, there is a
tell_object() efun, which lets you send a message to an object
such as a player. The syntax is something like this:
Which doesn't look like much, but believe me, this
kind of stuff adds up. I wanted to make this simpler, so I
used what is called a sefun, or a simulated efun. It is
a function that is available lib-wide, but it isn't in
the driver. Instead it is provided by the lib itself (the
master daemon, specifically). By adding the appropriate code
in /secure/sefun/ I have now made available a tell_player() sefun,
which works like this:
This simplification of code will become more obviously
useful to you as you get more coding under your belt. Most
sefuns are documented in /doc/sefun.
Whew! Ok now I
know where stuff is. What's next?
You probably want to examine how objects are written.
Type goto /domains/town/room/road
and wander around town
a bit. If you want to see the code for something, for example,
the beggar, about beggar
should do it, provided the beggar is
in the room.
To see the filenames of the objects around you,
type scan here, or scan me to scan your own inventory.
If you've never coded before, this is the hard part.
To understand what you're looking at when you run commands like
you need to get comfortable
The brute force way of doing this is copying stuff
and then changing the descriptions, thus making new stuff.
This will work, but you'll waste time looking for examples of
exactly what you want to do...and you may not find them.
Instead, learning LPC will let you create whatever
you want, without relying on templates.
This means that now you must read the Creator's Manual. As
admin, your creators will expect you to know what's in there.
On your person or in the chest in your
the Creators Manual. Read both the Players Handbook and
the Creators Manual from cover to cover.
It's also important to read the Administrator's Guide.
Oh, man, you're
kidding! Those are, like, books! Can't I
Well...ok. But you need to go through the docs
soon, ok? In the meantime, read the QCS chapters in the
Creators Manual to get you quick-started in the creation
process. Remember you need to be holding your Creator
Staff in order to access the QCS commands.
Start with chapter
31, like this:
read chapter 31 in my manual
First, make sure you are using the latest available version of
Dead Souls (check here). Older
versions of Dead Souls
are known to have nasty memory leaks.
Next, see if you have runaway objects. An object can be coded
to do really unpleasant stuff like replicate itself over and
over until it brings the mud to its knees. Find out how many
objects are loaded by typing: eval
If the count is in the thousands, and only a few people are
logged on, you may have a
runaway. Most often this involves
NPC's doing stuff you didn't expect. Reset all loaded rooms
with the following command (you may need to enter it more
perhaps followed by a:
If the lag clears up, you found the culprit. If not, see if
the callouts list is clogged with the command: callouts
If all else fails, reboot the mud and ask for help on the ds line.
Please note that the rage virus (especially if unleashed
in the menagerie) is notorious for redlining the mud. Having
hundreds of NPC's all engaging in simultaneous combat
while infecting each other with a rapidly spreading hostility
virus can be expected to impact overall performance. So please try
to avoid the rage virus unless you are specifically stress testing
Dude! One of my
creators just kicked me off my own mud!
One of the virtues of LPC is that it is flexible and powerful.
One of the drawbacks of LPC is that it is flexible and powerful.
It is not possible to make an LP mud that is
immune to abuse from creators. You just can't. The MudOS
function set is just too complex and sophisticated to eliminate
every possibility of abuse.
You will therefore *always* be vulnerable to things
like people coding objects that crash the mud on purpose (I
won't detail how that can be done, but anyone with intermediate
LPC skill can do it, and utter newbies can even do it with
a stupid enough mistake), finding a way to dest admins, or
continually updating recursively the /lib filesystem. A
jackass will always find a way to expose you to her jackassery.
This means that you need to know who is coding on your
mud and what they are doing. Your job as an admin is to
immediately deal with coders who pose a discipline problem.
If they fool you once, shame on them. If they fool you
twice..the..they...they shouldn't fool you twice is what I'm
This does not mean that Dead Souls is somehow
impossible to secure. You can easily prevent unauthorized
access to lib data. See the next section for how this works.
What you can't prevent is some dude off the internet
you just met and made a creator from wreaking havoc on your
mud and creating a nuisance of himself. You have to know who
these people are and you have to have a level of trust and
confidence in them, otherwise you need to use the decre
Is Dead Souls
No running Internet software I know of is "secure" in the
sense that you don't need to continually pay attention to it.
Just like any other Internet program you use, Dead Souls
is not an obvious security risk, so long as it is not used carelessly.
And, of course, games of any kind, including Dead Souls, should never
be installed on any mission-critical, national security, public
safety, or health care server.
Dead Souls security involves two separate spheres:
1) The binary executable and the system that runs it.
2) The mudlib and the code that you use and create.
The first sphere is probably most important. Presumably
you plan to run a mud on a computer that does other things too,
and you want to keep those things separate from your mud. The
most important thing to do is to avoid running Dead Souls as a
In the case of Windows, this means that the
program should not be run by Administrator or anyone in the
For unix users, this means that the driver should not run
under uid 0 (root).
The reason for this precaution is that if some genius
hacker manages to exploit some unknown weakness in the program,
it is better that the process they hack doesn't have full admin
privileges to the box.
This caution has little to do with Dead Souls specifically.
It is a warning I'd give to anyone planning to run any kind of network
server. You should take your own security seriously, and
if you do not understand your own security situation, you need to take
a step back and ask yourself if running a mud at all is a good idea.
Sphere 2 is lib security. In older muds, file and directory
privileges were handled by attributes on the files. If a file's
user id (UID) matched a user's UID, then that user had full access
to it. Such systems often had complex systems that evaluated
effective UID (EUID) based on the file's attributes, its parent
directory, the user's ID, possibly group id, etc. This is an
entirely valid security model, but because of its complexity,
it tended to be exploited easily and often. If you don't
stay 100% on top of such a system (just like any OS), there's
no way to be sure you won't rooted.
With stack security, privilege management is much, much
simpler. A file's privilege is based solely on its location. If
a user doesn't have read access to /foo/bar/ then she can't read
or modify /foo/bar/file.c. If someone with privs to that location
copies the file to somewhere else, then the privs of that new location
are in force on the file.
The "stack" part of stack security comes from the mud
evaluating the privileges of all the objects
involved in the
you're unprivileged and you manage to get a
privileged object to make the access request for you, the access
will fail, because you are unprivileged and you are still part
of the function call stack (i.e., the list of instructions that
form a chain between the command and the intended event).
Granular (more detailed) modification of user privileges
can be done by changing files in /secure/cfg to grant
users and groups specific privileges. Also see
the grant command, as well as domainadmin.
Security bugs usually aren't about the security model itself
being weak, but rather careless code (generally from me). If
you find such a bug, please let me know right away so I
can fix it.
I sent you my
code a week ago. Is it in or out?
How long it takes me to review code submissions has nothing
to do with what I think of you, your skills, or your
code. It takes me a long time because Dead Souls isn't
actually my job, and is not a physical member of my
family, so it has to wait its turn sometimes, for my attention.
Sometimes I will get to someone else's code sooner even
though I received yours first. What can I say. Sometimes
I feel like dealing with a particular thing at a particular
Did you finish
the bfd() sefun modification I asked you for last night?
I'm on the ds line a lot, and generally accommodate people's
requests right away if I have time. This makes it seem
sometimes like I can turn orders around in minutes or
hours, like a short-order cook.
This is an illusion. I do this sometimes
for requests that strike my fancy or that are so simple
they are not inconvenient, or maybe because I happen to
be bored at that moment. But my sometimes doing this
doesn't mean folks should expect some sort of prompt
turnaround on special requests.
In general, I am not sitting at my desk waiting
for code orders. I'm doing something else. If I get to
your request right away, then good for you. If I don't,
then I'll get to it when I get to it (if I get to it).
daemon is a horrendous mess. It's inefficient and frankly offensive.
I'm not an especially gifted programmer. In fact, I view
myself rather as a Pakled
from the Star Trek series. I
look for things that make the code go. I look for things
that make the code strong. Sometimes, because I am not
a trained or professional programmer, things are done
in a way that shock the conscience of more sophisticated
If you find such code (and I do hope it is rare),
bringing to my attention that it has been implemented in a
wretched way doesn't help me. I know that. I wrote it. If
you want to help, send me an email with the fixed code.
my code but didn't give me credit.
Whoops. Send me an email telling me where I goofed and I'll fix it.
Yes it does. If you tried to send intermud mail to someone
with Dead Souls and it failed, then one or more of the following is
* You are using a Dead Souls version below 2.4.1.
* The recipient is using a Dead Souls version below 2.4.1.
* The recipient has disabled their OOB service.
* The recipient has disabled their INET service.
* The recipient is firewalled and cannot accept OOB connections.
menus let you pick options that aren't visible
I can't decide whether this is a feature or a bug. I'm
leaning toward "laziness".
locking the mud do, exactly?
When the mud is locked, only members of the authorized
groups are permitted to log in. By default, these
groups are SECURE, ASSIST, ELDER, and TEST. Anyone
who is not a member of these groups, whether they are
a creator or a player, is prevented from logging in.
To lock the mud, use the admintool command, option a.
To add people to groups, use the admintool command, option v.
The race help
output is inadequate for role-playing. How do I change it?
By default, help human will
output various characteristics
of the human race, as known to the race daemon. If you
want instead to provide your own help data on the history and
lore of humans, simply create a file called /doc/help/races/human
and put your information in it. That information will then
be what is displayed when requesting help on that race.
I need to know
what features to expect in the next release so I don't
for information on
the latest releases and what they contain. The topmost
version is usually not yet available for download, and
is listed so that folks know what's coming in the
next release. If this is so the version name will have
"(unreleased)" next to it.
The dsversion command is
allow you to query that site from the mud itself.
You need a
development roadmap and task tracking
No, I don't. If I had developers and teams and
such things, then I'd use all the fancy project
management stuff available on Sourceforge. But
I don't want to manage developers, I want to code.
How do I update
a sefun without rebooting the mud?
To have your new nit_pick() sefun take effect in the
running mud, you might do something like this:
sefun updates but I can't seem to use it.
Make sure the sefun is prototyped in /secure/sefun/sefun.h
If the sefun is in a new file you created, make sure
that /secure/sefun/sefun.c inherits that file.
point of the apostrophe-stripping for args in lib/command.c?
It was cheap workaround for a parser problem. Dead Souls 2.1 and
above no longer implement this, as the driver issue has been
one achieve 'high mortal' or 'ambassador' positions?
Those are legacy positions from DS v1/Nightmare IV/3. They are
basically groups, managed by an arch with admintool, which
can be granted privileges not normally enjoyed by mortals.
In the current implementation of Dead Souls, those
positions are vestigial. You can implement them on your
own mud however you please.
would like XYZ and PDQ to happen every time the mud boots
The most common way to have this happen is to add
your daemon (and typically that's what you'll
want to start at boot) to /secure/cfg/preload.cfg .
This will ensure that it gets loaded
before the mud accepts any connections. It has the
added advantage of being included in the list of daemons
that the mud periodically checks and restarts if they
If it isn't a daemon, but rather some
specific function you want to happen at boot, simply
add the relevant code to /secure/daemon/autoexec.c
I can't login!
I keep getting: "It seems some work is being
now, try later."
This is bad. What this means is that some
files that are needed in order to load your player
object cannot be loaded. It can be any of a very large
number of files, which is the problem. Usually this
happens if you've been, for example, messing around
with player.c, then broke it, and rebooted the mud. Now
since player.c can't be loaded, you're locked out.
It could be any of the files loaded by your
player object, or other daemon files needed by your
login. The only way to narrow down the possible list of
files you corrupted is by examining the output of the
console (the window where you type the command line
to start the mud) and reviewing log/runtime and
log/catch for clues.
Once you've found the culprit, either fix it,
or replace it with the original version from the
Dead Souls distribution package.
I had a really
great idea that revolutionizes ds and you
include it. I am forking ds development and
dream come true.
Ok then, have fun. All I ask is that you give your
project a name that isn't going to confuse people
as to which lib is which. Confusing your user base
isn't a good way to get started on such an enterprise.
Send us a post card once in a while.
What do the
version numbers mean?
2.0r16 means "Major version 2, minor version 0, release number 16".
Releases happen pretty frequently, to add functionality and fix bugs
from the previous release. When the basic functionality of a minor
version is as bug free as reasonably possible, a new minor version
Major version number changes are very rare and represent a
vast difference from the old major version. Versions 1 and 2 of
Dead Souls are so different as to be largely incompatible with each
As of this writing, 2.10 is released as the current stable version.
The Dead Souls
router is down.
Use the switchrouter command to change between
routers. The new default I3 router for Dead Souls muds is called
*i4 . So far it's been dramatically more reliable than
the old intermud.org router, which was known as *gjs.
If the router you are on is down, try using the switchrouter
command to connect to a backup. As of this writing, the *i4
and *wpr routers serve as
mirrors for each other, so
that connecting to one will give you access to the same muds
as those on the other.
For more information on switching between routers, type:
If the *yatmim router goes down for more than a
few minutes, make sure to check the router page
to see if
the IP address or port have changed.
I'm going to
totally revamp <insert highly complex system here>.
This is, surprisingly, a fairly common question.
Basically, the answer is:
"If you have to ask, then the answer is yes."
It's not an impossible task to, say, rewrite
combat to be just like the combat you're used to on LeetFooMud.
It's totally doable, and not *all* that difficult for
an experienced coder.
But if you're new to LPC, you need to concentrate
on getting the basics down before you put that cart in
front of that horse. Let me phrase it like this:
"If there's any part of the Creator's Manual you don't
know and understand, you aren't ready to do lib coding yet."
If you are at 100% grok with the manual, then
please read chapter
of the Admin's Guide to get started
on serious lib work.
I've hired an
area coder to make a new domain. I want her
to be able
to use QCS in /domains/MistyDragonShireMysts
The default behavior of QCS is to try to figure out
what directory makes most sense to write in. It assumes
that it's only going to write into areas you have write
permission to. Since your new coder doesn't have write
access to /domains/MistyDragonShireMysts,
write to the next most logical place: her home area directory.
This is true even if you use the grant
to enhance her access. QCS's authentication mechanism is
entirely separate from the grant/access system, which works
fine for non-QCS editing.
To make your new domain, use the domaincreate command:
To enable your new coder to use QCS in that domain,
use the domainadmin command to
manage the admins of that
domain. A domain may have more than one admin at the same time.
For more information on domainadmin, type:
For more details on where QCS puts things, be sure
to read this
Creator FAQ section.
How does player
The voting system enables players to nominate and
vote for class leaders. A Fighter can nominate and vote for
his Fighter leader, Mages can vote for a Mage leader, etc.
The nomination period usually lasts about a week, then
nomination closes and voting begins. Voting ends when
an arch enters the voting room (it's in Town Hall) and
issues the appropriate command. See the voting room printed
material for instructions.
When the voting is ended, the winner becomes
council member. The high council is composed of
representatives (the leaders) of the classes. What kinds
of authority the council should have is entirely up to
you and your mud. No default powers are enabled, you'll
need to code your own sets of privileges and responsibilities
for your councilors.
Because creators have no business meddling in the
affairs of mortals, they cannot vote, regardless of their
Estates are home directories for "builders", and an area
where player-specific files can be kept.
Some things should happen regularly. Perhaps
log rotation, or backing up some .o files. The events
daemon, or EVENTS_D handles this. To add or remove
events use the add_event() sefun. For example, to add the
log rotation event, I issued this command:
Which said: "Every two hours, call the RotateLogs function in the log
To see what events have been scheduled, type:
To remove an event from the events schedule, find its
next runtime, and use it as an argument to the remove_event() sefun,
The following events are pending:
1145159511 RotateLogs Sun Apr 16 03:51:51 2006 EDT
eval return remove_event(1145159511)
Where does user
monitor data go?
When you monitor someone, or if you enable
GLOBAL_MONITOR, monitor data is logged into /secure/log/adm.
How would you
set a race to be selectable by new players?
If the race already exists, and it is, say, kobold, type:
Then see: http://dead-souls.net/ds-admin-faq.html#10
Where is emote data kept? Can I
edit it by hand?
Emote data is saved in /save/soul.o
You must never, ever, edit an .o file. Period. It
is possible to do it without corrupting data, but I do
not condone it, I don't recommend it, and if you fux your
mud because you did it anyway, I won't support it.
If you edit an .o file, and now things don't
work, it is your own fault. If you didn't back things up
before editing system files, there's nothing anyone can
do to retroactively save your data.
What are .h and
.o files? Where are they kept?
Files with the extension of .h are called header
files. They have code or variables that are helpful when
creating some things, so that an armor object uses
armor_types.h to load some useful information without having
to hard code it every time you make a piece of armor.
These global header files are most typically found in
/include or /secure/include , although local header files
that are specific to a particular directory (such as
header files for lib objects) are commonly found in an
./include subdirectory of the given directory.
Files with an .o extension are object persistence
files. They contain data, not code. There are some things
that happen in the lib that should persist across
reboots, such as races, classes, economy, etc. You could
just hard code this stuff, but what if you need to make
changes? What if your economy needs to be flexible to
accommodate inflation? What if you want to be able to
add or remove emotes on the fly?
Persistence files allow you to save data which
is subject to manipulation, but which needs to be available
in case the mud restarts.
Because .o files tend to contain information
that is structured and formatted in a very specific way,
they should never be edited by hand. They are intended to
be loaded and saved by objects like daemons. Monkeying
around with the contents of an .o file is an excellent
way to damage your mud.
Another reason to avoid it is that even if you
make a valid change, it's liable to be overwritten unless
you fully understand the daemon that uses that file.
But my friend
forgot his password! I *have* to edit his playerfile!
Use the command: resetpasswd
How do I change
my mud's name?
1) type: admintool
2) select the "Driver" menu option
3) select the "change the MUD's name" option
4) answer yes to rebooting
Help! I locked
For UNIX administrators, it is natural to create an
admin character for special admin tasks, and then use
a regular character for routine stuff.
There's nothing wrong with that, but if you
lock the mud, you'll need to have your regular character
be in either the ELDER or TEST groups in order to log
in. For more information on modifying groups: help admintool
What are the
privileges associated with the groups in groups.cfg?
SECURE gives you 100%
admin privs to the mud.
ASSIST allows reading
to almost all files in /secure, but
doesn't provide write access to those files. Assist admins
do report as archp() == 1, so access to writes based on
that pointer should be carefully managed. Assist admins
can also read the contents of player directories. See
/secure/cg/groups/read.cfg and write.cfg for more detail.
ELDER is just a nice
thing to have show up in the who list.
TEST lets the lib know
you are a test character.
All members of the above four groups are permitted to log in when
the mud is locked.
INTERMUD lets the
member use intermud, if RESTRICTED_INTERMUD
Any additional special groups or privileges you'll have to code
Why does the
documentation refer to LIB_ARMOUR and armour_types.h?
The LPC documentation in the Creator's Manual was written by
Descartes. I have been reluctant to make any changes to it,
because first, it isn't mine, and second, deviations from the
current lib are very small.
In this particular case, you evidently have noted that
the lib uses American spelling for "armor". The original Dead
Souls distribution, version 1, and the Nightmare lib used the
British spelling of "armour".
Aside from finding it unnecessary and affected, I
felt it was distracting and potentially confusing for coders,
because it was the only word in the lib spelled this way. There
were no instances of "colour" or "honour", etc. Rather than
make things uniform by Britishizing them, I made them uniform
by Americanizing them.
To this day I don't know the reason for that original
spelling. It may be that Descartes intended to make a
distinction between, say, an armoury that sells things you
wear, and an armory that sells things you wield.
If I remember to, I'll ask him next time we talk.
read/write restrictions kept?
The global perms are listed in /secure/cfg/read.cfg
and /secure/cfg/write.cfg . However, additional permissions
may be available to a user based on the access privileges
defined in a given adm/ subdirectory. See help grant for
more details on that system.
The permissions logic goes something like this:
1) These absolutely do not work in Dead Souls. It is not a supported
1) If a file/directory is not in this file, anyone can read it.
2) If a file/directory is in this file, only the specified
groups/people can read it.
1) If a file/directory is not in this file, only admins can write to it.
2) If a file/directory is in this file, admins + the groups/people
specified can write to it.
1) A creator may use "grant" to give read and/or write access to files
under her control.
1) Objects in the /secure dir can arbitrarily limit access to their
data if coded to do so.
2) Anything not explained by the above rules is a security policy
defined in /secure/daemon/master.c
I need to test
day/night descriptions, but I can't wait around all day.
Type: help ticktock
How can I
change the default prompt? Can I make it dynamic?
The default prompt is defined in /secure/lib/connect.c . Look
for lines containing "SetPrompt".
For details on options available, type:
This is "stack security".
In a typical DS call, there is a chain of objects and their functions.
For example, if I issue a command, that command has a "call stack"
that includes me, that command object, whatever that object affects,
What stack security does is identify the privileges of each of
the elements in that call stack, and if the privileges of any
element are outside the permitted privilege scope of the given
action, the call fails in the manner you described above.
For example, if you code an object in your home directory that tries
to write to a file in /secure, it will probably fail, because objects
from your homedir do not have write privileges to /secure. If you
moved that object to /secure, then that would be more likely to work.
It would not be *guaranteed* to work, however, because even if
the object itself has privs for writing to /secure, it may be that
it is called from an object that does not have this privilege, like
a non-admin user. That object's presence in the call stack would
likely fail validation.
The way to get around this for specific objects is to use unguarded().
If the object with the privileged call has it wrapped in unguarded(),
then the call stack validation is short-circuited and only the
privileges for that object itself are evaluated.
See man unguarded for syntax
and usage, and examine
files like /secure/obj/snooper.c for examples. Use with EXTREME caution.
Not in the slightest. Here's how it works:
1) Whoever is running the
router has 100% access to every bit
of communication that happens across that intermud network. All
messages are plaintext, and although I personally can promise
I don't read "private" messages, there is no way for you to
be sure I'm not lying.
2) All muds connected to an i3
router can hear anything that
is said on public channels.
3) Any admin on any mud has
100% access to the i3 packet data
that comes in and out, meaning they can listen to "private" tells
between someone on that mud and someone on another mud.
4) Nobody on any client mud is
able to "sniff" or "snoop" data from
tells between other muds. If Alice@AlphaMud and Bob@BravoMud are
having a heated "tell" discussion, Carol@CharlieMud can't listen in,
even if she's an admin on her mud. However, Dave@DeltaMud is
the admin on the i3 router mud, and he can "hear" everything.
5) Local channels (cre, admin,
newbie, etc) do not get broadcast
to the i3 router. There is one exception to this. Dead Souls 2.0r22
had a bug that did just this thing. This bug is not
seen in earlier versions, and later versions have been fixed to
prevent this. However, any local admin has full access to any
6) Since this is all plaintext,
anyone at all along the
network stream (you ISP, their ISP, etc) can listen in,
whether at the intermud point, or at the point where you
or your message target telnetted into their mud.
Therefore: do not tell secrets across intermud.
What are some
do's and don'ts?
There aren't too many, but they tend to
be important, so try to follow these guidelines:
- Your first step should not be deleting everying so you
can start "from scratch". Dead Souls actually uses
a lot of the included content for default mud functions.
Wiping races and areas will leave you with a mud that
doesn't work, and you'll lack the expertise to fix it.
Instead, if you want a "clean slate", just create a
blank domain and make it the default:
mudconfig defaultdomain /domains/blank
- Do not allow anyone other than full admins (people in
the SECURE group of /secure/cfg/groups.cfg) to edit
/lib files. Things like /lib/player.c and such must only
ever by edited by SECURE folks, because otherwise someone
can use that editing to elevate themselves to full
admin privileges. Do not mess with groups.cfg to let
normal creators edit /lib files, do not modify the mud to
allow write access there. If you need help with those files,
hire someone you trust to be full admin. Or simply
have folks submit code to you that you review before you
drop it into /lib yourself. By default, neither normal
creators nor assistant admins can write to /lib, and this
default is the way you should leave it.
- Don't mess with /realms/template/ unless you know exactly
what you're doing. Breaking anything there will hose up
new creators. The same goes for /secure/sefun/make_workroom.c
- Don't be too adventurous with your admin character. I've
had to change admin tools so people can't remove themselves
from admin groups, and so that people can't demote themselves
from creator to player...not because I thought maybe someone
might do it, but because people have done it. If
you play games
with your admin's body, gender, stats, whatever, it probably won't be
fatal, but then, it might. Don't experiment on your admin. Use
a test character.
- Always always always back up any lib files you mess
with. The bk and restore commands are your best
- Don't let just anyone off the street become Creator. You
need to know and trust your creators.
- Don't let a week go by without a full backup of your mud.
- Don't use color codes in your mud name. It makes people on
- Don't edit files that end in ".o". Those are data files,
and are very very easy to corrupt if you edit them by hand,
possibly damaging your mud.
- Don't assume it's anyone's responsibility but your own
to teach you LPC and how to use Dead Souls.
- You should avoid changing your lib name unless you have
a good reason for doing so. Changing from "Dead Souls" to
"MyLib" or whatever probably seems like a fun thing to do, but
makes you look like you're trying to claim credit that is not due.
People really do notice, and really can tell. It makes you look bad.
Keep in mind that most of what is currently in Dead Souls
was written exclusively by me*, and yet I have not changed
Similarly, unless you're actually branching MudOS, don't change
the name that is reported by it. Leaving the driver and lib names
alone is perhaps the one way you have to demonstrate your
gratitude to the dozens of developers that made them available
After removing docs from each, the uncompressed lib material
in DS1.1 is about 5 megs contained in about 1000 files, and DS2.10
is about 19 megs contained in about 2900 files and directories.
in any way suited to create a non-English mud from/with it?
First the yes: There is at
least one mud that I know of that uses Dead
Souls that is in Russian. I think they might have had some trouble using
the Cyrillic alphabet, but I think they overcame it.
For a while there was a Dead Souls mud in Korean. I don't
know the name of it, because I never understood anything they said.
As far as I know, they are not running today.
There's very little about the lib that is incompatible with a different
language. You can use typical ascii characters, meaning you can
use accents, and so on. You room descriptions and messages can be
in most languages you want that you can express in ascii, and
even some that you can't.
Now the no: The biggest
obstacle to making Dead Souls international
is the parser. The "natural language parser" is in the driver, not the
it is optimized for English. English is an "analytic" language, so that
word order dictates the meaning of a sentence. With German, a
language, word order is less important than the pre/in/suffix inflection
and pronoun/noun declination. This kind of sophistication is completely
beyond what the MudOS parser is designed to do.
This means that a Dead Souls mud in German would have a hard time
being 100% grammatically correct in its parsing system.
If you're willing to make compromises with grammar, it can be done to
a certain extent. For example, If you make "mein", "meiner", "meine",
and "meinem" all applicable to all possessive situations, then it can
To a grammar purist this is a horrible thing to do, but it is available
as an option,
if you're willing to do some rewriting of the mudlib.
German and Russian are statistical outliers, though. Many European
languages lack noun cases, and for them, using Dead Souls would be much
easier, in terms of the parser. You still have to deal with
though, such as single-word intransitives or reflexives.
So, the summary answer is:
* Yes, you can use Dead Souls with non-English languages for
descriptions and messages.
* Depending on the language, you will have to make grammar compromises
if you intend to use the MudOS parser for command processing.
* To convert properly Dead Souls to another language is a non-trivial
involves reworking the master object, various command/verb system
possibly the MudOS parser to a degree. It *is* possible, but it's
a project for the faint of heart.
* You can avoid this by not using the MudOS parser, and using the
old-style command system, which depends on add_actions and command
files to accomplish the job of parsing. This also requires some
lib coding. It is more code you'd have to write, but it would be
less advanced and complicated than refitting the natural language
* I enjoy the study of languages and grammar, so I'd be delighted to
you if you decided to take on that project. However, my role would be
of a "helper". I cannot take on the burden of doing the majority of the
grunt work code for someone else's project.
* I wish I could tell you "Yes, and it's easy." The answer though, is
"Yes, but it's hard."
I keep losing
my intermud connection, and sometimes I'm half connected
This happens most frequently when using a wireless connection.
Intermud is apparently not at all tolerant of the casual manner in which
many wireless connections work, and as a result your intermud
connectivity will likely suffer. Perhaps this is old-school of me,
but I think it's reasonable to suggest that you run your mud on
a land-line network connection.
Another source of this problem is if you're running off of
a home broadband connection. Some of these DSL or cable modems change
IP addresses very frequently, and your connection is interrupted during
those changes. If your connection is abruptly terminated and you come
back with a different IP, the intermud router may not handle this
gracefully. Perhaps this is old-school of me, but I think it's
reasonable to suggest that you run your mud on a static IP.
Finally, I have seen some home firewall/router devices that
have an unconscionably short timeout for idle connections. There is
usually enough intermud traffic that your conenction will receive a
packet within five minutes, but if your timeout interval appears to
shorter than that, you can tweak your intermud ping interval in
Dead Souls 2.5a19 and above by typing: mudconfig
shorten your intermud ping interval to 2 minutes,
keep most such aggressive timeouts from happening.
It's probably not a good idea to lower your interval below 2 minutes,
as your mud may wind up getting stuck in an i3 reconnect loop.
Dead Souls muds below 2.5a19 may need to manually edit PING_INTERVAL
in /secure/include/config.h or /secure/daemon/ping.c and reboot.
I can run my old TMI-2/Nightmare 3/Skylib/Lima code on Dead
Souls. Is that true?
Yes and no.
Please read this announcement for the details.
the version of Dead Souls 2 on Sourceforge different from the one on
licensing thing. Sourceforge insists on only having Open Source
their site, so the version of Dead Souls you can download there is Open
Strictly speaking it's "public domain". For more information on that
version, see: http://dead-souls.net/ds-II-faq.html
you're looking to do is run a mud, use the latest version from the
Dead Souls site. Mud admins don't
need to worry about licensing issues. Only
those looking to distribute or fork DS should
be concerned with the licensing.
Short answer: If you don't care
what license you use, then you should
use the most featured and most current stable version, which is: http://dead-souls.net/code/dead_souls.zip
All I wanted to do was change combat, and it is so complicated!
This is somewhat related to question 72,
changing XYZ be hard?". Some
folks have super-specific ideas about how their mudlib should look,
and, for example,
want nothing to do with magic, or limbs, or have a problem with combat,
I think you'll find Dead Souls 2 can be molded into whatever you want.
However, I would suggest the if you're going to be spending more than
50% of your time ripping things out of this lib, it might be that this
lib doesn't actually suit you. You might be happier with TMI-2,
for example, or Lima, etc. You can choose from a number of
libs from the LPMuds.net download page: http://lpmuds.net/downloads.html
If you're going to stick with DS2, though, then it's time for a
You're looking to modify big, complex systems in a codebase that's not
that familiar to you. The amazing thing is how far you've gotten
in so short a time, that you're up for haxing at the combat system. But
I'd like to make sure your expectations are set correctly: you are messing
with complex systems fundamental to the operation of the mud. Of
course it'll be hard, until you're at a higher level of proficiency.
So yes, changing big things is big work. You might want to stop
and think about whether this really is the lib for you, if you're
spending most of your time pulling stuff out. Or you might want to
slow down and work on modifying simpler objects and systems before
starting to chew on player object inheritables.
Just a thought.
Windows is fine and call_out()'s are great. Your advice sucks!
Astute or adventurous readers may have noticed that
some of my
statements on the faq are only true up to a point. For example, if you
have a proper editor, and know what you're doing, there's nothing
inherently wrong with editing an .o file.
Similarly, a call_out() here or there isn't wrong,
and in fact is
the only way to do certain things elegantly (or at all).
The reason for the stern warnings is that these, and
involve judgment calls that a novice is not in a position to make. Are
you 100% sure that windows editor won't add dos formatting? Can you
be certain that your call_out won't bring the mud to its knees?
Expert coders and admins can determine their risk
level based on
experience. Until newcomers gain that experience, I try to dissuade
them from risky behavior, because getting tripped up in the starting
gate is no way to win a race.
I keep hearing
that Dead Souls can do this or that, but I'm trying and can't.
It may be that you downloaded the older, GPL version
Dead Souls. The latest,
version may have the feature
you're looking for.
When I refer to the latest version, I mean the latest
stable release. Cutting-edge "alpha" versions can be downloaded,
which include the absolute
stuff I've been working on.
It may be that the feature you're talking about is only available
on the alpha version, and hasn't been included in a stable
You can download
alpha and run it, but you do so at your
own risk. Alpha versions have that name for a reason: they aren't
fully tested and are likely to have bugs.
You appear to
have a FAQ for everything!
I'm not kidding when I call these FAQ's. These
really do get asked frequently.
When you start using Dead Souls, when you ask a
on the DS line, you will more often than not get a FAQ url
from me. This is normal, and is meant to encourage you to
review the docs on your own.
If you find that most of your questions
have FAQ's for answers, you should seriously consider changing
the way you're going about things. When you're not sure
about something, check the FAQ's first. That's what
they're there for.
Eventually, if all your questions are answered by
existing documentation, you might find that you get fewer
and fewer responses from people, as they start tuning
you out. Remember that most people refer to the docs:
the help and
manual files, command help messages,
as well as the admin,
creator, debugging, and general
faqs. There's also the in-game player's handbook, creator's
manual, and admin guide,
well as web based examples
and tutorials. There
is also a Dead Souls support forum
which is searchable.
There is a ton of documentation for DS, and most
consult it regularly. If you keep asking questions that
are explicitly answered in docs, you may find yourself
in the awkward position of not having anyone listening
to you when you ask for something *not* documented.
This doesn't mean
"Don't bother us with your newbieness".
It means "First RTFM. If it's
not in there, ask like
someone who has tried to find the answer, not like a lazy
person who wants to be tutored."
A very detailed explanation of the reason for this
is at http://www.catb.org/~esr/faqs/smart-questions.html
(NOTE: The people that run that
page have nothing to do
with Dead Souls. Do not try to ask them Dead Souls questions).
I strongly urge you to read that entire document. If you've
never read it before, it will help you both on DS channels
and pretty much anywhere else where experts are available
for questions. I promise there will be benefit from
If I XYZ, will
Try it and see. One of the drawbacks to having exhaustive
documentation is that folks can get the impression there's
an example of every test case. As with any coding (programming)
environment, you'll need to put in a lot of trial and
error to learn. If it doesn't work, and it's not documented,
go to the Dead Souls forum,
tell us what you did, where you
looked, and what you expected.
Hey you skipped
Yeah I goofed the numbers and now people are using #101 for
something else. Oh well.
You are not
taking my bug report very seriously.
On the contrary. I am fanatically dedicated to making and keeping
Dead Souls the very best LP lib out there. As you spend more time
getting acquainted with the DS community and how things work,
you will see that I am deadly serious about bugs and they
usually get addressed quickly, if they prevent functionality.
At a minimum, legitimate bugs end up on my .plan.
I know DS2 has bugs. I'm not under the illusion it's perfect,
or that I'm a
However, I *do* get a lot of reports, and I have to prioritize
them. DS2 doesn't put food on the table for my family,
or keep the rain off our heads, so you'll need to keep in mind
that, as special and wonderful a person as you are, your
coding confusion is sadly not my personal emergency.
Whether it's a critical security flaw or a typo in a
file's header, I can promise you I *will* address your problem,
unless another member of the community gets to it first. You
may have to just be patient.
Another reason you may feel I'm not addressing your problem
is that you may not actually have a problem. Specifically,
if you are a new admin, and something doesn't work the way
you think it should, I advise you not to immediately
regard it as a bug. It may well *be* a bug, but assuming it
is so is not helpful. Consider the following scenarios:
Noobulator@LeetFooMUD <ds> BUG!! I can't see what's in my toy
Cratylus@Dead Souls Demo <ds> k. thx.
I type "l chest" but I can't see what's in there.
Demo <ds> try: look in chest
Another common source of "bug reports" is what can charitably
be called operator error. For example:
lol the schoolhouse is broken lol
Demo <ds> works for me
well, it's bugged. I get a million errors when I enter
Demo <ds> i can't reproduce the problem on my test muds.
Ususally in such a scenario, it turns out that the person
was *sure* they didn't change anything...and later remember
they just took out this one line they didn't like from the
code. Or perhaps they removed the "dwarf" race, and so the
schoolhouse can't load because it has a dwarf npc in it. Or
maybe they....etc etc etc.
If you report a bug, and you get something like this from me:
"I can't reproduce your problem."
It means I tried to get the same results, and couldn't.
You can interpret that as meaning that you've either
caused the problem yourself, or haven't given me
enough information to be able to test what you're
If you don't elaborate further, and you don't post your code and
error messages on the forum, then I'll assume you're going
to track down your coding mistake on your own.
This doesn't mean I don't like you, or that I think you're
a loser, or that I don't care about bugs. It means I can't do
anything useful with the information you've given me. If
you can provide me with enough information so that I
can reproduce your problem, then I can work on fixing it.
Otherwise, what can I do?
I would also ask you to be as open-minded as you would
like me to be. It isn't easy for me to be nice and polite...
I've actually a rather abrasive personality by default. If
I don't know you and I'm being polite to you, the chances are
that I'm really making an effort. The chances that you're
asking me something I've never heard, or reporting something
I'm unaware of, are small, if you are a new admin. If my
response is not to your liking (for example "check the Creator FAQ",
or "read the Player's Handbook"), getting hostile and defensive
with me won't help anything. Given how long I've been working
on this code, it's very likely that I've given you
extremely good advice, out of a genuine desire to have you succeed.
If you react in an adversarial manner, you may wind up
missing the technical usefulness of what I've said, and
discourage me from responding promptly to you in the future.
And if it happens that I *am* wrong, which occurs frequently
enough, then simply following my instructions and explaining to
me how they didn't work is a perfect way of showing me my mistake.
answer my question. It's just one question, ffs.
If there's one thing that fills me with dread it's the
prospect of having to RTFM for software I'm totally clueless
about. Technical people often are terrible docwriters, and it
can be a real challenge to tease out the information you need.
In fact, sometimes it's necessary to understand what's in a
manual before you can read it, because of the level of complexity.
So I sympathize with you. Looking at a pile of documentation
99% of which you don't understand is daunting, and I truly
appreciate that fact, because I've been there.
So I totally grok when you say "Look, please just tell me how
to eventNarfle the garthak(). Ok?" I feel it, man. I get you.
What I want you to understand is that when I tell you to RTFM,
I'm *not* giving you the brush-off because I like it. I'm
doing it because to you it's one little question. To me, it's
Creator FAQ #X, which I've answered 24 times before, and for
which I sat down and wrote out an excruciatingly detailed
Take a look at this FAQ, and the others. There are literally
hundreds of entries, all of them written by me, in a way as
clear as I could make it. Take a look at the dozens of chapters
in the Admin Guide, Player's Handbook, and Creator's Manual.
That stuff didn't write itself.
I didn't go through the laborious process of all that doc
work so that I could then do it over again every time someone
doesn't feel like doing a text search on the FAQ for eventNarfle.
I'm not saying I'm too good to waste my time on you. I'm saying
I *HAVE* spent the time, I *did* make the effort, and I need
you to make just a little effort of your own as well.
Is it possible
to upgrade to alpha without killing everything I've done?
I have been asked whether people can upgrade from the stable
release to the alpha release, and my answer usually is something
along those lines. "I imagine so."
And if asked how, I'll typically say something like "very carefully."
The reason is that I do not encourage people to "upgrade" to
an alpha version. Alpha is by definition a rough draft, lightly
tested in new functionality, and unstable in the sense that
new alphas come out often.
I do not put out alpha patches, and I do not make it easy to move
from a stable release to an alpha release. This is because if I
did make it easy, most people would do it, even beginners. This
would be problematic, because if they then run into an alpha bug,
they have to hear this from me:
"Well, yeah. Alpha has some bugs. I'll get to that one eventually."
And then people would get all gripey, or push me to fix it,
etc, and I wouldn't like that. The point of the stable release
is that it's stable. The point of alpha is that it's a testing
version of new stuff. If you want to go alpha, that's fine with
me, but you'll need to be experienced enough to do it on your own.
I actually do want people to run alpha so that I can get
bugreports. But I don't want people running their main production
muds in alpha, because I will not be making commitments about
when bugfixes happen. I also don't want total newbies using
alpha, because I don't want to set them up for disappointment
when I don't treat their bugreport with extreme dispatch.
So yes...it's a bit elitist of me, but for good reason. If you're
unsure about being able to safely upgrade to alpha from your
stable release...then don't.
If you do it and screw up, restore from backup. You did back up
How do I start
In Dead Souls, a set of related objects, creatures, and rooms that
add up to the creative vision of a builder is called a "domain".
It's the same thing as what other codebases refer to as an "area".
The terms are used interchangeably in the DS community.
Dead Souls domains are comprised of a bunch of LPC files that live
in a specific directory. If the domain is to be called UlTiMaTe DBZ
then that directory (aka "folder") might be called /domains/dragonballz
To create that domain, you can use the domaincreate
command, like so:
This will generate some standard directories and a start room for
the domain. At that point you can assign a domain admin with the
domainadmin command. For more info:
I don't want to
use a cookie-cutter codebase
So, this one time, these guys were checking out Dead Souls, and
one of them was seriously evaluating it, and his buddy was basically
coming up with reasons why some other lib was better...no matter
what. For example, the doubter guy was like "feh we don't want
a medieval mud", to which I replied "check out the firearms
code", and the reply was "lol, we have our own". You know, a
total no win sort of deal.
And then the doubter guy said something that got me thinking.
Among his objections was one that I didn't quite understand.
"We don't want a cookie-cutter lib," he said.
Now, the lib he was advocating was no more or less cookie cutter
than DS, in my opinion, so it's not like I was dazzled by the
argument, so much as I was confused by the premise. Just what
the heck does "cookie cutter" mean?
Cookie cutter as a
I think what people sometimes mean is that they don't want a mud
that looks like every other mud. Why bother logging into
LeetDikuHeavilyModifiedMud When DikuHighlyLeetCustomizedMud is
exactly the same, except the race and skill names are different?
Similarly, there are a few dozen new Dead Souls muds out there.
They all mostly look the same...why not choose something that
isn't like Everyone Else?
Cookie cutter as a
I would suggest that there are some things for which "cookie
cutter" as a pejorative term is of limited impact. For example,
operating systems and air conditioners. There are things that,
when acquired, aren't acquired for their uniqueness. They are
acquired for their suitability to a specific application.
In this sense, cookie cutter basically means widely adopted, and
from the standpoint of someone just trying to get a specific job
done, it is an advantage that there is wide adoption of what
you're working on.
Where Dead Souls
* A codebase distribution is, necessarily, cookie cutter. It's
a set of frameworks, presumably standardized during development,
that are the same for everyone when they first get it. From
this perspective, anything that you didn't 100% code yourself is
cookie cutter when you download it.
* If you download a codebase and then just run it with no modifications,
then the problem in "originality" isn't the codebase, it's you.
* Dead Souls includes a large (perhaps overlarge) amount of
rooms, creatures, objects, armor, and weapons in the stock distribution.
When you download and run it, you basically have a working mud with
quests and pubs and whatnot.
YOU ARE NOT SUPPOSED TO USE
THAT STUFF AS YOUR MUD
Those are examples. They are sample areas. If your mud uses the sample
areas, they should be one or more of the following
A) Temporary, while you're learning the lib
B) A joke
C) Not the areas new players see
If you make no changes to the sample areas and present them to new
players as a mud, then yes, you have a cookie cutter mud, and you
really might as well just shut down, because only your friends will
log on to play, and not for very long.
I think that the problem is that people see this large amount of
example material and think that they have to use it in their mud. If it
were so, then that would be sad and would doom every Dead Souls mud to
exactly like every other.
Instead, your mud can have a Roman Empire theme, with no hint of
the stock areas in sight when a player logs in. Just the robe and
sandals they wear and the classical city they must explore. That's
actually been done, by a mud called, aptly enough, Ancient Rome.
Nothing prevents you from having your new players launched into
space the moment they log in, or find themselves suiting up for
a dive into Kaminoan oceans. It's a mud *codebase*, not a mud.
Make it your own.
How do I make
my new area the default domain where new people to arrive?
In your new domain, make
sure that the room/ directory contains (working) rooms
with the following names:
See the rooms in /domains/default/room to see what these rooms do and
how they work.
The domaincreate command generates these rooms by default.
2) Use the mudconfig command with
the defaultdomain subcommand. If your new
default domain is /domains/dragonballz,
mudconfig defaultdomain /domains/dragonballz
3) reboot (In theory you can do
this without rebooting, but the instructions would be longer)
I heard passive
mode on the FTP server works now
As of the current stable version, passive mode FTP works now.
There are some very important things to keep in mind.
1) Dead Souls now comes with
two ftp servers. The original
is known to the inet system as ftp. The new, passive-mode
server is known to the inet system as hftp. To enable hftp,
run the following mudconfig commands:
mudconfig inet enable
mudconfig hftp enable
2) The default port for the
hftp server is 6 less than your
mud's telnet port. So if your mud runs on port 6666, then
the hftp server will be on port 6660. This can be changed
by editing /secure/include/network.h
3) The mud must know its
correct external ip address. You
must set this in the config.h file, preferably with the mudconfig
command, like so:
mudconfig hostip 111.222.333.444
Where "111.222.333.444" would be the actual ip address that
the external machines will be trying to connect to. If
you do not know what this address is, leave the default
of "127.0.0.1" in the config file. This will let the ftp server
know it needs to try to figure out the address based on information
it gets from the intermud router.
If it cannot gather this information, or you don't specify
a valid external ip address, then the passive-mode
ftp server will not be able to handle incoming connections
4) Passive ftp support requires
the use of an additional
range of ports. The default range of ports reserved by hftp
starts at -65 from your mud port, to -11 from your mud port.
This means that if your mud is running on port 6666, then
ports 6601 to 6655 are reserved for your passive mode transactions.
If there is a port conflict with another program, you'll
have problems. You can change the port range by editing
5) Once it's been correctly
configured and started, you
should be able to use passive mode for ftp transfers
even if your ftp client computer is behind a firewall.
If the mud computer itself is behind a firewall, you will
need to make sure that the range of ports discussed
in the above section are being properly forwarded to
the mud computer. If the mud is behind a router, for
example, you may need to configure that router to
forward ports 6601 to 6655 to the mud computer.
6) If all has gone well, then
you can ftp to the mud's
hftp port, begin a passive session, and while away
the hours uploading and downloading to your heart's
content. On a command line ftp client, that might look
something like this:
myhost: /tmp/foo $ ls -l
drwxr-xr-x 2 myuser
other 117 Dec 26 18:34 ./
drwxrwxrwt 7 myuser
sys 1361 Dec 26 18:33
myhost: /tmp/foo $ ftp mymud.com 6660
Connected to mymud.com.
220- Dead Souls FTP server ready.
220 Please login with your creator name or anonymous.
Name (mymud.com:myuser): myguy
331 Password required for myguy.
230 User myguy logged in.
Remote system type is UNIX.
Passive mode on.
200 Type set to I.
227 Entering Passive Mode (1,2,3,4,30,32)
150 Opening ASCII mode data connection for file list.
drwxrwxr-x 1 dead_sou
dead_sou 0 Dec 26 18:33 .
drwxrwxr-x 1 dead_sou
dead_sou 0 Dec 26 18:33 ..
-rw-rw-r-- 1 dead_sou
dead_sou 28 Dec 26 18:33 .plan
-rw-rw-r-- 1 dead_sou
dead_sou 21 Dec 26 18:33 .profile
drwxrwxr-x 1 dead_sou
dead_sou 0 Dec 26 18:33 adm
drwxrwxr-x 1 dead_sou
dead_sou 0 Dec 26 18:33 area
drwxrwxr-x 1 dead_sou
dead_sou 0 Dec 26 18:33 bak
drwxrwxr-x 1 dead_sou
dead_sou 0 Dec 26 18:33 cmds
-rw-rw-r-- 1 dead_sou
dead_sou 361 Dec 26 18:33 customdefs.h
drwxrwxr-x 1 dead_sou
dead_sou 0 Dec 26 18:33 log
drwxrwxr-x 1 dead_sou
dead_sou 0 Dec 26 18:33 tmp
-rw-rw-r-- 1 dead_sou dead_sou 3087
Dec 26 18:33 workroom.bak
-rw-rw-r-- 1 dead_sou dead_sou 3087
Dec 26 18:33 workroom.c
226 Transfer complete.
811 bytes received in 0.0097 seconds (81.68 Kbytes/s)
ftp> get workroom.c
227 Entering Passive Mode (1,2,3,4,30,32)
150 Opening binary mode data connection for /realms/myguy/workroom.c
226 Transfer complete.
local: workroom.c remote: workroom.c
3087 bytes received in 0.031 seconds (96.91 Kbytes/s)
myhost: /tmp/foo $ ls -l
drwxr-xr-x 2 myuser
other 184 Dec 26 18:35 ./
drwxrwxrwt 7 myuser
sys 1361 Dec 26 18:33
-rw-r--r-- 1 myuser
other 3087 Dec 26 18:35 workroom.c
The sharp-eyed among you will no doubt have noticed that
binary mode ("bin") is being used. This is because ASCII
mode transfers don't work too reliably, and fail more
often than not.
7) hftp has NOT been tested for
security or reliability.
If it doesn't work, you're free to let me know, but do
not expect me to fix it. If someone hacks into your mud using
rcp, http, ftp, or hftp, and ruins your life, this is not
my problem. These servers are provided to you as a convenience,
not as standards-compliant, production-quality internet
software. Proceed with extreme care and make regular backups
a top priority. If in doubt, do the following:
mudconfig inet disable
8) If you find hftp helpful and
useful, please thank Duuk @ Haven
for being kind enough to let me filch it from his mud, Haven.
If you *don't* like it, please withhold comment until you have
a patch to submit to fix a shortcoming.
9) Known issues:
* If you see this: "netin: Connection
reset by peer" it means
you're trying to use ASCII mode. Remember to use binary mode.
* Anonymous FTP doesn't work yet.
BIG GIANT NOTE ON HFTP AND PASSIVE MODE
It is apparently now common for FTP clients to default to EPSV when
negotiating passive mode. This breaks hftp and just will not work.
If you keep getting errors like
wrong server: return code must be 229
Or mysterious references to "epsv", this means that your ftp
client is one of these that makes this assumption. Disable epsv
right after logging into hftp to prevent this. For example:
I boot the mud
but nothing happens...the startup headers
but nothing preloads and I get no error messages. What's
This can happen if your internet connection goes down, and
you're using name resolution. For example, if you are trying to
use 188.8.131.52 7777 as your address server, and your network
connection goes down so that you can't reach 184.108.40.206, then
if you try to reboot, the driver will hang at that point in
its startup configuration, waiting for 220.127.116.11 to become
Simply change that entry in mudos.cfg to something like
localhost or 127.0.0.1 and you should be able to boot again.
How do I add a default alias?
Add it to the Aliases array in /lib/nmsh.c
How do reset() and clean_up() work?
LPmuds come from a tradition of trying to be as conservative with
computer memory as possible. Back when a server with 128 megabytes
of RAM was worth killing for, people often had to make do with
scant memory resources. Objects needed to be be either swapped to
disk, or unloaded from memory entirely, if they weren't really needed.
The clean_up() apply was meant to address this. The driver
periodically calls clean_up() on every object. Typically, the
clean_up() function coded into a given object contains instructions
such as "if you're not in a player's inventory and you're just
lying around, then destruct yourself", that sort of thing. In
Dead Souls, clean_up() is a function in LIB_CLEAN, which is
inherited by most objects.
Some objects should never be unloaded from memory, like daemons,
and some special objects. Such things should have SetNoClean(1)
specified in their create() function, so that the clean_up()
apply doesn't try to destroy them.
Tangible objects (shoes, swords) that are SetNoClean(1) will
prevent the object they are in (NPC or room) from doing a clean_up().
reset() is another "driver apply", or function that is called by
the driver. Like clean_up(), reset() is called periodically, but
it is intended not to be a trigger for auto-destruction, so much
as a set of instructions to make an object presentable to
For example, if Joe Player completes the Orcslayer quest by
killing a bunch of orcs, then when Jane Player wants to do the
quest, she's just going to find a bunch of dead orcs. However,
when reset() gets called on the room, then the inventory can
reload, so that Jane gets a crack at those orcs as well.
Like clean_up(), reset() is not generally meant to be put in
run of the mill objects. By default, rooms inherit reset()
from LIB_ROOM, and it serves the purpose of reloading the
inventory the room is supposed to have.
When do reset()
and clean_up() happen?
The way MudOS works, the driver calls reset() and clean_up()
on objects based on the interval specified in the runtime
That means that if mudos.cfg has a "time to
3600, your reset interval is 1 hour. Orcs will repopulate the
cave every hour at that rate (assuming they've been killed).
Similarly, "time to clean up" specifies the driver's
interval between clean_up()'s.
While this is a valid scheme, Dead Souls doesn't rely
on it. Dead Souls uses the TIME_TO_RESET variable in
/secure/include/config.h to determine the reset() and
clean_up() interval. If TIME_TO_RESET is 14400, then the
master daemon (MASTER_D) will run eventReset() every four
hours. eventReset() is a function that seeks out objects and
calls reset() and clean_up() on them.
Note that this may cause set_reset() to behave in a way you don't
expect, and it means you'll get reset()'s in your mud even if
you compile the driver not to do so.
Therefore, it's a good idea to set your "time to clean up"
reset" in mudos.cfg to something very large
(like 2000000000, aka 63 years) so that you don't have
two separate systems doing reset()'s and clean_up()'s.
In Dead Souls 2.4.1 and below, MASTER_D calls reset() and
clean_up() on 25% of loaded objects at a time, to avoid
lag on busy muds. 2.5a1 and above can choose to have these
fuctions called on all loaded objects with the RESET_ALL
definition in /secure/include/config.h
I want a 100% PK mud. Setting rooms PK one by one is
Setting your DS mud to be 100% PK (pplayer killing) is not that
by default, I agree. The reason for this is that from what I've seen,
unrestricted PK is a great way to ruin a mud, and it should not be
something you can enable accidentally.
Having said that, this is the procedure you would follow to make
a Dead Souls mud 100% unrestricted PK.
1) Run the command: mudconfig pk yes
2) Edit /lib/std/room.c. Change
int PlayerKill = 0;
int PlayerKill = 1;
3) Edit /lib/living.c. Change
5) Players created before this change may still need to use the pk command
to enable player killing for themselves.
How do I make a new skill?
What people usually mean by this is Diku style "skills", which are
more like special commands or spells than Dead Souls skills. In
Dead Souls, a "skill" is a property of a living thing that allows it
to be proficient to some specified level at a kind of activity. For
example, to be able to cast a defensive spell like buffer, you
may need a particular level of proficiency at the skill of "magic
That kind of skill isn't "created" in the standard sense. That kind
of skill is added to a player or NPC programmatically, usually when
their character is created, or they advance levels, or join a class.
For more information on that kind of skill, please read Section IV
of Chapter 8 of the Admin
In order to make the Diku-style "skill", all you really need to
do is write a new command. For example, take a look at /cmds/players/flee.c
That's what a Dead Souls command looks like. Pretty straightforward,
but you'll need to become a little familiar with LPC to make your
own. Read the Creator's
Manual to become familiar with LPC, then
play around with making a command of your own by copying flee.c to
bash.c or whatever, and tinkering with the code.
There's no "quick" way to making a new skill of this kind. This is the
point where you decide whether to invest the time in learning enough
LPC to get your vision implemented in earnest.
For the advanced coders, I would suggest creating a new verb, rather
than a new command. Verbs are far more powerful and sophisticated than
commands and are suited for just this kind of purpose. However, they
require intermediate-to-advanced LPC coding skills, so if you are
new to LPC, please do not try verbs yet.
Descartes so lame?
People have really got the wrong idea here. There are two main
against the original author of the Dead Souls lib:
"Descartes was a mean jerk."
"Descartes was an incompetent coder and/or docwriter."
My first response is that even if these things were true, it doesn't matter.
Whether Descartes was personally hurtful to you once is totally
irrelevant to your mud. He has left the mudding community and
will not hurt you again. Further, Dead Souls 2 was built from
public domain code, meaning he can never ever revoke your right
to use Dead Souls. By nursing your old resentments against Descartes,
you are only casting yourself in a bad light, by seeming petty
As to his supposed programming competence, this also is entirely
to you. I can tell you that as the current maintainer of DS, I am
intimately familiar with his code and am in an excellent position
to sit here and bitch about it. The main reason I don't is that:
1) I am eternally grateful he wrote it in the first place.
2) Given the TENS OF THOUSANDS of lines of good code he's written, a
stumbles aren't worth getting smarmy about.
3) Whether the code was written by him, one of his people, or dictated
to the lib directly from the mouth of Satan in the pits of
hell, in the end, the
original author is not the problem. If the code doesn't do
what you want, there
is really no point at all in grousing about it. Either fix
it, ask for help, or
get a new lib. If you're an admin it's because you're a
and willing to DIY where necessary. If not, blaming and
the answer. Meditation and introspection are. As in, you
should be asking
yourself if running a mud is what you should be doing.
Ok, now that I got the ranting out of my system, let's address the
a mean jerk."
Yeah, sort of. It really depended on how you
approached him. Really,
as far as I could tell, he was a normal person with a somewhat low
threshold for having his buttons pushed. And people enjoyed pushing
his buttons. A lot. And this lowered his threshold for it. Rinse,
As a result, if you were to publicly approach him in
a way that
he identified as making you likely to be a button pusher, he'd tend to
handle you as such. You were less likely to get bile on you if you
approached him privately, but then, you might just get ignored as
Yet Another Loser wanting her hand held rather than just putting in
the work learning how to build her mud.
On occasion he'd also just be generally irritable,
combative, and argumentative.
In short, he was a normal person. I have personally been involved in
plenty of flaming back and forth with Descartes...quite thoroughly
and ill-spirited. I doubt either one of us took it personally. This sort
of behavior was kind of the norm on intermud at the time. If you took it
personally, really, that's your problem, not his.
And remember, we're talking about Descartes "in
I've communicated with George Reese out of his Descartes character,
nothing but polite, courteous, and personable. Don't mistake the player
for the character.
an incompetent coder and/or docwriter."
This one bugs me. The main reason is that I don't
think the people
who say these things are in a position to judge. I think that something
99% of his code is just dandy. It's useful and effective. And most of
it is quite efficient: remember that Dead Souls was developed on very
weak machines and was the basis for a very busy mud. It was vital that
things run efficiently and load economically.
That his code contains some weaknesses is beyond
dispute. If I were
to criticize something about his code, though, it wouldn't be that it is
shoddy or ill-conceived. Where I run into something that makes me spit,
usually it's obvious that he meant to finish a thing, and just didn't
get to it. If you run into something that tempts you to say "bah,
more DescartesLogic", step back and take a deep breath. The chances are
that you're really not grasping that bigger picture of the code you're
On the other hand, yes, some objects really seem to
have been handled
carelessly. I believe I lost a few months off my life from the
of trying to fix various issues in armor. This does not mean Descartes
was an incompetent coder. It means that, like normal people who work on
a hobby that does not feed, clothe, or house them, Descartes on occasion
slapped something together to just get it working and do what he needed
Is that something anyone is not guilty of?
As to weak docs, remember that his Basic and
Intermediate LPC texts
are of biblical significance in the history of Dead Souls. They are,
imperfect, a bedrock of documentation that is massive in size and
greatly detailed. This is in addition to the material in /doc/build. If
those docs seem inadequate to you, then you simply cannot be pleased.
In the end, keep this in mind. George Reese is a
who runs a software business. He is also a professional docwriter,
published technical books that people have paid real money to buy.
you have comparable credentials, and/or have published a mudlib yourself
which thousands of people have used, then you might want to reconsider
complaining about Descartes and his competence in these areas.
The mud is
locked whats the command to add someone to the allow list?
groupmod -a test playername
Note that this tags the player as a test char and
gives her access to normally restricted areas. For
details on what groups grant what access, see the
FAQ entry: http://dead-souls.net/ds-admin-faq.html#84
Shouldn't you change all the documentation to reflect
the move to FluffOS?
No. See this faq entry: http://dead-souls.net/ds-faq.html#driver
Referring to the driver as MudOS is imprecise for the reader if
she is currently running FluffOS, but it is not altogether
incorrect and her potential confusion so minimal that I do not
see a need to rephrase each instance of "MudOS" into "the driver you
using, which may be MudOS for older releases, and FluffOS for newer
although FluffOS is a derivative of MudOS and functionally
indistiguishable at runtime except if you use its extended features,
in which case you should not be confused anyway".
Where appropriate and convenient, I do from time to time change the
docs to reflect the migration, but it's not going to be a to-do list
How do I change my timezone?
Use the command: admintool
Select option: c
So I herd u liek mudkip
You herd right.
Where is all the player information stored?
If you mean "where is each player's information stored?",
the answer is "in their playerfile." In my case, it's
/secure/save/creators/c/cratylus.o , for a non-creator,
it might be something like /secure/save/players/t/testguy.o .
Note that .o files
should never be edited.
If you mean "where is the information for all players?",
then there isn't really any such thing. The best answer to that
is /secure/save/creators and /secure/save/players, because
that's where the save files live.
The addrace command complains that the race already
A very common error is to copy an old race file to
a new name, and try to add it just like that. The
problem is that the new file contains inside it a
race name that is already known to the races daemon.
Edit the new file and change the race name in it to
reflect the name of the new race, and try again.
I am confused about the player/creator distinction.
The way it was explained to me is that "imms" on
Diku-derivative muds are basically "superplayers"...
that is, powerful and high-level, but not set apart
from players as fundamentally as is the case on DS.
For example, someone once was shocked to discover
that I'd never bothered to test lead/follow code
on creators. My response was something along the lines
of "I guess I just never figured they'd have much
use for it," which was even more horrifying.
The thing to realize is that creators are not players
at all. They cannot be, because
their powers are
so vast as to subvert any concept of fair play.
A creator can kill any monster instantly with the
zap command. She can read the code for a quest and
complete it with no effort by just cloning the
desired object, or even just evaluating the proper
function call to achieve the desired effect. She
doesn't have to "follow" anyone, she can just instantly
teleport herself to the intended location.
In fact, on the original Dead Souls 1.1 codebase,
creators technically didn't even have bodies. They
were just kind of amorphous entities floating around
the game...but boy, people hated
that. They wanted
to wield and wear things, and do other stuff that
players can do. And so today you can see creators
strolling about as if they share the same mortal
limitations players do, but do not be fooled.
Creators are not players. They are godlike beings
walking among players, able to manipulate the essence
of their world. Therefore, please expect that lots of
things simply don't apply to them.
How do I prevent people from using channels?
By default, only creators have intermud channel access.
New players can't use intermud, unless a creator adds
an intermud channel to them (for example, call joe->AddChannel("dchat") ).
If you want to have more strict control on who can use
intermud channels, use the mudconfig command to
mudconfig intermud restrict
Once you do that, only people in the INTERMUD group in
/secure/cfg/groups.cfg can use intermud channels,
regardless of what channel has been added to them.
To add someone to the INTERMUD group:
groupmod -a intermud joe
to remove them:
groupmod -r intermud joe
Warning: use great care with the groupmod command.
How do i disable the rss bot, or other channels?
By default, creators have some standard channels
added to them upon their promotion to creator status.
You can see which channels they are by reading
/secure/cmds/admins/encre.c and looking for a line similar to this:
"gossip", "ds", "ds_test", "lpuni", "death",
Modify that line to remove channels that you
feel new creators do not need, then type:
And people you promote to creator after that won't have
the channels you removed from that line.
To simply turn off a channel you dislike yourself,
just type the channel name alone at the command prompt, like:
I made a verb but it doesn't work
Please refer to the verb
really read the whole thing through. Note that
the most common error is failing to add the
applies to the
Does Dead Souls support databases like MYSQL?
Short answer: Not really.
More correct answer: Sort of. FluffOS/MudOS, the driver
that DS uses as its "engine", has some support for
databases built in. However, enabling it requires
recompiling the driver with the proper config options,
and if you manage to do this correctly by some
great feat of luck, you'll have a driver that supports
MYSQL features from back in 2000 or before.
That is to say, relying on the driver's support for
DB is chancy, and success doesn't mean you actually
succeed in doing anything useful.
These days, when people want to use a FluffOS/MudOS
lib like Dead Souls in conjunction with a database,
the most common and successful approach is to use
an intermediary script, like perl or python. You
code a lib object that uses MudOS sockets or
external_start() to talk to your script/program, and the
script/program then does the heavy lifting of correctly
communicating with the database.
There's no DS lib object currently in the release
that handles this sort of stuff. If you want DB support,
you'll pretty much have to DIY. The good news is that
it's certainly doable...folks have done it in the past.
The bad news is you'll really have to know what you're
doing for it to work.
How do I make my new currency work?
Presumably you've already used admintool options 2
and j to add a new currency and are now wondering
what to do to put it in the game.
Currency isn't like a normal "object". When you
pick up a pile of coins, for example, that pile
was only a kind of placeholder object. Once you get
it, it vanishes, and the weight and value it had
are added to you, without there being a specific
"money object" you're carrying. When you drop
money, a pile is created to hold that value, but
again, when someone picks it up, it goes away.
So, now that there are Quatloos in your game, how
do you get your hands on some?
As a creator, it couldn't be simpler. Just type:
But I'm guessing what you're really wanting is
to make Quatloos the standard legal tender for
your mud. In that case, you'll want your vendors,
bank tellers, and barkeeps to use that as their
Tanke a look at how this is specified in the following
commercial NPC's, and modify your own accordingly:
My friends can't connect to my mud, but I can!
The most common scenario here is that you are running
your mud at home, and you are able to telnet to it
with no problem because you are local to the mud.
However, these days there are usually a couple of
layers of security between your PC and the internet.
Chances are that your internet connection is through
a "router" or "firewall" device. Find the physical
device that your computer's network port is connected
to. Examine it to determine its manufacturer name and
the device's model number.
Now go on Google and do a search for it, for example:
+linksys +pos2000 +user +manual
Keep varying the search terms until you find the
documentation for your device. Then download it and
read it. It should describe how to log into the
device and configure its firewalling to allow incoming
connections to be forwarded to the computer that is
running the mud.
You'll probably need to know the IP address of the
mud computer. If it is running windows, open a command
window and type:
(protip: 127.0.0.1 is not the correct IP to forward to)
If you're running UNIX/Linux, try: ifconfig
Using the documentation for your device, and the networking
information from the computer, configure your device to
forward incoming connections to whatever port your
mud is running (typically port 6666).
If that *still* doesn't work, you may be running a
software firewall on the mud computer that rejects incoming
connections. Temprarily disable the computer's firewall and
see if your friends are then able to connect. If so,
then you know you need to figure out how to configure your
software firewall to allow connections on the mud port.
If you can't figure it out, use Google to download
documentation on your firewall software.
My efun override is not working
Put it in /secure/sefun/sefun.c
How do I remove
Amadeus <cre> yo cratylus
Amadeus <cre> how do i
remove the QCS on my copy of DS?
Amadeus <cre> I want to 100%
remove it without hurting anything else.
Cratylus <cre> why not simply avoid using it?
Amadeus <cre> because its
too tempting for my creators and I want them to learn to code.
Amadeus <cre> I want to know
where all it's located at etc., so I can remove it safely without
affecting anything else.
Cratylus <cre> overwrite the files in /secure/modules/ with blank
Cratylus <cre> that'l probably do it
Cratylus <cre> dont just delete them
Cratylus <cre> and, of course, back them up first, just in case
Amadeus <cre> what if i
removed the create command from /secure/cmds/?
Cratylus <cre> that wasn't the advice i gave you
Amadeus <cre> Mind telling
me what the point of the QCS would even be?
Cratylus <cre> please clarify the question
Amadeus <cre> What is the
point of a quick creation system?
Cratylus <cre> http://dead-souls.net/articles/olc.html
Amadeus <cre> Nah... It's
buggy... It doesn't work.
Cratylus <cre> then why bother removing it?
Amadeus <cre> It backtracks
you more often than helps you move forward.
Cratylus <cre> then dont use it
<cre> Cratylus shrugs.
Amadeus <cre> I don't even
want it on my MUD.
Cratylus <cre> well then, follow my instructions, and you'll be
you can edit stuff from the interwebs?
Yes! You can now use CreWeb to edit your files.
For folks who hate using ed but don't have shell access, CreWeb
is just the ticket.
It's basically a bunch of cgi scripts that run from the mud's
built-in webserver. You log in with your mud name and mud
password, and you can browse, upload, and edit files.
This is what your homedir looks like: http://lpmuds.net/homedir.jpg
This is what editing looks like: http://lpmuds.net/editing.jpg
Note that this is purely experimental and may pose security
risks. CreWeb was coded with security as a priority but I
cannot guarantee it is 100% safe.
If you want to give it a whirl:
mudconfig http port 8001
mudconfig http disable
mudconfig cgi enable
mudconfig dirlist enable
mudconfig creweb enable
mudconfig http enable
(protip: It doesn't have to be port 8001)
And then use your web browser to go to your
mud's ip with the port you specified...for example:
Note that this url is not your mud, so don't
bother trying to log in. That's just an example of
what the URL and the page looks like.
Only Firefox is supported. I can't humor every
browser out there, and Firefox is the one browser
I know the largest number of people can download
and use for free.
I want to let people build but I don't want them to be
Players can use the QCS to create rooms, npc's, weapons, armor,
etc, if they are members of the BUILDER group. Simply add your new
builder to the BUILDER group with this command (if her name is
groupmod -a builder newbuilder
And then have her quit and log back in.
Her stuff will be in /estates/n/newbuilder
Have her issue the command "home",
staff and guidebook from her chest, and start reading.
Note that builders do not have access to commands like
ed, cd, ls, more, etc. They are meant to be isolated
from LPC. If you want builders who can view and edit
LPC code, they'll need to be creators.
However, builders do have a workroom they can home to,
and can use standard QCS commands like create, modify,
Note that the game will try to isolate builder stuff from
live game content. Builder objects will not have value
at shops, the armor won't protect from "real" in-game
attacks, and weapons will be effective only against npc's
from the builder's estate.
How do I enable
IMC2? What is it?
IMC2 is an intermud protocol, like Intermud-3, but it is
slightly different in how it works, its definition, and
implementation. You can think of it as another brand of
intermud...IMC2 and I3 being like Pepsi and Coca-Cola.
The folks at Mudbytes run an IMC2 server network, and your
mud is preconfigured for it.
To start listening to specific channels, you add them
to yourself in the same manner as Intermud-3 channels:
chan add ichat
am not in charge of IMC2, do not complain to me about
it. For more information about channels, rules, specs,
etc, visit their IMC2
Combat is too
Combat in Dead Souls depends on individual stats.
If you're a stone golem, your speed will be low, meaning
your heartbeats are slow, and you only get an attack in
every 4 seconds or so.
On the other hand, someone with a very high speed
could get an attack every two, or even every second.
The idea is that in having varying combat speeds,
it makes things a bit more realistic and it means you
need to use some strategy.
However, some people are used to codebases that do
not bother with this sort of thing. They want to see fighting
scream by their screen, never mind stats. For such people,
a new configuration option, FAST_COMBAT, has been added to
config.h. To enable "fast combat, regardless of speed stat",
issue the command:
mudconfig fastcombat enable
Fast combat is the current default.
players to select their class when they create their characters
mudconfig selectclass yes
Note that the existing classes are just examples, and are therefore
unlikely to have all the neat things you will eventually have
in your mud.
I am strongly
opposed to the use of intermud
There are a few common reasons for this, often based on old
or incorrect assumptions. Obviously you're going to run your
own mud however it pleases you, but if your decision to disable
intermud is based on the following beliefs, you may want to
re-evaluate those reasons:
are mean on intermud"
Some people on some channels are mean, yes. However, Dead Souls
does not enable those channels for your creators by default.
The default channels are newbie-friendly and have rules which
have seen the logs.
Newbies are eaten alive."
Not anymore. Not on my watch. Old logs are old. If a newbie
is needlessly aggressed now, the aggressor is confronted.
If the aggressor does not behave, the aggressor faces...
You were just abusing Hellmonger YESTERDAY!"
This is one of those things that is hard for "newcomers" to
understand, but on the intergossip channel, what looks like
bitter, unrelenting abuse is often meant (and taken) as
warm camaraderie. Oldtimers like Hellmonger, Duuk, and me
often have ways of communicating that seem like perhaps one
or more of us may wind up homicided for real. It's just goofing
around, and it's one of the reasons I strongly discourage
newcomers from connecting to that channel. As Kalinash very
aptly put it:
"As for the content of the I3 channels, dead_souls and dchat are
intended to be helpful and PG-13. Once you wander into
imud_gossip, it's a frat house full of sailors on shore leave.
Fortunately, a most of the bile spewing, name calling and other general
rudeness, is still done in good humor."
You don't have to prevent everyone on the mud from using
intermud just because you find channels distracting. If you
don't want to hear from a channel, for example the "ds_test"
channel, you can issue the command:
By itself, the channel name disables or enables the channel
for you personally, without affecting how others on the
mud use it.
will try to steal my builders and coders"
This is unlikely. I don't think I've seen very much of this
in the years I've run the network. It certainly *can* happen
that your staff leaves your mud for another one. I would
suggest that this would happen whether you enable intermud
You see, when a coder has a question you can't answer, or
if you're not there, she's going to do a web search, and
find the lpmuds.net forum, or
log into the Dead
mud. She's going to run into friendly, helpful people who
share their ideas and suggestions, and she's going to
want more of that. If you block intermud on your mud,
she's just going to go somewhere else to find support,
and she might just stay there. And
tell your other staff
about the new place that isn't so restrictive.
By blocking intermud, you actually make it more likely
lose staff, not less.
a resource hog"
This is not correct. Your intermud connection generates
about as much traffic/lag as a single moderately active
player. I have tested Dead Souls with very large numbers
of connections, and very large numbers of players, and
I can assure you, quite confidently, the default intermud
connection for your mud does not "lag" your mud. This
might have been true on some other driver, with some other
lib, in some other era...but not today.
just don't like you, Cratylus"
You don't have to be a fan of mine to benefit from
intermud. Some of the most established oldbies on intermud
love nothing more than to give me a hard time on the intergossip
(read not-very-friendly) channel. If nothing else, intermud
would allow you to join the intergossip channel and tell
me exactly how much I suck in real-time.
afraid that intermud is actually some sort of Trojan or spyware"
Short answer: intermud doesn't spy on you.
Dead Souls is an LP lib, meaning that it has no secrets. Its
code is not pre-compiled. What it does, and how it does so is
completely open for anyone to download and inspect. If you
know anything at all about me you know there are plenty of
people who would love
to find spyware/malware/whatever in
Dead Souls, and make a big deal of it. If intermud worked
as a spy tool for Dead Souls, it would be the worst thing that
ever happened to the project.
You can rest assured that intermud is not something
used for collecting secrets about your mud.
Having said that, intermud does allow people to see some
things you might not like:
* The list of logged-on players.
* Finger information about players (except for their IP)
* Basic information about which driver and lib version you
run, as well as uptime and such miscellanea.
If that information is something you don't want others to
see, then disabling intermud would do the trick. However,
it's really not very secret information...since logging
in as "guest" would let anyone see the exact same things!
One thing to keep in mind is that even though I do not
monitor what people say to each other with "intermud tells"
(different from channels. intermud tells are just between the
two people), intermud tells go across the router in plain text, so
you cannot be guaranteed that your intermud tell
be read by another person. However, regular tells on
your mud are not intermud tells, and therefore regular
tells on your mud never reach the intermud.
If you want to see the data your mud sends to the intermud
router, visit the network room:
You'll see the raw intermud packets going in and out.
will have young children. I don't want them exposed to strangers."
You should definitely block intermud then, or at
least restrict it to adult staff.
in a country where some opinions are criminal"
should definitely block intermud then, or at
least restrict it to trusted staff.
refuse to obey your channel rules"
should definitely block intermud then, or at
least restrict it to responsible
I hate one of the sample domains and I want it GONE
If you feel strongly about it, then by all means get rid
of the domain that offends your sensibilities. Before
you do, however, ask yourself if what you dislike is
the domain itself and everything it stands for, or
if the problem is that you just don't want it to be
something your players see.
The reason you should ask yourself this question is
that even if you really don't care for one of (or all
of) the sample domains, they really do serve the
incredibly useful purpose of providing many, many
good examples of how to do certain things in Dead Souls.
Without working examples, you'll be reinventing the
wheel anytime you want to do something you're
unfamiliar with that isn't explicitly detailed in
If you wipe the the Town domain, for example, and
then want to set up a quest for advancement, you're
going to have to figure it out by reading and
understanding the mechanics of the quest lib object
and level system...rather than just taking a quick
look at Leo and Dirk for how they implement those
mechanics. If you're ok with that, then fine, but don't
be surprised if your request for help on the intermud
goes something like:
how do I get an npc to raise my level?
Cratylus@Dead Souls <dchat>
take a look at dirk
nah, I deleted that domain, it sucks
download dead souls again and take a look at dirk
(This chat was simulated. No newbies were harmed in
the creation of that pretend log)
It's by far simpler and more convenient to
default domain to something else, rather
than deleting stuff.
But hey, the beauty part is, it's your
mud. I'm not
the boss of you, so if obliterating that horrible
awful set of bits is what you must do, then follow
your vision, man.
I make help files?
Create a text file in the manner you normally do, then when
you're done, put it somewhere in /doc/help that makes sense.
for example, a help file about your new combat system might
be called /doc/help/players/karate
Once you've made the helpfile and put it where it goes,
update the help daemon and you should be all set:
players will DS handle simultaneously?
As of Dead Souls 2.10, Dead Souls on a unix host
running a modern OS on modern hardware can handle
a couple hundred players with no software lag.
I have run tests on Linux and Solaris, firing playerbots
into a test mud. These bots walk around, pick fights,
get stuff, drop stuff, examine things, etc. They are
coded to be as unidle as an extremely busy player...
typically with less than 2 seconds between commands,
all the time.
What I found is that with the default settings, a
DS mud on a unix host with a 2.5GHz proc doesn't
hit noticeable lag until you're roughly over 200
very active players. At around
250 V.A.P. you notice
a little lag, which doesn't change much until about
350 V.A.P., at which point you'll get occasional,
definitely noticeable lag.
It doesn't get into "bad lag" territory until around
400 V.A.P. Above 500 you start getting into annoying
lag territory, and above 600 or 700 it's "not fun".
Note, however, that real
players are rarely as intensely
busy as these bots. If you factor in the fact that
about half your players are idle about half the time,
the figure for "maximum players with no lag" goes
up pretty quickly. You can also optimize your mud
for high connection loads by disabling some of the
resource-intensive parsing defaults.
So, in theory, a DS mud on unix running on cutting-edge
hardware and with normal players that are idle about
half the time and with performance optimized could probably
handle some 400 or 500 players simultaneously with no
noticeable software lag. I haven't tested this, though,
since I can't afford cutting edge hardware.
See the FAQ entry below for DS on Windows.
that Dead Souls for Windows has limitations
Yep. They're not on purpose though, and it isn't the
fault of Bill Gates or whatever. Basically, when
the driver DS uses was in its early development,
Windows was not a great target for mud development.
It wouldn't have been *crazy* to make a mud that
ran on, say, Windows NT 3.51, but it would be such a
small audience that that the focus was on a driver
that ran well on unix.
MudOS therefore has had for a very long time a
major bias toward code that runs well on unix, and
this has been so for well over a decade. FluffOS,
derived from MudOS, shares this legacy.
Nowadays, Windows systems are quite robust and
perfectly capable of handling even enterprise-level
server apps. Today is seems *weird* that it's so hard
to find a mud server that runs natively on Windows.
To me it seemed natural to try to spread the goodness
that is Dead Souls by making it easy to run on Windows.
You will now find in the standard Dead Souls download
an executable for Windows...and it's actually *easier*
to install and run DS on Windows now than on unix.
However, the executable is compiled from unix source
that heavily favors the unix way of doing business,
and this is sadly not always compatible with Windows.
As a result, Dead Souls on Windows has the following
* DS on Windows will not accept more than 64 simultaneous
network connections, meaning you are limited in the number
of players you can have logged on at once.
* DS file operations are dramatically slower on Windows.
This causes performance in general to be weaker in
comparison to the unix version, and it is the reason
that some file-intensive operations, such as file
indexing, are disabled in the Windows version.
* DS CPU time is measured in a way that Windows doesn't
understand, meaning that operations that under unix DS would
get cancelled for being too CPU-greedy are allowed to
run indefinitely in Windows DS. This means it is trivial
to "lock up" a DS Windows mud by accident, forcing you
to kill the process and restart.
There are probably a few other limitations, but these
three illustrate why Dead Souls on Windows is meant to be
used for testing, development, and evaluating, not for a
production mud. Your production DS mud (aka mud that is open
for players and has players logged on) should run on a
normal unix/Linux host.
Note that if you use Cygwin to compile your own Windows
executable, you *might* get around some of this stuff...
but I don't support Cygwin so I can't vouch for it.
the CPU/RAM/diskspace requirements for Dead Souls?
I usually get this question because someone wants
to get server hosting somewhere and they want to
know which "service package" to subscribe to.
Unfortunately, the answer depends on all sorts of
things I can't know, such as the speed of the
machine, how busy your mud will be, etc. Rather
than try to answer the question, what I can do
is simply tell you what my usage is.
Dead Souls on Linux 3GHz,
uptime 2w, currently on 8 players:
PID USER PR NI
VIRT RES SHR S %CPU %MEM TIME+
XXX XXX 9 0
11976 11m 1216 S 0.0 0.6 152:48.51 fluffos
So a pretty idle DS mud takes little CPU and about
11 megs ram, when it's mostly just a few people sitting
around testing a few objects and chatting on intermud.
Now for a heavy test/dev mud...
Dead Souls on Solaris 2.5GHz,
uptime 2d, currently on 130 players:
PID USERNAME LWP PRI NICE SIZE RES
STATE TIME CPU COMMAND
XXX XXX 1 59
0 30M 28M sleep 2:09
In this particular case I think the 30M is probably
misleading. These 130 players do wander around and
load rooms and stuff, and I've seen the usage go
up past 50 megs after a while. Is 50 megs for 130
players a lot? I don't know. How much ram is your
browser using right now?
The CPU percentage is also misleading, because "top"
on multiproc machines tends to divide that percent by
the number of cores, so in this case the CPU utilization
is actually more like 7.7%. Is that a lot for 130 very
active players? I don't think
so, but that's up to you
In any case, those are the two data points I can provide to
you as a guide of how to shop for your hosting. If you
find data that contradicts this, or is more useful, feel
free to post it on the forum.
As for diskspace, the download package itself is about 6M,
and uncompressed it is:
$ du -ksh ds2.8.4
However, remember that an LP mud is all about files in
LPC, which is plaintext and they'll take up a bunch of
room as you go along. And also remember you'll be making
backups, and possibly logging things, etc.
My test mud takes up about 110M, and if you're going
to be hiring coders and such, I'd strongly advise going
For just goofing around and testing, you could probably
keep it under 100M, but you need to keep an eye on
Summary: Unless you
know for a fact you will immediately
have hundreds of players, a low-tier plan will probably
suit you to begin with. Just don't lock yourself in to
a plan until you've had a chance to determine for yourself
what your needs are.
you added vi to DS!
Not exactly. I added an fullscreen-type editor that acts
like you'd expect an editor to act, letting you move a
cursor around the file with your arrow keys, for example.
This editor is neat, and it works, but it comes with
caveats. For more information, see: http://dead-souls.net/ds-charmode-faq.html
If you don't have charmode enabled, ced won't
It's a protocol that allows someone else's internet program to
connect to your mud and ask it for information. For example, your
mud's name, how many players are on, what your theme is, etc.
It's useful because it lets you maintain an up to date
source of information on your mud for multiple mud listing
sites, without having to schlep to each one to update your
listing to keep it current.
To change your MSSP info, edit /secure/include/mssp.h and
change the fields you feel need changing.
NOTE: If you modify information in that
file and create broken LPC code, you may render your mud
impossible to log into, and unbootable. Make 100% certain you
back up this file before editing it, and once you edit it,
make sure it works by updating LIB_CONNECT.