mirror of
https://github.com/smaugmuds/SmaugFUSS
synced 2026-08-12 12:23:07 -04:00
335 lines
15 KiB
Text
335 lines
15 KiB
Text
SMAUG - Frequently asked questions
|
|
|
|
1) What is SMAUG?
|
|
|
|
SMAUG (Simulated Medieval Adventure multiUser Game) is a multi-user
|
|
internet gaming system. It is an extension of the MERC 2.1 gaming system
|
|
over the last approximately five years on Realms of Despair, by Thoric and
|
|
various other people he recruited as the game got larger. In December of
|
|
1996, Thoric released SMAUG 1.01 for other games to use as a "code base",
|
|
or starter set of code to expand on as MERC 2.1 is the base for SMAUG.
|
|
|
|
2) Where can I get SMAUG?
|
|
|
|
SMAUG may be obtained by ftping to ftp.game.org, in the /pub/smaug
|
|
directory, or can be downloaded from the world wide web at
|
|
http://www.game.org.
|
|
|
|
3a) I have SMAUG, now what?
|
|
|
|
Well to start, make sure you have the version of SMAUG that you wish to
|
|
run. The latest version is 1.02a as of the time of this writing. The
|
|
latest version of SMAUG is usually linked to smaug.tgz. If you wish to run
|
|
SMAUG under Windows 95 or Windows NT, you will also need the corresponding
|
|
smaugw32*.zip file.
|
|
The installation procedure differs for Linux and other Unix flavors
|
|
(herein referred to as simply 'unix') and Windows.
|
|
To install under unix, change to your home directory (cd ~), and move the
|
|
smaug.tgz into your home directory if you downloaded it to a different
|
|
directory. Enter the command 'gunzip -cd smaug.tgz | tar -xvf -', without
|
|
the quotes. This will create a directory called dist in your home
|
|
directory, and will place SMAUG and its data files in subdirectories beneath
|
|
that. You will now need to change to ~/dist/src, and run make. This will
|
|
compile SMAUG into an executable program.
|
|
To run SMAUG, change to ~/dist/src, and run ./startup 4000. Startup is a
|
|
script which will run SMAUG repetitively until a shutdown command is
|
|
executed by an immortal in the game.
|
|
For Windows, you will need to obtain the program Winzip to decompress the
|
|
zipped files. Winzip can be obtained on the world wide web from
|
|
http://www.tucows.com, among other places. Run Winzip, and select
|
|
smaug.tgz. Click on uncompress, and when it asks you where to unzip to,
|
|
enter C:\ (or whichever drive you would like). Note that this creates it
|
|
own subdirectory, so it is best to install to the root directory of the
|
|
drive. As with the unix installation, this will create C:\dist, and fill it
|
|
with SMAUG and its data files. Now select the smaugw32*.zip file, and
|
|
uncompress it into C:\dist\src. Move C:\dist\src\cygwin.dll into
|
|
C:\windows\system (or wherever your windows system directory is).
|
|
To run under Windows, change to C:\dist\area (note: AREA directory. SMAUG
|
|
expects to be run from here. The startup script in unix does this
|
|
automatically), and run '..\src\smaug.exe 4000' (without the quotes).
|
|
The Windows version does not have a batch file to keep rebooting SMAUG (at
|
|
least currently). You will have to manually reboot the game if you crash.
|
|
|
|
3b) SMAUG defaults to port 4000, how do I change which port to run on?
|
|
|
|
Run it with a different argument. In unix, run ./startup <port>. In
|
|
Windows, run ..\src\smaug.exe <port>.
|
|
|
|
4a) I compiled SMAUG under unix, but I'm getting two warnings in interp.c
|
|
|
|
Older versions of Linux used a long int in the time structure. If you
|
|
have one of these older versions, you will need to change the two %d's to
|
|
%ld's on line 551 in interp.c. Other flavors of Unix may also see those
|
|
warnings, and the same fix applies.
|
|
|
|
4b) I compiled SMAUG under unix, but I'm getting other errors
|
|
|
|
Some flavors of unix may require extra libraries, or may have slightly
|
|
different header files. Consult with your system administrator if you do
|
|
not understand the errors.
|
|
|
|
4c) I compiled SMAUG under unix, or made my own port to Windows or another
|
|
operating system, but I don't have crypt()
|
|
|
|
Either define NOCRYPT in your makefile, or try to find the crypt library.
|
|
Note that some flavors of unix DO have crypt, but needs the crypt library
|
|
linked in when the MUD compiles. This is the same problem as question 4a.
|
|
|
|
5) I'm running SMAUG under Win95 or WinNT, but it won't run properly
|
|
|
|
Make sure you installed everything according to question 3, and that you
|
|
are running SMAUG from the area directory.
|
|
Also, Winzip doesn't create empty directories, which causes an error in
|
|
the 1.02a version of the Windows executable. Below is a list of the empty
|
|
directories, but note that not all of them are required in the Windows
|
|
version (for example, the log directory, which is used by the startup script
|
|
in unix, which the Windows port has no equivalent of).
|
|
The missing directories are:
|
|
C:\dist\backup
|
|
C:\dist\building
|
|
C:\dist\corpses
|
|
C:\dist\deleted
|
|
C:\dist\gods
|
|
C:\dist\log
|
|
C:\dist\new
|
|
C:\dist\player
|
|
C:\dist\player\a
|
|
C:\dist\player\b
|
|
...
|
|
C:\dist\player\z
|
|
|
|
6a) I'm running something other than unix or Windows, can I use SMAUG?
|
|
|
|
There is a Macintosh port of SMAUG which can be found on the MacOS web
|
|
pages at http://www.eden.com/~hsoi/mud/ and
|
|
http://rarloa-4.pr.mcs.net/~fear/.
|
|
|
|
As far as I know, there are currently no ports of SMAUG to any other operating
|
|
systems up for ftp from ftp.game.org. You will either have to write your own
|
|
port, or find someone who already has written a port to your operating system.
|
|
|
|
6b) I'm running Windows 3.1, can I use SMAUG?
|
|
|
|
The currently available Windows ports of SMAUG are for 32-bit Windows.
|
|
They will not run in 3.1's 16-bit environment. I don't know if they can be
|
|
used with Win32s. See question 6a.
|
|
|
|
7a) SMAUG is up and running, how do I connected?
|
|
|
|
Load up your telnet program, and connect to port 4000 on localhost. If
|
|
you do not know what a telnet program is, try the command
|
|
'telnet localhost 4000' (without the quotes).
|
|
|
|
7b) How can other people connect?
|
|
|
|
You will need to know your ip address, or (if you have one) your host
|
|
name. People can then telnet to port 4000 at that address.
|
|
|
|
8) SMAUG is up and running, why can't I be like God?
|
|
|
|
Version 1.02 and 1.02a (and possibly others) have authorization turned on
|
|
by default. You will need to load up your favorite text editor and edit
|
|
/dist/system/sysdata.dat, and change WaitForAuth to 0. This will turn off
|
|
authorization. Now log on as a new player and save. Log off and edit your
|
|
player file and change Level to 65. Player files are found in /dist/player.
|
|
The subdirectories are the initials of the player names. Select the
|
|
appropriate directory for your name.
|
|
|
|
9) What other known bugs are there in SMAUG?
|
|
|
|
In release 1.02a (and possibly others) the vnum for hell has been
|
|
programmed in the source as room 8, but in the area, hell is vnum 6. You
|
|
will have to shutdown the MUD and edit /dist/area/limbo.are. Under #ROOMS,
|
|
change #6 to #8 (line 556 in the 1.02a release). Under #RESETS, change 6 to
|
|
8 (line 1023).
|
|
|
|
10a) What can I do with SMAUG?
|
|
|
|
Anything you'd like. As long as you follow all three license agreements
|
|
(DIKU, MERC, and SMAUG), you are free to modify or distribute SMAUG as you'd
|
|
like. Please read the license agreements completely. If you do not agree
|
|
with any part of any of the three agreements, remove SMAUG and either find a
|
|
code base with whose license you can agree, or write your own code base.
|
|
|
|
10b) I don't run SMAUG, but I'd like to implement some of SMAUG's features
|
|
into my game, am I allowed to do this?
|
|
|
|
Yes. You may use any part of SMAUG, as long as you follow all of the
|
|
license agreements as listed in question 10a. The same license applies for
|
|
part of SMAUG as it does if you use SMAUG in its entirety.
|
|
|
|
10c) I run SMAUG, but I'd like to implement features from another code base,
|
|
am I allowed to do this?
|
|
|
|
Again, yes. You must, however comply with the other code base's license
|
|
as well as those listed in question 10a. This applies to any code that has
|
|
been written and released by an author other than yourself.
|
|
|
|
11) I want to build areas for SMAUG, but I don't know where to start
|
|
|
|
There is extensive (if somewhat confusing) online help for building in
|
|
SMAUG, as well as a (out of date) text file in /dist/doc. There is also a
|
|
web page dedicated to building on SMAUG, found at
|
|
http://www.erols.com/moodyg/olc.html.
|
|
|
|
12) Adding the power of Crayola -- inline color parsing
|
|
|
|
SMAUG 1.02a (and possibly 1.02) have added the option of inline color
|
|
parsing - the ability to change colors from within a string, whether it be a
|
|
channel or a room description. However, in the distribution this ability
|
|
has been limited to certain commands (such as help files).
|
|
|
|
12a) Adding color parsing to say and other one-liners -- act()
|
|
|
|
Open comm.c and find the call to write_to_buffer on line 2740. This line
|
|
should be in the function act(), and look like:
|
|
|
|
write_to_buffer( to->desc, txt, strlen(txt) );
|
|
|
|
Change that line to read:
|
|
|
|
send_to_char_color( txt, to );
|
|
|
|
12b) Adding color to the entire game!
|
|
Open mud.h, and goto the very end of the file. Add the two lines:
|
|
|
|
#define send_to_char send_to_char_color
|
|
#define send_to_pager send_to_pager_color
|
|
|
|
This well tell the compiler to use the color counterparts whenever either of
|
|
those two functions are called. Then in comm.c, comment out the two functions
|
|
send_to_char() and send_to_pager() so that the compiler won't be trying to
|
|
compile two compies of the same function (the real one and the one that's
|
|
created when the #defines are convertted by the preprocessor).
|
|
|
|
12c) I only want to add color part of the game, not all of it!
|
|
|
|
This one you'll have to do by hand. Start with copying ch_printf and
|
|
pager_printf to ch_printf_color and pager_printf_color respectively. Change
|
|
the send_to_char and send_to_pager calls to send_to_char_color and
|
|
send_to_pager_color, which will activate the color routines for those two
|
|
functions. If you only want some calls to act() parsed for color, but not
|
|
others, you will need to add a boolean to the parameter list and either call
|
|
the write_to_buffer or send_to_char_color as mentioned in 12a depending on
|
|
that boolean.
|
|
|
|
12d) I want to add color to the initial login screen, before players enter
|
|
their names.
|
|
|
|
This one is tough, because they won't have a character yet. You will also
|
|
need to add another CON_ state to ask whether or not they would like ANSI
|
|
color before the screen is displayed, and a bool to DESCRIPTOR_DATA to
|
|
record their answer. Probably the easiest would be to create a dummy character in
|
|
nanny(), such as the following:
|
|
|
|
CHAR_DATA dummy;
|
|
|
|
if (!d->character)
|
|
{
|
|
memset(&dummy, 0, sizeof(dummy));
|
|
d->character = &dummy;
|
|
dummy.desc = d;
|
|
if (d->ansi) /* The bool mentioned above */
|
|
SET_BIT(dummy.act, PLR_ANSI);
|
|
}
|
|
|
|
You can then replace all the write_to_buffer()s with send_to_char_color()s
|
|
in nanny(), the same as was done in act() in 12a.
|
|
** Make sure you NULL-terminate all your strings before you
|
|
send_to_char_color() them. The one in act() was NULL-terminated previously,
|
|
but there may be some in nanny() which aren't.
|
|
|
|
12e) How do I add color to the new player login sequence?
|
|
|
|
The new player login is run through nanny() just as the initial login
|
|
screen would be once you added the 'Would you like color' prompt as
|
|
mentioned in 12d. Therefore, the same procedure applies.
|
|
|
|
12f) Send_to_char_color is outputting two copies of everything -- the real
|
|
copy and an uncolorized copy.
|
|
|
|
In comm.c, around line 2302, there should be a line that looks like:
|
|
write_to_buffer(d, prevstr, (colstr-prevstr));
|
|
|
|
The problem comes when the first character in a string is a color code.
|
|
It makes colstr equal to prevstr, so subtracting them returns 0, which
|
|
write_to_buffer() uses to mean find the length of the string itself, so the
|
|
result is write_to_buffer() writing out the full string and then the function
|
|
continuing the write the colorized string.
|
|
|
|
Before that line, add the following, such as:
|
|
|
|
if (colstr > prevstr)
|
|
write_to_buffer(d, prevstr, (colstr-prevstr));
|
|
|
|
This will make it so that write_to_buffer() is only called when subtracting
|
|
the two values returns a result greater than 0.
|
|
|
|
13a) What are all these string macros/functions?
|
|
|
|
In SMAUG, strings have the ability to be hashed, but aren't necessarily.
|
|
You must not mix up hashed and unhashed strings or bad things will happen.
|
|
The rule is:
|
|
|
|
STRALLOC()'d or fread_string()'d -> STRFREE() /* hashed */
|
|
str_dup()'d or fread_string_nohash()'d -> DISPOSE() /* not hashed */
|
|
|
|
Any strings that you want to keep past the end of a function MUST be
|
|
allocated. As a general rule, its also not a good idea to mix in the system
|
|
allocation functions -- it just adds more confusion, and the SMAUG functions
|
|
do the same job.
|
|
QUICKLINK must only be used with hashed strings (STRALLOC/fread_string). If
|
|
QUICKLINK is used on an unhashed string, bad things can result.
|
|
QUICKMATCH should also only be used with hashed strings. Although it won't
|
|
create a fatal error, it will always return FALSE on unhashed strings.
|
|
|
|
13b) Where do I use hashed strings and where do I use unhashed?
|
|
|
|
Hashing is normally used for strings which are repeated in the MUD often
|
|
(mob names, object, names, etc), where as unhashed strings are more for
|
|
things that are a one-shot and are not likely to be duplicated (player
|
|
names, etc). Having an unhashed string with the same literal characters as
|
|
a hashed string is not a problem, as long as they aren't the same physical
|
|
string (a player whose name is the same as a mob's name or something, for
|
|
example).
|
|
|
|
13c) What are all these other memory macros?
|
|
|
|
CREATE() should always be used to allocate non-string memory, and DISPOSE()
|
|
should always be used to free it. RECREATE() can be used to resize an old
|
|
block of memory, but be careful if you have other pointers into the same
|
|
memory block, as it may not return the same block as it was when you called
|
|
RECREATE(). These functions are basically overheads for the system
|
|
allocation routines, which again shouldn't be used in SMAUG for the sake of
|
|
simplicity.
|
|
|
|
13d) Whats this LINK/UNLINK/etc stuff?
|
|
|
|
In a singly-linked list (like MERC/ROM/Envy uses), 'a' points to 'b',
|
|
which in turn points to 'c', looking somewhat like a->b->c->NULL.
|
|
SMAUG uses doubly-linked lists. This means that 'a' points to 'b', which
|
|
points both back to 'a' (prev), and forward to 'c' (next). This structure
|
|
looks something like NULL<-a<->b<->c->NULL. Doubly-linked lists, although
|
|
using a little bit more memory (4 bytes with 32bit pointers), is both much
|
|
easier to use and much faster to unlink (you already have a pointer to the
|
|
previous item in the list). This also brings rise to the macros.
|
|
|
|
LINK(): add a pointer to the END of a list.
|
|
INSERT(): insert a pointer BEFORE the item 'insert'. If you want to
|
|
insert an item after, reverse first, next, and prev in the call
|
|
(so it would be called INSERT(link, insert, last, prev, next),
|
|
which will insert it before insert, but backwards, so when the
|
|
list is read forward, link will be after insert.
|
|
UNLINK(): remove a pointer from anywhere in a list.
|
|
CHECK_LINKS(): Will run through a doubly-linked list and report any errors
|
|
in the list. It will also attempt to fix the errors, but
|
|
if you DO see an error from CHECK_LINKS, you should
|
|
probably reboot the mud as soon as possible, as the error
|
|
correction routine is not overly intelligent. It does what
|
|
it can, but you could easily lose part or all of the list.
|
|
|
|
14) I've read the FAQ, but still have questions. Where do I turn?
|
|
|
|
There is a mailing list set up for questions about SMAUG. To subscribe
|
|
send an email to smaug-request@realms.game.org, with the line
|
|
'subscribe smaug' (without the quotes).
|