LPC Basics
                     Written by Descartes of Borg
                            23 april 1993
 
 
                            INTRODUCTION
               This manual, how to use it, and its terms
 
I have seen a lot of requests lately on USENET for LPC manuals.  In addition,
the immortals on my mud have been telling how good the building documentation
of Nightmare is, but that there was just no adequate explanation of the
LPC programming language.  So I decided to try my hand at writing a manual.
Some things you should keep in mind.
LPC is a very easy programming language to learn, and it has real
value in that place most of us know as the real world.  I began playing
muds in 1991, and in the space of a month created an unimpressive area
and musician's guild on the original Bates College MUD called Orlith.
After that, I moved to Los Angeles for a year and had no contact with
mudding or computers.  In June of 1992, I was back on the internet and
a wizard of Igor.  In September of 1992 I began coding the Nightmare
mudlib for our use, and then later decided to distribute it due to there
not being any mudlibs for MudOS at the time that a person could just throw
up a running mud with (now, that of course is not the case :)).
So, I have been doing serious coding for less than a year.  As a
Philosophy major in a world of Computer Science majors, I just want to
make clear that it is not at all required that you have ever done anything
with your computer than log into a mud in order for you to really come
to understand LPC coding.  This manual makes the following assumptions:
Someone has taught you basic UNIX commands like ls, cd, mkdir, mv, rm, etc.
You know how to enter your mud's editor and write a file.  No other
assumptions are made.  If you know C, you are handicapped in that LPC
looks a lot like C, but it is not C.  Your preconceptions about
modular programming development will be a hinderence you will have to
overcome.  If you have never heard of the C programming language (like
me in May of 1991), then you are only missing an understanding of the
simple constructs of C like the flow of program execution and logical
operators and such.  So a C guru has no real advantage over you, since
what they know from C which is applicable to LPC is easy to pick up.
The stuff they know about C which makes them a guru is irrelevant to
LPC.
 
The chapters of this manual are meant to be read in order.  Starting with
the introduction, going sequentially through the chapter numbers as
ordered in the contents file.  Each chapter begins with a paragraph or
two explaining what you should have come to understand by that point
in your studies.  After those introductory paragraphs, the chapter then
begins to discuss its subject matter in nauseating detail.  At the end
of the chapter is a briefly worded summary of what you should understand
from that chapter if I have been successful.  Following that may or may
not be some sidenotes relevant to the subject at hand, but not necessary
to its understanding.
 
If at any time you get to a chapter intro, and you have read the preceeding
chapters thoroughly and you do not understand what it says you should
understand by that point, please mail me!  Clearly, I have failed at that
point and I need to know where it is I have gone wrong so I can revise
it properly.  Similarly, if you do not understand what the chapter summary
says you should, please mail me.  If your mumud is on the MudOS intermud
system, mail descartes@nightmare.  Otherwise mail borg@hebron.connected.com.
 
Some basic terms this manual uses:
driver-
This is the C program which is the game.  It accepts incoming sockets
(links to other computers), interprets LPC code defined by the mudlib,
keeps mud objects in memory, makes periodic attempts to clean unused
mud objects from memory, makes periodic calls to objects, and so on.
 
mudlib-
LPC code which defines the world in which you are in.  The driver of itself
is not a game.  It is just a program which allows the creation of a
multi-user environment.  In some sense, the driver is like an LPC
compiler, and the mudlib is like a compiler's library (a very loose
analogy).  The mudlib defines basic objects which will likely be used
over and over again by people creating in the mud world.  Examples of
such objects are /std/room (or /room/room), /std/user.c (or /obj/player.c),
and so on.
 
area or castle:
Specific creator coded objects which often use a feature of LPC called
inheritance to make use of the properties of basic mudlib objects and
turn them into specific objects to be used by players in the game
 
object:
a room, a weapon, a monster, a player, a bag, etc.  More importantly,
every individual file with a .c extension is an object.  Objects are
used in different ways.  Objects like /std/living.c are inherited by
objects like monster.c and user.c.  Others are cloned, which means a
duplicate of that code is loaded into memory.  And still others are
simply loaded into memory to be referenced by other objects.
 
native and compat:
these two terms refer to two popular flavours of drivers.  Native mode
mudlibs make use of on the design of LPMud driver 3.0 and later.  You may
have a 3.0 driver however, but have a 2.4.5 style mudlib.  This is what
is meant by compat mode.  Mudlibs which are native mode are any for
MudOS, CD, and LPMud mudlibs that
are listed as native.  Compat mudlibs are any LPMud mudlib before 3.0 and
those which are 3.* compat mudlibs.  I believe Amylaar's is compat.

Good Luck!
George Reese
(Descartes of Borg)
12 july 1993
borg@hebron.connected.com